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": 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
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
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
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_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 |
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"] }
