Disclosure and availability: DaoXE is a multi-model multi-protocol API gateway we operate (Chat Completions, Responses, Anthropic Messages, and related compatible surfaces—not OpenAI-only). It is not available in mainland China. This article is for developers in regions allowed by the service terms.
My curl smoke test returned HTTP 200.
Cline / Continue / Roo still failed with a red error.
That combination is common. It is usually not proof that the gateway is down. It is usually proof that the client dialect and the path you just verified are not the same thing.
This post is the failure-isolation ladder I use after the first three checks already pass:
- The 3-step smoke test I use for any OpenAI-compatible API
- One gateway, three protocols: Chat Completions, Responses, and Anthropic Messages
- How I configure Cline, Continue, and similar tools against a multi-protocol gateway
I run these against DaoXE as a multi-model multi-protocol gateway. The same ladder applies to any gateway that exposes more than one protocol surface.
The paradox
curl proves:
- auth works for the path you called
- one model ID is callable right now for your account
- the host is reachable
It does not prove:
- your IDE uses the same protocol
- your IDE uses the same auth header style
- your IDE appends paths the same way
- the model ID you pasted into settings still exists in the account catalog
- every model works with every tool-calling client
Coding assistants often speak OpenAI Compatible Chat Completions only. Agent stacks may prefer Responses. Claude-oriented tools may speak Anthropic Messages. A multi-protocol gateway can expose all three. Your client may use only one.
Isolation ladder (order matters)
Do not start by reinstalling the extension. Start by shrinking the surface.
1. Re-run a tiny Chat Completions smoke
export DAOXE_API_KEY="your_api_key"
export DAOXE_BASE_URL="https://daoxe.com/v1"
export DAOXE_MODEL="paste_exact_id_from_your_account"
curl --fail-with-body --show-error --silent \
-H "Authorization: Bearer $DAOXE_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"$DAOXE_MODEL\",
\"max_tokens\": 8,
\"messages\": [{\"role\":\"user\",\"content\":\"Reply with OK.\"}]
}" \
"$DAOXE_BASE_URL/chat/completions"
Pass means the account and Chat Completions path are fine. Fail means stop blaming the IDE.
2. Confirm base URL shape
For DaoXE the fixed base is:
https://daoxe.com/v1
Common traps:
| Setting | Symptom |
|---|---|
Missing /v1 when the client expects a full OpenAI base |
404 on /chat/completions
|
Extra /v1 when the client already appends /v1/...
|
double path, 404 |
| Trailing slash quirks in some clients | intermittent path join bugs |
| Copying a docs host that is not the live API host | wrong environment entirely |
If the client docs say "base URL like OpenAI", match that client's expectation, not a blog screenshot from another tool.
3. Confirm auth style the client expects
| Surface | Typical auth |
|---|---|
| Chat Completions / Responses / models | Authorization: Bearer <key> |
| Anthropic Messages |
x-api-key: <key> plus anthropic-version
|
A key that works with Bearer on /v1/chat/completions can still fail in a Claude-shaped client if that client never sends Messages headers to /v1/messages.
4. Confirm the protocol the client actually uses
Many IDE coding tools only use Chat Completions.
If you only verified Anthropic Messages, and the IDE only posts to Chat Completions, you verified the wrong dialect for that UI.
If you only verified Chat Completions, and the tool is configured as an Anthropic provider, you verified the wrong dialect for that UI.
Match protocol to client before comparing error text.
5. Refresh the model ID from the current catalog
curl --fail-with-body --show-error --silent \
-H "Authorization: Bearer $DAOXE_API_KEY" \
"$DAOXE_BASE_URL/models"
Copy an exact ID from the response for this account.
Do not reuse:
- a model name from an old tutorial
- a marketing label that is not an API id
- a model that existed last week and is no longer listed for this account
Multi-model gateways are account-scoped. Blog hardcodes go stale.
Footgun table
| Footgun | What it looks like | Fix |
|---|---|---|
| Wrong protocol for client | curl OK, IDE auth/path errors | Use the dialect the client actually speaks |
| Stale model ID | model_not_found / 404-ish model errors | Re-copy from /v1/models now |
| Double base path | /v1/v1/chat/completions |
Drop extra /v1 or add the missing one per client docs |
| OpenAI-only mental model | "gateway broken" after Messages-only test | Test the protocol the IDE uses |
| Responses client pointed at Chat Completions only | agent stack fails after chat UI works | Verify /v1/responses if that client needs it |
| Anthropic client pointed at Chat Completions only | Claude-oriented tool fails after curl chat works | Verify /v1/messages with x-api-key
|
| Timeout misread as auth | long hang, generic failure | Check model cold start / timeout settings after auth smoke passes |
| Secrets in shared config | key leaked into git or team chat | Env vars / secret storage only |
| Assuming every model is always listed | yesterday's compare script fails today | Treat catalog as live data |
Match protocol to client
Short decision map:
- Cline / Continue / Roo / many coding assistants → usually OpenAI Compatible Chat Completions with custom base URL
- Newer agent stacks → may want Responses
- Claude Code / Anthropic-shaped tools → Anthropic Messages
- Image tools → OpenAI-compatible image generation where the account catalog includes image models
The gateway may expose all of these. The client may only use one. Configure the path the client speaks; do not force every client through one mental model.
Public client notes for DaoXE:
Minimal fix checklist
Copy this order when an IDE is red after curl is green:
- Re-run tiny Chat Completions smoke with the same key.
- List models; paste one exact current ID into the client.
- Set base URL exactly as that client's OpenAI-compatible docs require (
https://daoxe.com/v1for DaoXE when the client expects a full OpenAI base). - Confirm the client is not configured as Anthropic-only unless you intend Messages.
- Retry one client only. Do not fan out to five IDEs while debugging.
- Only after one client works, clone the working triple: base URL + key storage + model ID.
What success looks like
Success is not "every protocol works in every IDE."
Success is:
- curl proves the account path you need
- the IDE uses a matching dialect
- the model ID is live for this account
- failures become local config issues instead of vague "API broken" reports
Soft CTA
If you want the product side of this writeup:
https://daoxe.com/?utm_source=devto&utm_medium=organic&utm_campaign=global_launch_debug
If something still fails after the ladder, comment with:
- which client
- which protocol you intended
- HTTP status if you have one
- redacted error text
Do not paste API keys.
Series
- Smoke test
- Multiprotocol checklist
- Client setup
- This post: curl works, IDE fails
Next natural post in the series is the Claude protocol smoke test for Anthropic Messages clients.
Top comments (0)