Clients/pi
Use the Wokey API with pi
Get a Wokey API key, point pi at the Wokey base URL, then confirm the connection with one curl request.
Updated
Get an API key and the base URLlink
Every client uses the same Wokey API key and the same base URL.
Create an API key
Sign in and create a platform key on the API page. Keys in one account share its balance.
Create an API keykeyUse the Wokey base URL
Set the client base URL to the gateway domain; the configuration below shows whether to append /v1.
Configure the clientlink
pi reads custom providers from models.json. The configuration below calls Claude models through Anthropic Messages; for GPT, DeepSeek, and other models add a second provider with api set to openai-completions and a baseUrl ending in /v1.
- 1
Export the API key
Run export WOKEY_API_KEY="YOUR_API_KEY" in the terminal that starts pi, or add it to ~/.zshrc.
- 2
Write models.json
Save the content below to ~/.pi/agent/models.json. If the file already has other providers, add only the wokey entry under providers.
- 3
Select the model
Start pi, type /model, and pick a model under wokey.
{
"providers": {
"wokey": {
"baseUrl": "https://api.wokey.ai",
"api": "anthropic-messages",
"apiKey": "$WOKEY_API_KEY",
"models": [
{ "id": "claude-opus-5-5", "reasoning": true, "input": ["text", "image"] }
]
}
}
}API formats and base URLslink
When one client switches API format, whether the base URL ends in /v1 can change.
| Format | Base URL | Use it for |
|---|---|---|
| Anthropic Messages | https://api.wokey.ai | Claude models |
| OpenAI Chat Completions | https://api.wokey.ai/v1 | DeepSeek, GLM, Kimi, and other models |
| OpenAI Responses | https://api.wokey.ai/v1 | GPT models |
Where it is configured: ~/.pi/agent/models.json
Verify with curllink
If the client reports an error, rule out the key and base URL with curl first.
pi uses the Anthropic Messages format by default. A 200 from this request means the key and base URL are right. Replace YOUR_API_KEY with your key before sending it.
curl https://api.wokey.ai/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [
{ "role": "user", "content": "Hello" }
]
}'Errors & Troubleshootinglink
Separate auth, balance, rate limit, model availability, and upstream timeout cases first.
invalid api key
The key is missing, mistyped, deleted, or Authorization / x-api-key headers conflict.
insufficient balance
The account balance is too low. Top up before sending more requests.
model_denylisted / account_restricted
Calls to the model, or to every model on the account, are paused after repeated violations. See Violation Handling Fees & Restrictions.
request_blocked
This request was blocked before reaching the upstream and is not charged, for example an unchanged resend of a request the model just refused, or a paused end user (X-End-User-Id). The error message says what is blocked; change the request as it says or retry later. Other requests are not affected.
rate limited
Traffic is too frequent. Retry later or reduce concurrency. If only one model, or one end user (X-End-User-Id), keeps returning 429, it may be a temporary limit after violations.
client disconnected
The client closed the connection before the response finished (code downstream_aborted). This is free by default. Once an account has at least 50 client disconnects in the past 24 hours and they make up 10% or more of its requests, later disconnected requests are billed for the usage the upstream reported: the processed input, including cache reads and writes, and output only when the upstream counted it. A disconnect before the upstream reported any usage stays free. The account is notified when billing starts, and billing stops automatically within an hour once the disconnect rate is back to normal. The usual cause is a client or proxy timeout that is too short, or a program that cancels requests before they finish.
upstream unavailable
The upstream model service is temporarily unavailable. Switch models or retry later.
upstream timeout
The upstream response timed out. Shorten context, reduce max_tokens, or retry.
upstream overloaded
The upstream model is temporarily overloaded and Wokey already retried on other routes (code upstream_overloaded). It is unrelated to your balance. Retry shortly or switch models.
Frequently asked questionslink
- Should the pi baseUrl end in /v1?
- It depends on the api field. With anthropic-messages use https://api.wokey.ai with no /v1; with openai-completions or openai-responses use https://api.wokey.ai/v1.
- Why are the Wokey models missing from /model?
- pi does not list custom models when it cannot resolve the API key. If apiKey is $WOKEY_API_KEY, export WOKEY_API_KEY in the same terminal that starts pi, then check that models.json is valid JSON. /model re-reads the file every time it opens.
- How do I send images to a Wokey model in pi?
- Custom models in pi declare text input only by default. Add "input": ["text", "image"] to a model that accepts images to declare that it takes image input.
- Do I need to change the context window and max output?
- Without them pi assumes contextWindow 128000 and maxTokens 16384. When the model has a larger window, set contextWindow and maxTokens in the model entry to the values on its model page.
- Can I keep the API key out of the file?
- Yes. apiKey accepts an environment variable written as $NAME, and a !command form that reads the key from a command's output.