Skip to main content

API setting

Written by Olga

API authorization with Bearer Token

To authorize in the system via API using a Bearer Token, add an "Authorization" header with the value "Bearer X" to your request, where "X" is your personal token. The token is available in the advertiser's dashboard under "Profile and settings". The token has no expiration. The token can be reset via POST /api/users/token-reset.

Base URL:

https://partners.kadam.net/api/v1

Swagger documentation: https://partners.kadam.net/api-doc/
​ Common response format:

{ } "success": true, "code": 0, "msg": {}, "data": { ... }

On error success = false, field msg contains the error description.
​ Pagination and sorting (common parameters for list endpoints):

  • page — page number, int (from 1)

  • perPage — items per page, int (default 20 or 50)

  • sort — object of the form {"field": "asc"|"desc"}, allowed fields are listed per method

Campaigns

List of campaigns

To get the list of campaigns the method POST /campaigns is used.

Parameter

Value

Additional attributes

page

Page number

int; optional

perPage

Items per page

int; optional

sort

Sorting. Allowed fields: campaign, dateCreation, CPC, conversions, views, clicks, moneyOut, CPA, moneyIn, trafficback, dayMoneyLimit, dayClickLimit, ROI, CPM, CTR, CR, CPL, EPC, profit, rejects, holds

object; optional

filters.dateFrom

Start date of statistics, format YYYY-MM-DD

string; required

filters.dateTo

End date of statistics, format YYYY-MM-DD

string; required

filters.timezone

Timezone offset in hours from UTC

int; optional

filters.searchQuery

Search by campaign name

string; optional

filters.folderId

Campaign folder ID

int; optional

filters.campaignId

Campaign ID

int; optional

filters.types

Array of campaign types: 10 — Native, 20 — Banner, 30 — Push, 40 — Popunder, 100 — In-Page Push

array of int; optional

filters.statuses

Array of statuses: 0 — Paused, 10 — Active, 20 — Awaiting payment, 30 — Clicks limit, 40 — Day money limit, 45 — Group limit day money, 50 — Balance exceeded, 55 — Group limit total money, 60 — Conversions limit, 70 — Day money limit (user), 80 — Bid below minimum, 120 — Insufficient funds, 140 — Blocked, 200 — Moderation

array of int; optional

filters.paymentModels

Array of payment models: 0 — CPC, 2 — CPM, 4 — CPA Target

array of int; optional

filters.countries

Array of country IDs

array of int; optional

filters.archive

Archive filter: 0 — active, 1 — archive

int; optional

Example request:
​

POST https://partners.kadam.net/api/v1/campaigns
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "page": 1,
    "perPage": 50,
    "sort": {"dateCreation": "desc"},
    "filters": {
        "dateFrom": "2026-03-01",
        "dateTo": "2026-03-31",
        "timezone": 0,
        "types": [10, 30],
        "statuses": [10],
        "archive": 0
    }
}

Response:
​

{ "success": true, "data": { "total": 124, "items": [ { } ] } }

"id": 789484,
               "name": "Campaign name",
               "type": 10,
               "status": 10,
               "paymentModel": 0,
               "dateCreation": "2026-03-15 12:00:00",
               "views": 12345,
               "clicks": 678,
               "conversions": 42,
               "moneyOut": 120.50,
               "moneyIn": 0,
               "CPC": 0.18,
               "CPM": 9.76,
               "CTR": 5.49,
               "CPA": 2.87,
               "ROI": 0

Get campaign by ID

To fetch full campaign data, use the method GET /campaigns/{id}
Path parameter:

  • id — campaign ID, int; required

Example request:
​

GET https://partners.kadam.net/api/v1/campaigns/789484
Authorization: Bearer YOUR_TOKEN

The response returns all campaign fields in the same format accepted by PUT /campaigns/{id}/update. Convenient for round-trip editing: GET → modify a field → PUT the full payload back.

Create campaign

To create a campaign, use the method POST /campaigns/create
Content-Type: application/json The request body depends on the campaign type (field type):

  • 10 — Native (teaser)

  • 20 — Banner

  • 30 — Push

  • 40 — Popunder

  • 100 — In-Page Push

Required common fields:

  • name — campaign name, string

  • type — campaign type, int

  • paymentModel — payment model: 0=CPC, 2=CPM, 4=CPA Target

  • bids — bids object (structure depends on type and model)

  • countries — array of country IDs

  • sites — sites settings (whitelist/blacklist)

  • limits — object with limits (dayMoneyLimit, dayClickLimit, etc.)

  • targeting — targeting object (browsers, OS, devices, cities)

For dictionaries (countries, categories, push types, etc.) required for creation, use GET /campaigns/options?type={type}. Full schemas per format — see Swagger: https://partners.kadam.net/api-doc/#/Campaigns/post_campaigns_create

  • Banner — schema CampaignBannerRequest

  • Popunder — schema CampaignPopunderRequest

  • In-Page Push — schema CampaignInPagePushRequest

  • Push — schema CampaignPushRequest

  • Native / Teaser — schema CampaignTeaserRequest

Update campaign

To update campaign parameters, use the method PUT /campaigns/{id}/update
​ Important: partial update is NOT supported. All fields (as in create) must be sent in the request, otherwise a validation error is returned. Typical flow: GET /campaigns/{id} → modify the field → PUT /campaigns/{id}/update with the full payload. Full schemas per format — see Swagger: https://partners.kadam.net/api-doc/#/Campaigns/put_campaigns__id__update

Update campaign bid

To update the bid of a single campaign, use the method PUT /campaigns/{id}/bid
Content-Type: application/json

Parameter

Value

Additional attributes

bids

Bids object. Field set depends on campaign's paymentModel and type (CPC/CPM/CPA, geo-bids, etc.). See Swagger schema CampaignBids for details.

object; required

Example request:
​

PUT https://partners.kadam.net/api/v1/campaigns/789484/bid
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "bids": {
        "default": 0.05
    }
}

Bulk update bids for multiple campaigns

To update bids on multiple campaigns at once, use the method PUT /campaigns/bids

Parameter

Value

Additional attributes

campaignIds

Array of campaign IDs to update bids for

array of int; required

bids

Bids object (schema CampaignBids — see Swagger)

object; required

Example request:
​

PUT https://partners.kadam.net/api/v1/campaigns/bids
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "campaignIds": [789484, 789485, 789486],
    "bids": {"default": 0.05}
}

Bulk actions on campaigns

For bulk status changes, the following methods are used:

  • POST /campaigns/activate — activate campaigns

  • POST /campaigns/pause — pause campaigns

  • POST /campaigns/archive — move to archive

Parameter

Value

Additional attributes

campaignIds

Array of campaign IDs

array of int; required

Example request:
​

POST https://partners.kadam.net/api/v1/campaigns/activate
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"campaignIds": [789484, 789485]}

Dictionaries for campaign creation

To fetch dictionaries (countries, categories, push types, payment models, etc.), use the method GET /campaigns/options
Query parameters:

  • type — campaign type, int (10, 20, 30, 40, 100); required

  • pushType — push sub-type (for type=30), int; optional

Example request:
​

GET https://partners.kadam.net/api/v1/campaigns/options?type=30
Authorization: Bearer YOUR_TOKEN

Campaign folders

List of folders

To fetch the list of campaign folders, use the method POST /campaigns/folders The request body can be empty ({}) or include standard pagination/sorting fields. Example request:
​

POST https://partners.kadam.net/api/v1/campaigns/folders
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{}

Create folder

To create a folder, use the method POST /campaigns/folders/create

Parameter

Value

Additional attributes

name

Folder name, up to 50 characters

string; required

Example request:
​

POST https://partners.kadam.net/api/v1/campaigns/folders/create
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"name": "New folder"}

Folder settings

To manage a folder's limits and budget distribution, use the method PUT /campaigns/folders/{id}/settings
Path parameter: id — folder ID, int.

Parameter

Value

Additional attributes

limitsEnabled

Whether limits are enabled for the folder

bool; required

groupDailyLimit

Daily limit, minimum 5

float; optional

groupTotalLimit

Total limit for the group

float; optional

groupSpendingEvenly

Even budget distribution

bool; optional

Example request:
​

PUT https://partners.kadam.net/api/v1/campaigns/folders/42/settings
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "limitsEnabled": true,
    "groupDailyLimit": 5.05,
    "groupTotalLimit": 10.10,
    "groupSpendingEvenly": false
}

Materials (ads / creatives)

List of materials

To fetch the list of materials, use the method POST /materials

Parameter

Value

Additional attributes

page

Page number

int; optional

perPage

Items per page

int; optional

sort

Sorting. Allowed fields: stakes, views, clicks, CPC, moneyOut, conversions, CPA, moneyIn, profit, ROI, holds, rejects, CPL

object; optional

filters.searchQuery

Search by material

string; optional

filters.dateFrom / filters.dateTo

Statistics period, format YYYY-MM-DD

string; required

filters.timezone

Timezone, int

optional

filters.campaignId

Campaign ID to filter materials

int; optional

filters.types

Array of material types: 0 — Teaser (Native), 10 — Banner, 20 — Push, 30 — Clickunder (Popunder), 60 — Video, 90 — In-Page Push

array of int; optional

filters.statuses

Array of statuses: 0 — On Moderation, 5 — On Moderation 2, 10 — Active, 20 — Blocked, 30 — Not Paid, 40 — Low CTR, 50 — Blocked by day limit, 60 — Banner Block, 70 — Blocked by offer owner, 80 — Paused, 90 — Video is processing, 120 — Awaiting Payment

array of int; optional

filters.archive

0 — active, 1 — archive

int; optional

Example request:
​

POST https://partners.kadam.net/api/v1/materials
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "page": 1,
    "perPage": 50,
    "sort": {"views": "desc"},
    "filters": {
        "dateFrom": "2026-03-01",
        "dateTo": "2026-03-31",
        "timezone": 0,
        "campaignId": 789484,
        "statuses": [10]
    }
}

Get material by ID

To fetch material data, use the method GET /materials/{id}
Path parameter: id — material ID, int. Example request:
​

GET https://partners.kadam.net/api/v1/materials/123456
Authorization: Bearer YOUR_TOKEN

Create material

To create a material, use the method POST /campaigns/{id}/materials
Path parameter: id — campaign ID.
Content-Type: multipart/form-data (image files are passed). The body depends on material type. Common fields:

  • image — main image, file

  • rectangleImage — icon / rectangular version, file (for some formats)

  • title — headline, string

  • text — description, string

  • url — landing URL, string

  • Banner — schema BannerCreateRequest

  • Push — schema PushCreateRequest

  • Native (Teaser) — schema NativeCreateRequest

  • In-Page Push — schema InPagePushCreateRequest

  • HTML Banner — schema HtmlBannerCreateRequest

Update material

To update a material, use the method PUT /campaigns/{id}/materials
Content-Type: application/json. Full schemas per format — see Swagger: https://partners.kadam.net/api-doc/#/Materials/put_campaigns__id__materials

  • Banner — BannerUpdateRequest

  • Push — PushUpdateRequest

  • Native — NativeUpdateRequest

  • In-Page Push — InPagePushUpdateRequest

  • HTML Banner — HtmlBannerUpdateRequest

Bulk actions on materials

For bulk status changes, the following methods are used:

  • POST /materials/activate — activate

  • POST /materials/pause — pause

  • POST /materials/archive — move to archive

Parameter

Value

Additional attributes

adsIds

Array of material IDs

array of int; required

Example request:
​

POST https://partners.kadam.net/api/v1/materials/activate
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"adsIds": [100, 200, 300]}

Banner size dictionary

To fetch the banner size dictionary for creation, use the method GET /materials/options. Example request:
​

GET https://partners.kadam.net/api/v1/materials/options
Authorization: Bearer YOUR_TOKEN

Audiences

List of audiences

To fetch the list of audiences, use the method POST /audiences

Parameter

Value

Additional attributes

page

Page number

int; optional

perPage

Items per page (default 20)

int; optional

sort

Sorting. Allowed fields: audienceId, audienceName, dateCreated, expireDays, usersCount

object; optional

filters.searchQuery

Search by audience name

string; optional

tableFilters

Array of advanced filters: [{"column": "audienceId", "include": [...], "exclude": [...], "childField": "listID"}]

array of objects; optional

Example request:
​

POST https://partners.kadam.net/api/v1/audiences
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "page": 1,
    "perPage": 20,
    "sort": {"usersCount": "desc"},
    "filters": {"searchQuery": "my audience"}
}

Dictionary for audience creation

To fetch the list of campaigns and audiences available for S2S linking, use the method GET /audiences/create-options Query parameters:

  • searchQuery — search string, optional

Get audience by ID

To fetch audience data, use the method GET /audiences/{audiencesId}
Path parameter: audiencesId — audience ID, int.
Response shape depends on audience type (stat / pixel / S2S).

Create audience

To create an audience, use the method POST /audiences/create
Content-Type: application/json Audience kind is specified by the type field:

  • audience — standard stat-based audience (requires campaignsIds)

  • audience_code — pixel-based audience (returns tracking code)

  • audience_s2s — S2S-based audience (Postback integration)

Example (standard audience):
​

POST https://partners.kadam.net/api/v1/audiences/create
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "type": "audience",
    "name": "My audience",
    "expireDays": 1,
    "campaignsIds": [789484, 789485],
    "hasClicks": true,
    "hasConversions": false,
    "hasHolds": false,
    "hasRejects": false,
    "usersIds": null
}

At least one of hasClicks / hasConversions / hasHolds / hasRejects must be true.
​ usersIds — array of user IDs for sharing the audience. Example (pixel audience):
​

POST https://partners.kadam.net/api/v1/audiences/create
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "type": "audience_code",
    "name": "My code audience",
    "expireDays": 1,
    "extAudienceId": 123,
    "usersIds": null
}

Full schemas (AudienceStandardRequest, AudienceCodeRequest, AudienceS2SRequest) — in Swagger: https://partners.kadam.net/api-doc/#/Audiences/post_audiences_create

Update audience

To update an audience, use the method PUT /audiences/{id}
Path parameter: id — audience ID, int.
Body is similar to creation (without the type field; type can only be changed by recreating). Details in Swagger.

Delete audience

To delete an audience, use the method DELETE /audiences/{id}
Path parameter: id — audience ID, int. Example request:
​

DELETE https://partners.kadam.net/api/v1/audiences/123
Authorization: Bearer YOUR_TOKEN

Report builder

List of saved reports

To fetch the list of saved reports, use the method POST /custom-reports
The body can be empty ({}).

Get report data

To fetch report data, use the method POST /custom-reports/data — the main method for building statistics.

Parameter

Value

Additional attributes

groups

Array of groupings (see below)

array of string; required

metrics

Array of metrics (see below)

array of string; required

filters.dateFrom / filters.dateTo

Period, format YYYY-MM-DD. Can be replaced by filters.period: today, yesterday, 7days, 14days, month, prevMonth

string; required

filters.timezone

Timezone (offset from UTC)

int; optional

filters.filters

Array of filter objects: [{"id": "advertiser_campaign", "type": "list", "include": [id1, id2]}, ...]. Filter types: list, range, value, value_like, value_combined

array of objects; optional

sort

Sorting: {"time_day": "desc"}

object; optional

compare

Comparison period (if used)

array; optional

id / name

Save report to the list with the specified name

int / string; optional

Groupings (groups):

  • Time: time_hour, time_day, time_week, time_month

  • Traffic: traffic_format, traffic_pushType, traffic_region, traffic_browser, traffic_platform, traffic_platformVersion, traffic_device, traffic_deviceType, traffic_subsAge, traffic_pageCategory, traffic_macros, traffic_isp, traffic_city, traffic_subdivision, traffic_blockSize, traffic_clickability, traffic_browserLanguage, traffic_connectionType

  • Advertiser: advertiser_paymentModel, advertiser_campaign, advertiser_campaignName, advertiser_ad, advertiser_campaignStatus, advertiser_adStatus, advertiser_campaignGroup, advertiser_dailyBudget, advertiser_totalBudget, advertiser_groupDailyBudget, advertiser_groupTotalBudget

  • Creatives: adv_image, adv_title, adv_text, adv_url

Metrics (metrics):

  • Traffic: traffic_visits, traffic_views, traffic_clicks, traffic_trafficback

  • Conversions: conversion_conversions, conversion_rejects, conversion_holds, conversion_cr, conversion_pvConversions, conversion_pvConversionsCPA, conversion_pcConversions, conversion_pcConversionsCPA

  • Advertiser: advertiser_cpm, advertiser_cpc, advertiser_ctr, advertiser_cpa, advertiser_income, advertiser_ROI, advertiser_cpl, advertiser_epl, advertiser_epc

  • Finances: finance_moneyOut (spent)

Example request:
​

POST https://partners.kadam.net/api/v1/custom-reports/data
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "groups": ["time_day"],
    "metrics": ["finance_moneyOut", "conversion_conversions", "conversion_holds"],
    "filters": {
        "dateFrom": "2026-03-01",
        "dateTo": "2026-03-31",
        "timezone": 0,
        "filters": [
            {"id": "advertiser_campaign", "type": "list", "include": [789484]},
            {"id": "conversion_conversions", "type": "range", "range": {"from": "100", "to": null}}
        ]
    },
    "sort": {"time_day": "desc"},
    "compare": null
}

Note: the report returns aggregated data only. Maximum granularity is hourly (time_hour). Raw per-user views/clicks by remoteUserId are only available via POST /stats/conversions (for conversions).

Filter values dictionary

To fetch allowed values for a specific filter, use the method POST /custom-reports/filter-data

Parameter

Value

Additional attributes

id

Filter identifier (from OPTIONS /api/v1/custom-reports)

string; required

searchQuery

Search string

string; optional

Available groupings, metrics, filters

To fetch the full list of available groupings, metrics, and filters, use OPTIONS /custom-reports.

Statistics

Conversions statistics (raw events)

To fetch raw conversion data (one row per conversion), use the method POST /stats/conversions.
This is the only method that returns event-level data with remoteUserId. Note: the endpoint is /stats/conversions, NOT /stats/postback — do not confuse them.

Parameter

Value

Additional attributes

page

Page number

int; optional

perPage

Items per page (up to 1,000,000 for bulk export)

int; optional

sort

Sorting. Allowed fields: conversionType, campaign, campaignFolder, adId, conversionTime, auctionTime, conversionDelay, remoteUserId, audience, cpaCost, macrosId

object; optional

filters.dateFrom / dateTo

Period (up to 5 years), format YYYY-MM-DD

string; required

filters.timezone

Timezone

int; optional

filters.conversionTypes

Array of conversion types: 1 — Approve (postback OK), 2 — Postback error, 3 — Test, 4 — Reject, 5 — Hold, 6 — PV (post-view), 7 — PC (post-click)

array of int; optional

filters.campaignIds

Array of campaign IDs

array of int; optional

filters.adsIds

Array of material IDs

array of int; optional

filters.folderIds

Array of folder IDs

array of int; optional

filters.audIds

Array of audience IDs

array of int; optional

Example request:
​

POST https://partners.kadam.net/api/v1/stats/conversions
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "page": 1,
    "perPage": 100,
    "sort": {"conversionTime": "desc"},
    "filters": {
        "dateFrom": "2026-03-01",
        "dateTo": "2026-03-31",
        "timezone": 0,
        "conversionTypes": [1, 6, 7],
        "campaignIds": [789484]
    }
}

Response fields per conversion row:
​ conversionType, campaign (name + ID), campaignFolder, adId, conversionTime, auctionTime, conversionDelay, remoteUserId, audience, cpaCost, macrosId, clickId, url, status, callbackUri.

Site statistics

To fetch aggregated statistics per site (macrosID, PID), use the method POST /stats/sites.

Parameter

Value

Additional attributes

page

Page number

int; optional

perPage

Items per page (max 500 per request)

int; optional

filters.sort

Sorting. Allowed fields: macrosId, isInBlackList, views, clicks, holds, conversions, rejects, CTR, CPM, CPC, spending, income, earnings, ROI, CPA, bid

object; optional

filters.searchQuery

Search by site ID

string; optional

filters.dateFrom / dateTo

Period, format YYYY-MM-DD

string; required

filters.timezone

Timezone

int; optional

filters.campaignIds

Array of campaign IDs

array of int; optional

filters.adIds

Array of material IDs

array of int; optional

filters.view

View: null — all, "blacklist" — blacklisted only, "bids" — with individual bids only

string; optional

Example request:
​

POST https://partners.kadam.net/api/v1/stats/sites
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "page": 1,
    "perPage": 50,
    "filters": {
        "sort": {"views": "desc"},
        "dateFrom": "2026-03-01",
        "dateTo": "2026-03-31",
        "timezone": 0,
        "campaignIds": [789484],
        "view": null
    }
}

Bulk update bids by sites

To update bids on multiple sites at once, use the method PUT /stats/sites/bids

Parameter

Value

Additional attributes

campaignIds

Array of campaign IDs

array of int; required

bids

Array of objects with per-site bids: [{"placementId": 123, "bid": 0.05}, ...] (schema details — in Swagger)

array; required

Finances

List of financial operations

To fetch the list of financial operations, use the method POST /finances/operations

Parameter

Value

Additional attributes

page

Page number

int; optional

perPage

Items per page

int; optional

sort

Sorting. Allowed fields: date, money

object; optional

filters.dateFrom / dateTo

Period, format YYYY-MM-DD

string; required

filters.type

Operation type: 1 — Impression operations (charges for impressions), 2 — Deposit, 3 — Admin deposit, 4 — Withdrawal, 5 — Admin withdrawal

int; optional

Example request:
​

POST https://partners.kadam.net/api/v1/finances/operations
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
    "page": 1,
    "perPage": 20,
    "sort": {"date": "desc"},
    "filters": {
        "dateFrom": "2026-03-01",
        "dateTo": "2026-03-31",
        "type": 2
    }
}

Common rules

Sorting

Sorting is specified as an object {"field": "asc"|"desc"}. Allowed fields are listed per method. Example:
​

"sort": {"views": "desc"}

By multiple fields:

"sort": {"views": "desc", "clicks": "asc"}

Filtering (report builder)

In POST /custom-reports/data filters are described as an array of objects in filters.filters:

  • list — list filter: {"id": "advertiser_campaign", "type": "list", "include": [id1, id2], "exclude": []}

  • range — value range: {"id": "conversion_conversions", "type": "range", "range": {"from": "100", "to": null}}

  • value — exact value

  • value_like — substring

  • value_combined — combined

Errors

On error the response contains "success": false and a description in msg:

{ } "success": false, "code": 400, "msg": { "field": ["Error description"] }

Did this answer your question?