Skip to content

Errors & Rate Limits

Error format

All errors return a consistent JSON envelope:

json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "customerEmail is required."
  }
}

HTTP status codes

StatusMeaningWhat to do
400Validation failedFix the request body, the message names the field
401Missing/expired tokenGet a new token and retry once
403Not permitted for your clientCheck GET /v4/endpoints for your allowed operations
404Resource not foundCheck the id
429Rate limitedBack off and retry with exponential delay
5xxServer errorRetry with backoff; contact support if persistent

Rate limits

Requests are rate-limited per integration client. Limits depend on your tier. Contact support@roofangle.com for yours. On 429, honor a backoff (start at 1s, double each retry, cap at 60s).

Idempotency tips

  • Order creation is not idempotent, so guard against double-submits on your side.
  • Webhook retries carry the same X-Webhook-Delivery-Id, so dedupe on it.

Need an API key? Contact support@roofangle.com