v1
latestOpenAPI 3.0.12026-08-06241391671.8 KBExports aggregated report data in CSV format.
Same data as GET /report but returned as CSV for spreadsheet import or bulk processing. Same query parameters and semantics apply, including half-open date ranges.
Query parameters
Controls which entities appear in the report. Default: TRAFFIC.
- ALL — all entities, including those with no traffic in the period
- ACTIVE — only active (non-archived) entities, including those with no traffic
- ARCHIVED — only archived entities, including those with no traffic
- TRAFFIC — only rows with non-zero traffic events (excludes entities with no traffic)
Entities with no traffic in the period are returned for every value except TRAFFIC.
Time zone for date aggregation, e.g. 'America/New_York', 'Europe/Warsaw', or 'Etc/GMT'. Default: Etc/GMT. Affects how day, dayOfWeek, and hourOfDay boundaries are calculated.
Columns to include in the response (required). This is a repeated query parameter — use column=visits&column=clicks, NOT comma-separated. Valid columns differ per report type (aggregated /report, per-conversion /report/conversions, error /report/errors).
Common mistakes returning 400: deviceType (use device), and requesting a Name variant for a self-labeling dimension — region, city, os, browser, isp, mobileCarrier are already human-readable, so there is no regionName/cityName/osName/browserName column. (Code/name pairs like countryCode/countryName and connectionType/connectionTypeName are the exception — those Name columns exist.)
Call GET /column/info for the authoritative list of valid columns for this account. The column sets named in each endpoint's own documentation are guidance/examples, not the complete list.
Drilldown filter dimension — a dimension column to filter the report by an EXACT value, e.g. campaignId. Pair with filter1Value. This is the correct, server-side way to scope a report to a single entity by id; the filter parameter only does free-text name search, which is fragile and can match the wrong row.
Second drilldown filter dimension (optional), e.g. countryCode. Pair with filter2Value.
Dimension(s) to group results by. Repeated parameter — use groupBy=campaignId&groupBy=countryCode, not comma-separated.
Call GET /column/info to discover all valid groupBy values for this account (filter response for canGroupBy: true). The list evolves — don't hardcode it.
Common examples: campaignId, offerId, landerId, trafficSourceId, affiliateNetworkId, countryCode, day, dayOfWeek, hourOfDay, month, device, os, browser, isp, referrerDomain, flowId, customVariable1 through customVariable10.
Name column mapping — grouping by an entity returns only the ID. You must request the name column explicitly via the 'column' parameter:
| groupBy | Name column to request |
|---|---|
| campaignId | campaignName |
| offerId | offerName |
| landerId | landerName |
| trafficSourceId | trafficSourceName |
| affiliateNetworkId | affiliateNetworkName |
| countryCode | countryName |
| device | deviceName |
| connectionType | connectionTypeName |
| language | languageName |
| flowId | flowName |
Custom variables: slot meanings are per-source (slot 1 may be zoneid on PropellerAds, pubid on Reacheffect). Discover labels via GET /traffic-source → each source's customVariables[] array. customVariable1..10 breakdowns must be scoped to a single campaign (or at least a single traffic source) via filter1=campaignId&filter1Value=<id>; unscoped breakdowns mix incompatible populations. The endpoint accepts unscoped queries — scoping is on the caller.
Group by the ID, not the Name — Name columns (campaignName, offerName, landerName, ...) have canGroupBy: false; grouping by one returns Could not find matching view. Group by the matching ID and request the Name as a column (see the table above).
Self-labeling dimensions — region, city, os, osVersion, browser, browserVersion, isp, mobileCarrier, referrerDomain return the human-readable value directly and have no Name variant. (Code/name pairs like countryCode/countryName and connectionType/connectionTypeName are the exception — see the table above.)
Common mistakes returning 400: deviceType (use device), campaignName and other Name columns (group by the ID instead — see above), conversion (use /report/conversions endpoint). canGroupBy: true is necessary but not sufficient — some flagged-groupable dimensions (e.g. category, externalCampaignId) still return Could not find matching view for a given account; treat that as a prompt to pick a different dimension, not a bug. Both referrer and referrerDomain are valid groupBy keys; prefer referrerDomain to avoid high-cardinality full-URL rows.
Column name to sort by. Can be any valid metric or dimension column. Default: visits.
Exact value for filter1, e.g. the campaign id. Returns only rows matching this value.
Free-text substring search over NAME columns only (campaignName, offerName, ...). NOT for ids and NOT exact — a fragment can match several rows or none. To scope a report to a specific entity by id, use the drilldown filters filter1/filter1Value (e.g. filter1=campaignId, filter1Value=<id>); never put an id here.
Start date/time (inclusive, required). ISO 8601 format, e.g. 2026-03-01T00:00:00Z.
Must be aligned to an hour boundary — minutes and seconds must be zero.
The date range is half-open [from, to) — 'from' is included in results.
Currency code for monetary values in the response, e.g. USD, EUR, GBP. Default: USD.
End date/time (EXCLUSIVE). ISO 8601 format. The date range is half-open [from, to) — 'to' is NOT included.
Must be aligned to an hour boundary — minutes and seconds must be zero.
Default: start of the next hour in the request timezone (e.g. if current time is 14:30, default to is 15:00). This means omitting to gives you data up to the current hour.
To query the full day of March 5, set to=2026-03-06T00:00:00Z (next day). Common mistake: setting to=2026-03-05T00:00:00Z returns zero results for March 5.
Exact value for filter2.
Workspace IDs to filter by. Only returns data for campaigns in the specified workspaces.
Controls how conversions are attributed in time. Default: VISIT.
- VISIT — attribute conversion to the time of the original visit (click time)
- CONVERSION — attribute conversion to the time the postback was received
Use VISIT when you want conversions aligned with the traffic that generated them. Not applicable to /report/conversions endpoint.
Period-over-period comparisons: use the same mode for both periods (e.g. WoW with compareFrom/compareTo). Mixing VISIT and CONVERSION produces fake late-funnel drops — conversions registered after the first period closes are visible under CONVERSION but invisible under VISIT.
Sort direction. Default: desc (descending).
Response
Report data in CSV format.