# when a call fails

One line under an amber error label, in plain words, never the provider's json, with the way out on the line below where there is one.

url: https://getwh.dev/docs/cli/errors

```
provider rejected the key                          set GROQ_API_KEY to a valid key
your groq key is out of credit                     top up at console.groq.com/settings/billing, or use another key
your openai key hit its spend limit                raise it at platform.openai.com/..., or use another key
provider rate limit, try again in 12s
provider rate limit, try again in a moment
provider daily limit reached, resets in 3h 12m
provider daily limit reached, resets tomorrow
the diff is too big for gpt-5.6-terra: 17842 tokens, limit 8192
                                                   try fewer commits, a narrower range, or WH_MODEL with a larger context
provider has no model gpt-6                        wh models lists the ones the provider offers
provider has no models endpoint                    <the base url that has none>
provider is overloaded, try again in a moment
provider returned no text
provider error: <the provider's message, cut short>
could not reach api.groq.com                       <curl's own last line>
lost the connection to api.groq.com
```

The `set <var> to a valid key` hint names the variable of the active provider; ollama has no key, so it has no hint. `try again in a moment` and `resets tomorrow` are the wording when the provider does not say how long. The `too big` line always carries its hint. `could not reach` is followed by curl's last stderr line with the `curl: (N)` prefix removed; `lost the connection` means the stream was cut after text had already arrived.

A call never hangs: curl gives up on a provider that cannot be reached within 15 seconds, or that sends nothing for 5 minutes. There is no limit on the whole answer, so a long one streams to the end. A stall before any text reads `could not reach`, one after text reads `lost the connection`.

`provider has no models endpoint` is its own line on purpose: a 404 on the models path means the base url is a gateway that only proxies chat, never that the model is missing.

A few failures are not the provider's: `not a git repository` when you are outside one, `curl not found` when there is no curl on the path, and `provider sent no reply` or `provider sent no http status` when curl returned nothing usable.

## headroom [#headroom]

A key nearly out of headroom (under a tenth of its window left, as reported by the provider) gets an amber warning after the answer:

```
low on groq tokens: 8.2k of 100k left, resets in 42s
```

## the shared contract [#the-shared-contract]

The wording is a shared contract in `shared/prompts/provider.md`: the web terminal says the same things under the same amber `error:` label, so a failure reads the same wherever you ask.
