Documentation sections

Admin API: logs and diagnostics

Ten Admin API methods: click search and the click card, the action log, stream logs, and the state of queues, services and settings rollout.

The API offers the same data as the Logs section of the panel and the System status page. All ten methods require a token with Full access («Полный доступ») (full): with a different access type you get 403 token_scope. With an inactive license, the methods respond with 402 — see Expired license. Authorization is described on the Admin API: overview and authorization page, and the response format and common error codes on the Request, response and error format page.

Clicks

http
GET /api/v1/logs/clicks

Returns clicks for a period. You can select clicks by an exact IP, subid or external_id. The search rules are the same as on the Clicks and leads tab.

ParameterTypeRequiredDescription
fromstring, RFC 3339 datenoStart of the period by click time. Default — 24 hours ago
tostring, RFC 3339 datenoEnd of the period. Default — the current time. The period is no more than 93 days
fieldstringnoSearch attribute: ip, subid or external_id
valuestringnoThe exact attribute value, up to 512 characters. Not accepted without field. For subid — up to 64 characters: Latin letters, digits, _, - and dots (not at the start or end, and not two in a row)
limitintegernoPage size from 1 to 200. Default 100
cursorstringnoThe next_cursor value from the previous response

Response — code 200:

FieldTypeDescription
itemsarrayClicks, newest first. If nothing is found, an empty array
next_cursorstringCursor of the next page. An empty string means there are no more pages
namesobjectNames of the campaigns in items: the key is the ID, the value is the name
Click fields in items
  • subid — click ID; ts — click time; ip — the visitor's IP.
  • campaign_id, stream_id, source_id, lander_id, offer_id — IDs of the campaign, stream, source, landing page and offer. An empty string if the object was not in the click's path.
  • country, region, city, isp, connection_type — IP-based data.
  • device_type, os, os_version, browser, browser_version, user_agent, lang, referrer — device and browser.
  • is_bot, is_unique — bot and unique click flags.
  • cost — the click's cost in USD.
  • sub_ids, tokens — click parameters. tokens.external_id holds the external_id. Values of parameters with access tokens are replaced with ***.

Example request:

bash
curl "https://panel.example.com/api/v1/logs/clicks?from=2026-10-01T00:00:00Z&to=2026-10-04T00:00:00Z&field=ip&value=203.0.113.10&limit=50" \
  -H "Api-Key: <token>"

Example response, some click fields omitted:

json
{
  "items": [
    {
      "subid": "k3x9m2q7c1ab",
      "ts": "2026-10-03T14:22:05.418Z",
      "ip": "203.0.113.10",
      "campaign_id": "c41a9e07-52bd-4f13-8a60-9d7e6f5a4b3c",
      "stream_id": "5e2d7a10-8c4b-4f6e-b1a9-0d3c2b1a4f5e",
      "country": "PL",
      "is_bot": false,
      "is_unique": true,
      "tokens": {"external_id": "ext-448812"}
    }
  ],
  "next_cursor": "",
  "names": {"c41a9e07-52bd-4f13-8a60-9d7e6f5a4b3c": "FB PL Nutra"}
}

Errors:

CodecodemessageWhen
400validationНекорректное начало периода (invalid period start), Некорректный конец периода (invalid period end)from or to is not in RFC 3339 format
400validationВыберите период до 93 дней (choose a period of up to 93 days)The period is longer than 93 days or to is earlier than from
400validationРазмер страницы: от 1 до 200 (page size: from 1 to 200)limit is out of range
400validationНекорректная страница (invalid page)cursor is not from this method's response
400validationПроверьте поле и значение поиска (check the search field and value)An unknown field, value without field, or a value that is not an IP or not a subid
503no_analyticsАналитика недоступна (analytics unavailable)Statistics are not connected

Click card

http
GET /api/v1/logs/clicks/{id}

Returns a click, its landing page clicks and its conversions — the data of the click card. The click is searched across the whole stored history; no period is needed.

ParameterWhereTypeRequiredDescription
idpathstringyesThe click's subid

Response — code 200:

FieldTypeDescription
clickobjectThe click with the same fields as in the search items
history.transitionsarrayLanding page clicks, from earliest to latest: ts, lander_id, offer_id. Up to 200 records
history.transitions_morebooleantrue if there are more than 200 landing page clicks
history.conversionsarrayThe click's conversions, newest first, one record per txid with the latest status: subid, ts, status, payout, revenue, offer_id, txid. Up to 200 records
history.conversions_morebooleantrue if there are more than 200 conversions
history.lead_updated_atstring or nullTime of the latest lead data for the click. null — there is no lead data
namesobjectNames of the campaign, stream, source, landing pages and offers by their IDs. A deleted object is not in names

The response does not include the event delivery history: it is returned by GET /api/v1/deliveries/search with the click_id parameter — see Admin API: conversions and postback. Lead data is returned by GET /api/v1/reports/click-lead — see Admin API: reports.

Errors:

CodecodemessageWhen
400validationНекорректный subid (invalid subid)id contains invalid characters or is longer than 64 characters
404not_foundКлик не найден (click not found)There is no click with this subid
503no_analyticsАналитика недоступна (analytics unavailable)Statistics are not connected

Action log

http
GET /api/v1/logs/audit

Returns entries of the user action log, newest first.

ParameterTypeRequiredDescription
pageintegernoPage number, starting from 1. Default 1
limitintegernoEntries per page, default 100, maximum 500. A value above 500 is replaced with 100
qstringnoCase-insensitive substring search in the action, resource, resource ID and user
resourcestringnoThe exact resource value, for example campaigns — see Resource values
actionstringnoThe exact action value, for example update — see Action values
user_idstring, UUIDnoID of the user who performed the action
outcomestringnosuccess — response status from 200 to 399, error — from 400
fromstring, RFC 3339 datenoStart of the period, inclusive
tostring, RFC 3339 datenoEnd of the period, exclusive. Must be later than from

Response — code 200: an object with the fields items, total (the number of entries matching the filter), page and limit.

Entry fieldTypeDescription
idintegerEntry number
created_atstring, RFC 3339 dateAction time
contextstringUI — an action in the panel, API — a request with a token
action, resource, resource_idstringAction, resource and object ID
user_id, user_emailstringWho performed it. For a request with a token, user_email has the beginning of the token in square brackets after the login
ip, user_agentstringThe address and client the request came from
statusintegerHTTP code of the response to the action

Example request — failed campaign changes over one day:

bash
curl "https://panel.example.com/api/v1/logs/audit?resource=campaigns&outcome=error&from=2026-10-03T00:00:00Z&to=2026-10-04T00:00:00Z&limit=50" \
  -H "Api-Key: <token>"

Errors — code 422, code validation:

messageWhen
Неизвестный исход (unknown outcome)outcome is neither success nor error
Дата должна быть в RFC3339 (the date must be in RFC3339)from or to is in a different format
Конец периода должен быть позже начала (the period end must be later than the start)to is not later than from
Слишком большой номер страницы (page number too large)page is greater than 1,000,000

Stream logs

Four logs: system — the system log, postback — incoming postbacks, s2s — outgoing S2S, traffic — the traffic log. What goes into them is described on the System log, postbacks and traffic log page. Each log keeps the 2000 latest entries; the logs are shared by the whole installation.

Read a log

http
GET /api/v1/logs/{stream}

Returns the log's entries, newest first.

ParameterWhereTypeRequiredDescription
streampathstringyessystem, postback, s2s or traffic
qquerystringnoKeeps the entries whose text contains this string. Case-insensitive
limitqueryintegernoNumber of entries, default 500, maximum 2000. A value above 2000 is replaced with 500

Response — code 200 and an array of entries. If there are no entries, [] is returned.

FieldTypeDescription
tsintegerEntry time in Unix milliseconds
textstringEntry text
levelstringLevel. Present only in the system log
ctxstringThe service that made the entry. Present only in the system log

Error: 404, code not_found, message неизвестный поток логов (unknown log stream) — the stream value is not from the list.

Clear a log

http
DELETE /api/v1/logs/{stream}

Deletes all entries of the log for the whole installation. The stream path parameter is the same as for reading.

Response — code 204 with no body.

Warning.

Deleted entries cannot be restored. The clearing is written to the action log: action delete, resource logs.

Check whether the traffic log is on

http
GET /api/v1/logs/traffic-enabled

No parameters. Response — code 200:

json
{"enabled": false}

Turn the traffic log on or off

http
PUT /api/v1/logs/traffic-enabled

Switches recording of the traffic log — the same as the Log («Логировать») toggle on the Traffic («Трафик») tab.

Body fieldTypeRequiredDescription
enabledbooleanyestrue — record, false — do not record. A request without this field turns the log off

Response — code 200 and the {"enabled": true} object with the new value.

Error: 400, code bad_request, message invalid json — the body was not parsed.

Diagnostics

Queue state

http
GET /api/v1/queue-health

Returns the click intake queue and unfinished delivery tasks — the data of the Queue state tab.

No parameters. Response — code 200:

FieldTypeDescription
deliveriesarrayThe workspace's unfinished tasks by kind. An empty array means there are no unfinished tasks
deliveries[].kindstringconversion, s2s or capi
deliveries[].pending, running, failedintegerTasks that are waiting, being sent, and stopped with an error
deliveries[].expiredintegerTasks whose processing did not finish in time
deliveries[].unknownintegerTasks without confirmation from the recipient
deliveries[].oldest_secondsnumberHow many seconds the oldest unfinished task has been waiting
ingestobject or nullThe click intake queue of the whole server. null — there is no information from the handler
ingest_stalebooleantrue if there is no information or it is older than 30 seconds
checked_atstring, RFC 3339 dateCheck time
Fields of the ingest object
  • updated_at — time of the latest information from the click handler.
  • clicks and lp — the queues of clicks and landing page clicks. Each has: pending_batches — batches waiting to be written, oldest_seconds — how long the oldest one has been waiting, bytes and max_bytes — size on disk and the limit, disk_available and disk_known — free space and whether it could be determined, scan_ok — the queue was read, delivery_failing — writing to the statistics is currently failing, failures — the number of failed writes since startup, last_success — time of the last successful write in Unix milliseconds, waiting_requests — requests waiting to be saved.
  • geo — the handler's GEO databases: provider, state, bytes, modified_at, last_error. The statuses are covered on the Tracker GEO databases page.

Error: 503, code unavailable — the delivery queue could not be read. The response has the Retry-After: 5 header: repeat the request after 5 seconds.

System status

http
GET /api/v1/system-health

Returns the data of the System status page: build, services, background tasks and exports.

No parameters. The method responds with code 200 even when a service is unavailable: check the state field.

FieldTypeDescription
revisionstringBuild identifier. unknown — not determined
uptime_secondsintegerHow many seconds the panel service has been running
process_memory_bytesintegerMemory of the panel service in bytes
go_versionstringRuntime version
servicesobjectThe postgres, clickhouse, redis keys. Each has state — ok or unavailable, bytes — data size, version, and the first two have migrations — the list of applied migrations
workersarrayBackground tasks: name, state, checked_at, stale. A task that has never responded comes with state missing
workers_availablebooleanfalse — the task heartbeats could not be read
exportsobjectNumber of current CSV exports by state: pending, running, ready, failed. States without exports are not in the object
exports_availablebooleanfalse — the export counter could not be read
ingest, ingest_stale—The same as in GET /api/v1/queue-health
integrations.proxy_nodesbooleanWhether management of reverse proxy nodes is configured
checked_atstring, RFC 3339 dateCheck time

Task names in workers: report_exports, deliveries, target-monitor, retention, domain-checks. stale is true if the last heartbeat is older than 3 minutes.

Traffic settings rollout

http
GET /api/v1/runtime-config

Shows whether changes to campaigns, streams and domains have reached the traffic processing servers. How to read the statuses is described on the Traffic processing servers page.

No parameters. Response — code 200:

FieldTypeDescription
appliedbooleantrue — the current settings version is published and confirmed by all expected servers
config.revision, config.published_revisionintegerThe current and the published settings versions
config.pending_changesbooleantrue — there are changes not yet included in the published version
config.published_atstring, RFC 3339 dateTime of the last publication. The field is absent until there has been a publication
config.last_errorstringError of the last publication. The field is absent if there was no error
publication_availablebooleantrue — the published settings were read, and their version equals config.published_revision
nodes_availablebooleanfalse — the servers' confirmations could not be read
expected_nodesintegerNumber of expected servers
nodesarrayServers: the expected ones first, then the discovered ones

Server fields in nodes: node — name, revision — the confirmed version, checked_at — the last heartbeat (the field is absent for a server that has never responded), expected — whether it is in the expected list, stale — no fresh heartbeat, instances — how many running servers reported this name, state — the state:

stateState in the panel
appliedSettings applied («Настройки применены»)
pendingWaiting for update («Ожидает обновления»)
missingNo response («Нет отклика»)
staleConnection lost («Связь потеряна»)
conflictDuplicate server name («Повторяется имя сервера»)
unexpectedNot in the expected list («Вне списка ожидаемых»)
unavailableCheck unavailable («Проверка недоступна»)

Error: 503, code config_unavailable, message Состояние конфигурации недоступно (configuration state unavailable).

Updated Need help? ↗