/reports

200, not 201, and nothing is persisted. This generates a report; it does not create a resource. reportId is a correlation id for logs and for matching a response to the request that produced it — not a handle to fetch back later. Making reports durable would be a table and a repository, not a change to the response shape.

The generator loads the whole match rather than paging in SQL, precisely because the summary has to cover everything. That is affordable because of the month-to-date default; a caller wanting an entire history should page.

POSThttps://dashboard.a2bsample.com/api/developer/playground/client/reports
RequiresAuthorizationandX-Api-Tokenas headers.
Client
Client·Reports·POST/reports
POSThttps://dashboard.a2bsample.com/api/developer/playground/client/reports
Request body
Response

Send a request to see the response.

Example request

Request
curl --request POST \  --url 'https://dashboard.a2bsample.com/api/developer/playground/client/reports' \  --header 'Authorization: Bearer $A2B_BEARER_TOKEN' \  --header 'X-Api-Token: $A2B_API_TOKEN' \  --header 'Accept: application/json' \  --header 'Content-Type: application/json' \  --data '{"name":"Playground report","maxRows":50}'

Request

Headers4

Authorizationstringrequired

The secret half. A client token starts clt_ — the four-character prefix says which table to resolve it in, so the row it matches is the caller. A vnd_… token on this prefix is a 403, not a 404.

example: Bearer clt_4c8ea1f52d6b8e0c4a919f1c4e2a7b3d
X-Api-Tokenstringrequired

The identity half — this client's own 40-hex apiToken, the value GET /api/developer/me echoes back. Compared in constant time against the bearer token's own row, so a bearer token lifted on its own is not enough to call the playground.

example: 3c7a1b905e424d189f637a2c5e1b8d40b1d9f4e6
Content-Typestringrequired

Request media type.

default: application/json
Acceptstringoptional

Response media type.

default: application/json

Body8

namestringoptional

Free-text label, echoed back. Nothing keys off it.

example: Q2 completes
projectIdstring<uuid>optional

Must be one of the caller's own.

statusintegeroptional
012345
countryIdstring<uuid>optional
fromDatestring<date>optional
toDatestring<date>optional
isTestbooleanoptional
truefalse
maxRowsintegeroptional

(max 5000)

default: 100

Request body

JSONapplication/json
{  "name": "Playground report",  "maxRows": 50}

Responses

200OK

The generated report. Nothing was stored.

successboolean
Whether the call succeeded.
reportobject
Example response
{  "success": true,  "report": {    "reportId": "b1f0c4a9-19f1-4c4e-2a7b-3d4c8ea1f52d",    "name": "client-survey-report",    "generatedAt": "2026-08-25T11:42:07.113",    "filter": {      "projectId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",      "status": 0,      "countryId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",      "fromDate": "2026-08-01",      "toDate": "2026-08-25",      "isTest": true    },    "summary": {      "totalHits": 812,      "byStatus": {        "Drop": 210,        "Complete": 402,        "Disqualify": 150,        "quotaFull": 30,        "securityTerm": 12,        "Reconcile": 8      }    },    "rows": [      {        "id": "8e0c4a91-9f1c-4e2a-7b3d-4c8ea1f52d6b",        "pid": 1042,        "projectName": "Q3 Brand Tracker",        "gid": "string",        "vendorName": "string",        "clientName": "Acme Insights",        "startIpAddress": "203.0.113.42",        "endIpAddress": "203.0.113.42",        "startTime": "11:02:19",        "endTime": "11:14:51",        "startDate": "2026-08-20",        "endDate": "2026-08-20",        "refId": "a1f52d6b8e0c",        "uid": "string",        "hashedUid": "6b8e0c4a919f1c4e2a7b3d4c8ea1f52d",        "loi": 12,        "status": 1,        "countryName": "United States",        "vendorStartTime": "string",        "vendorEndTime": "string",        "clientStartTime": "11:03:02",        "clientEndTime": "11:14:44",        "sentToClient": "string",        "clientCpi": 0,        "vendorCpi": 0,        "profit": 0      }    ],    "totalRows": 812,    "truncated": true  }}