Skip to main content
Errors use standard HTTP status codes and always return this body:
  • code is stable. Branch on it.
  • message is a sentence for logs. Its wording may change.
  • request_id is also in the X-Request-Id header. Quote it when you contact support@vacademy.io.
  • details is present only when there is more to say (table below).
Error responses carry Cache-Control: no-store.

Codes

Retrying

Retry 429, 500 and 503 with backoff (respect Retry-After; else 1 s, 2 s, 4 s… up to a minute). Other 4xx errors fail again until the request changes. POST /leads is safe to retry: a repeat of an enquiry that was already saved returns 200 {"status": "duplicate"}.
In browser JavaScript, cross-origin responses do not expose Retry-After or X-Request-Id to your code. Use error.request_id from the body, and wait 60 seconds after a 429 (limits reset each clock minute). Server-side code can read every header.