Get Started with Reporting
The Uber Ads API uses an asynchronous reporting system. 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": "8a2e38b2-59fb-5242-a0ec-e913a42150b5"
}
¶ Time Range Configuration
When configuring time ranges, follow these guidelines for proper aggregation:
Weekly Reports
- Start Date: Must be a Monday
- End Date: Must be the next Monday
- Example:
"start_time": "2025-07-21T00:00:00Z", "end_time": "2025-07-28T00:00:00Z"
Monthly Reports
- Start Date: Must be the first day of a month
- End Date: Must be the first day of the next month
- Example:
"start_time": "2025-07-01T00:00:00Z", "end_time": "2025-08-01T00:00:00Z"
Daily and Summary Reports
- Start Date: Any valid date
- End Date: Any valid date after start date
- Example:
"start_time": "2025-07-15T00:00:00Z", "end_time": "2025-07-20T00:00:00Z"
¶ Filter Operators
Supported operators: EQUAL
, NOT_EQUAL
, IN
¶ 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/8a2e38b2-59fb-5242-a0ec-e913a42150b5" \
-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"
}