---
title: "Review Pr Webhook"
method: POST
path: "/api/v1/gm/review-pr"
tags: ["gm"]
---

# Review Pr Webhook

`POST /api/v1/gm/review-pr`

## Request

- Base URL: `https://app.goodleads.club` (the document declares no server; this is the origin it was published from)
- URL: `https://app.goodleads.club/api/v1/gm/review-pr`
- Auth: none declared

GitHub webhook entry — launches Platform EM review on every non-draft PR.

Subscribed events: `pull_request` with actions `opened`, `synchronize`,
`reopened`, `ready_for_review`. Non-matching events return 200 with a
no-op response so the webhook delivery stays healthy in GitHub's UI.

`ready_for_review` (2026-09-05): a PR opened as a draft and later marked
ready never carried a reviewable delivery — its `opened` / `synchronize`
events all arrived with `draft: true` and were skipped, and GitHub sends
no further `synchronize` until the next push. PRs #1169 and #1192 had
to be woken by hand with `scripts/wake_em.py`. The draft skip below
still applies to every action, so draft pushes never burn a review.

Security: HMAC-SHA256 signature required via `X-Hub-Signature-256`.
Configured by setting `GITHUB_WEBHOOK_SECRET` in Secrets Manager.

Filtering (2026-04-27): no author filter. Per Gib's principle —
*"any pr where both reviewers are green, we should merge — why
wouldn't we"* — code quality is the gate, not author identity. Two
genuinely different model families (Platform EM Claude + Code
Judgment Codex) agreeing IS the multi-eye guarantee. Draft PRs are
skipped — that is the work-in-progress opt-out.

## Response `200`

Successful Response

- unknown

---

[API](https://skmtc.dev/goodleads/apis/formation-gtm-api.md) · [All operations](https://skmtc.dev/goodleads/apis/formation-gtm-api/llms.txt) · [OpenAPI document](https://skmtc.dev/goodleads/apis/formation-gtm-api/revisions/2068d13a82cf?raw)
