---
title: "POST /v1/workspaces/{workspaceId}/journeys/{journeyKey}/send"
method: POST
path: "/v1/workspaces/{workspaceId}/journeys/{journeyKey}/send"
---

# POST /v1/workspaces/{workspaceId}/journeys/{journeyKey}/send

`POST /v1/workspaces/{workspaceId}/journeys/{journeyKey}/send`

## Request

- Base URL: `https://api.bangermail.com`
- URL: `https://api.bangermail.com/v1/workspaces/{workspaceId}/journeys/{journeyKey}/send`
- Auth: HTTP bearer

Sends one email through the Journey. A key Banger has not seen yet records a new Journey from this email and sends it; the key of a Journey you created sends once that Journey is approved and on. reply_to defaults to the Journey's mailbox; an empty list also means the default. A refusal (4xx) leaves nothing frozen for the recipient, so a corrected call with a new idempotency key sends.

## Headers

- `Idempotency-Key` string, required

## Request body

- object
  - `to` union: Recipients for to, cc, bcc and reply_to: an address ("a@example.com" or "Pat <a@example.com>"), an { email, name } object, or a list mixing both. Banger stores them as { email, name } objects with the email lowercased. The idempotency hash covers the body as sent, so retry with the same shape.
    - string
    - Participant
      - `name` string
      - `email` string, email, required
    - union[]
      - union
        - string
        - Participant
          - `name` string
          - `email` string, email, required
  - `reply_to` union: Recipients for to, cc, bcc and reply_to: an address ("a@example.com" or "Pat <a@example.com>"), an { email, name } object, or a list mixing both. Banger stores them as { email, name } objects with the email lowercased. The idempotency hash covers the body as sent, so retry with the same shape.
    - string
    - Participant
      - `name` string
      - `email` string, email, required
    - union[]
      - union
        - string
        - Participant
          - `name` string
          - `email` string, email, required
  - `expires_at` string, date-time
  - `expires_after_seconds` integer

## Response `202`

Journey email accepted.

- object
  - `data` JourneySendReceipt, required
    - `action_kind` 'transactional.send', required
    - `id` string, uuid
    - `send_intent_id` string, uuid
    - `provider_attempt_id` string, uuid
    - `status` string, required: sent/queued states from delivery, or for a frozen request: deferred (scheduled by policy or a translation wait), processing (being sent), discarded.
    - `replayed` boolean
    - `journey` object, nullable, required
      - `journey_id` string, uuid, required
      - `enrollment_id` string, uuid, required
      - `step_id` string, uuid, required
      - `step_position` integer, required
      - `origin` 'journey'
      - `journey_identity` string
    - `ignored_variables` string[], required
    - `scheduled_at` string, date-time
    - `reason` string
    - `communication_reservation_id` string, uuid

## Other responses

- `409`: `journey_review_required`: the Journey is one you created and it is not on yet; request its activation with POST /approvals (`action_kind: "sequence.activate"`), which a person approves in Banger. `journey_send_changed_while_deferred`: this recipient's earlier send on the Journey is still scheduled, or was frozen for sending in the last ten minutes, with a different request. Retry that request with its original idempotency key and payload, or wait. A send that failed before Banger accepted it never blocks later calls. `idempotency_conflict`: the key was used with a different payload.
- `422`: `product_reply_to_required`: Product email needs exactly one Reply-To address. Nothing is recorded for the recipient when the payload is rejected.

---

[API](https://skmtc.dev/bangermail/apis/banger-api.md) · [All operations](https://skmtc.dev/bangermail/apis/banger-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bangermail/apis/banger-api/revisions/a149909267f9?raw)
