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

# Retrieve a WhatsApp Message — Status and Timestamps

> GET /project/{project_id}/messages/{message_id} — Retrieve full details of a sent or received WhatsApp message including delivery status and timestamps.

Use this endpoint to retrieve the full details of any WhatsApp message — sent or received — including its current delivery status, timestamps, billing information, and content.

## Endpoint

```text theme={null}
GET https://connect.api-wa.co/project-apis/v1/project/{project_id}/messages/{message_id}
```

## Authentication

Include your project API password in every request header:

```text theme={null}
X-API-WA-Project-API-Pwd: YOUR_API_PASSWORD
```

## Path Parameters

**project\_id** `string` *required*

Your Convo project ID. You can find this in your Convo dashboard under **Project Settings**.

**message\_id** `string` *required*

The Convo message ID or the WhatsApp message ID (`wamid...`) returned when the message was sent. Both formats are accepted.

## Example Request

```bash theme={null}
curl -X GET \
  "https://connect.api-wa.co/project-apis/v1/project/YOUR_PROJECT_ID/messages/wamid.HBgMOTE4ODUxOTQ0MzgxFQIAERgSRkMwRDFGM0FCRDI5ODVEREQ3AA==" \
  -H "X-API-WA-Project-API-Pwd: YOUR_API_PASSWORD"
```

## Response

**200 OK**

```json theme={null}
{
  "id": "wamid.HBgMOTE4ODUxOTQ0MzgxFQIAERgSRkMwRDFGM0FCRDI5ODVEREQ3AA==",
  "project_id": "YOUR_PROJECT_ID",
  "phone_number": "917089379345",
  "contact_id": "64f3a1e0c8e4d500123abc00",
  "sender": "API",
  "status": "READ",
  "message_type": "TEXT",
  "message_content": {
    "text": "Hello! How can we help you today?"
  },
  "is_HSM": false,
  "campaign": null,
  "sent_at": 1710000000000,
  "delivered_at": 1710000015000,
  "read_at": 1710000060000,
  "message_price": 1,
  "deductionType": "WC",
  "mau_details": null,
  "whatsapp_conversation_details": {
    "type": "service",
    "expiry": 1710086400000
  }
}
```

## Response Fields

**id** `string`

The WhatsApp-assigned message ID (starts with `wamid`). This is the same ID returned in the [Send Message](https://convo.co.in/docs/api-reference/messages/send-message.md) response.

**project\_id** `string`

The Convo project this message belongs to.

**phone\_number** `string`

The contact's WhatsApp phone number (with country code, no `+`).

**contact\_id** `string`

The Convo internal ID of the contact associated with this message. Use this with the [Get Contact](https://convo.co.in/docs/api-reference/contacts/get-contact.md) endpoint.

**sender** `string`

Who sent the message. Possible values:

| Value | Description |
| - | - |
| `SYSTEM` | Sent automatically by Convo (e.g., auto-replies) |
| `AGENT` | Sent manually by a team agent via the dashboard |
| `USER` | Inbound message from the contact |
| `API` | Sent via the Convo REST API |

**status** `string`

Current delivery status of the message.

| Value | Description |
| - | - |
| `SENT` | Message has been sent to WhatsApp servers |
| `DELIVERED` | Message has been delivered to the device |
| `READ` | Message has been read by the recipient |

**message\_type** `string`

The content type of the message. Possible values include: `TEXT`, `IMAGE`, `VIDEO`, `FILE`, `AUDIO`, `STICKER`, `LOCATION`, `CONTACT`, `QUICK_REPLY`, and others.

**message\_content** `object`

The actual content of the message. The structure varies by `message_type`:

* For `TEXT`: contains a `text` field (string) with the message body.
* For `IMAGE`, `VIDEO`, `FILE`, `AUDIO`: contains a `link` field (URL) and optional `caption`.
* For `LOCATION`: contains `latitude`, `longitude`, and optional `name`.

**is\_HSM** `boolean`

`true` if this message was sent as a WhatsApp template (Highly Structured Message). `false` for session messages.

**campaign** `object | null`

If the message was sent as part of a broadcast campaign, this object contains:

* `name` (string): The campaign name.
* `campaign_id` (string): The campaign's unique ID.

Returns `null` for messages not tied to a campaign.

**sent\_at** `number`

Unix timestamp in milliseconds when the message was sent.

**delivered\_at** `number | null`

Unix timestamp in milliseconds when the message was delivered to the recipient's device. `null` if not yet delivered.

**read\_at** `number | null`

Unix timestamp in milliseconds when the recipient read the message. `null` if not yet read (or if read receipts are disabled).

**message\_price** `integer`

The number of Convo credits deducted for this message.

**deductionType** `string`

The billing model used for this message:

* `MAU` — deducted under Monthly Active User pricing.
* `WC` — deducted under WhatsApp Conversation-based pricing.

**mau\_details** `object | null`

Additional billing details when `deductionType` is `MAU`. `null` for `WC` messages.

**whatsapp\_conversation\_details** `object | null`

Details about the WhatsApp conversation window this message belongs to:

* `type` (string): Conversation category, e.g., `"service"`, `"marketing"`, `"utility"`, `"authentication"`.
* `expiry` (number): Unix timestamp in milliseconds when the conversation window closes.

Returns `null` if conversation details are unavailable.

## Error Responses

| HTTP Status | Meaning |
| - | - |
| `401` | Unauthorized — invalid or missing `X-API-WA-Project-API-Pwd` header. |
| `404` | Message not found — the `message_id` does not exist in this project. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.