Overview
This API provides real-time reporting for Marketplace Performance Outcomes (MPO) via an asynchronous export workflow designed for large volumes of data.- Data latency: Approximately 10 minutes.
- Base URL:
- Compatibility: This endpoint supports both multi-seller and single-seller campaign configurations.
- Create an asynchronous report job with your filters.
- Poll the job status until it is complete.
- Download the generated export file (CSV or JSON).
1. Create a report job
Endpoint:POST /realtime-reports/export
Submit a request with your desired filters. The API creates an export job and returns an identifier (UUID) and a status (typically Pending).
2. Poll for Completion
Endpoint:GET /report-jobs/{reportId}
Poll the job status until it reaches Done. Do not poll more than once every 5–10 seconds to remain within rate limits.
- Status options:
Pending,Done,Failure,Expired. - Note: Identical requests may reuse cached results, returning a previously generated ID.
3. Download the report
Endpoint:GET /realtime-reports/{reportId}
Once the status is Done, this call returns the raw file bytes.
- CSV output:
Content-Type: text/csv. - JSON output:
Content-Type: application/json.
Data models
Request attributes (RealTimeProductReportJob)
Field | Type | Description |
|---|---|---|
| string | Output format: |
| array[string] | IDs of advertiser accounts. |
| array[string] | Optional campaign filter. |
| array[string] | Optional seller filter. |
| array[string] | Aggregation levels (for example, |
| array[string] | Metrics to retrieve. Default: |
| integer | Duration in minutes counted backwards from now (60–1440). Mutually exclusive with |
| string | ISO-8601 UTC start time. |
| string | ISO-8601 UTC end time. If omitted, defaults to the current time when |
| string | IANA time zone identifier (default: |
Dimensions
Dimension | Description | Constraints |
|---|---|---|
| ID of the advertiser. | — |
| ID of the partner. | — |
| ID of the campaign (ad set-level entity in MPO). | — |
| ID of the seller used in the MPO public API. | — |
| Client-provided product ID. | Cannot be combined with |
| Start of hourly aggregation bucket (ISO-8601; minutes/seconds = 00) in the requested time zone. | Cannot be combined with |
| Start of minute aggregation bucket (ISO-8601; seconds = 00) in the requested time zone. | Cannot be combined with |
Metrics
Metric | Description |
|---|---|
| Number of clicks generated. |
| Number of display opportunities used. |
| Total cost in the advertiser account currency. |
Step 1. Create an Async Report Job
POST
Sample Request
Sample Response
Successful Response
Error Example: unsupported fileFormat
If fileFormat is not one of csv or json, the API returns a 400 Bad Request validation error.
Step 2. Poll for Completion
GET
Done.Do not poll more than once every 5–10 seconds to remain within rate limits.
- Status options:
Pending,Done,Failure,Expired. - Note: Identical requests may reuse cached results, returning a previously generated ID.
Step 3. Download Report Output
GET
- If
fileFormat = csv→Content-Type: text/csv - If
fileFormat = json→Content-Type: application/json
Path Parameters
Name | In | Type | Description |
|---|---|---|---|
| path | string (UUID) | Unique ID of the export job. |
Example Request
GET
Successful response
- 200 OK only if job status is
Done. - Body contains raw file bytes (CSV or JSON).
Output formats
CSV output
The response contains a header row followed by data rows.JSON output
The response contains a columnar JSON payload with adata array and top-level columns and rows fields.
Validation rules
The following validation rules are explicitly described via field notes and domain errors.1) Required fields
advertiserIdsis required.- Missing required fields yields
invalid-query.
2) File format
fileFormatmust be one ofcsvorjson.- Otherwise the API returns
json-serialization-error(as shown in the example).
3) Time interval definition
You must use exactly one of:- Relative interval:
lookbackWindow(minutes from now). - Absolute interval:
startDate(and optionallyendDate).
lookbackWindowmust be within 60–1440.lookbackWindowcannot be combined withstartDateand/orendDate.startDateis mutually exclusive withlookbackWindow.- If
startDateis provided andendDateis omitted,endDatedefaults to the current time.
invalid-lookbackwindow and/or invalid-time-interval.
4) Time zone
timezonemust exist in the IANA Time Zone database.- Invalid time zones yield
invalid-query(as part of “invalid query definition”).
5) Dimension combination constraints
- Only one of the following dimensions can be used in a single request:
productIdhourminute
invalid-dimensioncombination.
6) Report lifecycle constraints
- Downloading output is only valid when
status == Done. - If the job does not exist (or is not visible), the API returns
export-not-foundand maps it to HTTP403. - If the job exists, but the output has been permanently deleted, the API returns
export-alreadyexpired.
7) Caching behavior (identical requests)
- Identical requests may reuse cached results, meaning a previous export/report ID may be returned instead of generating a new export.
Errors & status codes
HTTP status codes
HTTP | Meaning |
|---|---|
400 | Bad request (invalid syntax or validation error). |
401 | Authentication failed (missing or expired token). |
403 | Insufficient permissions, no campaign found in scope, or export job not found. |
409 | Conflicting parameters (for example, invalid combination of filters). |
429 | Throttling limit reached (example value noted: 200 requests/minute — to be confirmed). |
500 | Internal server error. |
Domain errors / validation errors
Code | Title / Description | Notes |
|---|---|---|
| Insufficient account permissions | Caller lacks rights for specified advertisers. |
| Invalid query definition | Missing required fields, unsupported dimensions/metrics, invalid time zone, invalid IDs. |
| Invalid lookback window | Outside 60–1440 or combined with dates. |
| Invalid time interval definition | Dates combined with |
| Invalid combination of dimensions | Only one of |
| Unsupported file format | Only CSV and JSON are supported. |
| Export job not found | Requested |
| Export already expired | Output has been permanently deleted. |