Skip to main content

API Advertisers

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

Profile

Account data

To get the data of the current account, use the GET /me method. It returns the account ID, balance, currency, registration date and time zone. Email and name are not returned.

Example request:

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

Balance

For a quick balance check (for example, for low-balance alerts), use the GET /finances/balance method. It returns only the balance and the account currency.

Example request:

GET https://partners.kadam.net/api/v1/finances/balance
Authorization: Bearer YOUR_TOKEN

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

Restoring, moving and deleting campaigns

In addition to activation, pausing and archiving, the following bulk methods are available:

  • POST /campaigns/restore — restore campaigns from the archive

  • POST /campaigns/move — move campaigns to a folder; in addition to campaignIds, pass folderId — the folder ID, int; required parameter

  • DELETE /campaigns — delete campaigns together with their materials. Only archived campaigns can be deleted: if the list contains a campaign that is not in the archive, the whole request is rejected with error 422

campaignIds — array of campaign IDs, array of int; required parameter.

Example request:

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

Copying a campaign

To create a copy of a campaign, use the POST /campaigns/{id}/copy method. Targeting, limits and bids are copied; statistics and spend are not. Copied materials always go through moderation again.

  • name — name of the copy, string; required parameter

  • folderId — folder for the copy, int; required parameter

  • isPauseAfterModer — keep the copy paused after moderation, bool; required parameter

  • mode — which materials to copy: all — all, active — only active, string; optional parameter

  • copyAutorules — copy autorules, bool; optional parameter

  • paymentModel — payment model of the copy: 0 — CPC, 2 — CPM, 4 — CPA Target, int; optional parameter

  • targetCampaignType — format of the copy when copying between Push and In-Page Push: 30 — Push, 100 — In-Page Push, int; optional parameter

  • copyBids / bids — copy the bids of the original campaign or set new ones; optional parameters

Example request:

POST https://partners.kadam.net/api/v1/campaigns/789484/copy
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"name": "Campaign copy", "folderId": 42, "isPauseAfterModer": true, "mode": "active"}

Validating a campaign before creation

The POST /campaigns/validate method runs the same checks as POST /campaigns/create but does not create anything. The request body is the same as for creation. Response 200 means the campaign would be accepted as is; error 422 lists the fields with errors.

Traffic forecast

The POST /campaigns/forecast method returns the dependence of the available traffic volume on the bid for the specified targeting, based on yesterday's auction data. Use it before creating a campaign or raising a bid.

  • cpType — payment model: 0 — CPC, 2 — CPM, int; required parameter

  • type — campaign type, int; optional parameter

  • campaignId — ID of an existing campaign whose settings should be used, int; optional parameter

  • regions, platformVersions, browsers, browserLanguages, categories, subAges, ssps — targeting parameters; optional parameters

If there was too little traffic for the specified targeting yesterday, the response contains an empty curve and hasEnoughData: false. This is not an error and does not mean that there will be no traffic.

Example request:

POST https://partners.kadam.net/api/v1/campaigns/forecast
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"cpType": 0, "campaignId": 789484}

RSS feed

The PUT /campaigns/{id}/rss method sets the RSS feed from which a Native campaign imports creatives (for other formats the request returns error 422).

  • link — feed URL, string. Pass an empty string to stop the import; already imported creatives remain

  • notRemove — keep creatives whose items have disappeared from the feed (false — such creatives are archived at the next import), bool; required parameter

  • isPauseAfterModer — keep imported creatives paused after moderation, bool; required parameter

The import runs on a schedule, so a successful response means that the feed has been saved, not that the creatives have already been added.

Easy Start

The PUT /campaigns/{id}/easy-start method turns Easy Start on or off for a campaign — showing ads on a curated set of sites instead of the whole inventory. Parameter: enabled — bool; required parameter.

Example request:

PUT https://partners.kadam.net/api/v1/campaigns/789484/easy-start
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"enabled": true}

Reference dictionaries

The GET /dictionaries/{type} method returns one dictionary needed to create or update a campaign. Available types: campaign-types, browsers, platforms, devices, connection-types, categories, isps, conversion-templates, countries, regions, cities.

Additional query parameters: campaignType — campaign type; countryId — country (for regions); regionId — region (for cities); search — search string; page, perPage — pagination.

Example request:

GET https://partners.kadam.net/api/v1/dictionaries/countries
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
}

Getting and editing a folder

The GET /campaigns/folders/{id} method returns the folder settings. The PATCH /campaigns/folders/{id} method changes the folder name and limits: name, limitsEnabled, groupDailyLimit, groupTotalLimit, groupSpendingEvenly.

Example request:

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

Bulk actions on folders

  • POST /campaigns/folders/activate — activate campaigns in folders

  • POST /campaigns/folders/pause — pause campaigns in folders

  • POST /campaigns/folders/archive — archive folders together with their campaigns

  • POST /campaigns/folders/restore — restore archived folders together with their campaigns (only IDs of archived folders are accepted)

folderIds — array of folder IDs, array of int; required parameter.

Example request:

POST https://partners.kadam.net/api/v1/campaigns/folders/pause
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"folderIds": [42, 43]}

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

Restoring and deleting materials

  • POST /materials/restore — restore materials from the archive. A restored material is sent to moderation again. Materials of an archived campaign cannot be restored — the request is rejected with error 422

  • DELETE /materials — delete materials. Only archived materials can be deleted, otherwise the whole request is rejected with error 422

adsIds — array of material IDs, array of int; required parameter.

Copying materials

The POST /materials/copy method copies every listed material into every listed campaign (2 materials and 2 campaigns give 4 copies). Target campaigns must have the same format as the source one. Copies are created paused and go through moderation.

  • adsIds — array of material IDs; required parameter

  • targets — target campaigns: campaignId and url — the landing URL of the copies (must match the campaign domain); required parameter

  • isPauseAfterModer — keep the copies paused after moderation, bool; optional parameter (false by default)

Example request:

POST https://partners.kadam.net/api/v1/materials/copy
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"adsIds": [100, 200], "targets": [{"campaignId": 789485, "url": "https://example.com/landing"}]}

Moving materials

The POST /materials/move method moves materials to another campaign with the same format and payment model. Moved materials lose their own country bids, are paused and go through moderation again.

  • adsIds — array of material IDs; required parameter

  • campaignId — target campaign ID, int; required parameter

  • url — landing URL of the moved materials (must match the target campaign domain), string; required parameter

Material bids by country

The PUT /materials/bids method sets materials' own bids by country. The list fully replaces the materials' bids: countries not in the list use the campaign bid. All materials must belong to one campaign, and the countries must be targeted by this campaign. Not available for CPA Target campaigns.

  • adsIds — array of material IDs; required parameter

  • bids — array of objects: bid — bid, countries — array of country IDs; required parameter

Bulk upload of materials

Bulk upload is performed in two steps, each of which is processed asynchronously:

  • POST /materials/bulk/upload (multipart/form-data) — upload images or ZIP archives of images and check them against the format requirements of the target campaigns. Parameters: campaignIds[] — campaign IDs, files[] or zip[] — files

  • GET /materials/bulk/{jobId} — check the job status. When the status is done, take the uploaded images (stagedId) from the response

  • POST /materials/bulk — create materials from the uploaded images. Parameters: campaignIds — campaign IDs; items — rows of the batch (stagedId, title, text, name, path, etc.); common — settings shared by all rows. Each row turns into one material in every listed campaign

  • GET /materials/bulk/{jobId} — check the result. The done status means that processing has finished; check the counters, as individual rows may fail

Test conversion

The GET /materials/{id}/test-conversion method returns a link for a test click on the material: the click writes click_id, substitutes the macros and redirects to the landing page in the same way as a real ad impression. This lets you check the postback setup end to end. For formats displayed in a frame, previewUrl is also returned.

Example request:

GET https://partners.kadam.net/api/v1/materials/123456/test-conversion
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

Pixel and S2S audience parameters

The GET /audiences/{id}/params and PUT /audiences/{id}/params methods get and save fixed parameter values that are substituted into the pixel or S2S code: event, paramStr, paramStr2, paramInt, paramInt2. They work only for pixel and S2S audiences and only for the audience owner. PUT replaces all values: a field that is omitted or passed as null is reset.

Validating an audience before creation

The POST /audiences/validate method checks the request body in the same way as POST /audiences/create but does not create anything. Ownership of the campaigns and audiences specified in the request is not checked, so a request that passes validation can still be rejected on creation.

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

Blocking and unblocking sites

The POST /stats/sites/block method stops buying the listed sites in the listed campaigns (adds them to the campaign blacklist). POST /stats/sites/unblock removes them from the blacklist. Blocking is per campaign: a site blocked in one campaign keeps running in the others. Repeated calls are safe.

  • campaignIds — array of campaign IDs; required parameter

  • zones — array of site IDs (macrosId from POST /stats/sites), up to 500 per request; the number of campaign × site pairs must not exceed 2000; required parameter

Example request:

POST https://partners.kadam.net/api/v1/stats/sites/block
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"campaignIds": [789484], "zones": [123, 456]}

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
    }
}

Daily account limit

The GET /finances/day-money-limit method returns the daily spending limit of the account, its minimum allowed value and currency. The PUT /finances/day-money-limit method sets the limit: limit — limit in the account currency, number; required parameter. 0 removes the limit. Raising or removing the limit reactivates campaigns that it has stopped.

Example request:

PUT https://partners.kadam.net/api/v1/finances/day-money-limit
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"limit": 100}

Payment systems

The GET /finances/payment-systems method returns the payment systems available for depositing to this account, with the commission, minimum and maximum amount for each currency. Until the first deposit, the minimum first-deposit amount is returned. The list depends on the account, so different advertisers may receive different responses.

Example request:

GET https://partners.kadam.net/api/v1/finances/payment-systems
Authorization: Bearer YOUR_TOKEN

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?