Cloud routine webhook triggers created via /v1/code/webhook-triggers API never fire (accepted but never bound to GitHub); UI cannot repair them
Summary
Webhook triggers attached to a cloud routine via POST /v1/code/webhook-triggers return HTTP 200 with warnings: [] but never deliver — including for the documented-supported pull_request event type. A routine carrying such a trigger record also rendered a blank detail page at claude.ai, and once the page did render, saving from the UI failed with "Routine saved, but the GitHub trigger couldn't be updated. Edit again to retry." Recreating the routine through the UI wizard fixed everything (fires within ~4s of a push).
Environment
- Routines research preview, claude.ai/code
- Claude GitHub App installed org-wide, All repositories, read/write on pull requests / repository hooks / workflows; no pending permission updates
- Routine itself healthy throughout: manual runs and cron fires worked perfectly; only webhook delivery was dead
- Repo: a private repo,
<org>/<repo>below (happy to share privately)
Timeline (all 2026-08-13 UTC)
- 17:58 — Routine created via
POST /v1/code/triggers(trig_011Gf6Wc6XPPRPdUcLJvSuLH). Manualrunworks. - 17:59 —
POST /v1/code/webhook-triggerswith{hook_type: "app", source: "github", scope_id: "<org>/<repo>", events: ["pull_request_review", "pull_request_review_comment"], routine_trigger_id: ...}→ HTTP 200,warnings: [], trigger5fcd10ef-98f0-40e3-8430-c87b8bd29932. Note: these event types are not in the routines docs' supported list (pull_request / release) — the API accepted them anyway. Suggestion: validate and 4xx here. - 19:02, 20:21, 20:23 — three real
pull_request_reviewevents on the repo → zero fires; routinelast_fired_atnever moved. - 20:36 — second webhook trigger created, this time with the supported
events: ["pull_request"]→ HTTP 200, triggerb490d343-f0bb-47b9-8df1-71148dbf3280. - 21:04:13 — clean test:
pull_requestsynchronize (push) with the routine fully idle → zero fires. So the API path fails to bind even for supported event types. - UI symptoms along the way: the routine's detail page rendered blank; after recreating the page state, editing + saving the routine produced "Routine saved, but the GitHub trigger couldn't be updated. Edit again to retry." (Likely choking on the unsupported-events record from step 2.) The UI's event dropdown also confirms the real vocabulary is pull_request actions — review-submitted events are not offered.
- 21:38 — user deleted the routine and recreated it in the UI wizard (
trig_01KqFxNJfRSwdUK3J7QdRr5H) with a "Commits pushed" trigger → 21:41:25 push fired a run at 21:41:29. Working perfectly since.
Expected
Either the /v1/code/webhook-triggers API binds the GitHub subscription like the wizard does (and rejects unsupported event names), or the endpoint is documented as UI-only.
Asks
- Validate
eventsagainst the supported set — silent acceptance of undeliverable event names cost most of the debugging time. - Make API-created webhook triggers actually bind, or return an error directing to the UI.
- Investigate the blank routine detail page + failed UI save when an unsupported-events trigger record is attached (repair path shouldn't require delete-and-recreate.
Routine ids above should let you find the records server-side; the broken routine was deleted by the user but presumably soft-deleted. Happy to provide more detail.
EOF
)