Install any skill in seconds. Free to start, no credit card required.
Get Started Free →veniceai/venice-errors
Handle Venice API errors correctly. Covers the StandardError / DetailedError / ContentViolationError / X402InferencePaymentRequired body shapes, every meaningful status code (400, 401, 402, 403, 415, 422, 429, 500, 503, 504), the 402 PAYMENT-REQUIRED header used by x402 inference, 422 content-policy suggested_prompt retry pattern, 429 rate-limit headers, and an exponential-backoff retry strategy with idempotency.
Passed 20 of 23 test cases with the skill, and 12 of 23 without it.
and 10 more in the full report
8 fixed12 passed either way3 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 8 test cases the skill fixed. Same model, same prompt, with and without the skill.
When parsing rate limit response headers from Venice AI, what time units are used by `x-ratelimit-reset-requests` compared to `X-RateLimit-Reset` on `/crypto/rpc/{network}` routes?
| Checked | Without skill | With skill |
|---|---|---|
| Treats x-ratelimit-reset-requests header values as Unix timestamps in milliseconds. | Missed | Passed |
| Treats X-RateLimit-Reset header values on crypto RPC routes as Unix seconds. | Passed | Passed |
The instructions your model reads when the skill loads.
Most Venice errors are { "error": "<message>" }, but several paths add structure. Knowing which shape you got tells you how to react.
StandardError - simple messageThe default for 4xx/5xx.
{ "error": "Authentication failed" }
DetailedError - schema validation failure (400)When a request fails Venice's own schema, details is a nested tree (_errors recursively keyed by field) and issues is the flat issue list. Some image, video and upstream failures instead return details as a plain string, so check its type before walking it.
{
"error": "Invalid request parameters",
"details": {
"_errors": [],
"type": { "_errors": ["Invalid enum value. Expected 'asr' | 'decision' | … , received 'bogus'", "Invalid enum value. Expected 'all' | 'code', received 'bogus'"] }
},
"issues": [
{ "code": "invalid_union", "unionErrors": [ … ], "path": ["type"], "message": "Invalid input" }
]
}
(That is the live response to GET /models?type=bogus.)
Many 400s are plain StandardError - handle both. Render details / issues; don't retry.
400, chat){
"error": {
test cases passed, vs 12 / 23 without
Published skills whose descriptions closely match this one, with their headline benchmark lift.
More skills from the same source and nearby in the registry, with their headline benchmark lift.