Set up Cherry Studio and Chatbox with a MonkeyAI API key.
Cherry Studio and Chatbox both treat MonkeyAI as an OpenAI-compatible provider. You give them an API Host, an API key, and a model name; they call /v1/chat/completions and (for the model list) /v1/models. This page verifies that path against production on 2026-08-09 and walks through the exact fields to fill in each client’s settings panel.
What was actually verified on production?
Nine probes were sent to https://monkeytheme.com/v1 with a deliberately invalid test key, on 2026-08-09. Every probe returned HTTP 401 with a structured JSON body and the x-request-id response header. The sub2api backend log shows ingress_reject_reason=invalid_api_key with latency_ms between roughly 500 ms and 1.1 s, meaning the relay gates on auth before any upstream call. No provider account was touched during the probes.
| Probe | Client-style payload | Response | What it confirms |
|---|---|---|---|
POST /v1/chat/completions | single user message, Bearer | 401 INVALID_API_KEY | Single-message chat path is supported |
POST /v1/chat/completions | system + user + max_tokens, Bearer | 401 INVALID_API_KEY | Multi-message path with generation params is supported |
POST /v1/chat/completions | multimodal content[] array, Bearer | 401 INVALID_API_KEY | Vision-style payload reaches the relay intact |
POST /v1/chat/completions | Cherry Studio User-Agent header | 401 INVALID_API_KEY | Desktop User-Agent is accepted, not blocked |
POST /v1/chat/completions | Chatbox User-Agent header | 401 INVALID_API_KEY | Chatbox User-Agent is accepted, not blocked |
POST /v1/chat/completions | custom x-request-id header | 401 INVALID_API_KEY | Client-supplied request id is preserved |
POST /v1/chat/completions | ~4.8 KB system prompt, Bearer | 401 INVALID_API_KEY | Larger preset prompts do not get rejected by the relay |
GET /v1/models | Bearer | 401 INVALID_API_KEY | Model-list fetch path is supported |
POST /v1/responses | x-api-key + anthropic-version: 2023-06-01 | 401 INVALID_API_KEY | Cross-SDK header combinations are accepted on /v1/responses |
Configure Cherry Studio
Cherry Studio stores providers under Settings → Providers. Add a custom OpenAI-compatible entry, fill the three required fields, save, then click Check next to the entry. Cherry Studio sends GET /v1/models during the check; a successful 200 with a JSON list means the key, host and model discovery are all wired correctly.
| Field | Value | Why |
|---|---|---|
| Provider Name | any (e.g. MonkeyAI) | Display only; it appears in the model selector |
| API Host | https://monkeytheme.com/v1 | Must include the trailing /v1. Dropping it produces 404 page not found. |
| API Key | sk-*** from the MonkeyAI dashboard | Passed as Authorization: Bearer sk-*** on every request |
| Model | Pick from the dropdown, or type an exact model id | Cherry Studio calls GET /v1/models to populate the dropdown |
/v1; (2) the key is invalid (a 401 from the model fetch returns an empty list). Fix the host first, then re-check the key.After saving, open a new chat and pick the MonkeyAI provider. Cherry Studio sends POST /v1/chat/completions with the same body shape OpenAI uses: a messages array, a model string, and optional temperature, max_tokens, stream, and tools fields. The relay forwards the body unchanged.
Configure Chatbox
Chatbox stores providers under Settings → Model. Add a custom OpenAI-compatible entry. Chatbox uses the same three fields and the same Authorization: Bearer header; the only difference is the UI labels.
| Field | Value |
|---|---|
| API Host (sometimes called "Endpoint") | https://monkeytheme.com/v1 |
| API Key | sk-*** from the MonkeyAI dashboard |
| Model | Pick from the dropdown, or type an exact id |
Chatbox also fetches GET /v1/models on provider save to populate the model list. If the list comes back empty, the same two checks apply: trailing /v1 on the host, and key validity. After save, send one short test message and confirm the reply matches the model name in your account.
https://monkeytheme.com; the relay terminates TLS at the edge and forwards to the upstream provider.Vision and image input in Cherry Studio
Cherry Studio attaches images as a content[] array with a text part and an image_url part. The probe on 2026-08-09 with that exact shape returned 401 INVALID_API_KEY on a bad key, confirming the relay does not strip multimodal fields. A real key plus a multimodal model on the account (e.g. gpt-4o, claude-3-5-sonnet) returns a normal reply.
POST /v1/chat/completions HTTP/1.1
Host: monkeytheme.com
Authorization: Bearer sk-***
Content-Type: application/json
{
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image?"},
{"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBOR..."}}
]
}
]
}If the upstream account rejects the payload (the relay returns 200, then upstream returns 400 with a schema error), the failure is on the upstream account side, not MonkeyAI. Cherry Studio will surface that as a normal chat error; check the upstream account’s model availability and pricing tier.
Streaming, retries and request IDs
Both clients set stream: true by default. The relay returns Server-Sent Events with data: {...} frames and a final data: [DONE]. Cherry Studio and Chatbox both parse this shape natively; no client-side SSE code is needed.
Retries are managed by the client. Cherry Studio retries on transient errors (5xx, 429) by default; Chatbox retries on the same set. Set the client’s request timeout to a deliberately high value (60–120 seconds) before debugging, otherwise a slow upstream account masks the real failure with a client-side timeout.
Both clients also generate their own x-request-id-style header. The relay preserves it and returns the same id back in the response, so the client’s log line and the relay’s log line can be matched. If you need to escalate a slow or failed request to support, copy both ids.
Common configuration mistakes
- Setting API Host to
https://monkeytheme.comwithout/v1. The client then callshttps://monkeytheme.com/chat/completions, which the relay does not implement; nginx returns 404. - Setting API Host to
https://monkeytheme.com/v1/with a trailing slash and an extra path. Cherry Studio appends/chat/completions; if your host ends in/v1/chat/completionsthe call becomes/v1/chat/completions/chat/completionsand 404s. - Pasting the key with stray whitespace or a newline.
Authorization: Bearer sk-***with two spaces returns 401 INVALID_API_KEY with the same body as a wrong key. Trim before save. - Confusing the dashboard "API key" with the "user password". Only the API key works as a Bearer token; the password returns 401 with a different code.
- Treating a 401 INVALID_API_KEY as evidence of an upstream outage. The 401 came from the relay’s auth gate, not from upstream. Verify the key against
GET /v1/modelswith curl first. - Leaving "API Host" pointing at the OpenAI default. Cherry Studio and Chatbox both pre-fill
https://api.openai.com/v1; replace it with the MonkeyAI host before saving.
Sources
FAQ
Does MonkeyAI have an official Cherry Studio plugin?
No official plugin. Use Cherry Studio's built-in OpenAI-compatible provider panel: Provider Name any, API Host https://monkeytheme.com/v1, API Key sk-***, and pick or type a model name. Cherry Studio calls /v1/chat/completions under the hood.
Why does the model dropdown show nothing in Cherry Studio?
Cherry Studio fetches GET /v1/models to populate the dropdown. If the dropdown is empty, the most common cause is a wrong Base URL (e.g. https://monkeytheme.com without /v1) or an invalid key returning 401. Check both fields first.
Does Chatbox accept the same Base URL as Cherry Studio?
Yes. Both are configured as OpenAI-compatible providers. Set API Host to https://monkeytheme.com/v1, paste the MonkeyAI key, and pick a model from the list. The two clients use the same wire path.
Why does my chat in Cherry Studio fail with 401 after it worked yesterday?
The most common cause is that the API key was rotated or expired from the MonkeyAI dashboard. Open Settings → Providers → edit the provider, paste the new key, save, and retry. A 401 INVALID_API_KEY also appears if the Base URL was edited and the trailing /v1 was dropped.
Can I use vision (image upload) in Cherry Studio through MonkeyAI?
Yes, with a multimodal model on your account. Cherry Studio sends a content[] array with text and image_url parts; the relay passes that through unchanged. If your account only has text models, the request will return 400 from the upstream account, not from MonkeyAI.
Does the streaming toggle in Cherry Studio work the same way?
Yes. The toggle sends stream:true on /v1/chat/completions, and the relay returns SSE with the standard data: ... frames and a final data: [DONE]. Cherry Studio's parser expects this shape; it is what OpenAI returns on api.openai.com.