← All use cases

Content & publish approval

A last look before it goes out the door, and out to everyone.

9:41
Roundtrip
Staged

Newsletter ready to send

Queued and waiting for a final yes before it goes out.

Audience
12,400
Subject
June product update
From
team@acme.co
Scheduled
Now
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

    Something is staged to go public: a newsletter, an announcement, a scheduled post, a price change. It is ready, but it should not ship without a person signing off first.

  2. 2
    Ask

    The ask

    The owner gets a card with what's about to send, the audience size, and a preview link, plus Send / Hold. They can give the final yes from their phone, or hold it if something looks off.

  3. 3
    Response

    What comes back

    The decision returns to your system, so the send fires or stays paused. The approval, who released it and when, is captured, which matters when the thing went to thousands of people.

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": [
    "content"
  ],
  "notification": {
    "title": "Newsletter · ready",
    "body": "Queued to 12,400 people — waiting for a final yes."
  },
  "content": {
    "title": "Newsletter ready to send",
    "description": "Queued and waiting for a final yes before it goes out.",
    "status": {
      "label": "Staged",
      "tone": "info"
    },
    "sections": [
      {
        "type": "keyvalue",
        "columns": 2,
        "items": [
          {
            "label": "Audience",
            "value": "12,400",
            "mono": true
          },
          {
            "label": "Subject",
            "value": "June product update"
          },
          {
            "label": "From",
            "value": "team@acme.co"
          },
          {
            "label": "Scheduled",
            "value": "Now"
          }
        ]
      }
    ],
    "actions": [
      {
        "id": "send",
        "label": "Send now",
        "style": "primary"
      },
      {
        "id": "hold",
        "label": "Hold",
        "style": "secondary"
      }
    ]
  },
  "response": {
    "mode": "required",
    "webhook": "https://api.example.com/roundtrip"
  }
}
9:41
Roundtrip
Staged

Newsletter ready to send

Queued and waiting for a final yes before it goes out.

Audience
12,400
Subject
June product update
From
team@acme.co
Scheduled
Now
POST https://api.example.com/roundtripsigned · tap
{
  "requestId": "req_8Kx2…",
  "channel": "content",
  "kind": "tap",
  "action": "send",
  "respondedAt": "2026-06-20T16:41:09Z"
}

Wire up Content & publish approval

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

More use cases