Error response format
All API errors return a JSON body:HTTP status codes
| Status | Description |
|---|---|
200 | Success |
201 | Resource created |
204 | Resource deleted (no content) |
400 | Bad request — invalid parameters |
401 | Unauthorized — missing or invalid API key |
403 | Forbidden — resource belongs to a different client |
404 | Not found — resource does not exist |
409 | Conflict — duplicate requestUuid already in-flight |
422 | Validation error — request body failed validation |
429 | Rate limited — exceeded requests per minute |
500 | Internal server error |
503 | Service unavailable — database or dependency down |
Order decline reasons
When placing orders viaPOST /place-orders, orders that fail business validation are returned in the declinedOrders array (not as HTTP errors). Each declined order includes a declineReason:
| Decline reason | Description |
|---|---|
| Stake exceeds limit | orderStake is higher than the available bookmaker limit |
| Stake below minimum | orderStake is below the bookmaker’s or account’s minimum |
| Invalid odds | orderPrice is not available or market is suspended |
| No active accounts | No active bookmaker accounts available for this market |
| Currency conversion failed | Could not convert between order currency and bookmaker currency |
| Bookmaker not available | Specified bookmaker doesn’t have odds for this fixture/outcome |
| Duplicate requestUuid | This requestUuid is already in-flight (5-minute dedup window) |
Common errors
Authentication (401)
Missing or invalid API key.Access denied (403)
Attempting to access a resource that belongs to a different client.Duplicate request (409)
TherequestUuid was already used within the last 5 minutes.
Validation error (422)
Request body contains invalid data. Check theloc field for the problematic path:
Rate limiting (429)
Exceeded requests per minute for your API key. Default limit: 60/min.Resilience patterns
ABP implements several resilience mechanisms that may affect your integration:Circuit breakers
Per-bookmaker circuit breakers prevent cascading failures. If a bookmaker is experiencing issues, orders targeting that bookmaker may be declined until the circuit recovers. Opens after consecutive failures, automatically tests recovery, and resumes normal operation once the bookmaker responds successfully.Emergency mode
In rare cases, the system may temporarily pause order processing during maintenance or upstream issues. Theemergency WebSocket channel broadcasts status changes.
Order expiry
Orders have a defaultexpiresAt of 5 seconds from creation. If a bet hasn’t been placed within this window, the order status changes to EXPIRED. Set a custom expiresAt for longer-lived orders.