Access & approvals
Privileged requests, decided on a phone and written to the audit log.
Grant prod DB access to Sam?
A privileged, time-boxed request — needs a yes and a reason.
- Requester
- Sam R.
- Resource
- prod-db
- Scope
- read-write
- Window
- 1 hour
A notification that opens into a decision
Every Roundtrip request is one loop: something happens, a person decides on their phone, and the decision lands back in your app, signed.
- 1Trigger
The trigger
Someone requests something privileged — production access, an elevated role, a spend over the auto-approve limit. The decision needs an accountable human and a paper trail.
Someone requests something privileged — production access, an elevated role, a spend over the auto-approve limit. The decision needs an accountable human and a paper trail.
- 2Ask
The ask
The approver gets the who, the what, and the scope, plus Approve / Deny and an optional reason field. A form captures the justification right alongside the decision.
The approver gets the who, the what, and the scope, plus Approve / Deny and an optional reason field. A form captures the justification right alongside the decision.
- 3Response
What comes back
The verdict and the reason return signed to your webhook, so the grant is applied automatically and the whole exchange is recorded for audit — not reconstructed from a DM.
The verdict and the reason return signed to your webhook, so the grant is applied automatically and the whole exchange is recorded for audit — not reconstructed from a DM.
One request out, one signed response back
The card on the phone is rendered straight from the request body, not a mockup. When the recipient responds, Roundtrip POSTs a signed event to your webhook and retries until it lands.
{
"channels": [
"approvals"
],
"notification": {
"title": "Access · prod DB",
"body": "Sam requests prod DB access for 1h — needs a yes + reason."
},
"content": {
"title": "Grant prod DB access to Sam?",
"description": "A privileged, time-boxed request — needs a yes and a reason.",
"status": {
"label": "Awaiting approval",
"tone": "warning"
},
"sections": [
{
"type": "keyvalue",
"columns": 2,
"items": [
{
"label": "Requester",
"value": "Sam R."
},
{
"label": "Resource",
"value": "prod-db",
"mono": true
},
{
"label": "Scope",
"value": "read-write"
},
{
"label": "Window",
"value": "1 hour"
}
]
}
],
"actions": [
{
"id": "approve",
"label": "Approve",
"style": "primary",
"opensDetail": true
},
{
"id": "deny",
"label": "Deny",
"style": "destructive"
}
]
},
"response": {
"mode": "required",
"webhook": "https://api.example.com/roundtrip"
}
}Grant prod DB access to Sam?
A privileged, time-boxed request — needs a yes and a reason.
- Requester
- Sam R.
- Resource
- prod-db
- Scope
- read-write
- Window
- 1 hour
{
"requestId": "req_8Kx2…",
"channel": "approvals",
"kind": "form",
"action": "approve",
"values": {
"reason": "Debugging the failed migration on prod-db"
},
"respondedAt": "2026-06-20T16:41:09Z"
}