Skip to content

Errors and Rate Limits

When something goes wrong, the ORD.NET API returns a JSON body alongside the HTTP status:

{ "error": "Human readable error message" }

Trust the HTTP status as the stable signal. The error string is for humans and the wording can change.

StatusMeaningWhat to do
200Success.
400Invalid route params, query params, or JSON body.Fix the request. Don’t retry blindly.
401Missing, invalid, or expired bearer token.Re-run the auth flow.
403Not allowed.Verify wallet ownership, balance requirements during auth, and route permissions.
404Collection, listing, inscription, or offer not found.Check your identifiers.
409Trading state changed under you.Re-fetch listing or offer state and start preflight again. Don’t reuse stale PSBTs.
410Auth challenge or flow expired.Start a fresh /auth/challenge.
429Rate limited.Back off and retry.
500Unexpected server error.Retry once, then report.
503A required funding check or trading service is temporarily unavailable.Wait and retry. Do not bypass the auth funding check.

Missing token:

{ "error": "Bearer session token required" }

Invalid or expired token:

{ "error": "Invalid or expired bearer session token" }

Auth funding-check outages at 503:

{ "error": "Trading API wallet eligibility is temporarily unavailable" }

See Funding requirement for the full explanation of 403 and 503 around wallet funding during token issuance.

All limits use a fixed 60-second window. Every /api/v1 endpoint belongs to one explicit bucket.

BucketPer IPPer profile or address
POST /auth/challenge205 per address
POST /auth/verify205 per address
Trading reads6030 per profile
Trading writes208 per profile

Profile-scoped quotas key off the bearer token. IP-scoped quotas key off the source IP regardless of authentication.

The /api/v1 surface supports cross-origin browser clients. Preflights respond with:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: authorization, content-type

Send API tokens in the Authorization header.

  • 400: fix the request.
  • 401: re-run /auth/challenge and /auth/verify.
  • 403: confirm wallet ownership, the verified payment address balance, and route permissions.
  • 409: re-fetch listing or offer state and start preflight again.
  • 429: exponential backoff and retry.
  • 503: wait and retry. If this happens during /auth/verify, start a fresh auth flow before retrying.