Skip to main content
Errors return a JSON body with a human-readable error and a stable machine-readable code.
Branch on code. The error string is written for humans and may be reworded.

Codes

Things that are not errors

Two cases return HTTP 200 and are easy to mistake for failures. A wallet with no identities. data: null, meta.found: false. The lookup succeeded and the answer is that there is nothing attached. See found, missing, and checked. A reverse lookup with no matches. data: [], meta.total_count: 0.

Retrying

SERVICE_UNAVAILABLE and INTERNAL_ERROR are worth retrying with exponential backoff. RATE_LIMIT_EXCEEDED is worth retrying once the window resets. Nothing in the 400 family is worth retrying. The request is malformed and will fail identically until you change it. BATCH_SIZE_EXCEEDED is the exception in spirit: split the batch and retry the pieces. 401 means the key is wrong. Retrying will not fix it and repeated failures are a good way to look like an attack.