> ## Documentation Index
> Fetch the complete documentation index at: https://docs.relayos.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /v1/messages/{id} — Get Message Status

> Retrieve current status and metadata for a specific RelayOS message by ID. Returns delivery stage: QUEUED, SENT, DELIVERED, READ, or FAILED.

Use this endpoint to fetch the latest status and metadata for a single message. This is useful for polling delivery progress after calling `POST /v1/messages`, or for auditing a specific message by its ID.

## Request

**`GET https://api.relayos.com.br/v1/messages/{id}`**

### Path parameters

<ParamField path="id" type="string" required>
  The unique message ID returned by `POST /v1/messages`. Example: `msg_01hwz3k9fxe5vr2t8qn6yc4bmd`.
</ParamField>

### Headers

<ParamField header="Authorization" type="string" required>
  Bearer token for your RelayOS API key. Format: `Bearer YOUR_API_KEY`.
</ParamField>

## Example

```bash theme={null}
curl https://api.relayos.com.br/v1/messages/msg_01hwz3k9fxe5vr2t8qn6yc4bmd \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Response

Returns a single message object with the current delivery status.

<ResponseField name="id" type="string">
  Unique message ID assigned by RelayOS.
</ResponseField>

<ResponseField name="status" type="string">
  Current delivery status. See the lifecycle note below for the complete set of values and transitions.
</ResponseField>

<ResponseField name="to" type="string">
  Recipient phone number in E.164 format.
</ResponseField>

<ResponseField name="template" type="string">
  Name of the template used for this message.
</ResponseField>

<ResponseField name="queuedAt" type="string">
  ISO 8601 timestamp of when RelayOS accepted the message into the queue.
</ResponseField>

```json theme={null}
{
  "id": "msg_01hwz3k9fxe5vr2t8qn6yc4bmd",
  "status": "DELIVERED",
  "to": "+5511999998888",
  "template": "lembrete_consulta",
  "queuedAt": "2026-05-14T10:30:00Z"
}
```

## Status lifecycle

A message moves through the following states after you send it:

```
QUEUED → SENT → DELIVERED → READ
                     ↓
                   FAILED
```

| Status      | Description                                             |
| ----------- | ------------------------------------------------------- |
| `QUEUED`    | RelayOS accepted the message; not yet submitted to Meta |
| `SENT`      | Submitted to the WhatsApp Cloud API successfully        |
| `DELIVERED` | Confirmed delivered to the recipient's device           |
| `READ`      | Recipient opened the message                            |
| `FAILED`    | Delivery failed after all automatic retry attempts      |

<Info>
  For real-time status updates, configure a `callbackUrl` on your project. RelayOS will POST a webhook event to that URL each time a message changes state, so you don't need to poll this endpoint.
</Info>
