# Transactional messages

Source: https://kirora.io/docs/api/reference/transactional

Transactional messages are one-off email or push sends to one recipient, such as receipts and password resets, that a person needs whatever their marketing choices. Transactional email ignores marketing consent and topics, but not a bounce or a transactional spam complaint. Transactional push still needs the contact's push consent and an eligible device. A send returns 202 when accepted, not when delivered: read each message in the message log (`GET /v1/messages/{id}`) for what happened. See [Transactional messages](https://kirora.io/docs/api/transactional).

## Endpoints

- [Send a transactional message](https://kirora.io/docs/api/reference/sendTransactionalMessage): `POST /v1/transactional/messages`
- [Send transactional messages in a batch](https://kirora.io/docs/api/reference/sendTransactionalMessagesBatch): `POST /v1/transactional/messages/batch`
- [Cancel a scheduled transactional message](https://kirora.io/docs/api/reference/cancelScheduledTransactionalMessage): `POST /v1/transactional/messages/{id}/cancel`

## The TransactionalMessage object

```json
{
  "id": "018f2a4e-6b1c-7d3e-9f40-37386ae05a6b",
  "channel": "email",
  "status": "queued",
  "correlationId": "018f2a4e-6b1c-7d3e-9f40-52d087625a6b",
  "createdAt": "2030-03-14T09:30:00Z",
  "sendAt": "2030-03-14T09:30:00Z",
  "fallbackFor": "018f2a4e-6b1c-7d3e-9f40-ea216e3e5a6b",
  "copy": {
    "kind": "cc",
    "of": "018f2a4e-6b1c-7d3e-9f40-69343c685a6b"
  }
}
```

- `id` (string, required, uuid)
- `channel` (string, required, one of `email`, `push`)
- `status` (string, required, one of `queued`, `sending`, `skipped`, `sent`, `failed`, `delivered`, `bounced`, `complained`)
- `correlationId` (string | null, required) — The `correlationId` given when it was sent, if any.
- `createdAt` (string, required, date-time)
- `sendAt` (string | null, required, date-time) — When a timed message goes out; null when it went at once.
- `fallbackFor` (string | null, required, uuid) — With `fallbackOrder`: the message this one stands in for. It waits as `queued` until that one ends: sent when it failed, was skipped or bounced, else skipped with reason `fallback_not_needed`. Null otherwise.
- `copy` (object | null, required) — Set on a `cc` or `bcc` copy; null on the message itself.
  - `kind` (string, required, one of `cc`, `bcc`)
  - `of` (string, required, uuid) — The message it is a copy of.
