RemoteTrigger tool: `action: run` rejects `trigger_id` with HTTP 400 'Extra inputs are not permitted'
Summary
When invoking the RemoteTrigger tool (used by the /schedule skill) with action: "run" and a valid trigger_id, the API returns HTTP 400 with trigger_id: Extra inputs are not permitted. The same trigger_id works correctly with action: "get". The tool appears to serialize trigger_id into the request body instead of using it only for the URL path (POST /v1/code/triggers/{trigger_id}/run).
Reproduce
I created a routine successfully:
{"action": "create", "body": {"name": "...", "cron_expression": "0 8 1 */2 *", ...}}
Response: HTTP 200 — routine trig_01SvQMS5Vbx2FWCS7HFJVDvY created.
Then get works:
{"action": "get", "trigger_id": "trig_01SvQMS5Vbx2FWCS7HFJVDvY"}
Response: HTTP 200 with full routine config.
But run fails:
{"action": "run", "trigger_id": "trig_01SvQMS5Vbx2FWCS7HFJVDvY"}
Response:
HTTP 400
{"type":"error","error":{"type":"invalid_request_error","message":"trigger_id: Extra inputs are not permitted"}}
Same error with body: {} added. Request IDs: req_011CabLR17UhMFwS6jbAij1P, req_011CabLRKABfRJQff184hKPv.
Expected
run should trigger an immediate execution of the routine and return success, as documented:
POST /v1/code/triggers/{trigger_id}/run (optional body)
Hypothesis
The tool's run action likely places trigger_id into the JSON request body (as it does for create), but the API endpoint validates the body against a schema that doesn't include trigger_id (since it's already in the URL path). Either:
- The tool should strip
trigger_idfrom the body before POSTing forrun, or - The API should ignore extra
trigger_idfields in the body for path-bound endpoints.
Workaround
Trigger manual runs via the web UI (https://claude.ai/code/routines/{trigger_id}) — confirmed working there.
Environment
- Claude Code CLI, Opus 4.7 (1M context)
- macOS Darwin 25.4.0
- Skill:
schedule(built-in)
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗