
Handle Origin pull request reviewer webhooks
Subscribe to pull_request.reviewer.added, pull_request.reviewer.removed, and pull_request.reviewer.rerequested. Official payload: OpenAPI PullRequestReviewerWebhookPayload and llms-full.txt → Events.
Origin is in Early Beta and subject to change. Subscribe when you configure the app's webhook events list. Delivery uses the same signed envelope as other Origin webhooks. Reading pending reviewers requires repository:pull_requests:reviews:read.
Events
event.type |
When it fires |
|---|---|
pull_request.reviewer.added |
A reviewer is requested. |
pull_request.reviewer.removed |
A reviewer request is removed. |
pull_request.reviewer.rerequested |
A reviewer is requested again (for example after they already submitted). |
Payload fields
| Field | Meaning |
|---|---|
pullRequest |
Pull request reference (id, number, repository) |
reviewer |
Typed reviewer: exactly one of reviewer.user or reviewer.group |
reviewer.user.id / reviewer.user.email |
User reviewer public id and email when present |
reviewer.group |
Group reviewer when the request targets a group |
createdVia |
manual or codeowners |
createdBy |
Principal that created the request, when known |
createdAt |
When the review request was created |
Sample event.payload (user reviewer via CODEOWNERS):
{
"pullRequest": {
"id": "pr_01k2ja2000e0080000000000d4",
"number": "17",
"repository": {
"id": "repo_01k2ja2000e0080000000000q4",
"name": "rocket",
"owner": {
"slug": "acme",
"id": "ns_01k2ja2000e0080000000000p3",
"type": "team"
}
}
},
"reviewer": {
"user": {
"id": "user_01k2ja2000e0080000000000c3",
"email": "jane@acme.dev"
}
},
"createdVia": "codeowners",
"createdAt": "2026-08-02T14:45:00Z"
}
Receiver tips
- Branch on
event.type. Match users onreviewer.user.id(user_…); match groups onreviewer.group.id(grp_…). - After any of the three events, refresh the pending set with List Pull Request Requested Reviewers when you need the full outstanding list.
- A direct user request clears when that user submits a review; a group request clears when any current member submits. An unsubmitted draft leaves the request pending.
- Keep the receiver answering within the 10-second delivery deadline.
Pitfalls
- Do not read a flat
reviewer.kind/reviewer.idpair — use the typeduserorgroupmember (breaking change from August 26, 2026). - Display names do not resolve on the REST request endpoints; store public ids from these payloads.