
Handle Origin pull request comment reaction webhooks
As of the September 22, 2026 Origin changelog, apps can subscribe to pull_request.comment.reaction.added and pull_request.comment.reaction.removed. Official payload fields: llms-full.txt → Pull Request Comment Reaction Events.
Origin is in Early Beta and subject to change. Subscribe when you configure the app's webhook events list (Create App / Update App). Delivery uses the same signed envelope as other Origin webhooks.
Events
event.type |
When it fires |
|---|---|
pull_request.comment.reaction.added |
A reaction is placed on a pull request comment. Re-placing a reaction the reactor already holds delivers this event again for the same comment, reactor, and content — fold on that triple. |
pull_request.comment.reaction.removed |
A reaction is removed. Removing a reaction the reactor does not hold delivers nothing. |
Payload fields
| Field | Meaning |
|---|---|
pullRequest.id |
Immutable Origin pull request id |
pullRequest.number |
Pull request number |
pullRequest.repository |
Repository reference (id, name, owner) |
comment.id |
Comment the reaction is on |
comment.thread.id |
Thread that comment belongs to |
reaction.content |
Closed set: thumbs_up, thumbs_down, laugh, hooray, confused, heart, rocket, eyes. Treat an unrecognized value as a reaction you cannot render. |
reaction.reactor |
Principal that placed the reaction (only they can remove it). Carries user, app, or serviceAccount variants. |
Sample event.payload:
{
"pullRequest": {
"id": "pr_01k2ja2000e0080000000000d4",
"number": "17",
"repository": {
"id": "repo_01k2ja2000e0080000000000q4",
"name": "rocket",
"owner": {
"slug": "acme",
"id": "ns_01k2ja2000e0080000000000p3",
"type": "team"
}
}
},
"comment": {
"id": "cmt_01k2ja2000e0080000000000e5",
"thread": {
"id": "cth_01k2ja2000e0080000000000s6"
}
},
"reaction": {
"content": "thumbs_up",
"reactor": {
"user": {
"id": "user_01k2ja2000e0080000000000c3",
"email": "jane@acme.dev"
}
}
}
}
Receiver tips
- Deduplicate adds on
(comment.id, reactor id, content)— at-least-once delivery can repeat an identical add. - Branch on
event.typefor added vs removed; do not invent REST endpoints to list reactions (none are published in the OpenAPI ops list as of this changelog). - Keep the webhook receiver answering within Origin's delivery deadline (10 seconds as of the Sep 18, 2026 changelog).
Pitfalls
- Do not invent a remove-reaction REST write. These events are webhook-only in the published surface.
- Do not expand
reaction.contentbeyond the closed set above. - Label events (
pull_request.label.added/removed) are a separate family — see the same events table in llms-full.