Skip to main content

Errors & Rate Limits

Error Response Format

All API errors follow a consistent JSON format:

{
"statusCode": 400,
"errorCode": "BR-1",
"errorMessage": "Invalid address provided",
"timestamp": "2026-04-28T12:10:30.938Z",
"endpoint": "POST /api/v1/transactions"
}

Error Codes

HTTP Status (statusCode)Error Code (errorCode)Description
400BR-1Invalid request parameters
400BR-2Request parameters schema validation failed
400BR-1001Invalid blockchain network specified
400BR-1002Invalid blockchain network/asset specified
401AU-1Authentication failed or missing credentials
403AU-1Insufficient privileges
404NE-1Requested entity not found
409CFR-1Conflicting request
409ADR-3001Address conflict or ambiguous address
409ADR-3002Inconsistent address network combination
409MEM-4001Conflicting memo record detected
409TX-2002Ambiguous transaction request
422UE-1Unprocessable request entity
429RL-1Rate limit exceeded
500GE-1Internal server error
500APM-1Application maintenance or processing failure
503HAC-1Upstream blockchain provider exception
503HAC-2Upstream blockchain provider bad request
503HAC-3Upstream blockchain provider bad response

Rate Limits

TierLimit
Standard100 requests/minute
Burst1,000 requests/hour

Rate limit information is returned in response headers:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in window
X-RateLimit-RemainingRequests remaining in current window
X-RateLimit-ResetUnix timestamp when the window resets
Retry-AfterSeconds until the limit resets (on 429)

When rate limited, the API returns 429 Too Many Requests with a Retry-After header. Implement exponential backoff in your client.

note

If you need higher rate limits for your use case, contact your account manager.

Pagination

All list endpoints support pagination:

GET /api/v1/vaults?page=0&pageSize=25&sort=createdAt:desc
ParameterDefaultMaxDescription
page0Page number (0-based)
pageSize1001000Items per page
sortSort field and order

Pagination Response

{
"data": [...],
"pagination": {
"page": 0,
"pageSize": 25,
"total": 142
}
}

Filtering

Use filter[] parameters to narrow results:

GET /api/v1/transactions?filter[status]=mined

GET /api/v1/transactions?filter[status]=mined&filter[network]=ethereum-mainnet

GET /api/v1/vaults?search=treasury

Relations

Use relations[] to eager-load related data and reduce API calls:

GET /api/v1/vaults?relations[]=organization&relations[]=accountsCount

GET /api/v1/transactions/{id}?relations[]=events&relations[]=approvals

Idempotency

Several creation endpoints are idempotent:

EndpointIdempotency KeyBehavior
POST /transactionsorderIdReturns existing tx if orderId matches
POST /accountsName + vaultReturns existing account
POST /addressesHD pathReturns existing address
POST /memosAddress + memoReturns existing memo

Idempotent endpoints return 200 for existing resources and 201 for newly created ones.