Routines: POST /v1/code/triggers/{trigger_id}/run returns 400 'trigger_id: Extra inputs are not permitted'
Summary
The manual-run endpoint for scheduled remote agents (routines) is rejecting all requests with HTTP 400. The Run now button in the routines UI hits this endpoint and is therefore unusable. Recurring schedules still fire normally.
Repro
- Create a routine via the
/scheduleskill (or the UI). Confirm it appears inlistandget. - Try to trigger it manually:
POST /v1/code/triggers/{trigger_id}/run
Both with an empty body and with {}:
HTTP 400
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "trigger_id: Extra inputs are not permitted"
}
}
The error message implies that trigger_id, which is part of the URL path, is also being routed into the request body schema, which then rejects it as an unknown field.
Verified
GET /v1/code/triggers(action: list) — worksGET /v1/code/triggers/{trigger_id}(action: get) — worksPOST /v1/code/triggers/{trigger_id}/run(action: run) — fails with the error above- Same failure regardless of whether the body is omitted or
{} - Reproduces in two independent calls (different
request_idvalues) - The
Run nowbutton in the web UI athttps://claude.ai/code/routines/{trigger_id}produces the same failure mode for end users
Request IDs (for server-side log lookup)
req_011Cadf3UQQtqnoYLZiutD5Vreq_011Cadf467jtkDViGK3VMnoa
Both fired against the same routine, ~seconds apart, on 2026-05-02 around 11:24 UTC.
Workaround
Creating a one-shot routine with run_once_at set ~2 minutes in the future bypasses the broken /run endpoint by using the scheduler itself to fire the job. This works but is awkward for routine users who expect the Run now button to function.
Likely fix
It looks like the endpoint's request-body Pydantic model is being given the URL path parameters as inputs and is configured to forbid unknown fields. Either drop the path param from the body model or set model_config = ConfigDict(extra='ignore') on that schema.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗