Request IDs and logs
Every response has an id
Every response — success, error, 401, 429, even a 404 for a route that
does not exist — carries X-Request-Id, a UUID we generate:
X-Request-Id: a104b335-e76a-41e4-a1d6-9c80eb27e15c
Log it next to your own record of the call. It is the fastest way to a precise answer from support, and it is how you find the request again yourself.
- An
X-Request-Idyou send is ignored and replaced. There is no client-chosen correlation id; store ours against yours. - Browser code can read it: the header is exposed to cross-origin requests.
- The error body does not repeat it — take it from the header.
Look a request up
Requests made with an API key are logged. Each log entry's id is the
request's X-Request-Id:
GET /v1/request-logs/a104b335-e76a-41e4-a1d6-9c80eb27e15c
{
"id": "a104b335-e76a-41e4-a1d6-9c80eb27e15c",
"method": "POST",
"path": "/v1/banking/payouts",
"status_code": 202,
"duration_ms": 174,
"api_key_id": "c730dfd3-9f63-4d15-ab4b-82b31457b2ed",
"ip_address": "203.0.113.24",
"idempotency_key": "qs-payout-inv-2026-0042",
"request_body": {"amount": "25.00", "currency": "EUR", "reference": "<redacted>", "…": "…"},
"response_body": {"id": "632d9e69-4ff8-4ede-8c5d-2cee4026aa84", "status": "settled", "…": "…"},
"created_at": "2026-10-15T20:01:52Z"
}
api_key_id is the key's id from GET /v1/api-keys
— for a master key, the master key's own id, which that list does not show.
Bodies are stored as redacted JSON — secrets, tokens and some free-text fields
are replaced with <redacted>. A body that was absent, larger than 16 KB or
not JSON is left out of the entry, as are ip_address and idempotency_key
when there was none.
The list, newest first:
GET /v1/request-logs?limit=100&before=<id of the last entry you saw>
{"logs": [...], "has_more": true, "next_cursor": "…"}. limit is 1–500,
default 100. The list has no filters — by path, status or key — so look a
specific request up by its id.
Who can read logs: a dashboard session, a master key or a secret key.
Restricted and publishable keys get 403 — the bodies contain your data.
What is not logged
- Requests made with a dashboard session — the log is the record of your integration's traffic.
- Requests refused before they reach the log:
401(no valid credential),429(rate limited), andCxc-Accountrefusals. - The log routes themselves and the event stream.
- Public and sandbox-tool routes.
A delegated request is logged under the account whose credential made it, not the managed account it acted for.
There is no stated retention period; do not use the log as your own archive.
Usage
GET /v1/usage/summary returns requests_7d, requests_7d_delta_pct,
error_rate_pct, total_volume and avg_settlement_secs;
GET /v1/usage/timeseries?window=7d|30d|90d returns daily request counts. The
request figures count the same API-key traffic the log does. total_volume
and avg_settlement_secs are computed from an older transfer record and do not
include payouts made through /v1/banking/* — for an integration on this API
they read 0 and null. Same access rules as the log.