Valta Docs

Error codes

CodeHTTPMessageWhat to do
API_KEY_REQUIRED401Missing API keySend x-api-key or Authorization: Bearer.
INVALID_API_KEY401Invalid or expired API keyRotate the key in the dashboard.
INSUFFICIENT_API_KEY_PERMISSIONS403API key missing required permission: …Create a key with write access.
API_KEY_RATE_LIMITED429API key rate limit exceededBack off and respect retry cadence.
IP_BLOCKED403IP address blockedContact support if unexpected.
TIER_LIMIT403Agent limit reached on … tierUpgrade plan or delete unused agents.

Validation errors return 400 with { error: string } describing the missing field.

Enforced proxy (POST /v1/chat/completions)

A denied proxy call never reaches OpenAI. Every deny has the same body — an OpenAI-style error object (so OpenAI SDKs show a readable message) plus flat fields you can match on:

json
{
  "approved": false,
  "reason": "per_run_limit",
  "id": "allow_…",
  "message": "Valta per-run limit reached for this run. No request was sent to OpenAI.",
  "error": { "message": "…", "type": "valta_denied", "code": "per_run_limit" }
}
reasonHTTPMeaningWhat to do
per_run_limit402This call would push the run over its per-run cap.Expected — stop the loop. Raise the cap on the agent page if it was too low.
daily_limit402Over the agent's daily cap.Wait for the next UTC day, or raise the limit.
monthly_limit402Over the agent's monthly cap.Wait for the 1st (UTC), or raise the limit.
plan_limit402Your Valta plan's tracked spend for the month is used up (Free $50, Builder $500, Startup $5,000).Upgrade — the body includes plan, limit, upgradeTo, upgradeUrl.
plan_agent_limit402Your plan's number of Cap agents this month is used up.Upgrade, or use an agent that's already active this month.
plan_key_limit402This virtual key is beyond your plan's active-key count (e.g. after a downgrade).Revoke extra keys, or upgrade.
frozen403The agent is frozen.Unfreeze it on purpose, or leave it.
cap_disabled403Cap isn't turned on for this agent.Enable Cap on the agent page.
no_provider_key403No OpenAI key is stored for this agent.Save one in the agent's proxy panel.
rate_limited429Too many requests on this virtual key in the last minute (Free 10/min).Back off; honour Retry-After.
valta_unavailable503Valta couldn't make a decision, so it failed closed.Retry later; check GET https://valta.co/v1/health.

Other proxy responses:

HTTPerror.codeMeaning
401invalid_api_keyMissing, wrong, or revoked virtual key. The key must start with vk_live_.
400stream_not_supported / missing_model / missing_messages / invalid_jsonBad request shape. Streaming isn't supported yet.
502 / 504upstream_unreachable / upstream_timeoutValta approved the call but couldn't reach OpenAI, or OpenAI didn't answer in 100 seconds. The estimate stays charged, since OpenAI may have run it.
OpenAI's own statusOpenAI's own code (e.g. insufficient_quota)Valta approved the call and OpenAI refused it. OpenAI's error is passed through and the estimate is released.

OpenAI SDKs don't auto-retry 402 or 403. Set max_retries=0 if you don't want the SDK retrying 429/5xx either.

Proxy key management

CodeHTTPWhereWhat to do
PLAN_VIRTUAL_KEY_LIMIT402Creating a virtual keyYour plan's active virtual keys (per account) are in use. The body names the agent(s) holding them (activeKeyAgents). Use that key, revoke it, or upgrade.
INVALID_PROVIDER_KEY400Saving an OpenAI keyDoesn't look like an OpenAI key (sk-…), or is a Valta virtual key.
LIVE_MODE_REQUIRED400Any provider-key / virtual-key routeUse a live Valta API key, not a test-mode one.

See the proxy API reference for the endpoints themselves.