Skip to content

Rate limits

When you send too many attempts, Ele answers 429 with the type rate_limited:

HTTP/1.1 429 Too Many Requests
retry-after: 540
content-type: application/json
{"error": {"type": "rate_limited", "message": "…", "request_id": "…"}}

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.

When you get 429 rate_limited:

  1. If the response has a Retry-After header, wait that many seconds before trying again.
  2. 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.
  3. 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.

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.