Cloud routine webhook triggers created via /v1/code/webhook-triggers API never fire (accepted but never bound to GitHub); UI cannot repair them

Status Open
Maintainer reply None cached
Activity 0 comments · opened Aug 13, 2026

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)

  1. 17:58 — Routine created via POST /v1/code/triggers (trig_011Gf6Wc6XPPRPdUcLJvSuLH). Manual run works.
  2. 17:59POST /v1/code/webhook-triggers with {hook_type: "app", source: "github", scope_id: "<org>/<repo>", events: ["pull_request_review", "pull_request_review_comment"], routine_trigger_id: ...}HTTP 200, warnings: [], trigger 5fcd10ef-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.
  3. 19:02, 20:21, 20:23 — three real pull_request_review events on the repo → zero fires; routine last_fired_at never moved.
  4. 20:36 — second webhook trigger created, this time with the supported events: ["pull_request"] → HTTP 200, trigger b490d343-f0bb-47b9-8df1-71148dbf3280.
  5. 21:04:13 — clean test: pull_request synchronize (push) with the routine fully idle → zero fires. So the API path fails to bind even for supported event types.
  6. 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.
  7. 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

  1. Validate events against the supported set — silent acceptance of undeliverable event names cost most of the debugging time.
  2. Make API-created webhook triggers actually bind, or return an error directing to the UI.
  3. 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
)

View original on GitHub ↗