Adikteev provides a dashboard for monitoring your campaign performance. If you prefer to work in your own reporting tools, you can pull the same campaign data directly from the Reporting API.
Data retention: The API returns up to 2 years (24 months) of historical data.
1. Getting access
You need an Adikteev account to use the API. If you don't have one, ask your Adikteev Account Manager to create it — you'll receive an email to set your password.
- If you already use the Adikteev Audiences API or User Deletion API, the same credentials work here.
-
To reset your password at any time, use the password recovery link.
2. Authentication
The API uses OAuth 2.0. Exchange your credentials for a bearer access token, then send that token on every subsequent request.
POST /token
| Item | Value |
|---|---|
| URL | https://public-api.adikteev.com/token |
| Required header | Authorization: Basic cmVwb3J0aW5nX2Rhc2hib2FyZDo= |
| Body (form-encoded) | username={your_email}&password={your_password}&grant_type=password |
If your email and password are recognized, you will receive a JSON response containing a token valid for 30 days.
Sample Request:
curl -X POST 'https://public-api.adikteev.com/token' \
-H 'authorization: Basic cmVwb3J0aW5nX2Rhc2hib2FyZDo=' \
--data 'username=you@example.com&password=your_password&grant_type=password'Sample Response:
{
"access_token": "123456789",
"token_type": "bearer",
"expires_in": 2592000
}
3. Making requests
Send the token as a bearer header on every request. All data endpoints use GET and return JSON.
| Item | Value |
|---|---|
| Base URL | https://public-api.adikteev.com |
| Required header | Authorization: Bearer {your_access_token} |
| Optional header | Accept-Encoding: gzip to compress responses |
Timeout: requests time out after 7 minutes. Use date ranges and campaign lists that keep responses reasonably sized.
Sample Request:
curl 'https://public-api.adikteev.com/profile' \
-H 'authorization: Bearer 123456789'
4. How the endpoints fit together
A typical integration walks down this chain — each call returns the IDs you need for the next:
- /profile → your company_id.
- /apps → your apps and their app_ids.
- /client_campaigns → campaigns for an app and their campaign_ids.
- /report/v2/company/… → cost and performance metrics for those campaigns.
5. Account & catalog endpoints
GET /profile
Returns your account details, including the company_id used by /apps.
| Field | Type | Description |
|---|---|---|
| id | integer | Your user ID |
| string | Your account email | |
| role | string | Account role |
| company_id | integer | Your company ID |
Sample Request:
GET /profile
Authorization: Bearer {your_access_token}Sample Response:
{
"id": 123,
"email": "you@example.com",
"role": "client",
"company_id": 789
}
GET /apps
Lists the applications on your account.
Required parameter:
| Field | Type | Description |
|---|---|---|
| id | integer | ID of a client application returned by the app route (later referred as app_id in client campaigns and report routes) |
| name | string | Application name |
| bundle_identifier | string | iOS / Android package identifier |
| app_store_id | string | Apple App Store ID (null for Android apps) |
| platform | string | ios or android |
| company_id | integer | Your company ID (from /profile) |
Sample Request:
GET /apps?company_id=789
Authorization: Bearer {your_access_token}Sample Response:
[
{
"id": 1928,
"name": "My Awesome App - iOS",
"bundle_identifier": "com.myawesomeapp.iphone",
"platform": "ios",
"company_id": 789,
"app_store_id": "123456789"
},
{
"id": 9182,
"name": "My Awesome App - Android",
"bundle_identifier": "com.myawesomeapp.android",
"platform": "android",
"company_id": 789,
"app_store_id": null
}
]
GET /client_campaigns
Lists the campaigns running for one of your apps.
Request parameters:
| Parameter | Required | Description |
|---|---|---|
| app_id | Yes | App ID from /apps. |
| channels | No |
Comma-separated list of channels to include. Possible values: mobile, ctv. - Defaults to both mobile and ctv. - CTV campaigns are only returned when ctv is requested. Example: channels=mobile,ctv |
Sample Request: — include both mobile and CTV campaigns
GET /client_campaigns?app_id=1928&channels=mobile,ctv
Authorization: Bearer {your_access_token}Response fields:
| Field | Type | Description |
|---|---|---|
| id | integer | Campaign ID (used as campaign_ids in reports) |
| name | string | Campaign name |
| app_id | integer | App the campaign belongs to |
| country_id | integer | Set only when the campaign targets a single country (reference table); otherwise null |
| platform | string | ios or android |
| countries | array | Country IDs for multi-country campaigns |
| channel | string | Channel the campaign runs on: mobile or ctv |
Sample Response:
{
"total": 3,
"items": [
{
"id": 18565,
"name": "Campaign 1",
"app_id": 1928,
"country_id": 236,
"platform": "android",
"countries": [],
"channel": "mobile"
},
{
"id": 18232,
"name": "Campaign 2",
"app_id": 1928,
"country_id": null,
"platform": "android",
"countries": [40, 236],
"channel": "mobile"
},
{
"id": 19044,
"name": "CTV Campaign - Q1",
"app_id": 1928,
"country_id": 236,
"platform": "android",
"countries": [],
"channel": "ctv"
}
]
}
6. Reporting endpoints
All reporting endpoints share the same parameters and the same response envelope. They differ only in the breakdown dimension they add. Choose the endpoint that matches the granularity you need:
| Endpoint | Breakdown |
|---|---|
| /report/v2/company/daily/client | by date and campaign |
| /report/v2/company/country/daily/client | by date, campaign and country |
| /report/v2/company/creative/daily/client | by date, campaign and creative |
| /report/v2/company/creative-country/daily/client | by date, campaign, creative and country |
Parameters
| Parameter | Required | Type | Description |
|---|---|---|---|
| campaign_ids | Yes | integer | Comma-separated campaign IDs from /client_campaigns, e.g. campaign_ids=12345,67890 |
| start_date | No | date | UTC date YYYY-MM-DD. Defaults to 7 days ago. |
| end_date | No | date | UTC date YYYY-MM-DD. Defaults to yesterday. |
| currency | No | string |
3-letter currency code. Defaults to USD. Many currencies are supported (e.g. EUR, GBP, JPY, KRW); costs are converted using Adikteev's exchange rates. Example: ¤cy=EUR |
| app_id | No | integer | ID of a client application returned by the app route |
NB1. Final billable costs for a given UTC day are available on the next day around 3:00 AM UTC.
NB2. If the app_id query parameter is provided, the response will return only the data associated with that app_id. If it is omitted, the response will include all app_ids promoted by the campaign. Note that multiple app_ids are returned only when the campaign runs in a cross-platform environment.
Mobile-only vs cross-platform responses
Every report row includes an app_id field. The difference between campaign types is how many app_ids appear:
- Mobile-only campaigns (single OS) — all rows carry the same single app_id (the application the campaign runs on).
- Cross-platform campaigns (the same campaign delivering installs and costs for both iOS and Android) — the campaign returns one row per app_id for each breakdown. Pass the app_id query parameter to restrict the response to a single application if needed.
Response envelope
Every reporting endpoint returns the same top-level structure. The shape of each object in data depends on the endpoint (see below).
{
"start_date": "2024-01-01",
"end_date": "2024-01-07",
"currency": "USD",
"data": [ ...report rows... ]
}
Common report row fields
| Field | Type | Description |
|---|---|---|
| date | string | UTC date, formatted YYYY-MM-DDT00:00:00.000Z |
| app_id | integer | Application the metrics belong to. Always present. Mobile-only campaigns return a single app_id across all rows; cross-platform campaigns return one row per app_id (see NB2). |
| campaign_id | integer | Campaign ID |
| campaign_name | string | Campaign name |
| impressions | integer | Impression count |
| clicks | integer | Click count |
| installs | integer | Install count |
| reopens | integer | Reopen count |
| client_cost | float | Billable amount, in the requested currency |
| custom_action | array |
In-app events attributed to Adikteev: - name (string) : event name - amount (integer) : count of events - total_value (float) : sum of event values if any (for purchases for instance) |
6.1 GET /report/v2/company/daily/client
Metrics by date and campaign.
Sample Request:
GET /report/v2/company/daily/client?campaign_ids=17215&start_date=2024-01-01&end_date=2024-01-02¤cy=USD
Authorization: Bearer {your_access_token}Sample Response — mobile-only campaign (single app_id):
{
"start_date": "2024-01-01",
"end_date": "2024-01-02",
"currency": "USD",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 171, "total_value": 1126.69 },
{ "name": "add_to_cart", "amount": 5128, "total_value": 0 }
]
},
{
"date": "2024-01-02T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"impressions": 45786,
"clicks": 3267,
"installs": 15,
"reopens": 1786,
"client_cost": 2154.80,
"custom_action": [
{ "name": "purchase", "amount": 211, "total_value": 2208.08 },
{ "name": "add_to_cart", "amount": 2801, "total_value": 0 }
]
}
]
}Sample Response — cross-platform campaign (one row per app_id):
{
"start_date": "2024-01-01",
"end_date": "2024-01-01",
"currency": "USD",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 171, "total_value": 1126.69 }
]
},
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 9182,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"impressions": 38104,
"clicks": 2718,
"installs": 13,
"reopens": 2451,
"client_cost": 1043.22,
"custom_action": [
{ "name": "purchase", "amount": 149, "total_value": 981.40 }
]
}
]
}
6.2 GET /report/v2/company/country/daily/client
Same as the daily report, with an added breakdown per country. Each row adds country (ISO 3166-1 alpha-2 code, or null if unknown) and country_id.
Sample Request:
GET /report/v2/company/country/daily/client?campaign_ids=17215&start_date=2024-01-01&end_date=2024-01-01¤cy=USD
Authorization: Bearer {your_access_token}Sample Response — mobile-only campaign (single app_id):
{
"start_date": "2024-01-01",
"end_date": "2024-01-01",
"currency": "USD",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"country": "US",
"country_id": 236,
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 140, "total_value": 1126.69 }
]
},
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"country": "FR",
"country_id": 76,
"impressions": 41738,
"clicks": 2972,
"installs": 11,
"reopens": 1589,
"client_cost": 1188.80,
"custom_action": [
{ "name": "purchase", "amount": 245, "total_value": 2365.52 }
]
}
]
}Sample Response — cross-platform campaign (one row per app_id and country):
{
"start_date": "2024-01-01",
"end_date": "2024-01-01",
"currency": "USD",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"country": "US",
"country_id": 236,
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 140, "total_value": 1126.69 }
]
},
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 9182,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"country": "US",
"country_id": 236,
"impressions": 35921,
"clicks": 2544,
"installs": 12,
"reopens": 2213,
"client_cost": 998.14,
"custom_action": [
{ "name": "purchase", "amount": 121, "total_value": 964.10 }
]
}
]
}
6.3 GET /report/v2/company/creative/daily/client
Same as the daily report, with an added breakdown per creative. Each row adds creative_id, creative_name, creative_url, creative_group_id and creative_group_name.
Sample Request:
GET /report/v2/company/creative/daily/client?campaign_ids=17215&start_date=2024-01-01&end_date=2024-01-01¤cy=EUR
Authorization: Bearer {your_access_token}Sample Response — mobile-only campaign (single app_id):
{
"start_date": "2024-01-01",
"end_date": "2024-01-01",
"currency": "EUR",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 147852369,
"creative_name": "PrivateSale_Playable_320x480",
"creative_url": "https://cdn-creatives.adikteev.com/147852369/creative.png",
"creative_group_id": 152382,
"creative_group_name": "PrivateSale_Playable",
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 140, "total_value": 1126.69 }
]
},
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 987654321,
"creative_name": "PrivateSale_Video_Infeed",
"creative_url": "https://cdn-creatives.adikteev.com/987654321/video_asset.mp4",
"creative_group_id": 152383,
"creative_group_name": "PrivateSale_Video",
"impressions": 41738,
"clicks": 2972,
"installs": 11,
"reopens": 1589,
"client_cost": 1188.80,
"custom_action": [
{ "name": "purchase", "amount": 245, "total_value": 2365.52 }
]
}
]
}Sample Response — cross-platform campaign (one row per app_id and creative):
{
"start_date": "2024-01-01",
"end_date": "2024-01-01",
"currency": "EUR",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 147852369,
"creative_name": "PrivateSale_Playable_320x480",
"creative_url": "https://cdn-creatives.adikteev.com/147852369/creative.png",
"creative_group_id": 152382,
"creative_group_name": "PrivateSale_Playable",
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 140, "total_value": 1126.69 }
]
},
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 9182,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 147852369,
"creative_name": "PrivateSale_Playable_320x480",
"creative_url": "https://cdn-creatives.adikteev.com/147852369/creative.png",
"creative_group_id": 152382,
"creative_group_name": "PrivateSale_Playable",
"impressions": 36502,
"clicks": 2610,
"installs": 12,
"reopens": 2402,
"client_cost": 1004.37,
"custom_action": [
{ "name": "purchase", "amount": 118, "total_value": 948.02 }
]
}
]
}
6.4 GET /report/v2/company/creative-country/daily/client
Same as the daily report, broken down by both creative and country. Each row includes all creative fields plus country and country_id.
Sample Request:
GET /report/v2/company/creative-country/daily/client?campaign_ids=17215&start_date=2024-01-01&end_date=2024-01-01¤cy=USD
Authorization: Bearer {your_access_token}Sample Response — mobile-only campaign (single app_id):
{
"start_date": "2024-01-01",
"end_date": "2024-01-01",
"currency": "USD",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 147852369,
"creative_name": "PrivateSale_Playable_320x480",
"creative_url": "https://cdn-creatives.adikteev.com/147852369/creative.png",
"creative_group_id": 152382,
"creative_group_name": "PrivateSale_Playable",
"country": "US",
"country_id": 236,
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 140, "total_value": 1126.69 }
]
},
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 987654321,
"creative_name": "PrivateSale_Video_Infeed",
"creative_url": "https://cdn-creatives.adikteev.com/987654321/video_asset.mp4",
"creative_group_id": 152383,
"creative_group_name": "PrivateSale_Video",
"country": "FR",
"country_id": 76,
"impressions": 41738,
"clicks": 2972,
"installs": 11,
"reopens": 1589,
"client_cost": 1188.80,
"custom_action": [
{ "name": "purchase", "amount": 245, "total_value": 2365.52 }
]
}
]
}Sample Response — cross-platform campaign (one row per app_id, creative and country):
{
"start_date": "2024-01-01",
"end_date": "2024-01-01",
"currency": "USD",
"data": [
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 1928,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 147852369,
"creative_name": "PrivateSale_Playable_320x480",
"creative_url": "https://cdn-creatives.adikteev.com/147852369/creative.png",
"creative_group_id": 152382,
"creative_group_name": "PrivateSale_Playable",
"country": "US",
"country_id": 236,
"impressions": 42198,
"clicks": 3064,
"installs": 16,
"reopens": 2900,
"client_cost": 1225.69,
"custom_action": [
{ "name": "purchase", "amount": 140, "total_value": 1126.69 }
]
},
{
"date": "2024-01-01T00:00:00.000Z",
"app_id": 9182,
"campaign_id": 17215,
"campaign_name": "RTG_New_Purchase_15d",
"creative_id": 147852369,
"creative_name": "PrivateSale_Playable_320x480",
"creative_url": "https://cdn-creatives.adikteev.com/147852369/creative.png",
"creative_group_id": 152382,
"creative_group_name": "PrivateSale_Playable",
"country": "US",
"country_id": 236,
"impressions": 34980,
"clicks": 2489,
"installs": 12,
"reopens": 2190,
"client_cost": 972.41,
"custom_action": [
{ "name": "purchase", "amount": 116, "total_value": 933.75 }
]
}
]
}
7. Errors
| Status | Meaning |
|---|---|
| 400 | Bad request — e.g. missing campaign_ids, or an unsupported currency. |
| 401 | Missing, invalid, or expired access token. |
| 403 | You requested data for an app or campaign that isn't on your account. |
| 5xx | Temporary server error — retry after a short delay. |
Need help? Contact your Adikteev Account Manager.