Create & download a report

In this guide, we’ll show you the steps to authenticate using a private API key to create and download reports via the Reporting API .


1. Generate a private API key

🚧

Owner-level access required

"Manage reports" section is only visible to Owners.

Follow the dedicated guide to create a private API Key from your Dailymotion Studio.

While creating your private API key, make sure to toggle on any permissions you may need in the “Manage reports” section:


Once created, you’ll retrieve an API key and API secret. For security reasons, the API secret is only displayed once: store it safely before closing the window.


2. Authenticate

Use your API key to generate an access token and authenticate.

Make a POST request to https://oauth2.dailymotion.com/v1/token with the following parameters:

  • grant_type: Set to client_credentials
  • client_id: Your API key from step 1
  • client_secret: Your API secret from step 1
  • scope: analytics.manage analytics.read. See all scopes & bundles.
curl -X POST "https://oauth2.dailymotion.com/v2/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=<your_api_key>" \
  -d "client_secret=<your_api_secret>" \
  -d "scope=analytics.manage analytics.read"

Response:

{
  "access_token": "<your_access_token>",
  "token_type": "Bearer",
  "expires_in": 36000,
  "scope": "analytics.manage analytics.read"
}

Pass the access_token as a Bearer token in the Authorization header for all subsequent requests.


3. Generate a report

Reports are generated asynchronously. On success, the API returns a HTTP 201 response and the report immediately goes in status: processing. You must poll (see step 4) until status: finished before downloading your report.

Endpoint:

POST https://api.dailymotion.com/v2/organizations/{organization_id}/analytics_reports

Request body:

FieldTypeDescription
name *stringName for this report (max 255 chars)
start_at *string (ISO 8601)Start date of the reporting period (ie. 2026-07-01)
end_at *string (ISO 8601)End date of the reporting period (ie. 2026-07-04)
metrics *array[string]Metrics to measure (ie. ["VIEWS"]). See all metrics.
dimensions *array[string]Breakdown dimensions (ie. ["DAY", "VIDEO_TITLE"]). See all dimensions.
filtersobjectKey-value pairs to narrow down the data. See all filters.
product_typestringScope the report to a product. One of: all, content, claim, embed. Defaults to content

*Required fields

🚧

Important

  • end_at must be after start_at.
  • Future dates are not allowed for end_at.
  • Date range cannot exceed 180 days.
  • Parameters are case sensitive.
  • Metrics and dimensions aren’t all compatible with each other. Refer to the Compatibility matrix.
  • CSV reports generated in UTC timezone.

Request example:

// Replace <YOUR_ORGANIZATION_ID> and <YOUR_PROFILE_NAME> with your own ones.

curl -X POST "https://api.dailymotion.com/v2/organizations/<YOUR_ORGANIZATION_ID>/analytics_reports" \
  -H "Authorization: Bearer <your_access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekly Views Report",
    "start_at": "2026-06-01",
    "end_at": "2026-06-07",
    "metrics": ["VIEWS"],
    "dimensions": ["DAY", "VIDEO_TITLE"],
    "product_type": "content",
    "filters": {
      "video_owner_profile_name": "<YOUR_PROFILE_NAME>"
    }
  }'

In this example, we are generating a report gathering the VIEWS per DAY and VIDEO_TITLE for the Dailymotion profile defined in the filter video_owner_profile_name. This report will only show data from the profile’s uploaded CONTENT for the time frame 2026-06-01 to 2026-06-07.

Response:

By default, the response returns name, status, and created_at. You can request additional fields using the fields query parameter (see field selection).

{
  "name": "Weekly Views Report",
  "status": "processing",
  "created_at": "2026-06-10T10:00:00Z"
}

To also receive the report_token (useful for polling), add ?fields=name,status,created_at,report_token to the request URL.


4. Download report

Reports can take up to two hours to generate. Poll this endpoint periodically and check the status field in the response. Once this reads finished, your report is ready to download.

There are two ways to track your report:

  • By report_token: If you saved the token from the generate response (see step 3), you can match it in the list to find your specific report.
  • By name: If you didn't save the token, look for your report by the name you gave it.
// Replace <YOUR_ORGANIZATION_ID> with your own.

curl -X GET "https://api.dailymotion.com/v2/organizations/<YOUR_ORGANIZATION_ID>/analytics_reports?fields=name,status,report_token,report_urls" \
  -H "Authorization: Bearer <your_access_token>"

Response:

While the report is processing, report_urls is null, you can keep polling.

{
  "data": [
    {
      "name": "Weekly Views Report",
      "status": "processing",
      "report_token": "<REPORT_TOKEN>",
      "report_urls": null
    }
  ],
  "pagination": {
    "page": 1,
    "page_size": 10,
    "total": 1,
    "next": null,
    "previous": null
  }
}
🚧

Important

report_urls are temporary. Once the report's status becomes expired, those links stop working. Make sure to download the file promptly after the report reaches finished status.




Field selection

Use the fields query parameter to request only the fields you need. This applies to both the create response and the list endpoint.

curl -X GET "https://api.dailymotion.com/v2/organizations/<YOUR_ORGANIZATION_ID>/analytics_reports?fields=name,status,report_token,report_urls,start_at,end_at" \
  -H "Authorization: Bearer <your_access_token>"

Rule:

  • No fields param → Returns default fields only: name status created_at.
  • Fields specified → Returns only requested fields.
Available fieldsDescription
nameName of the report.
statusCurrent processing state:processing finished failed expired
created_atTimestamp when the report was created.
created_byUser who created the report. Use dot notation to select sub-fields, ie. created_by.display_name.
start_atStart date of the reporting period.
end_atEnd date of the reporting period.
has_revenue_infoWhether the report contains revenue data.
report_tokenUnique token identifying the report, useful for polling.
report_urlsTemporary download URLs, populated only when status is finished.





Did this page help you?