Errors, rate limits & pay-per-use
Error shape​
Every error response is JSON:
{ "error": "This API key lacks the 'write' scope." }
Validation errors (failed request body checks) return Zod's flattened error shape instead of a plain string:
{ "error": { "formErrors": [], "fieldErrors": { "amount_usd": ["Expected number, received string"] } } }
| Status | Meaning |
|---|---|
400 | Malformed request body (failed schema validation) |
401 | Missing, invalid, or revoked API key |
402 | Monthly quota exhausted — pay-per-use required, see below |
403 | Key lacks the required scope, or a plan limit was reached |
404 | Resource not found (or not yours) |
409 | Conflicting state (e.g. no primary wallet configured) |
500 | Something broke server-side |
502 | An upstream dependency (the AI model provider) was unavailable |
Rate limits​
Independent of your plan's monthly quota, every request is throttled:
- 120 requests / 10s per IP address, before your key is even checked.
- 60 requests / 10s per account, across all of that account's keys.
- The Chat endpoint has an additional 15 requests / 10s per-account cap — agent calls are more expensive to serve.
- Collect checkout (public key, no account throttle) is capped at 30 requests / 10s per IP.
A throttled request returns 429.
Monthly quota & pay-per-use (x402)​
Every plan includes a monthly API call quota (see pricing — Free: 100, Starter: 1,000, Growth: 10,000, Scale: 100,000). Calls beyond that quota are never simply blocked — they're billed per-call in USDC via the x402 protocol, directly on Base, no subscription change required.
When your quota is exhausted, a request without payment gets:
HTTP/1.1 402 Payment Required
{
"x402Version": 1,
"error": "X-PAYMENT header is required",
"accepts": [{
"scheme": "exact",
"network": "base",
"maxAmountRequired": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"payTo": "0x...",
"resource": "/api/v1/payment-links",
"description": "Veltro API request",
"mimeType": "application/json",
"maxTimeoutSeconds": 60
}]
}
Sign an EIP-3009 transferWithAuthorization for the requested USDC amount, base64-encode the payload, and retry the same request with an X-PAYMENT header. On success, the response carries an X-PAYMENT-RESPONSE header confirming settlement. Per-operation prices are small — payment-link/subscription/donation/payout creation are $0.01, invoice PDF generation is $0.02, an agent call is $0.005, a plain read is $0.001.
Veltro never signs this payment for you — you (or your system's own key) sign the USDC authorization, same non-custodial rule as every other Veltro flow.