## Get a message's status

**get** `/v1/messages/{msg}`

Retrieves a sent message's delivery outcome. Use it when you missed, or do not subscribe to: the `message.sent` and `message.failed` webhooks.

### Path Parameters

- `msg: string`

### Returns

- `id: string`

  Message id (`msg_…`).

- `chat_id: string`

- `created_at: string`

- `state: string`

  Delivery state: `queued` until a terminal outcome (`sent`, `failed`, `suppressed`, …).

- `updated_at: string`

- `fallbacks: optional array of Fallback`

  Capability rewrites applied at accept under `degrade` (`"auto"` or `"acknowledged"`); present only when something was rewritten (the same array the send's 200 carried).

  - `token: string`

    The missing capability token that forced the rewrite.

  - `from: string`

    Canonical part type in.

  - `rule: string`

    The fallback-tree rule applied (e.g. `guide-17.5-select-le5`).

  - `to: string`

    Canonical part type out. For a rewritten form this is `text_sequence`: the whole degraded fan is one rewrite outcome, stable across how many messages it produced; which types those messages carry is on the response's own `messages[]`.

  - `options: optional array of FallbackOption`

    Present only when the rewrite flattened a menu.

    - `index: number`

      1-based, matching the numbering the degraded copy emits.

    - `item_id: string`

      The original item id, so a customer's "2" maps back to your routing.

    - `label: string`

- `group_id: optional string`

  Correlation id present ONLY when this message was one of several a single
  request fanned out into (URL promotion): it is the first message's id,
  carried on every member, the same value the send response and the
  `message.sent`/`message.failed` webhooks report. Use it to identify which
  fan-out group a message belongs to; it is a correlation key, not a member
  list. Absent on an ordinary single-message send.

- `last_error: optional string`

  Gateway error of the last attempt; rides only on a gateway-verdict failure.

- `last_status: optional number`

  Gateway HTTP status of the last attempt; rides only on a gateway-verdict failure.

- `parts: optional array of unknown`

  The message's canonical parts AS STORED at accept; post-degrade,
  post-promotion, i.e. what the customer's device was (or will be) sent,
  not necessarily what you composed (`fallbacks` says when they differ).
  Typed as an opaque array rather than `Part[]` for the same
  one-decode-door reason `TranscriptRow.parts` is. Absent only when the
  stored content cannot be rendered canonically.

- `reason: optional string`

  Failure-only: whether to resubmit (`permanent`, `undelivered`, `auth_error`, `suppressed`, `consent_revoked`, …): the same value the `message.failed` webhook carried.

### Example

```http
curl https://messages.api.linqapp.com/v1/messages/$MSG \
    -H "Authorization: Bearer $LINQ_AMB_API_KEY"
```

#### Response

```json
{
  "id": "msg_2c7d90",
  "chat_id": "chat_4f81b2",
  "state": "sent",
  "created_at": "2026-08-06T14:02:12Z",
  "updated_at": "2026-08-06T14:02:13Z"
}
```
