---
title: "Get message status"
method: GET
path: "/messages/{id}"
tags: ["SMS & WhatsApp Messaging"]
---

# Get message status

`GET /messages/{id}`

## Request

- Base URL: `https://api.envoisms.ma/v1`
- URL: `https://api.envoisms.ma/v1/messages/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Response `200`

Message details

- MessageRecord: A stored message as returned by GET /messages/{id}. The metadata object provided at send time is not echoed here; it travels in DLR webhooks.
  - `id` string
  - `campaign_id` string, nullable
  - `to` string
  - `channel` 'sms' | 'whatsapp' | 'telegram' | 'voice' | 'rcs'
  - `body` string
  - `sender_id` string
  - `unicode` integer: 1 when the body required the UCS-2 alphabet (Arabic etc.), 0 for GSM-7
  - `segments` integer
  - `status` 'queued' | 'sent' | 'delivered' | 'failed' | 'undeliverable' | 'unconfirmed': unconfirmed = the network accepted the message but never reported a final outcome within the reporting window; a delivery receipt arriving later still replaces it.
  - `error_code` string, nullable: Set on failed/undeliverable messages. A short diagnostic key: DLR_<network status> when the failure came from a delivery report (e.g. DLR_REJECTD, DLR_EXPIRED, DLR_UNDELIV), GATEWAY_* for a failure on the EnvoiSMS routing side before the network was reached, ENVOISMS_* for other routing diagnostics, META_* for a WhatsApp refusal (see "WhatsApp failure codes" in the API description). Treat unknown values as a generic terminal failure — new keys may appear.
  - `error_message` string, nullable: Human-readable failure reason in English, set together with error_code. When the network gave no reason, this reads "The destination network did not deliver this message and gave no reason." Display text — do not parse it programmatically; branch on status and error_code instead.
  - `cost_eur` number
  - `cost_mad` number
  - `scheduled_at` string, date-time, nullable
  - `sent_at` string, date-time, nullable
  - `delivered_at` string, date-time, nullable
  - `read_at` string, date-time, nullable: Timestamp when the recipient opened and read the message (WhatsApp blue checkmark)
  - `failed_at` string, date-time, nullable
  - `operator` string, nullable: Resolved destination network for Moroccan numbers (Maroc Telecom, Orange, Inwi, Autre); best-effort elsewhere.
  - `sandbox` integer: 1 when the message was created by an env_test_ sandbox key
  - `created_at` string, date-time

## Other responses

- `404`: Message not found

---

[API](https://skmtc.dev/envoisms/apis/envoisms-ma-api.md) · [All operations](https://skmtc.dev/envoisms/apis/envoisms-ma-api/llms.txt) · [OpenAPI document](https://skmtc.dev/envoisms/apis/envoisms-ma-api/revisions/662db074bd86?raw)
