/reports

Scoped by clientId through the filter's own subquery on projects, so "all projects" needs no id list.

An absent date range means the current month to date, not everything ever. The resolved window travels back on filter.

GEThttps://dashboard.a2bsample.com/api/developer/playground/client/reports
RequiresAuthorizationandX-Api-Tokenas headers.
Client
Client·Reports·GET/reports
GEThttps://dashboard.a2bsample.com/api/developer/playground/client/reports
Response

Send a request to see the response.

Example request

Request
curl --request GET \  --url 'https://dashboard.a2bsample.com/api/developer/playground/client/reports?pageNo=1' \  --header 'Authorization: Bearer $A2B_BEARER_TOKEN' \  --header 'X-Api-Token: $A2B_API_TOKEN' \  --header 'Accept: application/json'

Request

Headers3

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
Acceptstringoptional

Response media type.

default: application/json

Query parameters8

projectIdstring<uuid>optional

Narrow to one project. Ownership-checked first rather than being allowed to come back empty — an empty result would read as "no traffic yet" for a project that is not theirs at all.

statusintegeroptional

ProjectSurveyStatus code — one respondent's outcome.

012345
countryIdstring<uuid>optional

Target country.

fromDatestring<date>optional

Start of the window, inclusive. Absent means the first of the current month.

toDatestring<date>optional

End of the window, inclusive. Absent means today.

isTestbooleanoptional

Restrict to test or to live traffic. Absent means both.

truefalse
pageNointegeroptional

Page number, 1-based. A null or non-positive value means the first page.

default: 1example: 1
maxRowsintegeroptional

Rows to return. The summary still covers the whole match, so a truncated report carries untruncated totals. (max 5000)

default: 100

Responses

200OK

The report envelope. summary covers the whole match; rows is a page of it.

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  }}