[BUG] Routines /run endpoint returns HTTP 400 "trigger_id: Extra inputs are not permitted" — both web UI and RemoteTrigger tool affected
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The "Run now" button on a routine page (claude.ai/code/routines/<trigger_id>) consistently fails with the toast "Failed to start run. You can try again." regardless of which model, repository, or prompt is configured.
Inspecting the network call shows the server returns HTTP 400 with:
{"type":"error","error":{"type":"invalid_request_error","message":"trigger_id: Extra inputs are not permitted"}}
The exact same error surfaces when triggering the run via the RemoteTrigger tool inside Claude Code (action: "run"). Both clients seem to include trigger_id in the request body in addition to the URL path, and the server's body validator rejects it as an extra field.
Net effect: it is impossible to manually trigger ANY routine. Scheduled cron-driven runs may still work via a different code path, but cannot be confirmed without waiting for one to fire.
What Should Happen?
Clicking "Run now" should start a fresh remote agent session and return a 200 with a session/run id, identical to the behavior the docs describe at https://code.claude.com/docs/en/web-scheduled-tasks.
Error Messages/Logs
HTTP 400
request_id: req_011CaSh7izYufENBzzFf5YKi
{"type":"error","error":{"type":"invalid_request_error","message":"trigger_id: Extra inputs are not permitted"},"request_id":"req_011CaSh7izYufENBzzFf5YKi"}
Browser console stack (web UI):
mutationFn @ https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/index-wRctMB7g.js:3
fn @ https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/vendor-BNxKmwN0.js:20
start @ https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/vendor-BNxKmwN0.js:20
execute @ https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/vendor-BNxKmwN0.js:20
mutate @ https://assets-proxy.anthropic.com/claude-ai/v2/assets/v1/vendor-BNxKmwN0.js:20
Steps to Reproduce
- Create a routine via /schedule (or via the web UI). Any valid
cron_expressionandjob_configworks — the create call returns 200 and the routine shows up in the UI. - Open the routine: https://claude.ai/code/routines/<trigger_id>
- Click "Run now".
- Observe the toast: "Failed to start run. You can try again."
- Open DevTools → Network → click the failing POST to /v1/code/triggers/<trigger_id>/run.
- The response body contains:
{"type":"error","error":{"type":"invalid_request_error","message":"trigger_id: Extra inputs are not permitted"}}
- Repeat in Claude Code with the RemoteTrigger tool (action: "run", trigger_id: "<id>") — same 400 response.
Claude Model
Sonnet (default)
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.119 (VS Code extension on Windows 11 — anthropic.claude-code-2.1.119-win32-x64)
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
VS Code integrated terminal
Additional Information
Same error surfaces from two independent clients (browser web UI at claude.ai/code/routines AND the RemoteTrigger tool inside Claude Code). Both transports send trigger_id in the request body in addition to the URL path. Strong indicator the regression is server-side (POST /v1/code/triggers/{trigger_id}/run body validator was tightened to reject extra fields, but no client was updated to stop sending trigger_id in the body).
Related (different but adjacent regressions in the same routines API surface):
- https://github.com/anthropics/claude-code/issues/43440 (RemoteTrigger 500s on list/update/delete)
- https://github.com/anthropics/claude-code/issues/43438 (Scheduled triggers HTTP 500 on all endpoints)
Severity: High. Run-now is the recommended way to validate a routine before letting cron fire it — currently impossible. Cron may still work; cannot be confirmed without waiting.
Workaround: none.
This issue has 8 comments on GitHub. Read the full discussion on GitHub ↗