Event Reference
Complete payload reference for every Tenpace webhook event.
On this page
Workflow Events
GitHub Events
These events mirror GitHub webhook actions. They fire immediately when the corresponding GitHub action occurs.
pr.opened
Fired when a pull request is opened or marked ready for review (converted from draft).
{
"event": "pr.opened",
"timestamp": "2025-06-01T10:23:00.000Z",
"data": {
"repo": {
"full_name": "acme/backend",
"url": "https://github.com/acme/backend"
},
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"author": "alice",
"url": "https://github.com/acme/backend/pull/142",
"state": "open",
"draft": false,
"reviewers": ["bob", "charlie"],
"additions": 87,
"deletions": 12
}
}
}pr.merged
Fired when a pull request is merged.
{
"event": "pr.merged",
"timestamp": "2025-06-01T14:05:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"author": "alice",
"url": "https://github.com/acme/backend/pull/142",
"state": "closed",
"merged": true
}
}
}pr.closed
Fired when a pull request is closed without merging.
{
"event": "pr.closed",
"timestamp": "2025-06-01T14:05:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 143,
"title": "wip: experimental feature",
"author": "dave",
"url": "https://github.com/acme/backend/pull/143",
"state": "closed",
"merged": false
}
}
}pr.review_submitted
Fired when a reviewer submits their review (approved, changes requested, or commented).
{
"event": "pr.review_submitted",
"timestamp": "2025-06-01T11:30:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"author": "alice",
"url": "https://github.com/acme/backend/pull/142"
},
"review": {
"reviewer": "bob",
"state": "APPROVED",
"body": "Looks great, ship it!"
}
}
} The state field can be APPROVED, CHANGES_REQUESTED, or COMMENTED.
pr.review_requested
Fired when a reviewer is added to a pull request.
{
"event": "pr.review_requested",
"timestamp": "2025-06-01T10:25:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"author": "alice",
"url": "https://github.com/acme/backend/pull/142",
"state": "open",
"reviewers": ["bob", "charlie"]
}
}
}pr.ci_status
Fired when a CI check suite completes on a pull request.
{
"event": "pr.ci_status",
"timestamp": "2025-06-01T10:45:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"url": "https://github.com/acme/backend/pull/142"
},
"conclusion": "success",
"check_suite_id": 123456789
}
}These events are computed by Tenpace and do not exist in GitHub's webhook API. They give you insight into the state of your review process that would otherwise require polling and complex logic to derive.
pr.ready_to_merge
Fired when the last requested reviewer approves, tipping the PR into a fully-approved state and all CI checks are passing. This is the signal to trigger automated merge workflows, notify the author, or update your project tracker.
{
"event": "pr.ready_to_merge",
"timestamp": "2025-06-01T13:55:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"author": "alice",
"url": "https://github.com/acme/backend/pull/142"
},
"approvals": ["bob", "charlie"],
"ci_status": "success"
}
}pr.attention_needed
Fired by the periodic workflow check when a PR has been open with no review activity for more than the configured threshold (default: 4 hours). Useful for alerting authors that their PR may have fallen through the cracks.
{
"event": "pr.attention_needed",
"timestamp": "2025-06-02T08:00:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 139,
"title": "fix: null pointer in user resolver",
"author": "charlie",
"url": "https://github.com/acme/backend/pull/139",
"reviewers": ["alice", "bob"]
},
"hours_open_without_activity": 6,
"threshold_hours": 4
}
}review.round_complete
Fired when every requested reviewer has submitted their review (any state: approved, changes requested, or commented). This signals that a full round of feedback is in. The PR author now has everything they need to iterate.
{
"event": "review.round_complete",
"timestamp": "2025-06-01T13:55:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"author": "alice",
"url": "https://github.com/acme/backend/pull/142"
},
"reviews": [
{ "reviewer": "bob", "state": "APPROVED" },
{ "reviewer": "charlie", "state": "CHANGES_REQUESTED" }
]
}
}review.sla_breached
Fired by the periodic workflow check for each reviewer who has been requested but hasn't submitted a review within the team's SLA window (default: 24 hours, configurable via team settings). One event is fired per reviewer per SLA breach check.
{
"event": "review.sla_breached",
"timestamp": "2025-06-02T08:00:00.000Z",
"data": {
"repo": { "full_name": "acme/backend", "url": "https://github.com/acme/backend" },
"pull_request": {
"number": 142,
"title": "feat: add rate limiting middleware",
"author": "alice",
"url": "https://github.com/acme/backend/pull/142"
},
"reviewer": "charlie",
"hours_elapsed": 28,
"sla_threshold_hours": 24
}
}