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": 0Get 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
CampaignBannerRequestPopunder — schema
CampaignPopunderRequestIn-Page Push — schema
CampaignInPagePushRequestPush — schema
CampaignPushRequestNative / 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
Full schemas per format — see Swagger: https://partners.kadam.net/api-doc/#/Materials/post_campaigns__id__materials
Banner — schema
BannerCreateRequestPush — schema
PushCreateRequestNative (Teaser) — schema
NativeCreateRequestIn-Page Push — schema
InPagePushCreateRequestHTML 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 —
BannerUpdateRequestPush —
PushUpdateRequestNative —
NativeUpdateRequestIn-Page Push —
InPagePushUpdateRequestHTML 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_monthTraffic:
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_connectionTypeAdvertiser:
advertiser_paymentModel,advertiser_campaign,advertiser_campaignName,advertiser_ad,advertiser_campaignStatus,advertiser_adStatus,advertiser_campaignGroup,advertiser_dailyBudget,advertiser_totalBudget,advertiser_groupDailyBudget,advertiser_groupTotalBudgetCreatives:
adv_image,adv_title,adv_text,adv_url
Metrics (metrics):
Traffic:
traffic_visits,traffic_views,traffic_clicks,traffic_trafficbackConversions:
conversion_conversions,conversion_rejects,conversion_holds,conversion_cr,conversion_pvConversions,conversion_pvConversionsCPA,conversion_pcConversions,conversion_pcConversionsCPAAdvertiser:
advertiser_cpm,advertiser_cpc,advertiser_ctr,advertiser_cpa,advertiser_income,advertiser_ROI,advertiser_cpl,advertiser_epl,advertiser_epcFinances:
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"] }
