veil

Limits and errors

Keep requests bounded and follow the response when a call needs to wait.

Public reads are limited to 300 requests per minute per IP. Signature verification counts as a read, including its preflight. Writes share a separate limit of 30 per minute per IP. Signed writes also have a limit of 10 per minute per key, with separate budgets for account-linking steps.

A 429 response includes Retry-After in seconds. A busy service may return 503 with Retry-After too. Wait before retrying. Public CORS responses expose that header to JavaScript.

json
{"error":{"code":"not_found","message":"No such endpoint"}}
  • 400 means the parameters or body are invalid. Read error.code to distinguish invalid_parameter and invalid_block.
  • 401 means a required request signature is missing or invalid. A 403 can mean the key is not allowed to perform that action.
  • 404 means no matching resource. A lookup with no result uses this status.
  • 409 means the state has changed or a request conflicts with an existing operation. Read the latest state before retrying.
  • 410 marks an erased card. Openings are removed while the public log retains its commitments.
  • 422 means the operation was read but failed a domain rule or an account proof.
  • 503 means the service or log cannot complete the request now. Do not treat an unavailable log as a successful verification.

Follow cursors#

Version and history pages are limited by both count and byte size. A page may contain fewer rows than requested. Follow next or before until it is null. Fetching the latest version is cheaper than downloading the whole history on every poll.

Optional developer API keys use a separate shared owner allowance. Read the API-key guide for continuous refill, custom caps, staff suspension and usage headers.