Skip to content

Error Handling

All errors return a consistent JSON format:

{
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description",
"request_id": "abc123"
}
}
HTTP StatusCodeDescription
400INVALID_VAT_IDVAT ID format is invalid
401UNAUTHORIZEDMissing or invalid API key/token
403EMAIL_NOT_VERIFIEDEmail not yet verified
404NOT_FOUNDEndpoint or resource not found
409CONFLICTEmail already registered
429RATE_LIMITEDRate limit exceeded
500INTERNAL_ERRORUnexpected server error
503SOURCE_UNAVAILABLEAll upstream validation sources down

When rate limited (429), the response includes:

  • Retry-After - Seconds until you can retry
  • X-RateLimit-Remaining - Always 0 when limited
  • X-RateLimit-Reset - Unix timestamp when the limit resets