---
title: "Digital cohort report"
method: POST
path: "/measurement/campaigns/{campaign_id}/dashboard/cohort"
tags: ["Queries"]
---

# Digital cohort report

`POST /measurement/campaigns/{campaign_id}/dashboard/cohort`

## Request

- Base URL: `https://api.magellan.ai/v2`
- URL: `https://api.magellan.ai/v2/measurement/campaigns/{campaign_id}/dashboard/cohort`
- Auth: API key in header `Authorization`

Delivers a pivot table in CSV format of campaign data for a named cohort (dashboard group), rolled up along various dimensions.

## Path parameters

- `campaign_id` string, required

## Request body

- object
  - `startDate` string, date, required: A start date in YYYY-MM-DD format.
  - `endDate` string, date, required: An end date in YYYY-MM-DD format.
  - `timezone` string: The timezone used to interpret the date range. Defaults to the campaign's configured time zone (or UTC).
  - `attributionMethodology` 'last_touch' | 'equal_credit' | 'equal_credit_adjusted_display_weight': Methodology option between last_touch, equal_credit, and equal_credit_adjusted_display_weight. If blank or broadcast, defaults to campaign setting (or last_touch).
  - `dateFilterSource` 'exposure' | 'event': Export filter option by exposure date or event date. Defaults to campaign setting (or exposure).
  - `callbackUrl` string, uri: HTTPS URL to receive completion/failure events.
  - `attributionWindow` 1 | 3 | 7 | 14 | 30 | 60 | 90: How many days after an exposure a related conversion/response event may be attributed to it.
  - `cellTowerMatching` boolean: Whether to include IP-direct matches within a pre-defined window (usually 2 hours) for impressions and conversion/response events that cannot be matched to a household via the device graph.
  - `cohortName` string, required: The exact, case-sensitive name of the cohort (dashboard group) to report on.
  - `columns` string[]: Column names to include in the export. Defaults to all available columns.
  - `timeScaleGranularity` 'summary' | 'month' | 'week' | 'day': Time granularity for aggregation.
  - `geo` 'dma' | 'zip_code' | 'state' | 'country': Geographic breakdown level. Not available for pod-to-pod campaigns.

## Response `200`

OK

- AsyncQuery
  - `id` string, uuid, required
  - `campaignId` string, required
  - `status` 'PENDING' | 'RUNNING' | 'COMPLETE' | 'FAILED', required
  - `callbackUrl` string, uri
  - `results` string, uri
  - `attributionWindow` 1 | 3 | 7 | 14 | 30 | 60 | 90: How many days after an exposure a related conversion/response event may be attributed to it.
  - `startDate` string, date, required
  - `endDate` string, date, required
  - `cellTowerMatching` boolean: Whether to include IP-direct matches within a pre-defined window (usually 2 hours) for impressions and conversion/response events that cannot be matched to a household via the device graph.
  - `timeScale` 'daily' | 'weekly' | 'all': Specifies the level at which the returned pivot data will be aggregated.
  - `geo` 'dma' | 'zip_code': DEPRECATED; this should now be included in the `query` configuration field. Used to signify data should be pivoted by geo. When this attribute is present, the pivot data will also utilize the `timeScale` specified.

## Other responses

- `302`: FOUND
- `401`: Unauthorized. When the access token is missing, invalid, expired or revoked, the body is empty. When the token is valid but its user may not access the resource, the body is an `Error`.
- `403`: The access token has a scope, such as an MCP token. The v2 API only accepts unscoped tokens.
- `404`: Not Found
- `422`: Unprocessable Content

## Changes

- **2026-11-03** `beceb462c707`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/magellan/apis/magellan-ai-api/changes/measurement/campaigns/:campaign_id/dashboard/cohort/post.md)

---

[API](https://skmtc.dev/magellan/apis/magellan-ai-api.md) - [All operations](https://skmtc.dev/magellan/apis/magellan-ai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/magellan/apis/magellan-ai-api/revisions/beceb462c707?raw)
