Skip to main content

Request and Download Reports

Once your org is set up and at least one advertiser has shared an ad account with the Data Analyst role assigned (see Onboarding), use this flow whenever you need data. The MMM API is asynchronous: submit a report request, poll for completion, then download the file. All requests use the base URL https://adsapi.snapchat.com.

Step 1: Get a valid access token

An access_token is valid for 3600 seconds. If it's expired, get a new one with your refresh_token:

curl -X POST \
-d "grant_type=refresh_token" \
-d "refresh_token={refresh_token}" \
-d "client_id={client_id}" \
-d "client_secret={client_secret}" \
https://accounts.snapchat.com/login/oauth2/access_token

Step 2: Enumerate your shared ad accounts

curl "https://adsapi.snapchat.com/v1/me/source_organizations?shared_entity_type=ad_account" \
-H "Authorization: Bearer {access_token}"

The response lists each advertiser organization and the ad accounts it has shared with you, along with the roles your org holds on each account. If an account you expect is missing, no member of your org has been assigned a role on it yet. Return to Onboarding, Step 3.

Step 3: Submit a report request

Send one request per ad account.

curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}" \
-d '{
"ad_account_id": "{ad_account_id}",
"time_dimension": "weekEndingSat",
"start_date": "2025-01-01",
"end_date": "2026-01-01",
"geo_dimension": "COUNTRY"
}' \
https://adsapi.snapchat.com/v1/mmm/reports
ParameterRequiredValues
ad_account_idYesOne account per request
time_dimensionYesDay, weekEndingSat, weekEndingSun, month
start_date / end_dateYesYYYY-MM-DD; end_date is inclusive
geo_dimensionNoCOUNTRY (default), REGION, DMA
formatNoCSV (default) or JSON

Response:

{
"request_status": "SUCCESS",
"request_id": "...",
"async_stats_reports": [
{
"sub_request_status": "SUCCESS",
"async_stats_report": {
"report_run_id": "MMM_REPORT:acc-abc123:...",
"async_status": "STARTED"
}
}
]
}

Step 4: Poll for status

curl "https://adsapi.snapchat.com/v1/mmm/reports/{report_run_id}" \
-H "Authorization: Bearer {access_token}"
async_statusMeaning
STARTEDReport is queued and waiting to process. Poll again.
RUNNINGReport is still processing. Poll again.
COMPLETEDDownload URL is ready; valid for approximately 7 days.
FAILEDCheck the error message in the response.

Completed response:

{
"request_status": "SUCCESS",
"request_id": "...",
"async_stats_reports": [
{
"sub_request_status": "SUCCESS",
"async_stats_report": {
"report_run_id": "MMM_REPORT:acc-abc123:...",
"async_status": "COMPLETED",
"result": "https://data-transfer.snapads.com/<signed-path>"
}
}
]
}

Step 5: Download the report

Send a GET request to the result URL directly (no Authorization header needed). The response body is a CSV or JSON file, depending on the format you requested. The link expires after approximately 7 days; if it expires, re-poll the report_run_id to get a fresh one.

Limits

  • Earliest start_date: 2023-01-01. This floor moves forward over time; there's no maximum lookback window.

For the full set of columns returned, see Report schema.

Was this page helpful?
Yes
No