# report/network field reference
> Parameter, value, and response reference for GET /report/network.
<!-- source: /en/api-reference/reporting/reportnetwork -->

## Dimensions

Use these names in `dimensions`, `filter.<dimension>`, and `is_null`, in any order. Responses always list columns in this table's order. `source_timezone` and `currency` are always grouped, even when omitted.

| Dimension                       | Type              | Values                                                                                             |
| ------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------- |
| `day`                           | string            | Report day, `YYYY-MM-DD`, in the network's `source_timezone`.                                      |
| `provider`                      | string            | `digitalturbine`, `inmobi`, `liftoff`, `meta`, or `moloco`.                                        |
| `provider_account_id`           | string            | Network account from the data source connection. See [network accounts](#network-accounts).        |
| `provider_account_secondary_id` | string            | Moloco publisher ID. Empty string for other networks.                                              |
| `account_name`                  | string or `null`  | Your CloudX account name.                                                                          |
| `property_id`                   | string or `null`  | Meta property ID.                                                                                  |
| `app_id`                        | string or `null`  | The network's app ID.                                                                              |
| `app_name`                      | string or `null`  | The network's app name.                                                                            |
| `package`                       | string or `null`  | Android package or iOS bundle ID, such as `com.example.game`.                                      |
| `store_id`                      | string or `null`  | App store ID, such as a numeric App Store ID.                                                      |
| `platform`                      | string or `null`  | `android`, `ios`, or `fireos`. See [platforms](#platforms).                                        |
| `country`                       | string or `null`  | Lowercase ISO 3166-1 alpha-2 code, such as `us`. See [country codes](#country-codes).              |
| `format`                        | string or `null`  | `banner`, `interstitial`, `native`, or `rewarded`. See [ad formats](#ad-formats).                  |
| `placement_id`                  | string or `null`  | The network's placement or ad-unit ID.                                                             |
| `placement_reference_id`        | string or `null`  | Liftoff placement reference ID.                                                                    |
| `placement_name`                | string or `null`  | The network's placement or ad-unit name.                                                           |
| `ad_size`                       | string or `null`  | Liftoff ad size, such as `320x50`.                                                                 |
| `incentivized`                  | boolean or `null` | Liftoff rewarded-traffic flag: `true` or `false`.                                                  |
| `original_platform`             | string or `null`  | Platform as the network reported it.                                                               |
| `original_format`               | string or `null`  | Ad format as the network reported it.                                                              |
| `source_timezone`               | string            | Time zone of the network's report day: `America/Los_Angeles` for Meta, `UTC` for the others.       |
| `currency`                      | string or `null`  | Revenue currency the network reported, such as `USD`. `null` when the network does not report one. |

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

## Network reporting reference

### Parameters

| Parameter            | Required | Default                                                          | Accepted values                                                                                |
| -------------------- | -------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| `start_date`         | Yes      |                                                                  | `YYYY-MM-DD`, such as `2026-09-01`.                                                            |
| `end_date`           | Yes      |                                                                  | `YYYY-MM-DD`, on or after `start_date`. The range covers at most 90 days, inclusive.           |
| `dimensions`         | No       | `day,provider,provider_account_id,provider_account_secondary_id` | Comma-separated [dimensions](#dimensions), such as `day,provider,app_id,country`.              |
| `filter.<dimension>` | No       |                                                                  | Exact value of any [dimension](#dimensions). Repeat to match any of several values.            |
| `is_null`            | No       |                                                                  | A dimension name. Selects rows where that dimension is unknown. Repeat for several dimensions. |
| `sort_by`            | No       | Grouping columns                                                 | `revenue`                                                                                      |
| `sort_order`         | No       | `desc`                                                           | `desc` or `asc`. Requires `sort_by`.                                                           |
| `limit`              | No       | `1000`                                                           | `1` to `10000`                                                                                 |
| `offset`             | No       | `0`                                                              | `0` to `1000000`                                                                               |
| `snapshot`           | No       |                                                                  | `page.snapshot` from the first page: 64 lowercase hexadecimal characters.                      |
| `format`             | No       | `json`                                                           | `json` or `csv`                                                                                |

Each parameter except `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 returns `400`. An empty `filter.<dimension>` value is valid and matches an empty string.

### Revenue currency

CloudX does not convert revenue. Rows are always split by `currency`. Rows with an unknown currency also keep `provider`, `provider_account_id`, and `provider_account_secondary_id`, even if you did not request them, so revenue in different currencies is never summed into one row.

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

Digital Turbine reports `USD`. Liftoff, InMobi, Meta, and Moloco 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, so a `filter.<dimension>` on that dimension excludes the network's rows. Use `is_null` to select them.

| Dimension                                  | Digital Turbine | InMobi | Liftoff | Meta | Moloco |
| ------------------------------------------ | --------------- | ------ | ------- | ---- | ------ |
| `account_name`                             | Yes             | Yes    | Yes     | Yes  | Yes    |
| `property_id`                              | No              | No     | No      | Yes  | No     |
| `app_id`                                   | Yes             | Yes    | Yes     | No   | Yes    |
| `app_name`                                 | Yes             | Yes    | Yes     | No   | Yes    |
| `package`, `store_id`                      | Yes             | Yes    | Yes     | No   | Yes    |
| `platform`, `original_platform`, `country` | Yes             | Yes    | Yes     | Yes  | Yes    |
| `format`, `original_format`                | Yes             | Yes    | Yes     | No   | Yes    |
| `placement_id`                             | Yes             | Yes    | Yes     | Yes  | Yes    |
| `placement_reference_id`                   | No              | No     | Yes     | No   | No     |
| `placement_name`                           | No              | Yes    | Yes     | Yes  | Yes    |
| `ad_size`, `incentivized`                  | No              | No     | Yes     | No   | No     |
| `currency`                                 | Yes             | No     | No      | No   | No     |

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

### Network accounts

| Network         | `provider_account_id`        | `provider_account_secondary_id` |
| --------------- | ---------------------------- | ------------------------------- |
| Digital Turbine | Digital Turbine publisher ID | Empty string                    |
| InMobi          | InMobi account ID            | Empty string                    |
| Liftoff         | Liftoff customer ID          | Empty string                    |
| Meta            | Meta business ID             | Empty string                    |
| Moloco          | Moloco platform ID           | Moloco publisher ID             |

### Ad formats

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

| Network         | `original_format`                              | `format`       |
| --------------- | ---------------------------------------------- | -------------- |
| Digital Turbine | `banner`, `interstitial`, `native`             | Same value     |
| Digital Turbine | `rewarded`, `rewarded_video`, `rewarded video` | `rewarded`     |
| InMobi          | `banner`, `interstitial`, `native`             | Same value     |
| InMobi          | `rewarded`, `rewarded_video`, `rewarded video` | `rewarded`     |
| Liftoff         | `banner`, `native`                             | Same value     |
| Liftoff         | `video` with `incentivized: true`              | `rewarded`     |
| Liftoff         | `video` with `incentivized: false`             | `interstitial` |
| Moloco          | `banner`, `interstitial`, `native`             | Same value     |
| Moloco          | `reward_video`, `rewarded`                     | `rewarded`     |
| Meta            | Not reported                                   | `null`         |

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` become `ios`, and `amazon` and `fire os` become `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 networks report. `xk` is Kosovo. Unrecognized values return `country: null`.

### All 250 country codes

|   | Codes                                                                                                              |
| - | ------------------------------------------------------------------------------------------------------------------ |
| A | `ad` `ae` `af` `ag` `ai` `al` `am` `ao` `aq` `ar` `as` `at` `au` `aw` `ax` `az`                                    |
| B | `ba` `bb` `bd` `be` `bf` `bg` `bh` `bi` `bj` `bl` `bm` `bn` `bo` `bq` `br` `bs` `bt` `bv` `bw` `by` `bz`           |
| C | `ca` `cc` `cd` `cf` `cg` `ch` `ci` `ck` `cl` `cm` `cn` `co` `cr` `cu` `cv` `cw` `cx` `cy` `cz`                     |
| D | `de` `dj` `dk` `dm` `do` `dz`                                                                                      |
| E | `ec` `ee` `eg` `eh` `er` `es` `et`                                                                                 |
| F | `fi` `fj` `fk` `fm` `fo` `fr`                                                                                      |
| G | `ga` `gb` `gd` `ge` `gf` `gg` `gh` `gi` `gl` `gm` `gn` `gp` `gq` `gr` `gs` `gt` `gu` `gw` `gy`                     |
| H | `hk` `hm` `hn` `hr` `ht` `hu`                                                                                      |
| I | `id` `ie` `il` `im` `in` `io` `iq` `ir` `is` `it`                                                                  |
| J | `je` `jm` `jo` `jp`                                                                                                |
| K | `ke` `kg` `kh` `ki` `km` `kn` `kp` `kr` `kw` `ky` `kz`                                                             |
| L | `la` `lb` `lc` `li` `lk` `lr` `ls` `lt` `lu` `lv` `ly`                                                             |
| M | `ma` `mc` `md` `me` `mf` `mg` `mh` `mk` `ml` `mm` `mn` `mo` `mp` `mq` `mr` `ms` `mt` `mu` `mv` `mw` `mx` `my` `mz` |
| N | `na` `nc` `ne` `nf` `ng` `ni` `nl` `no` `np` `nr` `nu` `nz`                                                        |
| O | `om`                                                                                                               |
| P | `pa` `pe` `pf` `pg` `ph` `pk` `pl` `pm` `pn` `pr` `ps` `pt` `pw` `py`                                              |
| Q | `qa`                                                                                                               |
| R | `re` `ro` `rs` `ru` `rw`                                                                                           |
| S | `sa` `sb` `sc` `sd` `se` `sg` `sh` `si` `sj` `sk` `sl` `sm` `sn` `so` `sr` `ss` `st` `sv` `sx` `sy` `sz`           |
| T | `tc` `td` `tf` `tg` `th` `tj` `tk` `tl` `tm` `tn` `to` `tr` `tt` `tv` `tw` `tz`                                    |
| U | `ua` `ug` `um` `us` `uy` `uz`                                                                                      |
| V | `va` `vc` `ve` `vg` `vi` `vn` `vu`                                                                                 |
| W | `wf` `ws`                                                                                                          |
| X | `xk`                                                                                                               |
| Y | `ye` `yt`                                                                                                          |
| Z | `za` `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.

| Metric                | Type                     | Meaning                                                          |
| --------------------- | ------------------------ | ---------------------------------------------------------------- |
| `impressions`         | decimal string or `null` | Impressions the network reported.                                |
| `clicks`              | decimal string or `null` | Clicks the network reported.                                     |
| `revenue`             | number or `null`         | Revenue the network reported, in the row's currency.             |
| `ecpm`                | number or `null`         | `revenue * 1000 / impressions`. `null` when impressions are `0`. |
| `average_cpc`         | number or `null`         | `revenue / clicks`. `null` when clicks are `0`.                  |
| `missing_impressions` | decimal string           | Network report rows in this group without an impression count.   |
| `missing_clicks`      | decimal string           | Network report rows in this group without a click count.         |
| `missing_revenue`     | decimal string           | Network report rows in this group without revenue.               |

Counts are strings so values above 253 keep full precision. A metric is `null` when any network report row in its group lacks it. CloudX does not return partial sums. `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

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

```json
{
  "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": "EXAMPLE_PUBLISHER", "provider_account_secondary_id": "", "day": "2026-09-01", "scope": "[\"programmatic\",\"EXAMPLE_APP\",\"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. Three networks report no currency, so `fields` also lists the network account columns. The Digital Turbine row reports `USD`, so its account columns are `null`.

| Field        | Meaning                                                                             |
| ------------ | ----------------------------------------------------------------------------------- |
| `query_time` | When CloudX read the page.                                                          |
| `fields`     | Row columns in output order: dimensions, then metrics.                              |
| `rows`       | Report rows. Each object has one key per `fields` entry, in the same order.         |
| `coverage`   | Which requested days have data for each network account. See [coverage](#coverage). |
| `page`       | `limit`, `offset`, `has_more`, and `snapshot`. See [pagination](#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.

| Field                                                              | Meaning                                                                                                                                                                                    |
| ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `provider`, `provider_account_id`, `provider_account_secondary_id` | The network account.                                                                                                                                                                       |
| `day`                                                              | Requested day, `YYYY-MM-DD`.                                                                                                                                                               |
| `scope`                                                            | The 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.                 |
| `status`                                                           | `covered` 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_at`                                                      | When CloudX stored the day's data. `null` when `status` is `missing`.                                                                                                                      |
| `latest_status`                                                    | `pending`, `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, `coverage` holds one 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](#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, so a day revised between two pages can shift rows across page boundaries. To detect this, pass the first page's `page.snapshot` as `snapshot` on every later page. The snapshot covers the query and the data it reads, but not `limit`, `offset`, or `format`. If either changes, the request returns `409`. Restart from `offset=0` without `snapshot`.

### CSV response

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

```bash
curl -i "https://provisioning.cloudx.io/api/v1/report/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"
```

```text
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":"EXAMPLE_PUBLISHER","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
```

| Header                 | Meaning                                                                                                                                                                                                                        |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `X-Network-Query-Time` | Same as `query_time`.                                                                                                                                                                                                          |
| `X-Network-Limit`      | Same as `page.limit`.                                                                                                                                                                                                          |
| `X-Network-Offset`     | Same as `page.offset`.                                                                                                                                                                                                         |
| `X-Network-Has-More`   | Same as `page.has_more`.                                                                                                                                                                                                       |
| `X-Network-Snapshot`   | Same as `page.snapshot`. JSON and CSV pages of one query share a snapshot.                                                                                                                                                     |
| `X-Network-Coverage`   | JSON 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 gets an extra one, so the 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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

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

#### Filter by network

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

#### Filter by country

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

#### Filter by app package

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

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

#### Filter by placement

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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 that do not report a currency also return one row per network account. See [revenue currency](#revenue-currency).

#### Break down by day, network, app, and country

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

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

Every response includes all [metrics](#metrics). There is no metric selector.

#### Export CSV

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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

```bash
curl "https://provisioning.cloudx.io/api/v1/report/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"}`.

| Status | Cause                                                                                                                                                                                                             | Action                                                                                                |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `400`  | Unknown 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.                                                       |
| `401`  | Missing or invalid API key.                                                                                                                                                                                       | Send a valid key.                                                                                     |
| `403`  | The key lacks `reports:read`, or network reporting is not enabled for the account.                                                                                                                                | Add the permission, or contact your CloudX account manager.                                           |
| `409`  | The `snapshot` no longer matches the query or the stored data.                                                                                                                                                    | Restart from `offset=0` without `snapshot`.                                                           |
| `422`  | A [limit](#limits) was exceeded.                                                                                                                                                                                  | Narrow the dates or filters, reduce `limit` or `offset`, or wait for other report requests to finish. |
| `503`  | Report data is being updated.                                                                                                                                                                                     | Retry after the `Retry-After` delay.                                                                  |
| `504`  | The report did not finish in time.                                                                                                                                                                                | Retry after the `Retry-After` delay, or narrow the dates or filters.                                  |

### Limits

| Limit                  | Value              |
| ---------------------- | ------------------ |
| Date range             | 90 days, inclusive |
| Values per filter      | 100                |
| Bytes per filter value | 1,024              |
| Rows per page          | 10,000             |
| Offset                 | 1,000,000          |
| Response size          | 32 MiB             |
| Request time           | 30 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.
