Errors

Every error has the same shape and a stable machine-readable code. Match on code, never on the message text. Messages get reworded, codes do not.

The shape

Error response
{
  "error": {
    "code": "quota_exceeded",
    "message": "You have used all 15 free lookups. Subscribe to continue."
  }
}

Codes

StatusCodeMeaning
401missing_api_keyNo Authorization header was sent.
401invalid_api_keyThe key is wrong or has been revoked.
402quota_exceededFree trial used up, or the monthly plan limit reached.
404lookup_not_foundNo lookup with that id on your account.
422missing_querySend one of query, email, or phone.
429rate_limit_exceededToo many requests this minute. Back off and retry.
500internal_errorOur fault. Safe to retry.

402 is not 429

They look similar and need opposite responses. 429 means you are going too fast. Wait and retry, the window resets each minute. 402 means you are out of lookups, so retrying will never succeed. Someone has to upgrade or raise the limit.

A failed platform check is not an error

If a platform blocks us or times out, the lookup still returns 200, and that platform is simply absent from results. You will not get an error for it, because a partial answer is still a useful answer, and reporting an unreachable site as “not registered” would be worse than saying nothing.