Skip to main content

HTTP status codes

Retry strategies

For transient errors (429, 500, 502, 503, 504):

Production security checklist

Before going live, verify each item:
Never expose edp_live_ keys to the browser or commit them to version control. Use environment variables. All Edpire API calls must go through your backend — the browser should only talk to your own proxy routes.
Reject any incoming webhook that fails HMAC-SHA256 verification. Use timingSafeEqual to prevent timing attacks.
Each API key has only the scopes it needs. A key that only reads data should not have write:submissions.
Only your production domains are in the embed allow list. Remove localhost/staging before launch.
Never let the client construct or choose the learner_ref. Always generate it server-side from your auth session.
Duplicate events do not cause duplicate records. Check submission_id uniqueness before writing.
Your code respects Retry-After headers and backs off on 429 responses.
Stored answer keys are never returned. By default /check returns only correctness signals. Passing include_correct_answers: true does return the correct answers, by design, so review and practice modes can show them. Set that flag server-side based on your own logic, and never forward it from client input.
Webhook URLs must use HTTPS. HTTP is only permitted for localhost during development.