reports/network

Field and value reference · Markdown

GET/reports/network

Read daily ad network reporting collected from your connected data sources, grouped by the dimensions you choose, with impressions, clicks, revenue, eCPM, and average CPC. Requires the reports:read permission and network reporting access for the account. Match exact values with repeated filter.<dimension> parameters, and select unknown values with is_null. source_timezone and currency always group. Rows from a network that does not report its currency also keep provider, provider_account_id, and provider_account_secondary_id, so revenue in different currencies is never summed. Impression, click, and missing counts are decimal strings. Pass the first page's page.snapshot as snapshot to detect data changes between pages.

Dimension list

Use these names in dimensions, filter.<dimension>, and is_null. See Dimensions for types and values.

DimensionDescription
dayReport day in the network’s time zone.
providerAd network.
provider_account_idNetwork account ID.
provider_account_secondary_idMoloco publisher ID.
account_nameCloudX account name.
property_idMeta property ID.
app_idNetwork app ID.
app_nameNetwork app name.
packageAndroid package or iOS bundle ID.
store_idApp store ID.
platformNormalized platform.
countryCountry code.
formatNormalized ad format.
placement_idNetwork placement ID.
placement_reference_idLiftoff placement reference ID.
placement_nameNetwork placement name.
ad_sizeLiftoff ad size.
incentivizedLiftoff rewarded-traffic flag.
original_platformPlatform as the network reported it.
original_formatAd format as the network reported it.
source_timezoneTime zone of the report day. Always included.
currencyRevenue currency. Always included.

Request

cURL
curl -X GET "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Query parameters

NameTypeDescription
start_daterequiredstring<date>First report day, YYYY-MM-DD. The range covers at most 90 days, inclusive.
end_daterequiredstring<date>Last report day, YYYY-MM-DD, inclusive. Must not precede start_date.
dimensionsstringComma-separated breakdown. Defaults to day,provider,provider_account_id,provider_account_secondary_id. Accepts day, provider, provider_account_id, provider_account_secondary_id, account_name, property_id, app_id, app_name, package, store_id, platform, country, format, placement_id, placement_reference_id, placement_name, ad_size, incentivized, original_platform, original_format, source_timezone, and currency. Output column order is fixed, whatever the request order. Dimension list
filter.dayarray of string<date>Report day, YYYY-MM-DD. Repeat to match any of several values. Dimension list
filter.providerarray of stringAd network. Repeat to match any of several values. Allowed values: digitalturbine, inmobi, liftoff, meta, moloco. Dimension list
filter.provider_account_idarray of stringNetwork account ID from the data source connection. Repeat to match any of several values. Dimension list
filter.provider_account_secondary_idarray of stringMoloco publisher ID; empty string for other networks. Repeat to match any of several values. Dimension list
filter.account_namearray of stringCloudX account name. Repeat to match any of several values. Dimension list
filter.property_idarray of stringMeta property ID. Repeat to match any of several values. Dimension list
filter.app_idarray of stringThe network's app ID. Repeat to match any of several values. Dimension list
filter.app_namearray of stringThe network's app name. Repeat to match any of several values. Dimension list
filter.packagearray of stringAndroid package or iOS bundle ID, such as com.example.game. Repeat to match any of several values. Dimension list
filter.store_idarray of stringApp store ID, such as a numeric App Store ID. Repeat to match any of several values. Dimension list
filter.platformarray of stringNormalized platform. Repeat to match any of several values. Allowed values: android, ios, fireos. Dimension list
filter.countryarray of stringLowercase ISO 3166-1 alpha-2 country code, such as us. Repeat to match any of several values. Dimension list
filter.formatarray of stringNormalized ad format. Repeat to match any of several values. Allowed values: banner, interstitial, native, rewarded. Dimension list
filter.placement_idarray of stringThe network's placement or ad-unit ID. Repeat to match any of several values. Dimension list
filter.placement_reference_idarray of stringLiftoff placement reference ID. Repeat to match any of several values. Dimension list
filter.placement_namearray of stringThe network's placement or ad-unit name. Repeat to match any of several values. Dimension list
filter.ad_sizearray of stringLiftoff ad size, such as 320x50. Repeat to match any of several values. Dimension list
filter.incentivizedarray of stringLiftoff rewarded traffic flag. Allowed values: true, false. Dimension list
filter.original_platformarray of stringPlatform exactly as the network reported it. Repeat to match any of several values. Dimension list
filter.original_formatarray of stringAd format exactly as the network reported it. Repeat to match any of several values. Dimension list
filter.source_timezonearray of stringTime zone that defines the network's report day. Allowed values: UTC, America/Los_Angeles. Dimension list
filter.currencyarray of stringRevenue currency reported by the network, such as USD. Repeat to match any of several values. Dimension list
is_nullarray of stringSelect rows whose dimension value is unknown. Repeat for several dimensions. Cannot be combined with a filter.<dimension> for the same dimension. Allowed values: day, provider, provider_account_id, provider_account_secondary_id, account_name, property_id, app_id, app_name, package, store_id, platform, country, format, placement_id, placement_reference_id, placement_name, ad_size, incentivized, original_platform, original_format, source_timezone, currency. Dimension list
sort_bystringSort by aggregate revenue. Without it, rows sort ascending by every grouping column, unknown values last. Allowed values: revenue.
sort_orderstringRevenue sort direction; requires sort_by. Unknown revenue sorts last in both directions, and grouping columns break ties. Allowed values: desc, asc.
limitintegerRows per page.
offsetintegerRows to skip before the page starts.
snapshotstringThe page.snapshot value from the first page. A later page returns 409 if the query or the report data changed; restart from offset=0.
formatstringResponse format. CSV returns page and coverage metadata in X-Network-* headers. Allowed values: json, csv.

Responses

One page of report rows with per-source coverage. A page past the last row is empty.
{
  "query_time": "<string>",
  "fields": [
    "day",
    "provider",
    "provider_account_id",
    "provider_account_secondary_id",
    "country",
    "source_timezone",
    "currency",
    "impressions",
    "clicks",
    "revenue",
    "ecpm",
    "average_cpc",
    "missing_impressions",
    "missing_clicks",
    "missing_revenue"
  ],
  "rows": [
    {
      "day": "2026-09-01",
      "provider": "liftoff",
      "provider_account_id": "8f14e45fceea167a5a36dedd4bea2543",
      "provider_account_secondary_id": "",
      "country": "us",
      "source_timezone": "UTC",
      "currency": null,
      "impressions": "48210",
      "clicks": "612",
      "revenue": 241.05,
      "ecpm": 5,
      "average_cpc": 0.3938725490196079,
      "missing_impressions": "0",
      "missing_clicks": "0",
      "missing_revenue": "0"
    }
  ],
  "coverage": [
    {
      "provider": "liftoff",
      "provider_account_id": "8f14e45fceea167a5a36dedd4bea2543",
      "provider_account_secondary_id": "",
      "day": "2026-09-01",
      "scope": "customer-day",
      "status": "covered",
      "accepted_at": "2026-09-02T06:14:09Z",
      "latest_status": null
    }
  ],
  "page": {
    "limit": 123,
    "offset": 123,
    "has_more": true,
    "snapshot": "50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c"
  }
}

200 One page of report rows with per-source coverage. A page past the last row is empty.

FieldTypeDescription
query_timerequiredstring<date-time>When the page was read.
fieldsrequiredarray of stringRow columns in output order, dimensions first, then metrics.
rowsrequiredarray of objectReport rows keyed by fields. Unknown values are null.
coveragerequiredarray of objectOne entry per network account, scope, and requested day.
pagerequiredobjectPagination state.

400 Invalid parameter, date, dimension, or filter.

FieldTypeDescription
errorrequiredstring

401 Unauthorized.

FieldTypeDescription
errorrequiredstring

403 Missing the `reports:read` permission or network reporting access.

FieldTypeDescription
errorrequiredstring

409 The snapshot no longer matches; restart from `offset=0` without `snapshot`.

FieldTypeDescription
errorrequiredstring

422 A report limit was exceeded. Narrow the dates or filters, or reduce `limit` or `offset`.

FieldTypeDescription
errorrequiredstring

500 Internal server error.

FieldTypeDescription
errorrequiredstring

503 Report data is being updated. Retry after the `Retry-After` delay.

FieldTypeDescription
errorrequiredstring

504 The report did not finish in time. Retry after the `Retry-After` delay, or narrow the dates or filters.

FieldTypeDescription
errorrequiredstring

Network reporting reference

This endpoint returns the daily reports that your ad networks publish, as CloudX collected them from the connections under Settings > Data sources. Supported networks are Digital Turbine, InMobi, Liftoff, Meta, and Moloco. A request reads stored reports only; it never calls a network.

Every response includes impressions, clicks, revenue, eCPM, and average CPC for each row. Use dimensions to choose the breakdown, filter.<dimension> to match values, and limit, offset, and snapshot to page through the result.

The API key needs the reports:read permission, and network reporting must be enabled for the account. Contact your CloudX account manager to enable it. Without access, the endpoint returns 403.

Parameters

ParameterRequiredDefaultAccepted values
start_dateYes—YYYY-MM-DD, such as 2026-09-01.
end_dateYes—YYYY-MM-DD, on or after start_date. The range covers at most 90 days, inclusive.
dimensionsNoday,provider,provider_account_id,provider_account_secondary_idA comma-separated list of dimensions, such as day,provider,app_id,country.
filter.<dimension>No—An exact value of any dimension. Repeat a filter to match any of several values.
is_nullNo—A dimension name. Selects rows where that dimension is unknown. Repeat for several dimensions.
sort_byNoGrouping columnsrevenue.
sort_orderNodescdesc or asc. Requires sort_by.
limitNo10001 through 10000.
offsetNo00 through 1000000.
snapshotNo—The page.snapshot value from the first page: 64 lowercase hexadecimal characters.
formatNojsonjson or csv.

Each parameter other than filter.<dimension> and is_null may appear once and must not be empty. An unknown parameter or dimension, a repeated parameter, or an empty value for one of these parameters returns 400. An empty filter.<dimension> value is valid and matches an empty string.

Dimensions

dimensions accepts the names below in any order. Responses always list columns in this table’s order. source_timezone and currency are always grouped, even when you omit them.

DimensionTypeValues
daystringReport day, YYYY-MM-DD, in the network’s source_timezone.
providerstringdigitalturbine, inmobi, liftoff, meta, or moloco.
provider_account_idstringThe network account from the data source connection. See network accounts.
provider_account_secondary_idstringMoloco publisher ID. An empty string for other networks.
account_namestring or nullYour CloudX account name.
property_idstring or nullMeta property ID.
app_idstring or nullThe network’s app ID.
app_namestring or nullThe network’s app name.
packagestring or nullAndroid package or iOS bundle ID, such as com.example.game.
store_idstring or nullApp store ID, such as a numeric App Store ID.
platformstring or nullandroid, ios, or fireos.
countrystring or nullLowercase ISO 3166-1 alpha-2 code, such as us. See country codes.
formatstring or nullbanner, interstitial, native, or rewarded. See ad formats.
placement_idstring or nullThe network’s placement or ad-unit ID.
placement_reference_idstring or nullLiftoff placement reference ID.
placement_namestring or nullThe network’s placement or ad-unit name.
ad_sizestring or nullLiftoff ad size, such as 320x50.
incentivizedboolean or nullLiftoff rewarded-traffic flag: true or false.
original_platformstring or nullPlatform exactly as the network reported it.
original_formatstring or nullAd format exactly as the network reported it.
source_timezonestringTime zone that defines the network’s report day: America/Los_Angeles for Meta, UTC for the other networks.
currencystring or nullRevenue currency the network reported, such as USD. null when the network does not report a currency.

null means the network did not report the value, or reported a value that CloudX cannot normalize. Reports have no mediation-platform dimension.

Revenue currency

CloudX does not convert revenue. Rows are always split by currency, and rows whose currency is unknown also keep provider, provider_account_id, and provider_account_secondary_id, even if you did not request them. This way, revenue that may be in different currencies is never summed into one row.

When any row in the result has an unknown currency, fields includes those three columns. Rows with a known currency return null in any of those columns you did not request.

Digital Turbine reports USD. Liftoff, InMobi, Meta, and Moloco currently return currency: null, so their rows keep their network account columns.

Dimensions by network

A network that does not report a dimension returns null for it. A filter.<dimension> on that dimension therefore excludes the network’s rows; use is_null to select them instead.

DimensionDigital TurbineInMobiLiftoffMetaMoloco
account_nameYesYesYesYesYes
property_id———Yes—
app_idYesYesYes—Yes
app_nameYesYesYes—Yes
package, store_idYesYesYes—Yes
platform, original_platform, countryYesYesYesYesYes
format, original_formatYesYesYes—Yes
placement_idYesYesYesYesYes
placement_reference_id——Yes——
placement_name—YesYesYesYes
ad_size, incentivized——Yes——
currencyYes————

package holds package-style identifiers, such as com.example.game. store_id holds store identifiers, such as a numeric App Store ID. Digital Turbine, InMobi, and Liftoff report one app identifier, which fills whichever of the two matches its shape. Moloco reports both.

Network accounts

Networkprovider_account_idprovider_account_secondary_id
Digital TurbineDigital Turbine publisher IDEmpty string
InMobiInMobi account IDEmpty string
LiftoffLiftoff customer IDEmpty string
MetaMeta business IDEmpty string
MolocoMoloco platform IDMoloco publisher ID

Ad formats

format is the normalized ad format. original_format keeps the network’s own value.

Networkoriginal_formatformat
Digital Turbinebanner, interstitial, nativeSame value
Digital Turbinerewarded, rewarded_video, rewarded videorewarded
InMobibanner, interstitial, nativeSame value
InMobirewarded, rewarded_video, rewarded videorewarded
Liftoffbanner, nativeSame value
Liftoffvideo with incentivized: truerewarded
Liftoffvideo with incentivized: falseinterstitial
Molocobanner, interstitial, nativeSame value
Molocoreward_video, rewardedrewarded
MetaNot reportednull

Matching ignores case and surrounding spaces. Any other value returns format: null; filter on original_format to select it.

Platforms

platform is android, ios, or fireos. Network values iphone and ipad normalize to ios, and amazon and fire os normalize to fireos. Any other value returns platform: null. original_platform keeps the network’s own value.

Country codes

country is a lowercase ISO 3166-1 alpha-2 code. CloudX normalizes the alpha-2 codes, alpha-3 codes, and English country names that networks report. xk is Kosovo. Unrecognized values return country: null.

All 250 country codes
Codes
Aad ae af ag ai al am ao aq ar as at au aw ax az
Bba bb bd be bf bg bh bi bj bl bm bn bo bq br bs bt bv bw by bz
Cca cc cd cf cg ch ci ck cl cm cn co cr cu cv cw cx cy cz
Dde dj dk dm do dz
Eec ee eg eh er es et
Ffi fj fk fm fo fr
Gga gb gd ge gf gg gh gi gl gm gn gp gq gr gs gt gu gw gy
Hhk hm hn hr ht hu
Iid ie il im in io iq ir is it
Jje jm jo jp
Kke kg kh ki km kn kp kr kw ky kz
Lla lb lc li lk lr ls lt lu lv ly
Mma mc md me mf mg mh mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz
Nna nc ne nf ng ni nl no np nr nu nz
Oom
Ppa pe pf pg ph pk pl pm pn pr ps pt pw py
Qqa
Rre ro rs ru rw
Ssa sb sc sd se sg sh si sj sk sl sm sn so sr ss st sv sx sy sz
Ttc td tf tg th tj tk tl tm tn to tr tt tv tw tz
Uua ug um us uy uz
Vva vc ve vg vi vn vu
Wwf ws
Xxk
Yye yt
Zza zm zw

The United Kingdom is gb. There is no uk value.

Filters

filter.<dimension> matches exact, case-sensitive values of any dimension, whether or not the dimension is in dimensions.

  • Repeat a filter to match any of its values: filter.country=us&filter.country=ca.
  • Different filters must all match: filter.platform=ios&filter.country=us.
  • Filter values use the same text as the response: filter.day=2026-09-01, filter.incentivized=true, filter.provider_account_secondary_id= for an empty string.
  • is_null=<dimension> selects rows where the dimension is null. You cannot combine is_null and filter.<dimension> for the same dimension.
  • Each filter accepts up to 100 values of up to 1,024 bytes each.

Comma-separated filter values are not split: filter.country=us,ca matches nothing.

Metrics

Every row ends with these metric columns.

MetricTypeMeaning
impressionsdecimal string or nullImpressions the network reported.
clicksdecimal string or nullClicks the network reported.
revenuenumber or nullRevenue the network reported, in the row’s currency.
ecpmnumber or nullrevenue * 1000 / impressions. null when impressions are 0.
average_cpcnumber or nullrevenue / clicks. null when clicks are 0.
missing_impressionsdecimal stringNetwork report rows in this group without an impression count.
missing_clicksdecimal stringNetwork report rows in this group without a click count.
missing_revenuedecimal stringNetwork report rows in this group without revenue.

Counts are strings so that values above 253 keep full precision. A metric is null when any network report row in its group lacks the value; CloudX does not return a partial sum. ecpm and average_cpc are null whenever an input metric is null. A zero reported by the network is a value, not a missing one.

JSON response

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-01&dimensions=day,provider,country&filter.country=us" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"
{
  "query_time": "2026-09-02T09:30:00.123456Z",
  "fields": ["day", "provider", "provider_account_id", "provider_account_secondary_id", "country", "source_timezone", "currency", "impressions", "clicks", "revenue", "ecpm", "average_cpc", "missing_impressions", "missing_clicks", "missing_revenue"],
  "rows": [
    {"day": "2026-09-01", "provider": "digitalturbine", "provider_account_id": null, "provider_account_secondary_id": null, "country": "us", "source_timezone": "UTC", "currency": "USD", "impressions": "15320", "clicks": "201", "revenue": 68.94, "ecpm": 4.5, "average_cpc": 0.34298507462686567, "missing_impressions": "0", "missing_clicks": "0", "missing_revenue": "0"},
    {"day": "2026-09-01", "provider": "liftoff", "provider_account_id": "8f14e45fceea167a5a36dedd4bea2543", "provider_account_secondary_id": "", "country": "us", "source_timezone": "UTC", "currency": null, "impressions": "48210", "clicks": "612", "revenue": 241.05, "ecpm": 5, "average_cpc": 0.3938725490196079, "missing_impressions": "0", "missing_clicks": "0", "missing_revenue": "0"},
    {"day": "2026-09-01", "provider": "meta", "provider_account_id": "1029384756473829", "provider_account_secondary_id": "", "country": "us", "source_timezone": "America/Los_Angeles", "currency": null, "impressions": "30500", "clicks": "305", "revenue": 152.5, "ecpm": 5, "average_cpc": 0.5, "missing_impressions": "0", "missing_clicks": "0", "missing_revenue": "0"},
    {"day": "2026-09-01", "provider": "moloco", "provider_account_id": "EXAMPLE_PLATFORM", "provider_account_secondary_id": "EXAMPLE_PUBLISHER", "country": "us", "source_timezone": "UTC", "currency": null, "impressions": "9140", "clicks": "88", "revenue": 41.13, "ecpm": 4.5, "average_cpc": 0.46738636363636366, "missing_impressions": "0", "missing_clicks": "0", "missing_revenue": "0"}
  ],
  "coverage": [
    {"provider": "digitalturbine", "provider_account_id": "412833", "provider_account_secondary_id": "", "day": "2026-09-01", "scope": "[\"programmatic\",\"183920\",\"android\"]", "status": "covered", "accepted_at": "2026-09-02T04:12:51Z", "latest_status": null},
    {"provider": "liftoff", "provider_account_id": "8f14e45fceea167a5a36dedd4bea2543", "provider_account_secondary_id": "", "day": "2026-09-01", "scope": "customer-day", "status": "covered", "accepted_at": "2026-09-02T06:14:09Z", "latest_status": null},
    {"provider": "meta", "provider_account_id": "1029384756473829", "provider_account_secondary_id": "", "day": "2026-09-01", "scope": "business-day", "status": "covered", "accepted_at": "2026-09-02T08:40:17Z", "latest_status": "running"},
    {"provider": "moloco", "provider_account_id": "EXAMPLE_PLATFORM", "provider_account_secondary_id": "EXAMPLE_PUBLISHER", "day": "2026-09-01", "scope": "account-pair-day", "status": "covered", "accepted_at": "2026-09-02T05:03:44Z", "latest_status": null}
  ],
  "page": {"limit": 1000, "offset": 0, "has_more": false, "snapshot": "50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c"}
}

The request asked for day, provider, and country. source_timezone and currency are always added. Because three networks report no currency, fields also lists the network account columns: the Digital Turbine row reports USD, so its account columns are null.

FieldMeaning
query_timeWhen CloudX read the page.
fieldsRow columns in output order: dimensions, then metrics.
rowsReport rows. Each object has one key per fields entry, in the same order.
coverageWhich requested days have data for each network account. See coverage.
pagelimit, offset, has_more, and snapshot. See pagination.

Coverage

coverage has one entry for each network account, scope, and requested day. Use it to tell a day with no traffic from a day CloudX has not collected yet.

FieldMeaning
provider, provider_account_id, provider_account_secondary_idThe network account.
dayRequested day, YYYY-MM-DD.
scopeThe unit the network reports independently, such as one business, customer, or account. Digital Turbine reports one scope per app and platform. Treat the value as opaque.
statuscovered when the day has data, empty when the network reported the day with no rows, missing when CloudX has no data for the day yet.
accepted_atWhen CloudX stored the day’s data. null when status is missing.
latest_statuspending, running, or failed when the latest collection of the day is queued, in progress, or failed. Otherwise null. A covered day can be running while a refresh is underway.

Networks revise recent days after first publishing them. When CloudX collects a revision, it replaces the stored day, and accepted_at changes. When the account has no network reporting data at all, coverage holds a single entry with status: "missing" and empty account and day fields.

Sorting

Without sort_by, rows sort ascending by every grouping column in output order, with null values last. Grouping columns include the network account columns that revenue currency adds.

With sort_by=revenue, rows sort by revenue, descending unless sort_order=asc. Rows with null revenue sort last in either direction. Grouping columns break ties, so page boundaries are deterministic.

Pagination

A page holds at most limit rows, starting after offset rows. page.has_more is true when more rows follow. A page past the last row is empty.

Without snapshot, every page reads the latest data. If CloudX stores a revised day between two pages, rows can move across page boundaries. To detect that, pass the first page’s page.snapshot as snapshot on every later page. The snapshot covers your query and the stored data it reads, but not limit, offset, or format. If either changes, the request returns 409. Restart from offset=0 without snapshot.

#!/usr/bin/env bash
set -euo pipefail

url="https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&dimensions=day,provider,app_id,country&limit=1000"

offset=0
snapshot=""
: > rows.jsonl
while true; do
  status=$(curl -sS -o page.json -w '%{http_code}' \
    "$url&offset=$offset${snapshot:+&snapshot=$snapshot}" \
    -H "Authorization: Bearer $CLOUDX_API_KEY")
  if [ "$status" = 409 ]; then
    offset=0; snapshot=""; : > rows.jsonl; continue
  fi
  [ "$status" = 200 ] || { cat page.json >&2; exit 1; }

  jq -c '.rows[]' page.json >> rows.jsonl
  snapshot=$(jq -r '.page.snapshot' page.json)
  [ "$(jq -r '.page.has_more' page.json)" = true ] || break
  offset=$((offset + 1000))
done

CSV response

format=csv returns the same rows as text/csv. The header row matches fields. Page and coverage metadata move to response headers.

curl -i "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-01&dimensions=day,provider,country&filter.country=us&format=csv" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"
HTTP/2 200
content-type: text/csv; charset=utf-8
x-network-query-time: 2026-09-02T09:30:00.123456Z
x-network-limit: 1000
x-network-offset: 0
x-network-has-more: false
x-network-snapshot: 50d858e0985ecc7f60418aaf0cc5ab587f42c2570a884095a9e8ccacd0f6545c
x-network-coverage: [{"provider":"digitalturbine","provider_account_id":"412833","provider_account_secondary_id":"","covered":1,"empty":0,"missing":0,"latest_failed_scopes":0,"latest_pending_scopes":0,"latest_running_scopes":0,"oldest_accepted_at":"2026-09-02T04:12:51Z","latest_accepted_at":"2026-09-02T04:12:51Z"},…]

day,provider,provider_account_id,provider_account_secondary_id,country,source_timezone,currency,impressions,clicks,revenue,ecpm,average_cpc,missing_impressions,missing_clicks,missing_revenue
2026-09-01,digitalturbine,\N,\N,us,UTC,USD,15320,201,68.94,4.5,0.34298507462686567,0,0,0
2026-09-01,liftoff,8f14e45fceea167a5a36dedd4bea2543,,us,UTC,\N,48210,612,241.05,5,0.3938725490196079,0,0,0
2026-09-01,meta,1029384756473829,,us,America/Los_Angeles,\N,30500,305,152.5,5,0.5,0,0,0
2026-09-01,moloco,EXAMPLE_PLATFORM,EXAMPLE_PUBLISHER,us,UTC,\N,9140,88,41.13,4.5,0.46738636363636366,0,0,0
HeaderMeaning
X-Network-Query-TimeSame as query_time.
X-Network-LimitSame as page.limit.
X-Network-OffsetSame as page.offset.
X-Network-Has-MoreSame as page.has_more.
X-Network-SnapshotSame as page.snapshot. JSON and CSV pages of one query share a snapshot.
X-Network-CoverageJSON array with one summary per network account: counts of covered, empty, and missing scope-days; counts of scope-days whose latest collection is failed, pending, or running; and the oldest and latest accepted_at.

CSV writes null as \N and an empty string as an empty field. A text value that starts with a backslash gains one more, so the literal text \N is written as \\N. Fields that contain commas, quotes, or line breaks are quoted.

If the coverage summary is too large for a response header, the request returns 422. Request format=json, or filter by provider, provider_account_id, or provider_account_secondary_id.

Example requests

All examples use the base URL https://provisioning.cloudx.io/api/v1 and send your API key as a bearer token.

Report a date range

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Returns one row per day and network account.

Filter by ad format

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.format=rewarded" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Filter by network

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.provider=liftoff" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Filter by country

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.country=us" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Filter by app package

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.package=com.example.game" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Meta does not report packages, so this filter excludes Meta rows.

Filter by platform

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.platform=ios" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Filter by placement

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.placement_id=PLACEMENT_ID" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Replace PLACEMENT_ID with the placement or ad-unit ID from the network.

Match several values of one dimension

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.country=us&filter.country=ca" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Returns rows for the United States or Canada.

Combine filters across dimensions

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&filter.platform=ios&filter.country=us" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Returns iOS rows in the United States.

Daily breakdown

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&dimensions=day" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Returns one row per day, currency, and source time zone. Networks without a reported currency also keep one row per network account; see revenue currency.

Break down by day, network, app, and country

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&dimensions=day,provider,app_id,country" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Read impressions, clicks, revenue, and eCPM

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&dimensions=day" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Every response includes all metrics; there is no metric selector.

Export CSV

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&format=csv" \
  -H "Authorization: Bearer $CLOUDX_API_KEY" \
  -o network.csv

Select rows with an unknown dimension

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&is_null=package" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Returns rows whose package is null, including all Meta rows.

Find missing metrics and incomplete days

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&format=json" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Rows with nonzero missing_impressions, missing_clicks, or missing_revenue include network report rows that lack that metric. coverage entries with status: "missing" are days CloudX has not collected yet.

Sort by revenue

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&sort_by=revenue&sort_order=desc" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

sort_order is optional and defaults to desc.

Page through results

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&limit=100&offset=100" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Returns rows 101 through 200. Continue while page.has_more is true; for CSV, read X-Network-Has-More.

Page through a consistent snapshot

curl "https://provisioning.cloudx.io/api/v1/reports/network?start_date=2026-09-01&end_date=2026-09-07&limit=100&offset=100&snapshot=SNAPSHOT" \
  -H "Authorization: Bearer $CLOUDX_API_KEY"

Replace SNAPSHOT with page.snapshot from the first page. A 409 means the stored data changed; restart from offset=0.

Errors

Errors return JSON with an error message, such as {"error": "invalid network report request: unknown dimension app"}.

StatusCauseAction
400Unknown parameter or dimension, repeated or empty parameter, invalid date, end_date before start_date, sort_order without sort_by, malformed snapshot, or is_null and a filter on the same dimension.Fix the request. The message names the problem.
401Missing or invalid API key.Send a valid key.
403The key lacks reports:read, or network reporting is not enabled for the account.Add the permission, or contact your CloudX account manager.
409The snapshot no longer matches the query or the stored data.Restart from offset=0 without snapshot.
422A limit was exceeded.Narrow the dates or filters, reduce limit or offset, or wait for other report requests to finish.
503Report data is being updated.Retry after the Retry-After delay.
504The report did not finish in time.Retry after the Retry-After delay, or narrow the dates or filters.

Limits

LimitValue
Date range90 days, inclusive
Values per filter100
Bytes per filter value1,024
Rows per page10,000
Offset1,000,000
Response size32 MiB
Request time30 seconds

A request that reads too much report data, or arrives while too many report requests are running, also returns 422. Send report requests one at a time.