API authorization with Bearer Token
The Publisher API uses Bearer Token authorization. Add an "Authorization" header with the value "Bearer X" to your request, where "X" is your personal token. The token is issued by your manager; in the publisher dashboard it is visible under "Profile and settings" ("Reset Token" — to reset). The token has no expiration.
Base URL:
https://pub.kadam.net/api
Swagger documentation: https://pub.kadam.net/api-doc/
Accessible via API: Sources (sites), Places (blocks), Report builder (CustomReports), AdSpyGlass. Finances, payouts, wallets, notifications and referrals are available only via the dashboard (session-based authorization).
Terminology:
Source (site) — areaID, referred to in API as
webmaster_sourcePlace (block / ad unit) — blockID, referred to in API as
webmaster_block
Sources
List of sites
To fetch the list of sites with brief statistics, use the method POST /sources/sources-table
Data is equivalent to https://pub.kadam.net/platforms
Parameter | Value | Additional attributes |
page | Page number (from 1) | int; optional (default 1) |
perPage | Items per page | int; optional (default 20) |
sort | Sorting. Key — column, value — "asc" / "desc" | object; optional |
filters.dateFrom | Start of the period, format YYYY-MM-DD (default: today − 7 days) | string; optional |
filters.dateTo | End of the period, format YYYY-MM-DD (default: today) | string; optional |
filters.archive | 0 — not archived, 1 — archived | int; optional (default 0) |
filters.timezone | Timezone from -12 to 12. If omitted — the account timezone is used | int; optional |
tableFilters | Array of column filters. Each item: {"column": "...", "childField": "...", "value": "...", "compareType": 0..4, "include": [...], "exclude": [...]}. compareType: 0 — "=", 1 — ">", 2 — "<", 3 — ">=", 4 — "<=". | array of objects; optional |
Example request:
POST https://pub.kadam.net/api/sources/sources-table
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"page": 1,
"perPage": 20,
"sort": {"dateCreated": "desc"},
"filters": {
"dateFrom": "2026-03-01",
"dateTo": "2026-03-31",
"archive": 0,
},
"timezone": 0
"tableFilters": []
}Create a site
To create a site (first step), use the method PUT /sources
Parameter | Value | Additional attributes |
name | Site name | string; required |
url | Site URL | string; required |
state | On creation always "oninit" | string; required |
Example request:
PUT https://pub.kadam.net/api/sources
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"name": "My Site",
"url": "https://example.com",
"state": "oninit"
}Get site information
To fetch all settings of a site, use the method GET /sources/{id}
Path parameter: id — site ID (areaID), int. Example request:
GET https://pub.kadam.net/api/sources/12345 Authorization: Bearer YOUR_TOKEN
Update a site
To add data at the next creation steps, use the method PUT /sources/{id}
Path parameter: id — site ID, int.
The body contains the site fields to update (set depends on the stage). Full schema — see Swagger: https://pub.kadam.net/api-doc/#/sources/put_sources__id_
Site state actions
To change the state of a site, the following methods are used:
POST /sources/{id}/activate — activate the site
POST /sources/{id}/deactivate — pause the site
POST /sources/archive/{id} — move to archive
POST /sources/un-archive/{id} — restore from archive
Path parameter: id — site ID, int. No request body required. Example request:
POST https://pub.kadam.net/api/sources/12345/activate Authorization: Bearer YOUR_TOKEN
Places (blocks)
List of blocks for a site
To fetch the list of blocks on a site with brief statistics, use the method POST /places/places-table/{id}
Path parameter: id — site ID (areaID), int.
Data is equivalent to https://pub.kadam.net/platforms/{id} Request body is the same TableFilters object as for the sites list (page, perPage, sort, filters.dateFrom/dateTo/archive/timezone, tableFilters). Example request:
POST https://pub.kadam.net/api/places/places-table/12345
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"page": 1,
"perPage": 20,
"filters": {
"dateFrom": "2026-03-01",
"dateTo": "2026-03-31",
"archive": 0,
"timezone": 0
},
"tableFilters": []
}Values for block table filters
To fetch the list of possible include/exclude values for block table filters, use the method POST /places/places-table/table-filters
Parameter | Value | Additional attributes |
column | Column for which the list is requested | string; required |
field | Filter field within the column | string; optional |
Block state actions
To change the state of a block, the following methods are used:
POST /places/{id}/activate — activate the block
POST /places/{id}/deactivate — pause the block
DELETE /places/{id} — move to archive
POST /places/{id}/restore — restore from archive
Path parameter: id — block ID (blockID), int. Example request:
POST https://pub.kadam.net/api/places/98765/activate Authorization: Bearer YOUR_TOKEN
Users
User information
To fetch updated user info (balance, unread notifications counter), use the method POST /users/check-upd
Parameter | Value | Additional attributes |
notificationsLimit | Maximum number of unread notifications to return | int; optional |
Example request:
POST https://pub.kadam.net/api/users/check-upd
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{"notificationsLimit": 10}Report builder (Custom Reports)
List of groupings, metrics and periods
To fetch the list of available groupings, metrics, and preconfigured periods, use the method OPTIONS /custom-reports Example request:
OPTIONS https://pub.kadam.net/api/custom-reports Authorization: Bearer YOUR_TOKEN
Get statistics
The main method for building statistics — POST /custom-reports/data
Parameter | Value | Additional attributes |
groups | Array of groupings (see list below) | array of string; required |
metrics | Array of metrics (see list below) | array of string; required |
filters.dateFrom / filters.dateTo | Period, format YYYY-MM-DD | string; required (or filters.period) |
filters.period | Preconfigured period instead of dateFrom/dateTo: today, yesterday, 7days, 14days, month, prevMonth | string; optional |
filters.timezone | Timezone from -12 to 12 | int; optional |
filters.filters | Array of column filters: [{"id": "webmaster_source", "type": "list", "include": [areaId1, areaId2]}, ...] | array of objects; optional |
sort | Sorting: {"column_key": "asc"|"desc"} | object; optional |
page / perPage | Pagination | int; optional |
compare | Comparison with another period: {"dateFrom": "YYYY-MM-DD", "dateTo": "YYYY-MM-DD", "mode": "diff"|"percent"|"compare_value", "period": "...", "sort": false}. null — no comparison | object; optional |
Groupings (groups):
Time:
time_hour,time_day,time_week,time_monthTraffic:
traffic_region(country/region),traffic_browser,traffic_platform(OS),traffic_platformVersion,traffic_device,traffic_deviceType(mobile/desktop/tablet),traffic_subsAge,traffic_pageCategory,traffic_blockFormat,traffic_blockSizeTraffic (full table only, data appears with a delay):
traffic_domain,traffic_macros(subID),traffic_pidPublisher:
webmaster_source(areaID),webmaster_block(blockID),webmaster_subId
Metrics (metrics):
Traffic:
traffic_visits(unique visits),traffic_views(material impressions),traffic_blockViews(block impressions),traffic_clicks,traffic_viewRate(%),traffic_trafficback,traffic_subscriptions,traffic_unsubscriptionsFinances:
finance_moneyIn(revenue, account currency)Publisher:
webmaster_cpm(CPM by material impressions),webmaster_cpc,webmaster_blockCTR(%),webmaster_blockCPM(CPM by block impressions)
Example request — statistics by country and SubID for yesterday:
POST https://pub.kadam.net/api/custom-reports/data
Authorization: Bearer YOUR_TOKEN
Content-Type: application/json
{
"groups": ["traffic_region", "webmaster_subId"],
"metrics": ["traffic_views", "traffic_clicks", "finance_moneyIn"],
"filters": {
},
"filters": [
{"id": "webmaster_source", "type": "list", "include": [12345]}
],
"period": "yesterday",
"timezone": 0
"sort": {"traffic_views": "desc"},
"compare": null
}Note: block filter — {"id": "webmaster_block", "type": "list", "include": [blockId]}.
Instead of period you can pass "dateFrom": "2026-03-01", "dateTo": "2026-03-07".
Groupings traffic_domain, traffic_macros, traffic_pid are available only from the full table and appear with a delay.
Filter values for statistics
To fetch the list of possible values for a specific filter, use the method POST /custom-reports/filter-data
Parameter | Value | Additional attributes |
id | Column key for which the list is requested (e.g. webmaster_source) | string; required |
searchQuery | Search string (for filters with filterSync = true) | string; optional |
AdSpyGlass (ASG)
List of active blocks
To fetch the list of active blocks working with AdSpyGlass, use the method GET /partners/asg/blocks
Parameter | Value | Additional attributes |
token | API token (passed as a query parameter) | string; required |
Example request:
GET https://pub.kadam.net/api/partners/asg/blocks?token=YOUR_TOKEN
Get block data
To fetch data of a specific ad block, use the method GET /partners/asg/block
Parameter | Value | Additional attributes |
token | API token | string; required |
zone_id | Block ID | int; required |
Example request:
GET https://pub.kadam.net/api/partners/asg/block?token=YOUR_TOKEN&zone_id=98765
Common rules
Common response format
{ "success": true, "code": 0, "msg": {}, "data": { ... } }
On error success = false, the msg field contains the error description.
Pagination
List endpoints accept:
page — page number, int (from 1, default 1)
perPage — items per page, int (default 20)
Sorting
Sorting is specified as an object {"column_key": "asc"|"desc"}. Allowed keys depend on the method.
Table filters (tableFilters / filters.filters)
In the sites and blocks tables, filters are specified as a tableFilters array:
column — column
childField — field for multiselect filters
value — search string or number (compareType: 0="=", 1=">", 2="<", 3=">=", 4="<=")
include / exclude — arrays of values to include/exclude
In the report builder — filters.filters array of the form {"id": "key", "type": "list"|"range"|"value"|"value_like"|"value_combined", "include": [...], "exclude": [...], "range": {"from": "...", "to": "..."}}.
What is available via API
Via Bearer Token: Sources (CRUD, activation/archive), Places (activation/archive), Report builder (statistics + filters), AdSpyGlass. Finances, payouts, wallets, notifications, referrals — only via the dashboard.
