Get Started with Async Reporting
The Uber Ads API asynchronous reporting system is ideal for bulk data exports, scheduled reports, and historical analysis. Report generation is a two-step process: submit a request to receive a report_id, then poll the status endpoint until the report is ready for download.
¶ Step 1: Submit Report Request
Endpoint: POST /v1/ads/{account_id}/reporting/report
curl -X POST "https://api.uber.com/v1/ads/{account_id}/reporting/report" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"report_type": "AD_PERFORMANCE",
"time_range": {
"start_time": "2025-09-24T00:00:00Z",
"end_time": "2025-09-24T23:59:59Z"
},
"columns": ["campaign_id", "impressions", "clicks", "ad_spend"],
"time_unit": "DAILY",
"file_format": "CSV"
}'
Response:
{
"report_id": "{report_uuid}"
}
¶ Step 2: Poll Report Status
Once you have submitted a report request, generation typically takes a few minutes but can vary based on report complexity and data volume. Use the report_id returned from your initial request to check the generation status by calling the GET report endpoint. The download URL expires 5 minutes after the report status becomes COMPLETED.
Endpoint: GET /v1/ads/{account_id}/reporting/{report_id}
curl -X GET "https://api.uber.com/v1/ads/{account_id}/reporting/{report_id}" \
-H "Authorization: Bearer {ACCESS_TOKEN}"
Possible status values: COMPLETED, FAILED, PROCESSING
Response when completed:
{
"status": "COMPLETED",
"result": {
"success_result": {
"report_url": "https://example.com/report.csv",
"file_size": "526",
"url_expires_at": "2025-09-30T08:44:36Z",
"report_schema": ["campaign_id", "impressions", "clicks", "ad_spend"]
}
},
"started_at": "2025-09-24T17:53:11Z",
"finished_at": "2025-09-24T17:53:12Z"
}