Skip to main content

Error response format

All API errors return a JSON body:
{
  "detail": "Unauthorized - missing or invalid API key"
}
Validation errors include field-level detail:
{
  "detail": [
    {
      "loc": ["body", "orders", 0, "orderStake"],
      "msg": "Input should be greater than 0",
      "type": "greater_than"
    }
  ]
}

HTTP status codes

StatusDescription
200Success
201Resource created
204Resource deleted (no content)
400Bad request — invalid parameters
401Unauthorized — missing or invalid API key
403Forbidden — resource belongs to a different client
404Not found — resource does not exist
409Conflict — duplicate requestUuid already in-flight
422Validation error — request body failed validation
429Rate limited — exceeded requests per minute
500Internal server error
503Service unavailable — database or dependency down

Order decline reasons

When placing orders via POST /place-orders, orders that fail business validation are returned in the declinedOrders array (not as HTTP errors). Each declined order includes a declineReason:
Decline reasonDescription
Stake exceeds limitorderStake is higher than the available bookmaker limit
Stake below minimumorderStake is below the bookmaker’s or account’s minimum
Invalid oddsorderPrice is not available or market is suspended
No active accountsNo active bookmaker accounts available for this market
Currency conversion failedCould not convert between order currency and bookmaker currency
Bookmaker not availableSpecified bookmaker doesn’t have odds for this fixture/outcome
Duplicate requestUuidThis requestUuid is already in-flight (5-minute dedup window)
Example declined order response:
{
  "orders": [],
  "declinedOrders": [
    {
      "fixtureId": "id1000000861624412",
      "outcomeId": 161,
      "playerId": 0,
      "orderStake": 15000,
      "orderPrice": 1.80,
      "declineReason": "Order stake 15000.00 USD exceeds available limit 5000.00 USD"
    }
  ]
}

Common errors

Authentication (401)

Missing or invalid API key.
# Missing header
curl https://v2.55-tech.com/accounts
# Returns: 401 {"detail": "Unauthorized - missing or invalid API key"}

# Include the header
curl -H "X-ABP-API-KEY: your-key" https://v2.55-tech.com/accounts
# Returns: 200

Access denied (403)

Attempting to access a resource that belongs to a different client.
{"detail": "Access denied - account does not belong to your client"}

Duplicate request (409)

The requestUuid was already used within the last 5 minutes.
{"detail": "Duplicate request - requestUuid already in-flight"}

Validation error (422)

Request body contains invalid data. Check the loc field for the problematic path:
{
  "detail": [
    {
      "loc": ["body", "orders", 0, "fixtureId"],
      "msg": "Field required",
      "type": "missing"
    }
  ]
}

Rate limiting (429)

Exceeded requests per minute for your API key. Default limit: 60/min.
{"detail": "Rate limit exceeded"}
Implement exponential backoff: wait 1s, 2s, 4s, etc. before retrying.

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. The emergency WebSocket channel broadcasts status changes.

Order expiry

Orders have a default expiresAt 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.