Rate limits
When you send too many attempts, Ele answers 429 with the type
rate_limited:
HTTP/1.1 429 Too Many Requestsretry-after: 540content-type: application/json
{"error": {"type": "rate_limited", "message": "…", "request_id": "…"}}What is limited
Section titled “What is limited”Ele limits attempts at actions that someone could abuse by repeating them.
These answer 429 rate_limited once the limit is reached:
- Signing in to one account.
- Entering a code to complete step-up.
- Checking a step-up challenge’s status.
- Creating organizations and cards.
Two limits work differently:
- At sign-in, too many wrong authenticator codes end the challenge: it keeps
returning
mfa_failed. See Authentication. - Past its limit, a password reset request still succeeds, but Ele sends no more emails for a while.
Ele does not publish the exact limits, and may change them. A person working normally seldom meets them. A loop that retries a failed sign-in or code without asking the person again soon will.
Ele does not publish a general limit on requests per token, and responses carry
no quota headers. Any call can still return 429, so handle it everywhere.
Backing off
Section titled “Backing off”When you get 429 rate_limited:
- If the response has a
Retry-Afterheader, wait that many seconds before trying again. - If it has none, wait and retry with a growing delay: for example 1 second, then 2, 4, 8, up to a minute, with some random jitter added.
- Do not retry sign-in or code entry by yourself. Tell the person to wait, and let them try again.
Sending more requests while limited does not help: they are refused until the wait is over.
If the limited call was a write sent with an Idempotency-Key, Ele keeps the
429 under that key. A retry with the same key returns the same 429, without
a Retry-After header, for 24 hours. After waiting, retry with a new key. This
is safe here: a 429 means Ele did not do the work. See
Idempotency.
Polling
Section titled “Polling”Some workflows need polling, because Ele does not send webhooks yet. Poll at the intervals suggested in Staying in sync, and spread the polls for many organizations over time rather than sending them all at once.