# The message object

```json
{
  "createdAt": "2024-05-16T10:30:50.904+08:00",
  "updatedAt": "2024-05-16T10:30:50.965+08:00",
  "id": "message_19e23cf4-6f0f-47ed-8856-4623817684b1",
  "recipient": "6599999999",
  "values": {
    "name": "John Doe",
    "fruit": "apple"
  },
  "creatorId": "<USER_ID_OF_MESSAGE_CREATOR>",
  "fullMessage": "<YOUR_FULL_MESSAGE>",
  "latestStatus": "success",
  "templateBodyId": "<YOUR_TEMPALTE_BODY_ID>",
  "campaignId": "<YOUR_CAMPAIGN_ID>",
  "templateBody": {
    "createdAt": "2024-05-16T10:13:15.111+08:00",
    "updatedAt": "2024-05-16T10:13:15.111+08:00",
    "id": "<YOUR_TEMPALTE_BODY_ID>",
    "templateId": "<YOUR_TEMPALTE_ID>",
    "language": "english",
    "body": "{{body}}",
    "creatorId": "user_200972fc-2aa5-42f5-b6fd-4023d96afcd4"
    
  },
  "batches": [],
  "language": "english",
  "creatorEmail": "campaign_93530a5f-9efd-4d4a-8b27-6a3770b815c2@postman.gov.sg",
  "attempts": [
    {
      "status": "success",
      "createdAt": "2024-05-16T10:57:52.534+08:00"
    },
    {
      "status": "failure",
      "createdAt": "2024-05-16T10:30:50.906+08:00",
      "error": {
        "type": "server_error",
        "code": "server_unknown_error"
      }
    }
  ]
}
```

### Attributes

***

**id** string

Message identifier - this can be used to retrieve a single message and its delivery status ([Retrieve message](/endpoints-for-api-users/retrieve-message.md)). It can also be used to re-send a message in the event where the first attempt failed ([Single Send- Retry](/endpoints-for-api-users/single-send-retry.md))

***

**creatorID** string

Creator ID - this is the ID of the user that created the message on the first attempt

***

**recipient** (Mandatory field)

Recipient is a mandatory field.&#x20;

The recipient will be the mobile phone number of the recipient, prefixed by the country code but without the leading `+`. For example, when sending to a Singaporean phone number, the value of recipient will be `6599999999`

eg. `6591234567` is a recipient string for a Singapore (65) phone number (91234567)

**Sending SMSes using NRIC**

For users sending SMSes using NRIC, the `recipient` will comprise of `value` and `type` .

| recipient | input       | Remarks                                     |
| --------- | ----------- | ------------------------------------------- |
| value     | `SXXXXXXXA` | the recipient’s NRIC number, case sensitive |
| type      | `nric`      | explanation of the value                    |

eg. the `recipient` field of the endpoint should be the following if users are sending SMSes using NRIC.

Please note that this feature is only available for selected agencies, [refer to this page for more information](https://postman-v2.guides.gov.sg/sending-smses-using-nric).

{% code title="Message object: recipient" %}

```json
"recipient": {
	  "value": "S1234567A",
	  "type": "nric"
	  },
```

{% endcode %}

***

**language** string (Mandatory field)

This is the language of the message template used to send this message. One of `english`, `chinese`, `malay`, or `tamil`.

***

**values** object (Mandatory field)

The values that were inserted into the message template and form the complete message. The keys within `values` will vary depending on the campaign’s template parameters.

In the example above, the message template that was used contained two parameters: `recipient_name` and `topic`.

Avoid using `recipient` and `language` as keywords as they are mandatory fields in the request payload.

***

**fullMessage** string

Contains the full message including the SMS Header and Footer.

***

**campaignId** string

Campaign identifier - this will inform you which campaign the message is tagged to.

***

**unsupported characters**

The GSM-7 character set is supported by Postman.&#x20;

Otherwise, agencies should strictly abide by the unsupported character guidelines. This is the list of characters that are not supported by Postman and need to be excluded in the `values`.

This is what happens if you include unsupported characters in your messages:

1. unsupported characters significantly increase the character count and therefore, the number of message segments per SMS.
2. besides cost, long messages with multiple segments will jam the send queue, affecting even the campaigns of other agencies besides your own.
3. Reliability of sending messages cannot be guaranteed beyond 7 message segments per SMS, a limitation imposed by telcos. Hence, we advise you to keep your messages below 7 segments.

See the full list of unsupported characters [here](/postman-v2-general-user-guide-mop/create-campaign/message-content.md#unsupported-characters).

Check if your messages have any unsupported characters [here](https://twiliodeved.github.io/message-segment-calculator/).

***

#### Trailing white spaces

The content within your values object **should not** start nor end with a space, as this will trigger [400 Bad Request](/general-notes-for-api-users/api-errors.md).

#### **latestStatus** string

Possible message statuses and what they mean

<table><thead><tr><th width="233.33333333333331">Status in delivery report/API retrieve message status</th><th width="242">Corresponding status on UI dashboard</th><th>What it means</th></tr></thead><tbody><tr><td><code>created</code></td><td><code>pending</code></td><td><p>Postman is aware of your request and has created the necessary records.</p><p><br>However, it has not yet made the request to the relevant messaging service provider to have the message sent.</p></td></tr><tr><td><code>enqueued</code></td><td><code>pending</code></td><td>Your message is now in our queue and in the process of getting sent to the relevant messaging service provider.</td></tr><tr><td><code>sending</code></td><td><code>pending</code></td><td>Your message has been taken out of the queue and in the process of getting sent to the relevant messaging service provider.</td></tr><tr><td><code>sent</code></td><td><code>sent</code></td><td><p>Postman has made the request to the relevant messaging service provider to have the message sent.</p><p><br>However, it has not yet received a notification from the provider on the request status.</p></td></tr><tr><td><code>sent_to_telco</code></td><td><code>sent</code></td><td><p>The relevant messaging service provider has sent an update to Postman saying that the message has been sent to the recipient's Telco.<br></p><p><strong>Note</strong>: In this state, your message has reached the telco, but may or may not have been delivered to the recipient's phone. This could be because the recipient's phone is off or in airplane mode.<br><br>Beyond 48 hours, if the message status remains <code>sent_to_telco</code>, it is unlikely that we will get a further status update from the telco. This is a telco limitation and is the expected behaviour. We recommend composing a new message within this campaign if you find it necessary, though do note that there is a possibility of the recipient receiving the same message twice.</p></td></tr><tr><td><code>success</code></td><td><code>success</code></td><td>The relevant messaging service provider has sent an update to Postman saying that the message has been delivered by the Telco to the recipient.<br><br><strong>Note</strong>: This is a terminal status meaning that the message has been delivered by the telco to the recipient.</td></tr><tr><td><code>failure</code></td><td><code>failure</code></td><td>This is a terminal status meaning that the message failed to send either due to an error in Postman or from the messaging service. More details in the error message available in delivery report download.</td></tr></tbody></table>

***

#### **attempts** array of objects

Shows an object containing the `status` and `createdAt` for each attempt.  If the `status` is `failure` , there will be an additional [`error` object](broken://pages/6oCePGDXY3iyQokc3JXm) which includes:

1. `type` - The error type
   1. `delivery_error` - Error with the delivery of the message
   2. `server_error`&#x20;
2. `code` - The error code&#x20;
   1. `recipient_invalid`
   2. `recipient_unavailable`
   3. `content_invalid`
   4. `routing_error`
   5. `delivery_unknown_error`
   6. `server_unknown_error`

The full description of each error code can be found in the [Message delivery errors](/general-notes-for-api-users/message-delivery-errors.md) page


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://postman-v2.guides.gov.sg/endpoints-for-api-users/the-message-object.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
