Skip to main content

Request logs & usage

The CashXChain API automatically logs every authenticated request. These logs are queryable via the API and include full request/response bodies for debugging.


Request logs

GET /v1/request-logs

Returns paginated request history for the caller's account.

Auth: Any valid credential. Scope required for rk_ keys: request_logs:read.

GET /v1/request-logs?limit=100
Authorization: Bearer <token>

Query parameters:

ParamTypeDescription
limitintegerMax rows (default 100).
beforeuuidCursor — returns entries before this log ID.

Response (200 OK)

{
"logs": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"method": "POST",
"path": "/v1/transfers",
"status_code": 201,
"duration_ms": 142,
"key_type": "api_key",
"api_key_id": "uuid-or-null",
"ip_address": "1.2.3.4",
"idempotency_key": "invoice-2026-001",
"created_at": "2026-06-08T12:00:00Z"
}
],
"has_more": false,
"next_cursor": null
}

GET /v1/request-logs/{id}

Retrieve a single log entry with the full request and response bodies.

Auth: Any valid credential. Scope required for rk_ keys: request_logs:read.

GET /v1/request-logs/3fa85f64-5717-4562-b3fc-2c963f66afa6
Authorization: Bearer <token>

Response (200 OK)

{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"method": "POST",
"path": "/v1/transfers",
"status_code": 201,
"duration_ms": 142,
"key_type": "api_key",
"api_key_id": "uuid-or-null",
"ip_address": "1.2.3.4",
"idempotency_key": "invoice-2026-001",
"request_body": { "recipient_email": "...", "amount": "50.00", "currency": "USD" },
"response_body": { "transfer_id": "...", "status": "executing" },
"created_at": "2026-06-08T12:00:00Z"
}

Use the log id when contacting support to reference a specific request.


Usage analytics

GET /v1/usage/summary

Returns account-level usage statistics.

Auth: Any valid credential. Scope required for rk_ keys: usage:read.

GET /v1/usage/summary
Authorization: Bearer <token>

Response (200 OK)

{
"requests_7d": 142,
"requests_7d_delta_pct": 12.5,
"error_rate_pct": 2.1,
"total_volume": "48500.00",
"avg_settlement_secs": 1.8
}

GET /v1/usage/timeseries

Returns per-day request counts for the specified window.

Auth: Any valid credential. Scope required for rk_ keys: usage:read.

GET /v1/usage/timeseries?window=7d
Authorization: Bearer <token>

Query parameters:

ParamValuesDescription
window7d, 30d, 90dTime window (default 7d).

Response (200 OK)

{
"window": "7d",
"data": [
{ "date": "2026-06-01", "count": 18 },
{ "date": "2026-06-02", "count": 24 },
{ "date": "2026-06-03", "count": 31 }
]
}

Utility

GET /v1/utility/validate-address

Validates a blockchain address and, for Solana, checks whether the recipient's associated token account (ATA) exists.

Auth: Any valid credential. No scope required.

GET /v1/utility/validate-address?address=Ax1b...&chain=solana&asset=USDC
Authorization: Bearer <token>

Query parameters:

ParamTypeDescription
addressstringThe blockchain address to validate.
chainstringsolana (others: ethereum, polygon).
assetstringOptional. SPL asset to check ATA for (e.g. USDC, EURC). Defaults to USDC on Solana.

Response (200 OK)

{
"valid": true,
"reason": null,
"ata_exists": true,
"asset": "USDC",
"estimated_rent": 0.00203928
}
FieldDescription
validWhether the address is syntactically and cryptographically valid.
reasonNull if valid, or a human-readable reason for invalidity.
ata_existsSolana only. Whether the recipient's USDC/EURC ATA already exists. false means the first transfer to this address will create the ATA at ~0.002 SOL cost.
assetThe asset whose ATA was checked. Echoes the input.
estimated_rentSOL needed to create the ATA if missing (rent-exempt minimum for a 165-byte token account). 0 if the ATA already exists.

Identity

GET /v1/me

Returns the caller's identity extracted from their auth token. Useful for verifying the credential and understanding which account it belongs to.

Auth: Any valid credential. No scope required.

GET /v1/me
Authorization: Bearer <token>