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:
| Param | Type | Description |
|---|---|---|
limit | integer | Max rows (default 100). |
before | uuid | Cursor — 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:
| Param | Values | Description |
|---|---|---|
window | 7d, 30d, 90d | Time 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:
| Param | Type | Description |
|---|---|---|
address | string | The blockchain address to validate. |
chain | string | solana (others: ethereum, polygon). |
asset | string | Optional. 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
}
| Field | Description |
|---|---|
valid | Whether the address is syntactically and cryptographically valid. |
reason | Null if valid, or a human-readable reason for invalidity. |
ata_exists | Solana 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. |
asset | The asset whose ATA was checked. Echoes the input. |
estimated_rent | SOL 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>