Skip to Content
Elido is in closed beta — APIs are stable but rate-limits and quotas may change before GA. Request access →
Errors

Errors

Every error response follows the same envelope:

{ "error": "human-readable message", "code": "machine_readable_code", "request_id": "req_a1b2c3" }

error is intended for log lines and humans; code is what your client should branch on. request_id is the same value returned in the X-Request-ID response header — quote it when filing a support ticket.

Status codes

StatusClassRetry?
400 Bad RequestValidation / malformed JSONNo — fix the request
401 UnauthorizedMissing/invalid credentialsNo — re-auth
403 ForbiddenAuthenticated but not allowedNo
404 Not FoundResource doesn’t exist or you can’t see itNo
409 ConflictSlug taken, idempotency-key mismatch, state collisionNo (fix), or yes (refresh state then retry)
422 Unprocessable EntitySchema-valid but semantically wrongNo
429 Too Many RequestsRate limited — see Retry-After headerYes after backoff
500 Internal Server ErrorServer bug — quote request_idYes with backoff
502 / 503 / 504Transient infrastructureYes with exponential backoff

Common error codes

CodeMeaning
validation_failedOne or more fields fail schema validation
slug_takenThe requested vanity slug is already in use
link_destination_unsafeDestination URL flagged by url-scanner
quota_exceededWorkspace hit a soft/hard limit on links or clicks
domain_not_verifiedCustom domain DNS hasn’t propagated
idempotency_key_mismatchSame key, different payload — change one
audit_immutableTried to mutate an already-counter-signed BAA

Idempotency

Mutating endpoints accept an Idempotency-Key header. Same key + same body within 24h returns the original response (replayed from cache). Same key + different body returns 409 idempotency_key_mismatch.

curl -X POST https://api.elido.app/v1/links \ -H "Authorization: Bearer $ELIDO_TOKEN" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "destination_url": "https://example.com" }'

Retries

Retry only 429, 5xx, and network errors. Use exponential backoff with jitter (e.g. min(60s, 2^attempt + random(0, 1000ms))). For 429, prefer the Retry-After value when present.

The first-party SDKs implement this automatically.