Bug type
Crash (process/app exits or hangs)
Beta release blocker
No
Summary
When the Anthropic provider rejects a request with invalid_request_error
("Your credit balance is too low to access the Anthropic API"), the gateway
correctly detects this and makes the decision surface_error with
reason=billing. However, the webchat control-ui client shows no error,
no message, no indication of failure — the UI just sits as if the request
is still in flight.
This is the opposite failure mode of #13935 (where a billing error is
shown inappropriately) and a UI-specific variant of #24622 (gateway hang
on billing error).
Environment
- OpenClaw:
ghcr.io/openclaw/openclaw:latest (Docker)
- Deployment: docker compose, gateway container
openclaw-openclaw-gateway-1
- Webchat client:
openclaw-control-ui webchat v2026.4.21
- Host: Ubuntu 20.04
- Provider:
anthropic (API key, credit-depleted account for repro)
- Model tested:
anthropic/claude-haiku-4-5-20251001
(also reproducible with anthropic/claude-opus-4-7)
Steps to reproduce
- Configure an Anthropic provider with an API key whose credit balance is zero.
- Open the webchat UI, send any message.
- Observe: no response, no error, no indication of failure in the UI.
Expected behavior
The webchat UI should render the provider error (or at minimum a generic
"provider rejected request — check gateway logs" message) so the operator
knows to check billing. The gateway's own log line
decision=surface_error reason=billing suggests the backend intended
to surface this to the client.
Actual behavior
UI shows nothing. Gateway log contains the full error but it never reaches
the webchat client.
OpenClaw version
2026.4.21
Operating system
Ubuntu 20.04 LTS (host); gateway runs inside Docker container
Install method
Docker Compose; image ghcr.io/openclaw/openclaw:latest pulled from GHCR. Config at /data/backup/docker-work/openclaw/ on host, mounted to /home/node/.openclaw/openclaw.json in container.
Model
claude47 / anthropic/claude-haiku-4-5-20251001 (also reproduced with anthropic/claude-opus-4-7)
Provider / routing chain
webchat (openclaw-control-ui webchat v2026.4.21) → gateway container (openclaw-openclaw-gateway-1) on host port 18789 → [agent/embedded] runtime → anthropic provider (direct, no intermediate proxy/router) → api.anthropic.com
Additional provider/model setup details
- Anthropic provider configured directly with API key (no OpenRouter, no LiteLLM, no other router in path).
- Auth profile: sha256:154a23a3efe6 (from gateway log).
- Reasoning: off (agents.defaults.thinkingDefault=off).
- No fallback models configured for the agent — the run hits exactly one provider and surfaces the error rather than failing over.
- Repro account: Anthropic API key with zero remaining credit balance,
which causes the API to return HTTP 400 with
type=invalid_request_error, message="Your credit balance is too low..."
- Model switching was done via a helper script (oc-ai-switch.sh preset "haiku45")
which edits openclaw.json and restarts the gateway container;
the bug reproduces identically regardless of which model string is active,
since the failure is at the provider-auth layer before model dispatch.
Logs, screenshots, and evidence
Here's the "Logs, screenshots, and evidence" block for the issue form:
markdown
## Gateway log — relevant excerpt
Host: `docker logs openclaw-openclaw-gateway-1`, filtered to the failing run.
API key on purpose has zero credit balance (account under test) to repro.
2026-04-22T09:18:20.212+00:00 [gateway] agent model: anthropic/claude-haiku-4-5-20251001 2026-04-22T09:18:20.213+00:00 [gateway] ready (5 plugins: acpx, browser, device-pair, phone-control, talk-voice; 4.5s)
2026-04-22T09:41:29.171+00:00 [agent/embedded] embedded run agent end: runId=010f1588-6c76-4750-a215-bee3dbfb8ad9 isError=true model=claude-haiku-4-5-20251001 provider=anthropic error=LLM request rejected: Your credit balance is too low to access the Anthropic API. Please go to Plans & Billing to upgrade or purchase credits. rawError=400 {"type":"error","error":{"type":"invalid_request_error", "message":"Your credit balance is too low to access the Anthropic API. ..."}}
2026-04-22T09:41:34.326+00:00 [agent/embedded] auth profile failure state updated: runId=010f1588-6c76-4750-a215-bee3dbfb8ad9 profile=sha256:154a23a3efe6 provider=anthropic reason=billing window=disabled reused=false
2026-04-22T09:41:34.334+00:00 [agent/embedded] embedded run failover decision: runId=010f1588-6c76-4750-a215-bee3dbfb8ad9 stage=assistant decision=surface_error reason=billing from=anthropic/claude-haiku-4-5-20251001 profile=sha256:154a23a3efe6
2026-04-22T09:41:34.885+00:00 [ws] webchat disconnected code=1001 reason=n/a conn=233db546-38c7-4ba4-9c74-c1c618571942
2026-04-22T09:41:35.266+00:00 [ws] webchat connected conn=c2430169-1c5a-4061-9f0e-9f5d9ef8a52a remote=172.18.0.1 client=openclaw-control-ui webchat v2026.4.21
Reproduced twice in the same session (runIds `010f1588-…` and `895220f9-…`)
with identical `decision=surface_error reason=billing` outcome. In both
cases the webchat UI showed nothing — no error banner, no message,
no indication that the request had failed.
## Image / build evidence
$ docker inspect ghcr.io/openclaw/openclaw:latest
--format '{{index .Config.Labels "org.opencontainers.image.version"}}' 2026.4.21
$ docker inspect ghcr.io/openclaw/openclaw:latest
--format '{{index .Config.Labels "org.opencontainers.image.revision"}}' f788c88b4c508c335336fb292afed8c900656d6d
$ docker inspect ghcr.io/openclaw/openclaw:latest --format '{{index .RepoDigests 0}}' ghcr.io/openclaw/openclaw@sha256:01325e7d5c0e273d9f3495fd39b8b811c28b120be4dbe5acee0e12a433e3d2a2
Image created: `2026-04-22T02:30:45Z`
Base: `docker.io/library/node:24-bookworm`
(digest `sha256:3a09aa6354567619221ef6c45a5051b671f953f0a1924d1f819ffb236e520e6b`)
## Container health at time of repro
$ docker ps --filter name=openclaw-openclaw-gateway CONTAINER ID IMAGE STATUS PORTS f5886a21f89f ghcr.io/openclaw/openclaw:latest Up 29 minutes (healthy) 0.0.0.0:18789-18790->18789-18790/tcp
Container reports healthy throughout — this is not a crash or startup
problem, it is a client-surfacing gap.
## Config at time of repro
$ docker exec openclaw-openclaw-gateway-1
cat /home/node/.openclaw/openclaw.json | grep -E '"model"|thinkingDefault' "model": { "thinkingDefault": "off"
## Screenshots
No screenshot attached — there is nothing visible to capture. The webchat
message input accepts the prompt, the UI shows no spinner, no error, no
response. From the operator's perspective the UI is indistinguishable
from an idle state after sending a message. Happy to record a short screen
capture on request.
Impact and severity
No response
Additional information
No response
Bug type
Crash (process/app exits or hangs)
Beta release blocker
No
Summary
When the Anthropic provider rejects a request with
invalid_request_error("Your credit balance is too low to access the Anthropic API"), the gateway
correctly detects this and makes the decision
surface_errorwithreason=billing. However, the webchat control-ui client shows no error,no message, no indication of failure — the UI just sits as if the request
is still in flight.
This is the opposite failure mode of #13935 (where a billing error is
shown inappropriately) and a UI-specific variant of #24622 (gateway hang
on billing error).
Environment
ghcr.io/openclaw/openclaw:latest(Docker)openclaw-openclaw-gateway-1openclaw-control-ui webchat v2026.4.21anthropic(API key, credit-depleted account for repro)anthropic/claude-haiku-4-5-20251001(also reproducible with
anthropic/claude-opus-4-7)Steps to reproduce
Expected behavior
The webchat UI should render the provider error (or at minimum a generic
"provider rejected request — check gateway logs" message) so the operator
knows to check billing. The gateway's own log line
decision=surface_error reason=billingsuggests the backend intendedto surface this to the client.
Actual behavior
UI shows nothing. Gateway log contains the full error but it never reaches
the webchat client.
OpenClaw version
2026.4.21
Operating system
Ubuntu 20.04 LTS (host); gateway runs inside Docker container
Install method
Docker Compose; image ghcr.io/openclaw/openclaw:latest pulled from GHCR. Config at /data/backup/docker-work/openclaw/ on host, mounted to /home/node/.openclaw/openclaw.json in container.
Model
claude47 / anthropic/claude-haiku-4-5-20251001 (also reproduced with anthropic/claude-opus-4-7)
Provider / routing chain
webchat (openclaw-control-ui webchat v2026.4.21) → gateway container (openclaw-openclaw-gateway-1) on host port 18789 → [agent/embedded] runtime → anthropic provider (direct, no intermediate proxy/router) → api.anthropic.com
Additional provider/model setup details
which causes the API to return HTTP 400 with
type=invalid_request_error, message="Your credit balance is too low..."
which edits openclaw.json and restarts the gateway container;
the bug reproduces identically regardless of which model string is active,
since the failure is at the provider-auth layer before model dispatch.
Logs, screenshots, and evidence
Impact and severity
No response
Additional information
No response