Docs · Errors & rate limits
API reference
Errors & rate limits
Errors return a JSON body with a stable error code and, where useful, a human-readable message.
Error shape
401 Unauthorized
{ "error": "invalid_api_key", "message": "That key is not valid. Check it, or create a new one in your dashboard." }
402 Payment Required — sent when no key is supplied
{ "x402Version": 1, "accepts": [{ "scheme": "exact", "network": "base", "maxAmountRequired": "10000", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "payTo": "0x…", "maxTimeoutSeconds": 60 }], "error": "payment_required" }
403 Forbidden
{ "error": "upgrade_required", "required_plan": "business", "message": "This endpoint requires the business plan or higher. See https://carvector.io/pricing." }
Status codes
| Code | Meaning | When |
|---|---|---|
200 | OK | Request succeeded. |
401 | Unauthorized | Invalid or revoked API key. Error: invalid_api_key. |
402 | Payment Required | No API key sent. The response carries x402 payment terms — pay per call, or send a key. Error: payment_required. |
404 | Not Found | The vehicle, code, or resource does not exist. |
403 | Forbidden | Your plan tier does not include this endpoint. Error: upgrade_required. |
429 | Too Many Requests | Rate limit for your plan exceeded. See the Retry-After header. |
503 | Service Unavailable | Data temporarily unavailable. Retry shortly. |
Rate limits
Limits are enforced per plan across all of your keys, on a rolling window.
| Plan | Requests |
|---|---|
| Free | 500 per month |
| Developer | 10,000 per month |
| Pro | 100,000 per month |
| Business | 1,000,000 per month |
| Enterprise | Custom |
Handling 429s
When you exceed your limit you'll get429 with { "error": "rate_limit_exceeded", "limit": N, "window": "month" } and a Retry-After header (seconds). Back off for that many seconds, then retry — or move up a plan for more headroom.