← All use cases

Deploys & releases

A go/no-go on a phone, wired straight into your pipeline.

9:41
Roundtrip
CI green

Ship api@2.3.0 to production?

CI is green and the release is staged. One tap promotes it.

Version
api@2.3.0
Commits
a1f3c2…9be4
Changes
12 files
Last deploy
6h ago
The round trip

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.

  1. 1
    Trigger

    The trigger

    Your pipeline stages a release and reaches the human gate — the step that used to be a person watching a channel and clicking a link, or worse, a rubber-stamp nobody really reviews.

  2. 2
    Ask

    The ask

    Roundtrip pushes a card with the diff, the commit range, and the time since the last deploy, plus Approve / Hold buttons. The release manager decides from wherever they are.

  3. 3
    Response

    What comes back

    The tapped decision returns to your webhook, signed, carrying the release id you attached. Your pipeline promotes or holds automatically — no one re-runs a command by hand.

The API

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.

POST /roundtrip/v1/requests200 OK
{
  "channels": [
    "deploys"
  ],
  "notification": {
    "title": "Release · api@2.3.0",
    "body": "CI green, staged for production — approve to ship."
  },
  "content": {
    "title": "Ship api@2.3.0 to production?",
    "description": "CI is green and the release is staged. One tap promotes it.",
    "status": {
      "label": "CI green",
      "tone": "success"
    },
    "sections": [
      {
        "type": "keyvalue",
        "columns": 2,
        "items": [
          {
            "label": "Version",
            "value": "api@2.3.0",
            "mono": true
          },
          {
            "label": "Commits",
            "value": "a1f3c2…9be4",
            "mono": true
          },
          {
            "label": "Changes",
            "value": "12 files"
          },
          {
            "label": "Last deploy",
            "value": "6h ago"
          }
        ]
      }
    ],
    "actions": [
      {
        "id": "approve",
        "label": "Promote",
        "style": "primary"
      },
      {
        "id": "hold",
        "label": "Hold",
        "style": "secondary"
      }
    ]
  },
  "response": {
    "mode": "required",
    "webhook": "https://api.example.com/roundtrip"
  }
}
9:41
Roundtrip
CI green

Ship api@2.3.0 to production?

CI is green and the release is staged. One tap promotes it.

Version
api@2.3.0
Commits
a1f3c2…9be4
Changes
12 files
Last deploy
6h ago
POST https://api.example.com/roundtripsigned · tap
{
  "requestId": "req_8Kx2…",
  "channel": "deploys",
  "kind": "tap",
  "action": "approve",
  "respondedAt": "2026-06-20T16:41:09Z"
}

Wire up Deploys & releases

Get an API key and send your first request in the next few minutes.

More use cases