Wind Wind / Docs
Dashboard →

Reference

Errors & types

The error envelope, every code, and the shapes you get back.

Error envelope

Every non-2xx response:

{ "error": {
    "code": "allocation_exhausted",
    "message": "This connection has spent its reserved allocation.",
    "type": "insufficient_funds",
    "connection_id": "conn_1a2b",
    "increase_url": "https://dashboard.usewind.app/connections/conn_1a2b",
    "review_url": null
} }

increase_url is set when raising the allocation would help. review_url is set only on connection_frozen. It links the user to dashboard.usewind.app/connections/{id}?review=paused, where they can resume the connection, allow it to spend faster, or revoke it. Both are null otherwise.

Codes

Status · codeMeaningWhat to do
400 invalid_requestmalformed body, missing Idempotency-Key, unknown or retired model, unfetchable image, a voice session on a non-realtime model, or a mock session’s ticket used for a WebRTC offerfix the request; not billed
400 feature_model_not_configuredPOST /v1/ai/features/{slug} on a feature with no default_modelset one in the console, or call /v1/ai/{model}
401 invalid_ticketvoice offer exchange with a ticket that’s wrong, expired (~60 s) or already usedcreate a new session; tickets are single use
401 unauthorizedaccess token missing, invalid or past its ~15 min TTLrefresh, retry once
402 allocation_exhaustedconnection spent its capprompt top-up / raise limit; deep-link increase_url, or POST /v1/connections/{id}/allocation-requests
402 feature_cost_exceededone call blew the feature’s per-call guardrailsurface to the user; the call was not billed
403 connection_revokeduser revoked the grantmark disconnected, prompt re-connect
403 connection_frozenWind’s risk layer paused the connection after abnormal spendstop calling and show the user review_url. They can resume it there (you get connection.resumed) or reconnect. See Paused connections
403 app_suspendedthe app is switched off — by Wind, or by you in the consolestop calling and show it; keep stored grants, they work again once it’s lifted
403 model_not_allowedthe app sets allowed_models and this model isn’t in itbug — fix the model string or widen the allowlist
409 idempotency_key_reusedsame Idempotency-Key sent with a different bodyuse a fresh key for a new request
429 rate_limiteda feature’s rate_limit reachedback off per Retry-After
429 risk_throttledWind is throttling an unusual spend burst on this connectionback off per Retry-After
429 daily_limit_reachedthis connection’s 24-hour spend limit reachedtell the user; resumes as older spend ages out of the window
429 app_spend_limitedyour app’s daily spend limit for its tier reached (limited live)back off per Retry-After; apply for full live if you’re outgrowing it
429 too_many_sessionsthe connection already has 2 pending or live voice sessionsend one first
429 sandbox_live_cost_limitedWind’s daily allowance for live-model calls in sandbox is used up and you have no key for that model’s provideradd your own provider key on the console’s Sandbox page, switch the app to mock mode, or wait
502 provider_errorupstream provider failedretry with the same Idempotency-Key — not billed

The wind block

Present on every successful POST /v1/ai/* response:

FieldTypeMeaning
featurestring · nullthe X-Wind-Feature slug, or null
provider_cost_mcintwhat Wind paid the provider
wind_fee_mcintWind’s service fee
dev_margin_mcintyour multiplier margin
user_charge_mcintdebited from the user’s balance
allocation_remaining_mcintallocation − consumed − held for this connection

Conventions

  • Money — integer micro-cents, USD. _mc fields; a _display string accompanies headline amounts.
  • IDs — prefixed opaque strings: wac_, app_, conn_, led_, acr_, evt_, rts_ (voice session), rtt_ (voice ticket). Tokens and code are opaque, unprefixed, and secret.
  • Time — RFC 3339 UTC.