Errors & Rate Limits
Error format, error codes, and rate limiting.
Error format
All errors are JSON:
{ "error": { "code": "invalid_type", "message": "Invalid or missing type. Valid types: ..." } }Error codes
| HTTP | Code | Meaning |
|---|---|---|
| 400 | missing_param | A required parameter is absent |
| 400 | invalid_type, invalid_format, invalid_size, invalid_orientation, invalid_scale, invalid_height, invalid_rotate, invalid_includetext, invalid_showtext, invalid_text | A parameter has an invalid value; the message lists valid values |
| 422 | encode_failed | The value can't be encoded in the chosen symbology (e.g. wrong check digit, invalid characters) — the message includes details |
| 429 | rate_limited | Rate limit exceeded — retry after the Retry-After seconds |
| 500 | internal_error | Server-side rendering failure — barcode or label rendering failed, PDF assembly failed, or label rendering is temporarily unavailable. Not caused by request parameters; safe to retry. |
Rate limits
60 requests per minute per IP, with bursts up to 20. Every response includes:
X-RateLimit-Limit— requests allowed per minuteX-RateLimit-Remaining— remaining burst capacityX-RateLimit-Reset— seconds until the bucket fully refillsRetry-After— on 429 responses, seconds until the next request would be allowed
When API keys ship, limits will be per key with higher tiers available.