Only this pageAll pages
Powered by GitBook
1 of 89

Postman v2 Guide

Postman v2 API Docs

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Postman v2 Pricing (from 1 July 2025)

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Postman v2 general user guide (MoP)

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Postman v2 Admin Portal, for UI Users (MOP)

Loading...

Postman v2 Admin Portal for API users (MOP)

Loading...

Loading...

Loading...

Postman v2 admin portal, for UI users (Internal)

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

General notes for API users

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Endpoints for API users

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

SFTP

Loading...

Loading...

Loading...

Loading...

Loading...

Load Test

Loading...

FAQ

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Legal

Loading...

Loading...

Postman v2 SMS API user documentation

General notes for SMS API users

Please note that this documentation is a work-in-progress and is subjected to minor changes based on requests and response bodies.

Service Status

Visit the following page for the latest updates on Postman's sending service and telco uptime

Non-GSIB laptops

For non-GSIB users please access this page via https://status.postman.gov.sg

GSIB laptops

For GSIB users, please access this page via , do ensure that you add https://safe.menlosecurity.com/ in front of your link.

Important dates

WOG Training Dates

The training dates below are for using the Postman v2 UI.

Date
Time
Description
Remarks

2.30pm-4.30pm

BTN UI Briefing 1

For meeting link, please contact the BTN team.

17 Apr 2024

2.30pm-4.30pm

BTN UI Briefing 2

For meeting link, please contact the BTN team.

20 May 2024

10am-11.30am

Briefing on Access Controls

For meeting link, please contact the BTN team.

13 Mar 2024

https://safe.menlosecurity.com/status.postman.gov.sg

About Postman v2

Read this guide for integration and/or testing information with Postman v2. You will need to use Postman v2 for sending SMSes to external recipients using the authorised sender ID.

Please access the Postman Policy guide at Click "log in" and use your TechPass or agency email address to view the policy guide.

This site is for Postman v2, used for sending SMSes with the authorised sender ID only.

Postman v2 SLOs

SLOs are Service Level Objectives, which provide you with insight on the goals and objectives that the Postman product holds itself to.

1. What are the Postman SLOs?

  • It is important to distinguish between the Service Level Objectives (SLOs) for Postman and the overall systems SLOs. Postman, as an integrated component within the larger system, has its own specific SLOs. Postman-specific SLOs focus on the performance, reliability, and efficiency of the Postman product itself. In other words, the Postman team is directly responsible for maintaining and monitoring these product-specific SLOs.

Language tab

Language tab

If you are sending out messages in other languages, you can select the correct language tab before you key in your message content.

  1. Message Content

    • Content in the message body field of each language is not automatically translated.

    • As a user, you will be required to input the correct language text into the message body field.

    • eg. If you select Malay as your language, you should input your message in Malay into the message body field; messages will not be translated for you.

  2. SMS Header

    • SMS header will always remain in English.

  3. SMS Footer

    • The SMS Footer of each message changes with the language selected.

    • eg. If you select Malay as your language, the SMS footer will change to Malay.

Subscribe to the Postman v2 status page at https://status.postman.gov.sg/ to receive automated email notifications when incidents happen. Users are also encouraged to regularly check this page for potential system degradations due to large campaigns or internal testing.

To continue using the old Postman (Postman Legacy) to send out email campaigns, please access Postman V1 (Postman Legacy) here: https://legacy.postman.gov.sg/

Test Platform

Test Environment

Type
Base URL
Remarks

Postman API

Create campaign, whitelist IP addresses, generate API keys

Postman Admin Portal (UI)

Create campaign, send using UI

Postman SFTP

Create campaign, whitelist Postman's IP addresses, generate API keys, then submit this .

Production Platform

Please submit your system's API Integration Test before using Postman v2's production site.

Production Environment

Type
Base URL
Remarks

Postman API

Create campaign, whitelist IP addresses, generate API keys

Postman Admin Portal (UI)

Create campaign, send using UI

Postman SFTP

Create campaign, whitelist Postman's IP addresses, generate API keys, then submit this .

What types of data can Postman handle?

Postman can handle up to restricted sensitive-normal data, and is compliant with the new-IM8 policy for Low-Risk systems.

Non-Sensitive or Low Sensitivity

  • Transactions

  • Notifications

  • Information broadcast

  • Receipts

Normal Sensitivity

  • Personal details such as home address, mobile number, email ID, job roles

  • Full NRIC or FIN number

For more information, you may refer to the section of our guide on IM8 Policies which requires 'gov.sg' email domain for login.

Inquiries and FAQ

If you have any questions, please refer to our FAQ page for a list of frequently asked questions.

If your questions have not been answered, you may fill up our Contact Us form and our team will get back to you.

If you are a vendor with questions regarding our API documents, please indicate the contact details of the government officer-in-charge and their agency email address in your form response.

https://docs.developer.tech.gov.sg/docs/postman-sgdp-guide/.

In contrast, the overall system SLOs encompass the end-to-end performance of the entire integrated system, including Postman and all downstream components such as Tier 1 SMS Aggregators and Telcos.

  • The Postman product contributes to the overall system performance. Therefore, our primary responsibilities and accountabilities lie with meeting and upholding the Postman-specific SLOs. The other individual players are held to their own SLOs and SLAs that are separate from Postman's SLOs with you.

  • We actively manage and optimise Postman to meet these objectives, thereby ensuring our component's optimal contribution to the broader system performance.

  • 2. What is Postman v2’s system uptime?

    • Postman aims to have an uptime of >99.5%. We have internal services to monitor Postman uptime 24/7. These services send alerts if the product is down to the engineer-on-call, so that we can respond as soon as possible.

    • If you are unable to access Postman services and would like to check if it is due to an unplanned downtime, check our status page here.

    3. Any maintenance downtime for Postman v2?

    • No, we will inform all users if there is going to be a scheduled downtime.

    4. Subscribe to status updates:

    • If you are unable to access Postman services and would like to check if it is due to an unplanned downtime, check our status page here. You can also subscribe yourself to email notifications.

    • Typically, we inform users of downtime only if resolution is expected to take longer than a day, or if your campaign is directly affected.

    5. How long can I expect a reply for my queries?

    • Please ensure your requests are submitted via this form, rather than through emailing the team, as we are unable to respond promptly to individual emails.

    • Please note the following SLAs for response times. Do note that marking non-urgent requests as urgent will not result in a response immediately - the BTN team will filter requests based on the following table below.

    Priority Level
    Examples (non-exhaustive)
    You can expect a first response...

    Urgent

    Product incident causing widespread delays, and not due to agency's own lapses in campaign set-ups/processes. Confidentiality or privacy breaches. User data losses.

    Within 3 hours.

    High

    Agency campaigns are affected due to errors related to Postman.

    Within 1 working day.

    Medium

    General inquiries relating to campaigns, billing, product, etc.

    Within 3 working days.

    Low

    Feature requests, feedback/suggestions, answers that can already be found in guide.

    6. What are Postman's rate limits?

    • For more information on rate limits, please click here.

    7. Where and when can I expect to be informed about updates to Postman?

    • Whenever we make an update to the product, it will be listed on our updates page.

    • We will also communicate this on our BTN Microsoft Teams channel called "WOG Channel for BTN". If you are not in this channel, please let us know by submitting this form. Note that only users with emails ending in ".gov.sg" can be added to the channel. Vendors cannot be added to the channel.

    • Where a product update is significant and will affect your workflows, we will communicate this through email blasts to all users of the Postman v2 test and production environments.

    • We seek your understanding that as the product is still developing and the situation remains dynamic, changes may be made along the way, and may affect your current system set-ups. As far as possible, we will try our best to communicate this to you with significant heads-up for you to make the necessary preparations.

    • We apologise in advance for cases where we inform of changes in a short span of time.

    8. What is the expected deliverability standards i can expect for my campaign?

    If you're 1) sending to local numbers, 2) Using only GSM characters, 3) less than 6 message segments, you can expect:

    Overall Systems SLOs

    Metrics
    Description

    Terminal status (%)

    Within 48 hours

    95% of all messages will reach terminal status (success or failure)

    After 80 hours

    All messages will reach terminal status (success or failure)

    Time taken for your message to reach your recipient

    Single Send 90% of messages will reach terminal status in under 2 minute Batch Send For batches of up to 1 Million messages, 90% of messages will reach terminal status under 24 hours

    Postman System SLOs

    Metrics
    Description

    Availability

    Single Send 99.9% of requests per month have a successful response (Any HTTP response other than 500-599 is considered successful) Retrieve Single Send Messages 99.9% of requests per month have a successful response (Any HTTP response other than 500-599 is considered successful)

    Batch Send 99.9% of requests per month have a successful response (Any HTTP response other than 500-599 is considered successful) Retrieve Batch Send Messages 99.9% of requests per month have a successful response (Any HTTP response other than 500-599 is considered successful)

    Latency

    Single Send 99.9% of requests per month, excluding network latency, have a response under 500ms Retrieve Single Send Messages 99.9% of requests per month, excluding network latency, have a response under 300ms Batch Send 95% of requests per month, excluding network latency, have a response under 3s 99.9% of requests per month, excluding network latency, have a response under 15s Retrieve Batch Send Messages 95% of requests per month, excluding network latency, have a response under 500ms 99.9% of requests per month, excluding network latency, have a response under 5s

    Sending to Foreign Numbers

    Messages sent to foreign numbers and overseas recipients will be delivered on a best-effort basis only.

    Additionally, you may experience increased failure rates for messages sent to Chinese mobile numbers (+86) due to updated sending requirements from Chinese operators. If you are sending time-critical messages (e.g., OTP messages), kindly consider alternatives like email.

    9. Please see the table below for guidelines on incident handling:

    Severity level
    What it means
    Examples
    Resolution time

    1

    A critical incident with very high impact

    • A user-facing service like Postman is down for all users.

    • Confidentiality or privacy is breached.

    • User data loss.

    Within THREE (3) hours.

    2

    An incident with low impact

    • A user-facing service like Postman is unavailable for a subset of users.

    • Core functionality (e.g. sending messages, creating campaigns) is significantly impacted.

    Within TWENTY FOUR (24) hours.

    3

    A small bug or issue affecting a single user

    • A minor inconvenience to users as workarounds are already available.

    • Usable performance degration.

    Useful Links

    Link
    Remarks

    Within 5 working days.

    Within THREE (3) working days.

    Reminders

  • Masked NRIC

  • https://test.postman.gov.sg/api/v2
    https://test.postman.gov.sg
    https://test.sftp.postman.gov.sg
    form
    https://postman.gov.sg/api/v2
    https://postman.gov.sg
    https://sftp.postman.gov.sg
    form

    Integration and configuration related inquiries

    1. My agency is using Amazon Pinpoint SMS. Will there be any integration done for us?

      • No. For systems using Amazon Services, there will be no integration and you will need to switch to using Postman.

    2. Can Postman be configured to only send SMSes during whitelisted hours?

      • Postman will send out SMSes once we have received the API call, a scheduling feature is not available.

    Delivery rate

    1. How long will messages take to send if there is a queue?

      • Messages will be sent out once they are received by Postman, this should be completed typically within 10 seconds.

    How do I onboard Postman v2 Internal SMS

    Unlike Postman V1 (Legacy Postman), agencies will no longer need to submit the SMS onboarding form. Please directly apply for an account with Twilio.

    1. Register your desired Sender ID with SGNIC - note that these sender IDs should be used only for internal-facing SMSes.

    2. Sign up for a Twilio account

    3. Set Up your Twilio account

    4. Configure your Twilio account

    5. Send a test message on Twilio

    6. Fill in your Twilio credentials in your campaign in Postman.

    Postman v2 FAQ

    We update this page regularly, please refer to API Documents latest updates for the last updated date.

    Click on the relevant sub-sections to find the answers to your burning hot questions!

    File types

    1. Are .csv the only acceptable file types on Postman?

      • Yes, this applies to batches for Postman API and Admin Portal, and for sending messages in bulk via SFTP. We do not accept any other file types.

    2. Does Postman support HTML encoding?

      • No, text only.

    Endpoints for API users

    Message

    A message represents a message sent through a campaign.

    As each campaign is associated with one message template and has its own API key, you will need to keep track of your API keys if you wish to send messages in different campaigns.

    You will not be able to send or retrieve a message in a campaign inaccessible to yourself, even if you know the relevant ID(s).

    For agency users/vendors to submit before using Postman v2 Production Site

    For agency users/vendors using SFTP to submit before using Postman v2 Production Site

    Please log in with your TechPass/agency email address to view our policy guide.

    BTN Contact Us Form

    General enquiries related to BTN

    SFTP Application Form for Postman (BTN)

    Interest form to use SFTP for Postman test site *note that Production site is not up at the moment

    Campaign Creation Access

    Only for agency PICs to submit

    (NEW) Postman Message Segment Calculator

    Postman's message segment calculator

    E2E Load Test Booking

    Book a time slot for your TPS load test

    Logging into Postman v2

    Login method for both admin portal users and API users are the same.

    Government Officers

    From 3 May 2023, Singpass login for Postman has been removed. Please log in using your gov.sg email accounts.

    Vendors may request for access to Postman v2 to view campaigns

    Please request for access from a government officer.

    Email login

    If you selected email login, you will need to key in an OTP that is sent to your email address.

    Agency users without a gov.sg email domain

    The following agencies without a gov.sg email domain can access Postman and are given .

    • edu.sg

    • synapxe.sg

    • aic.sg

    More information for users who require admin access can be found .

    Overview

    The Postman v2 API is organised around REST. Our API has predictable resource-oriented URLs, accepts JSON request bodies, returns JSON response bodies, and uses standard HTTP response codes, authentication, and verbs.

    To optimise performance and reliability, Postman v2 has established rate limits and allocations for API endpoints (Rate limits).

    Base Url
    https://<POSTMAN_V2_API_BASE_URL>/api/v2

    Test Environment Base URL

    Type
    Base URL
    Remarks

    Production Environment Base URL

    Type
    Base URL
    Remarks

    Single Send - Retry

    We will be updating our response payload to include a creatorId field from 24 Feb 2025. Please read the last section to find out where the amendment is and update your own systems if necessary, before 24 Feb 2025.

    Retries a single failed message. The message will retain the same message ID.

    The message retry will only go through if:

    1. The message latestStatus is failure

    2. If the message belongs to a batch, the batch status is either messages_enqueued or messages_enqueuing_failed

    After a message is retried, the message latestStatus will be set to created.

    The Single Send - Retry feature behaves the same way as the feature.

    Note that in your retry endpoint, the messageId remains the same, and is generated from the original request in your .

    [Now to 26 Jan 2025] Example response body

    [From 24 Feb 2025] The creatorId field will be inserted in the response payload from 24 Feb 2025. Please amend your own code accordingly for

    "creatorId": "<USER_ID_OF_MESSAGE_CREATOR>"

    General Q&A

    1. What is the security and sensitivity classification of Postman?

      Postman can handle up to restricted sensitive-normal data.

    2. Can I share the API docs link with my vendors?

      • Yes, you may share this link with your vendors: https://postman-v2.guides.gov.sg/

    3. Currently, we do API post with long SMS text content. Our SMS vendor will automatically split the message into several SMS messages to the end user. Is Postman the same?

      • For long message content, it will be combined and will appear as a long message to the user.

    4. If Postman is down, will there be a health check endpoint for agencies to check?

      • No, but the team will be considering this point.

    5. How do I reach out if I have any issues with my API integration or questions regarding the documents?

      • Please fill up our , we aim to get back to you in 5 working days.

    Sending emails to users (Legacy Postman)

    1. We have previously used Postman to send emails to users. Where can we acces the previous site

      • Legacy Postman (Postman v1) with email sending capabilities has migrated to https://legacy.postman.gov.sg or acess the site by clicking Legacy Postman (refer to image below).

      • You may continue using Legacy Postman to send out your email campaigns

      • Legacy Postman is not the same as Postman, for more information, refer to .

    Message segment calculator

    What is a message segment?

    If a message is over 160 characters long (including header and footer), it gets split into separate message segments. Each message segment includes up to 160 GSM characters, including the header and footer.

    How do I calculate message segments?

    The Postman team has created a message segment calculator specifically to help ease this calculation process. Use this calculator to count the number of segments in a message and identify any invalid characters.

    Summary of Costs

    The details on this page pertain ONLY to messages sent using agencies' own sender IDs, to an internal/non-MOP audience. For details on MOP-facing SMSes, refer to the billing overview page.

    Using the Postman platform itself to send the SMSes are free.

    However, there are 2 other costs that will need to be borne by agencies:

    1. Sender ID registration costs (IMDA)

      • This is charged by IMDA for the registration and maintenance of your sender ID, which is a nation-wide regulation.

      • Total costs - one-time set-up fee of $500 per organisation + $200 annually per sender ID.

      • This is charged regardless of which aggregator you use.

      • Read more .

    2. Twilio per-SMS costs (Twilio)

      • This is charged by Twilio for each SMS that you send, at USD$0.0415 per message segment of 160 characters to send to recipients with Singapore numbers. Do note that the cost may vary depending on the country code of your recipient's mobile number.

      • Read more .

    Batch Send - Retry

    Retries all failed messages that belongs to a batch. All messages that are retried will retain their original message ID.

    The batch retry endpoint will only return a HTTP 201 response if

    1. the batch status is messages_enqueued or messages_enqueuing_failed.

    Note that batch retry will fail if any of the messages that belongs to the batch has latestStatus of created. In this case, batch status will be set to messages_enqueuing_failed.

    The Batch Send - Retry feature behaves the same way as the feature.

    Note that in your retry endpoint, the batchId remains the same, and is generated from the original request in your .

    3. Set up your Twilio account

    Log into Twilio to set up your profile and billing details.

    To complete your set up, you will need to

    Batch Send

    has a .csv file limit of 20 rows to ensure no load testing is done on this site. More information on load testing.

    Sends multiple messages in a single API request.

    You will need to prepare a CSV file where, in addition to recipient and language, each column represents a value to the campaign’s template parameter.

    You will then need to upload this file to this endpoint.

    To upload your file, send a multipart/form-data request to this endpoint.

    Generating SSH Keys

    How to generate your SSH keys

    This method of generating SSH keys should be used, regardless of your OS

    1. Generate your keys via this command

    1. This generates 2 files, a private key file and a public key file

    Rate Limits

    This page will answer your questions on rate limits imposed on agency campaigns. This applies to all agencies.

    Key information

    1. The default rate limit is 10 TPS per campaign ID.

      -> This is defined as the number of API calls per second and not the number of messages sent per second.

    API keys generation

    1. How can I obtain my API keys earlier for testing?

      • You can now obtain your API keys on . Read for more information on calling Postman’s SMS API.

    2. When can agencies test out the Postman API endpoints?

    What if I need to buy a phone number?

    Phone number purchase is necessary if you are sending SMSes to foreign numbers. Follow the steps here to purchase a number.

    This step must be done before setting up your messaging service ID

    How to buy a phone number?

    Message Logs

    How do I download message logs for my campaign?

    In the campaign dashboard, there are 2 categories:

    Delivery Report

    1. Will specific error codes be shown for SMS failures?

      • Yes, it will be in the delivery report that can be downloaded for each campaign. This will come in the form of a CSV file all messages ever sent for the batch or campaign. You should filter for the desired month within the CSV file itself.

    2. How long will campaign logs be retained for?

    Access related inquiries

    1. Does my institution have access to Postman to send messages to MOPs?

      • You may check for the list of organisations/institutions that can use Postman to send messages to MOPs .

      • If your organisation/institution is excluded, you will not have access to use Postman.

    Campaign related inquiries

    1. Can campaigns be edited after creation?

      • No, they cannot be edited.

        If you need to edit your campaign’s message body, you will be required to create a new campaign.

        Users are now testing out campaigns on our test platform, and will have a fresh dashboard when they onboard onto our production site.

    2. Sign up for a Twilio account

    How do I get started with Twilio?

    Unlike Postman V1 (Legacy Postman), agencies will no longer need to submit the SMS onboarding form. Please directly apply for an account with Twilio, and work with them to have your registered sender IDs tagged to your accounts.

    Postman does not manage Twilio accounts on behalf of agencies.

    Message Statuses

    1. What do the different message statuses on my Postman dashboard mean?

      • Please see the list of available statuses . Do note that telcos do not provide read statuses.

    2. What's the typical and max time for a message latestStatus to move from

    5. Send a Test Message

    Send a test message on Twilio

    Note that this step is done in Twilio, not Postman, yet.

    Navigate back to the console and under Try it out, select Send an SMS. Insert your own phone number and select the messaging service that you set up earlier in step 4.

    Type your message and click send to check if you receive the SMS and if the Sender ID is accurate.

    If you encounter an error with sending a test SMS, it is likely that the Sender ID has yet to be mapped to Twilio. You may reach out to us so that we can link you up with our Twilio account manager.

    IP Address related inquiries

    1. What is Postman’s IP address?

      • We do not provide our IP address, you can whitelist our domain name. If you really need our IP address, you can resolve the domain to find the IP address, but you will be responsible for updating it if it changes.

    2. Does Postman allow me to bulk upload our IP addresses?

    This rate limit is shared across all APIs.

    -> For instance, if within your campaign you call the following:

    1. Single send at 6 TPS; and

    2. Retrieve message at 2 TPS; and

    3. Batch send at 4 TPS,

    then, as this adds up to 12 TPS, you will hit the rate limit and will be given a 429 error.

  • If you need a higher TPS, please reach out to us via the contact form here.

    • In the form,

      1. state your use case

      2. state the ideal TPS needed, and reason needing this higher TPS.

      3. If you're asking for greater than 15 TPS, please provide evidence:

        1. You should provide us with internal logs of your actual historical cases on your old systems that you have hit that higher TPS before. Logs from testing on Postman are not considered proof.

        2. For instance, you can send us historical logs of maximum TPS experienced anytime from Jan 2022 onwards.

  • Things to note

    1. The TPS limit applies only to messags entering the Postman system, not messages sent to the end recipients. Message delivery speeds may be slower than the TPS provided during peak periods, which occur from 8:00 am to 6:00 pm daily.

    2. We will prioritise messages in the following manner:

      1. OTP messages using Single Send

      2. All other messages using Single Send

      3. All messages using Batch Send

    3. Understand the difference between single and batch sending:

      1. If you're using single send, 1 TPS refers to 1 API call and 1 message to be sent out.

      2. If you're using batch send and you have 20 rows in your file, 1 TPS refers to 1 API call and 20 messages to be sent out.

    Other important information

    The Postman v2 API uses a number of safeguards against bursts of incoming traffic to help maximise its stability. If you send many requests in quick succession, you might see error responses that show up as status code 429.

    Note that we do not queue requests which arrive past the rate limit and such requests are dropped. As such, you will need to retry the same request(s) later.

  • They are stored indefinitely.

  • If a message is sent out in a batch and has an error, will there be individual error logs for the messages that failed to send?

    • Yes, individual error logs will be available.

      The messages in the batch will be sent out except for those that have failed.

  • Are there any differences between Postman v1 and Postman v2

    • The original Postman (now named “Postman v1”) will only serve the function of sending emails. Public healthcare institutions can still use Postman v1 to send SMSes. You may access Postman v1 via https://postman.gov.sg/

    • The new Postman (”Postman v2”) will give users the functionalities of sending SMSes to MOP using the gov.sg sender ID, or to internal staff using their own registered sender IDs. All other government agencies should use Postman v2 for SMS sending through gov.sg or to internal staff. You may access Postman v2 test site via https://test.postman.gov.sg/

  • If messages fail to be delivered, will they be charged?

    • Yes.

  • We will update the guide if there are any changes to this.

  • If we have created multiple variables in a template, such as 4 variables, but we decide to only send 3 variables, is this allowed?

    • No, you will need to pass provide details for all 4 variables. This applies to Postman API, SFTP and admin portal.

  • What is the maximum number of characters I can provide in each of the variables?

    • There is no limit on the number of characters in each variable. The total message length (excluding header and footer) shall not exceed 1000 characters. Please note that the character limit still applies to the characters within each variable.

      Refer to this page for more information.

  • How many campaigns can I create, is there a limit?

    • There is no limit, you can create as many campaigns as you want.

  • How do we know what is the campaignID ?

    • Refer to our API documents for more information.

  • Are the creation of the templates/campaigns done through the Postman's web interface?

    • There will be no templates within the new Postman.

      Instead, there will be campaigns that can be created, and this will be done through Postman admin portal for all users - API, Admin portal and SFTP users. More information from our API documents here.

      Upon the creating of a new campaign, a campaignID will be generated.

  • Can we not set up any customised campaign - i.e. we can setup the API keys, IP whitelisting and starting using the Postman API to send out SMSes?

    • This is not possible as the API keys are tied to the campaign and can only be generated after a campaign is created.

      In such cases, we recommend creating a campaign with only 1 variable - {{body}}. You can then input any message body you wish from your own system into the {{body}} variable.

  • No, you will need to upload them individually.

  • What IP can be whitelisted (Internal or public)?

    • Static Public IP address, do note that you will be calling our API endpoints using this IP address that you have whitelisted.

  • When do we submit our IP addresses for whitelisting?

    • This will be done in the campaign creation flow. Refer to our API documents for more information.

  • Does postman accept whitelisting of CIDR blocks?

    • No, you need to whitelist individual IP addresses. You can whitelist up to 10 IP address on the admin portal, if you need to whitelist more than 20 IP address, please reach out to us.

  • Is whitelisting the source IP address sufficient for us to use Postman to send out SMSes?

    • Yes. In addition, you will only be able to obtain your API keys after you have whitelisted your IP address. Read here for more info.

  • Is there any firewall that we need to open to allow our API gateway to reach postman API gateway ?

    • You will need to whitelist your IP addresses with us before you can obtain the API keys for integration.

  • Is there any throttling set for Postman?

    • No.

  • How many officers own a single campaign? Can we have more than 1 admin in case an officer leaves the organisation?

    • Each campaign can have as many campaign admins and members, for more information please check out the admin and members page.

  • Postman API

    https://test.postman.gov.sg

    Postman Admin Portal

    https://test.postman.gov.sg

    Postman API Production Platform

    https://postman.gov.sg

    Postman Admin Platform

    https://postman.gov.sg

    contact us form
    here
    here
    Postman API Integration Test
    Postman SFTP Integration Test
    Postman Policy Guide
  • You can now test Postman out on test.postman.gov.sg.

  • Regarding Authentication - can we have more information on bearer auth? Are we going to call a token API to get API keys or it will be generated from Postman? Admin Portal?

    • API keys are generated from the Postman Admin Portal.

  • Does each agency get 1 API key for all systems or each system can request to get their separate unique API key?

    • API keys are tied to each campaign. Each campaign can have up to 3 API keys. The number of keys will depend on the number of campaigns your agency has generated for your system.

  • What forms of authentication will you use for connecting via API?

    • We will issue API keys via Postman for each campaign. We will also whitelist IP addresses of each agency. Users are required to input their IP addresses for whitelisting, and obtain their API keys within Postman. Read here for more info.

  • test.postman.gov.sg
    here

    Postman API FAQ link is currently only accessible by non-S laptop with internet access. Can change the FAQ to be accessible by S laptop with no internet access too?

    • NGEP users may access Postman’s FAQ, but not S-GSIB users; please use your GSIBs or switch to another device with internet connectivity.

    • NGEP users may access Postman’s FAQ, but not S-GSIB users; please use your GSIBs or switch to another device with internet connectivity.

  • Postman is currently not accessible on SE3 devices, any plans to allow access?

    • NGEP users may access Postman. S-GSIB users will not be able to access Postman on your device, please use your GSIBs or switch to another device with internet connectivity.

  • With the removal of Singpass login, how do we log in when we do not have access to our email inboxes (eg. we are on-the-go)

    • Similar to Postman Legacy (Postman v1), Postman allows users to log in on-the-go. Do refer to our policy guide for more instructions on how to complete this set up.

  • here
    member access
    here
    its guide here

    If you don't receive your test SMS, it is likely that this Sender ID has been taken by another agency. You should use the Alphanumeric Sender ID that you have registered with SGNIC in this field.

    Send a message on Postman

    Once you have successfully sent a test message on Twilio, you will be able to start sending messages on Postman.

    If you encounter an error with sending your first SMS on Postman (Internal SMS) but have no errors with a test message on Twilio, it is likely that you may not have configured your Twilio credentials on Postman correctly.

    Do ensure that you have completed configuration correctly before reattempting to send messages via Postman

    Send a test SMS

    Internal SMS

    Postman's internal SMS set up is exactly the same as Postman Legacy SMS set up

    Postman v2 connects with Twilio to send out messages within the agency.

    What is the difference between Twilio and Postman?

    Postman is a free multi-channel communications platform built by Open Government Products for all public service agencies. Postman provides a convenient interface for you to craft your message, upload your recipient list, and send your campaign. Using Postman itself is free.

    Twilio is a commercial cloud communication service that allows users to send messages (including SMS) through an Application Program Interface (API). Twilio bills users directly for its services; in this case, any SMSes you send using the Postman interface will be billed to you directly by Twilio. Postman does not pay for the SMSes that you send, but neither does Postman charge you for sending SMSes using our interface.

    Why Twilio?

    We evaluated other cloud-based SMS service providers like Nexmo and AWS SNS before we chose Twilio. We chose Twilio for its simple user interface with an interactive debugger. Its API documentation is also well written, and its API easy to set up. The API also optimises the rate limit to send bulk messages, and allow for users to retry for messages with errors during the first attempted delivery.

    Importantly, Twilio API's success rate is 99.999% & uptime is around 99.95% monthly.

    Since inception, we have used Twilio for SMS sending services, such as NDP ticketing, Digital MCs, SGH's elective surgery appointment reminders, and quarantine ops by MOH and ICA during Covid-19.

    Can I trial using Postman to send SMSes before deciding whether to onboard onto Twilio?

    Unlike Postman Legacy, Postman v2 does not offer users accounts with free demo campaigns.

    You will need to have valid Twilio credentials, put them in Postman, and use this to send SMSes. You can send test SMSes to your own phone number, but this will be charged to your Twilio account directly.

    Single Send
    Single Send
    POST /campaigns/:campaignId/batch/:batchId/retry
    Response Body
    // This endpoint has no response body
    // A HTTP 201 response will be returned if the batch retry is attempted.
    Batch Send
    Batch Send

    Connecting to the SFTP server

    Upon completion of the SFTP integration, we will furnish you with the ipAddress for the SFTP server. Users will use their campaignId as their username to access the server.

    A connection to our SFTP server can be established by executing the following command:

    sftp -i <user's ssh private key> campaignId@sftpServerDomain
    If your client code is written in JavaScript, consider using a FormData object to contain your file (MDN Web API docs).
    Example CSV File
    recipient,language,recipient_name,topic
    6599999999,english,Emily Yeo,passport application #12345F
    6599999998,chinese,James Tan,passport application #67890A
    Endpoint #4
    POST /campaigns/:campaignId/batch/messages
    Postman test site
    here
  • Private key file: id-rsa

  • Private key file: id-rsa.pub

  • Private Key example

    Example of the generated private key format (id-rsa)

    Public Key example

    Example of the generated public key format (id-rsa.pub)

    ssh-keygen -t rsa -m PEM 
    -----BEGIN PRIVATE KEY-----
    MIIG/gIBAXXXL+CaxDa
    -----END PRIVATE KEY-----
    Endpoint #3
    POST /campaigns/:campaignId/messages/:messageId/retry
    Example response body
    {
        "createdAt": "2024-05-16T16:48:42.247+08:00",
        "updatedAt": "2024-05-16T16:48:59.157+08:00",
        "id": "<YOUR_GENERATED_MESSAGE_ID>",
        "recipient": "6522222222",
        "values": {
            "name": "Emily Yeo"
        },
        "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\nThis is a message to Emily Yeo.\n\n---\n\nThis is an automated message sent by the Singapore Government.",
        "latestStatus": "created",
        "templateBodyId": "<YOUR_TEMPALTE_BODY_ID>",
    	"campaignId": "<YOUR_CAMPAIGN_ID>"
    }
    Example JavaScript code
    // Assuming you have a constant or variable named "file" which is a File object:
    
    const formData = new FormData();
    formData.append("file", file);
    
    const request = new XMLHttpRequest();
    request.setRequestHeader("Authorization", "Bearer " + YOUR_API_KEY);
    request.open(
      "POST",
      "https://<POSTMAN_V2_API_BASE_URL>/api/v2/campaigns/<YOUR_CAMPAIGN_ID>/batch/messages"
    );
    
    request.send(formData);
    Response Body
    {
        "isValid": true,
        "batchId": "<YOUR_BATCH_ID>"
    }
    ssh-rsa AAAAB3NXXX= administrator@XXX
    1. Set up your account name

    This helps us and Twilio better identify your account should you need help, without having to go into your account itself, which we prefer in order to respect the privacy and security of your account.

    Go to Account > General settings > Account details > Account name.

    2. Set up your billing details

    Postman does not manage the billing of Twilio accounts on behalf of agencies.

    Setting up your billing details is necessary so that your tagged Sender ID will reflect correctly on your SMSes. Otherwise, your SMSes will continue to show "Likely-scam".

    Information about Twilio billing

    Twilio works like a prepaid phone card. You will need to top up the credits in your Twilio account to start sending SMSes. We strongly recommend using your corporate credit card for this.

    The alternative is direct invoicing, which is only available as an option if you send more than 25,000 SMSes a month (or meet the minimum spend of USD$12,000 annually). If this is your preferred option, please contact us so we can put you in touch with our Twilio account manager.

    For more information about billing, refer to Twilio's document here.

    Note: if you do not upgrade your account, you will not be able to send SMSes with your registered alphanumeric Sender ID.

    Set up Billing options - corporate credit card

    To set up your billing options, go to Billing > Manage Billing > Upgrade.

    Fill in the requested information
    Insert your tax number (GST number)
    Key in your corporate credit card details

    3. Map your registered Sender ID to your Twilio account

    You can only submit start mapping your Sender ID after you've set up your billing details.

    You will need to prepare the following documents and submit them to Twilio via their application form.

    As part of the Know-Your-Customer (KYC) processes, Twilio is required by IMDA to conduct checks on all approved Sender IDs submitted by organisations, before they can proceed to tag your SMSes with the Sender IDs after your campaign leaves the Postman gateway.

    You will need to submit the following to Twilio, to get your sender IDs mapped:

    1. ACRA BizFile Report

      • Bizfile Report should not be more than 3 months old

    2. Proof of Registration with SSIR

      • Screenshot of confirmation that the Sender ID is registered with SSIR (Screenshot(s) should reflect Company Name and Sender ID approval)

    3. Letter of Authorisation

    For more information on how to submit Twilio's application form, refer to their documentation here.

    Set up your account name
    Set up your billing details
    Map your registered Sender ID to your Twilio account
    On the left console, select Develop > Phone Numbers > Manage > Buy a number.

    Select the phone number that you prefer.

    Buy your number

    How to set up messaging service ID with phone number?

    You need to create a messaging service and tie the phone number that you bought to this messaging service before you can send SMSes.

    Go back to your Twilio home page, and selectSet up a Messaging Service.

    On the side bar, click Develop > Messaging > Services > Create Messaging Service.

    Create your messaging service

    Name your messaging service and indicate the purpose. This will help you better identify your use cases if you have multiple, and will also help Twilio detect your specific use case quicker should you need their help for troubleshooting.

    Add your Sender Pool. Sender Pool is where you configure the sender details such as the phone number you bought, and input your alphanumeric Sender ID.

    Click Add Senders.

    Set up sender pool

    Add the phone number you purchased to this service.

    Select Phone Number

    Select the number you want to associate with this messaging service (if you have more than one).

    Select desired number
    Number selected successfully

    Then, go back here to continue the set-up of your alphanumeric Sender ID.

    Messages

    Messages consists of all messages that you have sent out in a single campaign.

    Messages may be sent out as a single message, or can be part of a batch of messages. You may identify this through the Job Type column in the campaign dashboard.

    (Please ignore the details under From column.)

    In order to download the message logs for this campaign, please click on the icon on the screen.

    You will then receive the logs in your email, and you may filter out the required logs you will need using excel.

    Each message will have its own message ID, this message ID can be found in the message logs that you download.

    Batches

    A batch consists of multiple messages that are sent out at the same time. Each batch will come with its own Batch ID, and each batch can be downloaded by clicking on the icon tagged to each batch.

    Similarly, you will receive the logs in your email, and you may filter out the required logs you will need using excel.

    Retrieving logs by calling Postman API endpoints

    Refer to the following pages to retrieve the message status for your campaigns

    • Retrieve Message

    • Retrieve Batch

    Messages
    Batches
    Before creating a Twilio account

    You will need the following before signing up for a Twilio account:

    1. Email address: This email address will be associated with the Twilio account that you are signing up for

    2. Mobile Number: This number will be receiving security codes required when logging into your Twilio account.

    3. Complete your sender ID registration

    Creating a Twilio account

    1. Refer to Twilio's documentation on how to sign up for your free Twilio trial to use their messaging service.

    2. Upon signing up for a free account on Twilio, you will be taken to your Twilio Console Dashboard Homepage.

    created
    to
    sent
    to
    success?
    ?
    • As this is a brand new platform, the team does not have any data to release to agencies regarding typical and max time on the latestStatus.

    • Note that the time taken for a message to be sent will also depend on the load at the point of creating and sending these messages.

  • How are SMS statuses charged?

    • SMSes with a failure as the latestStatus will not be charged.

  • Do you provide a webhook for checking the status?

    • No, that is not currently provided.

  • For LatestStatus field, how long do we need to wait before message is sent? How long to wait before we know if it was success or failure?

    • The response on whether the message was created will come in immediately. However, you will need to query Retrieve message endpoint to get the message latestStatus.

    • We also currently do not support pushing delivery status to your server via webhooks when the status of a message changes.

    • Refer to our for more information.

  • Will Postman retry sending failed messages automatically?

    • No, you will need to manually re-send the failed messages.

  • here

    Information for new Twilio users

    This information is meant for users who are only sending out messages to an internal/non-MOP audience.

    Topic
    Details

    SMSes are sent by Twilio at a default of 10 messages per second.

    SMS character

    Each message segment is capped at 160 characters.

    Beyond this character limit, the single SMS will consist of 2 or more message segments, depending on the length of your SMS.

    You will be charged at a per-message-segment rate.

    Resources

    Each agency/department will need its own Twilio account set up before SMSes can be sent via Postman.

    This is for billing and governance purposes.

    Not to worry - we will guide you through the set up of this account!

    Maximum number of SMSes

    There is no limit to how many SMSes or recipients you can send using Postman's interface. Our record is 144,000 SMSes sent in 1 batch by a government agency.

    1-way SMS

    Billing and Costs

    Twilio works on a pre-payment method - you will need to top up your account with credits before SMSes can be sent. can be set so that you don't have to manually top up these credits.

    Billing is generally done using a corporate credit card. Read more about Twilio's billing methods .

    If you are unable to obtain a corporate credit card, you can explore direct invoicing with Twilio. However, Twilio requires a minimum spend of US12,000 annual (or about 25,000 SMSes per month) to qualify for this mode of payment.

    What is the cost?

    At this point of writing (March 2024), it costs USD$0.0415 per message segment of 160 characters to send to recipients with Singapore numbers. If your message is longer than 160 characters, you will be charged the cost of as many message segments.

    You may refer to Twilio's for the latest rates. You will be charged the cost according to the destination handset i.e. you will be charged the US rate for sending to a US number, even if the recipient with this number is based in Singapore.

    Checking whether sending via SFTP is successful

    In the event of an invalid CSV file upload or failure to send, we will promptly notify you via email about the failure and its specific cause.

    Successful upload of file to Postman via SFTP

    Users will be notified via email upon successful uploads of their file to Postman via SFTP.

    Messages that have failed to be uploaded to Postman via SFTP

    Users will be notified via email for all failed file uploads to Postman via SFTP

    All emails for failed file uploads will come with a URL to download your file with an additional column, Error Reason .

    This allows you to identify errors in your file to rectify before re-uploading the file.

    When to contact the Postman team?

    If the email notification you receive comes with a support ID informing you to contact us, do fill up our for us to get in touch with you.

    Message Status

    Successful upload of your file to Postman does not mean that your message was successfully sent to the recipient. You will still need to check for the .

    To check the statuses of your messages, please refer to the admin portal.

    Other useful information

    1. If your SFTP file is not processed due to an error, the relevant SMS messages will not be created in the Postman server, and thus will not be reflected in that particular campaign.

    2. You will receive an email response per file upload, to the email address which you specified in your SFTP form submission. This email will inform you if the messages were a success or failure.

    3. You will only be able to specify 1 email address per SFTP form submission.

    1. Sender ID Registration

    Note: for internal-facing SMSes only.

    Now that you've decided to use Postman for your internal SMS campaigns, first ensure your desired Sender ID is registered under the Full SSIR Regime.

    As part of national scam prevention efforts to filter out non-legitimate SMSes to citizens, IMDA has necessitated the registration of SMS Sender IDs for all organisations in Singapore on the SMS Sender ID Registry (SSIR), including public agencies, from 31 January 2023. You can read more about this new policy here. The Sender ID refers to the name that you see at the top of an SMS sent to you by an officially-registered organisation.

    Some large agencies might already have registered their Sender IDs. This is especially the case for generic agency-name Sender IDs like MSF or MTI. If you are unsure if the Sender ID you would like to use has already been registered by your agency, please do check internally before submitting your registration.

    How do I register for a Sender ID?

    You will need to register via the SSIR portal . Approval will take a few days as the Singapore Network Information Centre (SGNIC) - a wholly-owned subsidiary of IMDA - will need to conduct specific name and homoglyphic checks on your desired Sender ID. More information on Sender IDs and fees imposed by IMDA .

    Sending messages via SFTP

    To send messages in bulk, you must prepare a CSV file where each column, in addition to recipient and language, represents a value corresponding to the campaign’s template parameter.

    The examples below is based on the following campaign template:

    The campaign template is configured on the admin portal during campaign creation.

    Please refer to create message on more information on creating a message on the admin portal.

    An example CSV file for the above template can be found below, along with an explanation of the various fields in the file.

    CSV file fields


    recipient string (Mandatory field)

    For messages sent through the sms channel, the recipient will be the mobile phone number of the recipient, together with the country code of the recipient without including + in front.

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


    language string (Mandatory field)

    This is the language of the message template used to send this message.

    This are the possible values english, chinese, malay, or tamil.


    recipient_name string (Optional field - depending on your message template content)


    topic string (Optional field - depending on your message template content)


    Subsequently, you will need to upload this file using the following command:

    Note that the each file needs to be less than 30MB or the file will fail to process.

    Please be aware that our system does not generate output files. The result of a file upload will be communicated to you via email.

    Billing checklist

    Checklist for PICs

    Checklist for Campaign Creators

    Checklist for Campaign Members

    Retrieve Message

    Retrieves a single message and its delivery status.

    We will be updating our response payload to include a creatorId field from 24 Feb 2025. Please read the last section to find out where the amendment is and update your own systems if necessary, before 24 Feb 2025.

    We currently do not support pushing delivery status to your server via webhooks when the status of a message changes.

    [Now to 23 Feb 2025] Example response body

    [From 24 Feb 2025] The creatorId field will be inserted in the response payload from 24 Feb 2025. Please amend your own code accordingly for

    "creatorId": "<USER_ID_OF_MESSAGE_CREATOR>"

    Pagination

    We are using a Cursor-based pagination, a method of pagination that uses a unique identifier (cursor) to keep track of the current position in the dataset.

    Here's a general overview of how it works:

    1. Usage: The Retrieve Batch API takes in parameters such as limit, search ,before, and after to control the pagination.

    2. Cursor: The before and after parameters are used to specify the cursor for fetching the previous or next page of results. The cursor typically represents the position of a specific record in the dataset.

    3. Sorting: The data is sorted by the createdAt followed by id

    4. Result: The response returns the paginated results along with cursors for the next and previous pages, allowing for easy navigation through the dataset.

    For example:

    1. hasNextPage tells you if there's a next page in the queried data object

      1. To go to the next page, you can use the after Query Parameter with the current page's endCursor value.

    List of Apis that has pagination

    API Errors

    The Postman v2 API uses conventional HTTP response codes to indicate the success or failure of an API request. In general: Codes in the 2xx range indicate success. Codes in the 4xx range indicate a request that failed given the information provided (e.g., a required parameter was omitted, not having access to the campaign due to wrong API key, etc.). Codes in the 5xx range indicate an error with Postman’s servers (these will be rare).

    Some 4xx errors that could be handled programmatically include an error code that briefly explains the error reported.

    Attributes


    message string

    A human-readable message providing more details about the error.


    statusCode number

    The HTTP status code of the error.


    HTTP status code summary

    Status code
    What it means

    Authentication

    The Postman v2 API uses API keys and static IP whitelisting to authenticate incoming requests from your server.

    Your API keys carry many privileges, so be sure to keep them secure. Don't share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth.

    Authentication to the API is performed with HTTP Bearer Auth.

    You will first need to Create Campaign on the admin portal before you can generate your campaignId

    An example curl request:
    curl https://<POSTMAN_V2_API_BASE_URL>/api/v2/campaigns/:campaignId/messages -H "Authorization: Bearer YOUR_API_KEY"

    You must make all API calls over . Calls that you make over plain HTTP will fail. API requests without authentication will also fail.

    If you make a request without authentication, you will receive HTTP 401 and the following in your response body:

    SFTP and Other integration methods

    1. I heard that Postman will have SFTP integration. Are the documents ready?

      • Please access our SFTP documents here.

      • The SFTP onboarding process flow is documented here.

    2. When can I test out SFTP integration?

      • Submit the SFTP interest to get started.

    3. Are there plans to provide SMPP to Postman integration?

      • We are still consolidating agencies’ use cases and will inform agencies at a later date if this will be provided. If you have yet to provide your SMPP use case, fill up our request form .

    4. Are there plans to provide SMTP to Postman integration?

      • No.

    5. Are there plans to provide SMTP to Postman integration?

      • No.

    6. Can we send encrypted files via SFTP?

      • No, the files need to be in csv format

    7. For SFTP, when will the SMSes be sent and when should the files be deposited?

      • They are sent out in real time upon Postman receiving the files from agencies.

    8. What if the test environment cannot handle my production load

      • You should not be using postman to conduct load testing. Please refer to for more information.

    9. Will load testing be available on Postman test and production sites?

      • Load testing on Postman will only be available a separate site, not the test site. Please refer to for more information.

      • You will need to complete load testing on your own system’s end, to ensure that your system is able to handle the load you will be sending over to our end.

      • Please also ensure that you are using the correct method to send your messages (single send vs batch send), as you may receive a

    Please do not conduct load testing on our test site. We will proceed to remove your API keys if we noticed that load testing was done on our test site.

    Campaign Settings

    How do I whitelist my IP address and obtain my API keys?

    You will be able to obtain your campaign API keys and whitelist your IP address from your campaign's settings pop-up, under the integrations tab. This part will be accessible after you have and saved your campaign.

    Click on your campaign and the settings icon, this will open up your settings pop-up.

    Please ignore TODO: Persist sender ID

    FAQs on billing

    All information can be found in our billing pages here. Please read through them before reaching out to your PICs for support.


    General FAQs

    Create Campaign

    How do I start creating a campaign?

    Campaign creators must log in with their .gov.sg email address, and request for access to create campaigns from their agency PICs. Users with no .gov.sg email address are not allowed to create campaigns.

    Detailed charges and pricing

    How much will messages cost?

    Only messages sent out from Postman's production environment will be charged.

    The below pricing is independent of where the recipient is located (i.e. local number pricing will still apply to recipients who are overseas but own Singapore numbers).

    All charges are subject to GST which will be applied in the invoice.

    Local Number (numbers starting with +65)
    Foreign Numbers (all other numbers)

    Messaging

    1. Will there be a monthly report with a CSV file containing all the SMS sent for the month? Will it be emailed to us?

      • The delivery report can be downloaded directly from Postman by the user. This will come in the form of a CSV file all messages ever sent for the batch or campaign. You should filter for the desired month within the CSV file itself.

        The is applicable for both admin portal and API users.

        Additionally, API users can also call the to retrieve message status in real time.

    API keys generation and IP Address whitelisting

    1. How do we know what is the campaignID ?

      • Refer to our for more information.

    2. How can I obtain my API keys earlier for testing?

    SFTP Integration

    SFTP integration for campaigns is exclusively available on an opt-in basis and is not accessible through the admin portal.

    • For questions related to SFTP, you may submit your inquiries .

    • For agencies interested to use SFTP, follow the steps below, then submit this .

    Load Test Booking Requirement

    Load test requirement:

    To conduct a TPS load test for your system:

    • Postman supports a maximum throughput of 200 TPS for load test environment only

    How to use the billing dashboard

    The billing dashboard is used to track charged costs and billing reports for all campaigns associated with your email domain based on selected billing period. The billing dashboard can be accessed via . Note that only PICs and campaign owners have access to the billing dashboard.

    What can be done on the billing dashboard?

    User Access

    1. I do not have campaign creation access. Who should I contact?

      • Reach out to your agency PIC(s) to request for campaign create access. Refer to our for more information.

    2. How can I add new agency administrators to Postman?

    Postman V2 statusstatus.postman.gov.sg
    Example campaign template
    Dear {{recipient_name}},
    
    This is to inform you that we have received your request for {{topic}}.
    
    We will contact you again when we have processed your request. Thank you.
    The purpose of the load test is not to verify SMS delivery to recipients, but to evaluate your system’s capacity and performance.
  • SMS messages sent from the load test environment are processed only at the aggregator level and do not reach the telco level. This means they will not be delivered to actual mobile phones, and the status will remain “Pending” on Postman, not “success”.

  • The load test environment is designed solely for testing your system’s capabilities, allowing you to assess its performance under load conditions.

    Environment

    • You are required to conduct your load test in the Postman load test environment only.

      • Postman admin portal: https://loadtest.postman.gov.sg

      • Postman API base URL: https://loadtest.postman.gov.sg/api/v2

    • Do not conduct your load test at Postman production and test environment.

    How to validate success for your load test

    • The Postman system will provide the correct request and response payloads to support your testing needs.

    • You can find the expected endpoints for single send for instance in the documentation here.

    How to book and prepare for a load test

    1. Complete the booking form

    • Fill in the required details, including the email addresses to be whitelisted and TPS and message segment required

    • Submit your booking request here at least one day in advance

    1. Prepare for load test upon booking confirmation

    • Log in to https://loadtest.postman.gov.sg and create a campaign

    • Send the campaign ID to the BTN team in advance so the team can increase the TPS*

    * Do not perform load tests outside your booked time slot to prevent unexpected disruptions. Conducting load tests during unapproved timeframes can affect other scheduled activities, and hinder accurate test results

    1. Day of the test

    • Reach out to [email protected] for support

    404 - Not Found

    The requested resource doesn't exist.

    429 - Too Many Requests

    Too many requests hit the API too quickly. We recommend an exponential backoff of your requests.

    500, 502, 503, 504 - Server Errors

    Something went wrong on Postman’s end. (These will be rare.)

    200 - OK

    Everything worked as expected - you will get this status code for successful GET requests.

    201 - Created

    Everything worked as expected - your message(s) is/are created in our system. You will get this status code for successful POST requests that lead to the creation of messages.

    400 - Bad Request

    The request was unacceptable, often due to missing a required parameter.

    401 - Unauthorized

    No valid API key provided.

    403 - Forbidden

    The API key doesn't have permissions to perform the request. If you receive a HTTP response code 403 and error code 1010, please contact us here.

    API documents
  • here
    Postman message segment calculator
    detailed charges and pricing page
    detailed charges and pricing page
    Postman message segment calculator
    429
    error if Postman receives too many request too quickly.
    form
    here
    this page
    this page

    Postman only allows for sending of 1-way messages. This means that agencies can send mass SMSes to recipients using Postman, but there is currently no functionality on Postman for you to receive any responses that your recipients might send.

    Recharge triggers
    here
    page
    Send Rate
    limit
    Can campaigns creators be billed separately?

    No, we do not issue separate bills for individual campaign creators. We will issue one consolidated bill to the agency.

    Do I have to check each month if the charges are correct and let the Postman team know?

    No, you do not need to confirm monthly billing reports.

    If there are any discrepancies, you must email the Postman team within 30 days of the posted date to dispute the charges.

    Both message logs and billing reports originate from the same source.

    How do I get an estimate on how much I will be spending each year?

    You may download the message logs for your campaigns and multiply that with the cost of each message (cost breakdown listed here) to get an estimated cost. You may also look at your own historical usage prior to Postman.

    I can't see the billing dashboard, how do I get access?

    The billing dashboard is only available for PICs and campaign creators. Please reach out to your PIC to get campaign creation rights. Once you have campaign creation rights, you will be able to view the billing dashboard.

    What if various agencies are members to a campaign and the main agency who is paying for the campaign is not the agency who created the campaign?

    Please ensure that the campaign creator is from the agency paying for the campaign. Campaign ownership cannot be transferred by the Postman team.

    Why is the billing cycle different from the usual financial year? Can we match it up?

    No, the billing cycle will not be matched to the financial year. This is due to payment cycles associated with the aggregators, and the BTN team needs to ensure sufficient funding to pay the SMS bills to keep Postman continually running for agencies all year round.

    Why were agencies not billed for the first year of the BTN launch (1 July 2024 - 30 June 2025)?

    SMS charges during the first year of the BTN launch were waived to help agencies onboard quickly. Agencies will need to pay for their SMS messages from second year onwards.

    Will I be charged for messages on test.postman.gov.sg?

    No, messages in our test environment will not be charged. Note that these messages are only for testing purposes and cannot be sent to members of public.

    Agency billing information form FAQs

    How many billing information forms should an agency submit?

    Only 1 form per agency. If multiple forms are submitted, GovTech will be in touch with agency PIC to ensure that only 1 billing point of contact is submitted per agency.

    Please do not submit 1 form for each project either. If in doubt, please check with agency PIC.

    Who should submit the agency billing form?

    Only 1 PIC per agency should be submitting the form.

    What is a customer ID in the billing information form? What is a Sub-BU?

    Customer ID is the ID that GovTech will reference when billing agencies (eg. C-12345678 MINISTRY OF MANPOWER). Sub-BU is for routing. If you have a customer ID, it will have an underlying Sub-BU reference number.

    If you’re unsure of your customer ID or Sub-BU, reach out to your internal finance team.

    Billing Overview
    Message segment calculator
    Detailed charges and pricing
    Billing checklist
    How to use the billing dashboard
    • You can now obtain your API keys on test.postman.gov.sg. Read here for more information on calling Postman’s SMS API.

  • When can agencies test out the Postman API endpoints?

    • You can now test Postman out on test.postman.gov.sg.

  • Regarding Authentication - can we have more information on bearer auth? Are we going to call a token API to get API keys or it will be generated from Postman Admin Portal?

    • API keys are generated from the Postman Admin Portal.

  • Does each agency get 1 API key for all systems or each system can request to get their separate unique API key?

    • API keys are tied to each campaign, each campaigns can have up to 3 API keys. The number of keys will depend on the number of campaigns your agency has generated for your system.

  • What forms of authentication will you use for connecting via API?

    • We will issue API keys via the Admin portal for each campaign. We will also whitelist IP addresses of each agency.

  • When do we submit our IP addresses for whitelisting?

    • This will be done in the campaign creation flow. Refer to our API documents for more information.

  • Is there any firewall that we need to open to allow our API gateway to reach postman API gateway ?

    • You will need to whitelist your IP addresses with us before you can obtain the API keys for integration.

  • Is whitelisting the source IP address sufficient for us to use Postman to send out SMSes?

    • Yes. In addition, you will only be able to obtain your API keys after you have whitelisted your IP address.

  • What is Postman’s IP address?

    • We do not provide our IP address, you can whitelist our domain name.

    • If you really need our IP address, you can resolve the domain to find the IP address, but you will be responsible for updating it if it changes.

  • For 5XX server errors, will the requests be queued on Postman’s side?

    • No.

  • API documents
  • Agency administrator role is only granted upon receiving confirmation from your agency's CIO, as this is part of our requirement for adding new PIC(s).

  • Please obtain confirmation from your agency's CIO regarding the appointment of new PIC(s), and send your request to BTN contact us form.

  • How can I remove current PIC(s)?

    • Please send your request to [email protected] after ensuring there is a new PIC for your agency. We will then downgrade the PIC role from agency administrator to ops officer, where there will not be campaign creation access but will remain as a member in existing campaigns to send messages.

    • Should you wish to replace existing PIC(s), please send your replacement request, together with your CIO confirmation on the new PIC appointment, to BTN contact us form.

  • Every government officer has login access to the Postman admin portal. How do we remove the previous PIC's access from the existing campaigns?

    • Users with Campaign Owner role within the campaigns are to remove the previous PIC from campaigns

    • Add the new PIC as Campaign Owner to campaigns if the previous PIC is the only member of campaigns that were created by the previous PIC.

  • policy guide
    here
    here
    contact us form
    messages' latestStatus
    Notification email to inform users that file has been successfully uploaded on Postman
    Notification email to inform users that file has failed to upload on Postman
    Postman's validation report with Error Reason
    Endpoint #2
    GET /campaigns/:campaignId/messages/:messageId
    hasPreviousPagetells you if there's a previous page in the queried data object
    1. To go to the previous page, you can use the before Query Parameter with the current page's startCursor value.

    Retrieve Batch
    {
        "message": "Unauthorized",
        "statusCode": 401
    }
    HTTPS
    Content of Notification Email
    {"isValid":true,"batchId":"<YOUR_BATCH_NUMBER>"}
    Content of Notification Emails
    {"isValid":false,"reportURL":"<https://files.postman.gov.sg/validation-reports/<YOUR_CAMPAIGN_ID>/<YOUR_VALIDATION_REPORT>","numRows":<ROWS_WITH_ERRORS>,"numErrors":<NUMBER_OF_ERRORS>,"fileHasAvoidableExpensiveCharacter":<TRUE/FALSE>,"fileHasUnicode":<TRUE/FALSE>}
    Content of Notification Email
    Your SFTP file upload for <YOUR_CSV_FILE.csv> for <YOUR_CAMPAIGN_ID> failed. Please contact us with the following support ID:<YOUR_SUPPORT_ID_TICKET>.
    Example CSV file
    recipient,language,recipient_name,topic
    6599999999,english,Emily Yeo,passport application #12345F
    6599999998,chinese,James Tan,passport application #67890A
    put <file to upload>
    Example response body
    {
      "createdAt": "2024-05-16T10:30:50.904+08:00",
      "updatedAt": "2024-05-16T10:30:50.965+08:00",
      "id": "<YOUR_MESSAGE_ID>",
      "recipient": "6599999999",
      "values": {
        "name": "John Doe",
        "fruit": "apple"
      },
      "fullMessage": "<YOUR_FULL_MESSAGE>",
      "latestStatus": "success",
      "templateBodyId": "<YOUR_TEMPLATE_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_TEMPLATE_BODY_ID>",
        "templateId": "<YOUR_TEMPLATE_ID>",
        "language": "english",
        "body": "{{body}}",
        "creatorId": "<YOUR_GENERATED_CREATOR_ID>"
      },
      "batches": [],
      "language": "english",
      "creatorEmail": "<YOUR_GENERATED_CREATOR_EMAIL>",
      "attempts": [
        {
          "status": "success",
          "createdAt": "2024-05-16T10:57:52.534+08:00"
        },
        {
          "status": "failure",
          "createdAt": "2024-05-16T10:30:50.906+08:00",
          "sentAt": "2024-05-16T10:31:50.187+08:00",
          "deliveredAt": null, 
          "error": {
            "type": "server_error",
            "code": "server_unknown_error"
          }
        }
      ]
    }
    Example Response
    {
      "data": [
        {
          "id": "message_62a2a141-97f8-4fc8-82db-36f539228322",
          "recipient": "6599999999",
          "values": {
            "recipientName": "Emily Yeo",
            "topic": "passport application #12345F"
          },
          "language": "english",
          "latestStatus": "success",
          "error": ""
        },
        ...
      ],
      "pageData": {
    		"hasNextPage": false,
    		"hasPreviousPage": false,
    		"startCursor": "WyIyMDIzLTEwLTI0VDE3OjQwOjI1Ljk2OCswODowMCIsIm1lc3NhZ2VfM2E1MWI1ODctMzQ5OS00YTBmLTlkNGUtZTRlOWYzNWZkNmMxIl0=",
    		"endCursor": "WyIyMDIzLTEwLTI0VDE3OjQwOjI1Ljk2OCswODowMCIsIm1lc3NhZ2VfM2E1MWI1ODctMzQ5OS00YTBmLTlkNGUtZTRlOWYzNWZkNmMxIl0="
    	}
    }
    under the
    Sender ID
    field.

    Settings - About

    You will be able to view the following details

    • Campaign ID

    • Campaign Channel

    • Campaign Message

    • Download campaign logs

    Settings - Members

    Learn about the three types of access rights to Postman campaigns.

    Campaign settings - granting different access rights
    Campaign Owner
    Member
    Member Restricted

    Send messages with the campaign

    Yes

    Yes

    Yes

    Manage users and system integrations

    Yes

    No

    No

    View all messages sent

    Yes

    Yes

    For agency officers without a .gov.sg email domain, you will need to get .gov.sg email domain from your parent ministry.

    What are some special cases?

    1. Non gov.sg domains that are considered government entities

      1. For now, this is limited to aic.sg, synapxe.sg, edu.sg

      2. *By default, every user with this domains has member access rights.

      3. Users with these domains who need admin access (i.e. can create campaigns, access and amend campaign settings) must request for specific email address whitelisting through the agency PIC using this

      4. Otherwise, all users with these domains can already log into Postman and view campaigns they have been added to (i.e. member access)

    2. Vendors helping government entities with API integrations

      1. In such cases, Postman will not be granting vendors access to the portal. This means vendors with non-whitelisted email domains cannot log into Postman.

      2. Agency officers should log into Postman, create the campaign and craft the message, whitelist the IP addresses, generate the API keys and pass the API keys to the vendors for the necessary integration.

    3. Vendors helping government entities send messages on Postman UI

      1. In such cases, agency PICs must for the Postman team to whitelist the vendor's domain. This will allow vendors to log into Postman, and view campaigns that the vendors have been added to by the agency admins.

      2. Vendors will then be able to log in and send messages, but not create campaigns i.e. member access

    Integrations

    Integrations are where you can whitelist your IP addresses and generate your API keys.

    Integrations - IP address whitelisting

    Provide your IP address for whitelisting. You will be able to provide up to 20 IP addresses.

    Whitelist only

    • Static IP addresses

    • IP addresses that you are using to call the Postman API.

    Connect to a VPN before calling the Postman APIs.

    API Keys

    You will only be able to obtain your API keys after you have whitelisted your IP address.

    One campaign can have up to 3 API keys.

    Do API keys have an expiry?

    The API keys have no expiry.

    If you need to obtain a new API key, you can simply delete the old key and generate a new key.

    created
    Campaign Creation and API keys for API users

    Campaign creation should be the first step for all users, regardless if they are Admin portal, API users or SFTP users.

    In order for API users to obtain the API keys for system integration, you will need to

    1. Create Campaign and obtain a Campaign ID

    2. Whitelist your IP address

    3. Generate your API keys

    Campaign Create Access

    Postman will be implementing tighter access on creating campaigns.

    From 20 May 2024, you will need to request for campaign create access from your agency person-in-charge (Agency PIC), before you can start creating campaigns. This change will be implemented on both our test and production platform.

    More information can be found in our policy guide.

    How do identify my agency PICs?

    You can idenfy your agency PICs by clicking on the ? button on your Postman dashboard.

    Create Campaign

    To start creating campaigns, select + Create campaigns on your home page

    Campaign creation will consist of 3 steps:

    1. Campaign name

    2. Channel type

    3. Campaign content

    1. Campaign Name

    Upon clicking on + Create Campaign you will be taken to the campaign creation page and asked to name your campaign.

    2. Channel Type

    Postman has 2 types of campaign channels available - Member of Public and Internal Staff

    1. Member of Public: To send out messages to MOPs

    2. Internal Staff - to send out with your own sender ID

      • You will need to provide your own Twilio credentials if you choose the Internal Staff option

    All messages sent out to MOPs via the Members of Public option will come from the gov.sg sender ID.

    3. Campaign content

    You will not be able to edit your campaign content after creating your campaign.

    The campaign content is the content in the SMS that you will be sending out. You will be prompted to type out your campaign's message content.

    There are different parts to the campaign content screen:

    • Message preview

    • Language tab

    • Message content

    • Character count

    $0.046 SGD per segment

    $0.23 SGD per segment

    GST will be included in the final invoice at the prevailing GST rate. The Postman team previously communicated to several agencies that no GST would be included. We regret this error and apologise for any inconvenience caused. Please reach out to the BTN Finance team via email should you have any questions.

    Refer to the message segment calculator to understand more about message segments.

    What kind of messages will be charged?

    A breakdown of when a message is charged is dependent on the status of a message.

    Note that messages sent to recipients with invalid phone numbers or message content will still be charged. Please verify your recipients' numbers and use the Postman message segment calculator before sending.

    Message status
    Will the message be charged?

    success

    ✅ Yes

    recipient_invalid

    ✅ Yes

    recipient_unavailable

    ✅ Yes

    content_invalid

    ✅ Yes

    routing_error

    ✅ Yes

    message_expired

    ✅ Yes

    Why are charges applied to non-success message statuses?

    • recipient_invalid - Mobile number is not recognised by the network operator: The system must validate the number and attempt initial routing, using resources as it tries to establish if the message can be delivered. We advise all users to ensure that recipients' numbers are updated to avoid unnecessary costs.

    • recipient_unavailable - Recipient is not currently connected to the mobile network: While the message remains undelivered, the attempt to route it still consumes network resources and incurs charges from the operator as it processes the delivery.

    • content_invalid - Message content contains prohibited elements or incorrect encoding: Although messages with invalid content are blocked by the network, they still pass through several stages of processing, including identifying and handling these messages which involves costs. We advise all users to ensure that their message content does not contain invalid characters to avoid unnecessary costs.

    • routing_error - Issues with routing to the recipient’s mobile network: Network operators still process these messages and attempt routing, so the resources used in these steps incur costs.

    • message_expired - Message was not successfully delivered within the expected timeframe: The message remains in the network queue, and several delivery attempts may be made, incurring costs throughout the process.

    Can agencies use Postman for both external and internal messages?

    • Yes. The Sender ID for SMS to external MoPs will be 'gov.SG' and SMS to internal staff will be your own agency-registered sender ID.

  • What is the maximum length of the message in the SMS? We may need to include clickable links.

    • Please refer to character count.

  • Usually, the message count for 1 sms is 160 characters. For the new format, are the header and footer counted as SMS characters?

    • Yes, it will be counted. When recipients receive the messages, the character blocks will be combined to form a single message.

  • Can I change the header of my Agency name?

    • No except for the following cases

      1. you are sending messages on behalf of another agency.

      2. your product sends out messages on behalf of various agencies.

    • For such cases, please contact us .

  • What is the sender ID on your test site?

    • The sender ID on our test site is Postman.

      Your agency’s sender ID will be available for use on our production site, refer to our guide for more details.

  • My agency is currently using Postman v1. Do I need to switch over to using Postman v2?

    • Yes, unless you’re from a public healthcare institution.

  • How many SMSes can I trigger per day, are there restrictions?

    • No restrictions, however, please note

      • differences between batch and single send

      • the batch size requirements

    • or you may encounter a 429 error.

  • If the messages are sent out unsuccessfully, will there be an automatic retry from Postman’s end?

    • No, you will need to call our endpoints again as this will not be automatically done. UI users will need to re-send from the portal.

  • Is there a separate queue for time sensitive messages?

    • No.

  • Can I include an unsubscribe link in my SMSes?

    • No. The unsubscription option will not apply to SMSes sent in compliance with the mandate.

  • GET status endpoint
    Beginning your SFTP integration

    We only accept RSA, ECDSA, and ED25519 keys. Keys must be in OpenSSH format.

    1. Log into Postman and create a new campaign

      • this generates your campaign ID needed to fill in the form

    2. Generate your campaign API key through the following steps

      1. Access your Campaign Settings

      2. Whitelist Postman's IP addresses as follows

    • Note: there is no need to whitelist your server's IP addresses. You will just need to whitelist Postman's IP addresses below.

    Environment
    IP Address to Whitelist in Postman Admin Portal
    Port
    SFTP Server Domain

    Test Environment

    18.136.33.127

    52.77.196.100

    22

    test.sftp.postman.gov.sg

    Production Environment

    47.128.188.173

    52.76.164.195 13.214.81.207

    22

    sftp.postman.gov.sg

    Whitelist Postman's IP address in your campaign settings
    1. Generate the API keys in your SFTP campaign

      • this is the API key associated with your campaign

      • whitelist the above mentioned two static IP addresses in the Postman Admin Portal

      • Generate your API keys

    2. Go to the .

    3. Fill in the details.

      • SSH Keys - Please refer to the guide on

      • Notification email: this is the email address from which you wish to receive results of the file upload.

    4. Submit the form. Our team will add your account and inform you once this is completed.

    5. to our server, fill in the CSV file, and it into our server

    here
    form

    View charged costs across different billing periods

  • Have an overview of the charged costs and number of charged segments for a selected billing period

  • Download annual and monthly reports of the charged costs

  • An example billing dashboard

    How do I change the billing period?

    Click on the dropdown on the top right and you will be able to toggle between the different billing periods.

    The billing period toggle

    What is in the Overview section?

    Selected billing period - the billing period which you selected.

    Charged cost for selected period - the total amount spent (including message segments sent to both local and foreign numbers). Learn how message segments are charged here.

    No. of charged segments for selected period - the total number of message segments which were charged (including message segments sent to both local and foreign numbers). Learn how message segments are calculated here.

    The overview section

    What is in the Reports section?

    Annual report - this report will consolidate all charges for the billing period. It will only be available in February. GovTech will send out the invoice for the charges listed in mid-March. Learn more about the billing process here.

    Monthly report - this report contains are breakdown of all campaigns, local and foreign charges, and total charged cost. Learn more about the monthly report here.

    Total segments - the total number of message segments which were charged (including message segments sent to both local and foreign numbers). Learn how message segments are calculated here.

    Charged cost - the total amount spent (including message segments sent to both local and foreign numbers). Learn how message segments are charged here.

    Dispute by - the date which you will need to notify the Postman team for any discrepancies found. Charges cannot be reversed after this date.

    The reports section

    What is in the Monthly Report?

    There will be two different tabs in the monthly report:

    Summary - this page contains an overview of all charges, broken down into local and foreign recipients.

    An example monthly report's summary page

    Breakdown-by-campaign - this page shows the usage for each campaign, along with relevant campaign information

    An example monthly report's breakdown-by-campaign page

    What is in the annual report?

    The contents of the annual report will be the same as the monthly reports but over the whole billing period.

    Messages sent from campaigns deleted during the year will still be charged and reflected in the report.

    What do I do if I notice a discrepancy?

    The reports have costs rounded to 2 decimal places and rounding discrepancies are expected between the monthly and yearly report.

    If there are any disputes, they must be raised to the Postman team within 30 days of the report being available. After 30 days, the billing report will be final and no changes can be made.

    https://postman.gov.sg/billing

    Sending messages via the Admin Portal

    How do I use the admin portal (Postman UI) to send out messages?

    To start sending out messages, select the campaign that you wish to use. This will take you to the campaign dashboard page. You may choose to send to a single recipient or multiple recipients

    Single recipient

    Upon selecting single recipient, a pop-up will prompt you to key in your recipient's details.

    • Recipient's phone number

    • Message language*

    • Message parameters

    Once the details have been filled in, click send to send out your message.

    Message language option is only available if the campaign admin has selected multiple languages during the . If no languages have been added, the default language will be English and you will not be able to select other languages.

    All message parameters needs to be filled before you can send out the message.

    Formatting a single message

    You may start entering fields into your message parameters.

    Should there be a need to add commas or quotation marks in your message parameters, you may enter them in your message parameters.

    Multiple recipients

    Upon selecting multiple recipients, you will be prompted to upload a .csv file containing

    • message parameters

    All message parameters need to be filled before you can send out your messages.

    We highly recommend the following steps when formatting your .csv file to send out messages

    1. Download campaign .csv template

    2. Edit the .csv template and save it as a .csv file

    3. Upload your .csv file

    In the multiple recipients sending format, any errors in the CSV file rows will result in failure to upload your file. You will need to fix the error(s) before all messages in the batch before you are able to successfully upload your file.

    The header row will require to match the created, such as containing lowercase letters, numbers and _.

    Recipient

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

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

    Do not use "fake" numbers when sending SMS messages, even for testing purposes.

    Reasons why this practice is avoided:

    1. Overloading the queue at the telco provider

    2. Leading to failed delivery attempts, which generate error messages

    Language

    This column will need to be filled, even if there is only one available language that can be selected.

    eg. If English is the only language you can choose in your message creation, you will need to fill every single entry with English.

    Formatting messages to multiple recipients

    You may start entering fields into each message parameter in your csv file.

    Formatting in Excel

    Excel: Commas and quotation marks

    Should there be a need to add commas or quotation marks in your message parameters, you may enter them in each cell within your excel file.

    Excel: Line Breaks

    Should there be a need for line breaks, you may add them in a single cell

    Formatting in text editor

    Text Editor: Commas, line breaks, quotation marks

    When formatting your messages in a text editor,

    1. Ensure that all parameters are separated by commas

    1. Should your content contain more than just letters, please encase them in quotations, see example above

      • Parameter containing more than just letters - highlighted in blue

    2. Should your message content contain line breaks, please add the line breaks in your parameters within quotations, see image "Example csv in text editor".

    1. Should your content contain quotation, encase the entire quote, including the quotation marks, within a set of quotations, see image "Example csv in text editor".

      • quote - highlighted in yellow

      • quotations used to encase quote - highlighted in pink

    These steps will ensure that messages sent out can contain commas and quotation marks.

    Postman Test Site: limitations

    Postman's test site is meant for agency users to test out the platform. As such, you should test out the site like how you would send out messages to MOPs in a real scenario, where each number will only receive a single message.

    If you send test messages with exact same content to the same person multiple times in 1 sitting in the same campaign:

    eg. "Hi your appointment is on 1 Jan 2024" was sent to Tom 10 times within 1 batch send,

    The telcos' automatic spam filter may be triggered . This means the message may not be delivered to Tom's phone at all, even though it will pass Postman’s send filters and status is reflected as delivered. See screenshot below on how the batch .csv is formatted in this failed example.

    Single Send

    We will be updating our response payload to include a creatorId field from 24 Feb 2025. Please read the last section to find out where the amendment is and update your own systems if necessary, before 24 Feb 2025.

    If you are sending time-sensitive, critical SMSes like OTPs or weather alerts, please use the single send API.

    The keys within the values object will vary depending on the campaign’s template parameters. To find out what the parameters for a template are, please refer to the template’s details in Postman’s web interface.

    The response on whether the message was created will come in immediately. However, you will need to query the Retrieve message endpoint to get the message latestStatus.

    [Now to 26 Jan 2025] Example response body

    [From 24 Feb 2025] The creatorId field will be inserted in the response payload from 24 Feb 2025. Please amend your own code accordingly for

    "creatorId": "<USER_ID_OF_MESSAGE_CREATOR>"

    Menlo Securitysafe.menlosecurity.com

    Character count

    Visit https://message-segment-calculator.postman.gov.sg for message segment and character counts

    Postman allows a maximum of 1000 characters for a message body, excluding the header (agency’s name) and footer.

    Agencies are strongly encouraged to limit their message body to 320 characters (excluding the header and footer) to avoid potential delays with message deliverability. As a precautionary measure, a warning message will appear for messages beyond 320 characters.

    If the message body exceeds 1000 characters, the system will disable the ability to send the message. Message parameters, such as {{variable}} are not counted as characters. However, when these parameters are populated with actual values, the character count of the populated value is added to the overall character count.

    For example:

    • Message variable placeholder {{name}} is not included in the character count when crafting the message template.

    Sending SMSes using NRIC

    The Postman team will release the API specs and test environment for this feature after April 20, 2025.

    This feature is only available to selected users who were previously using Notify.

    If you did not receive an invitation by the Postman team to use this endpoint, you will not be able to use this feature.

    API related inquiries

    1. For 5XX server errors, will the requests be queued on Postman’s side?

      • No.

    2. Regarding Send messages in Bulk, are there any limits on the number of messages that can be sent or on the file size?

    Platform access related inquiries

    1. When will my agency be able to test out your new Platform?

      • The test platform is now live at

        You can test out the following integration modes now: Admin Portal, API, SFTP

      • Load testing is not available for now, please refer to for more information.

    Deleting campaigns

    How do I delete campaigns?

    Only delete campaigns which are created for testing purposes.

    Do not delete campaigns which are currently not in use.

    Message Preview

    Message Preview

    This is how your message will look like:

    Header

    sent_to_telco

    ✅ Yes (only for foreign numbers as this is the terminal state for foreign numbers)

    delivery_unknown_error

    🚫 No

    server_unknown_error

    🚫 No

    here
  • Will PMO/OGP grant agencies trial/test accounts for the pilot testing?

    • As long as you have a .gov.sg email address, you will be able to log into Postman. No application for test accounts is needed.

      Learn more about access rights here, especially if you work with vendors or system integrators.

  • I am from an agency that does not have a gov.sg email domain (healthcare/edu.sg user). How can I request for access to your test platform to create campaigns and obtain the API keys?

    • Read more about access rights here.

      Please submit a request to the PIC within your agency if it is necessary for you to create a campaign and obtain the API keys.

      To PICs: please read this before submitting the request.

  • What if I have outsourced agents/vendors (e.g. DHL) who help me send out SMSes?

    • Please contact the Postman team for whitelisting.

      Upon logging in, they will only be able to see the campaigns in which they are added as collaborators by agency admins i.e. member access

  • Can vendors/3rd party contractors apply for accounts on the test platform to create campaigns and obtain API keys?

    • Unfortunately, this is not allowed.

    • They will only be given member access.

    • Read more about access rights here.

  • When will my agency be able to use your new Platform (API)?

    • Agencies calling the Postman API will be able to start testing on the test platform now.

      OGP conducted 2 technical Q&A sessions with WOG agencies and their vendors to address any questions regarding Postman. If your agency requires additional assistance, please write in to us through this form.

  • When will my agency be able to use Postman?

    • Agencies can now test Postman out at test.postman.gov.sg. The production site will be ready from mid-April.

      We will inform when the site is ready.

  • Can we onboard onto your platform earlier as we need more time for system integration?

    • You can use the test platform now to begin your system integrations.

      Postman production environment will be live from mid-April 2024. Agencies will need to undergo testing with OGP before they are allowed to use Postman in production. At this point, you will only be allowed to send messages to internal staff with your own sender IDs in production.

      The deadline to onboard Postman to send out messages to MOPs is by 1 July 2024.

  • Where is Postman hosted?

    • The internet.

    • We have been whitelisted on SG Proxy, you may access Postman through Edge using your GSIB.

  • What web browsers are recommended for Postman?

    • Google Chrome

    • Microsoft Edge

    • If you are facing issues with other browsers, please switch to the recommended ones

  • test.postman.gov.sg.
    this page

    Only view messages sent by restricted member. Not able to view messages sent by other members in the campaign.

    form
    submit a request
    form
    generating your SSH keys
    Connect
    drop

    Failed delivery attempts are still being charged

  • These numbers are actually real numbers that are owned by MOPs

  • List of "fake" numbers:

    1. 6590000000

    2. 6599999999

    3. 6588888888

    We have our dedicated load test environment if you wish to conduct load test using these numbers. Book your time slot for load test here. Please avoid sending messages to numbers that are not owned by you or your agency. Your agency PIC and CIO will also be informed. Click here for more information.

    campaign creation process
    recipient
    language
    variables
    Populate the required fields
    Step 1 and 3: Postman admin portal
    Step 2: Edit .csv file - the header row will be automatically populated based on the message parameters input in the message template
    Unable to upload file as csv was wrongly formatted
    Example csv in text editor
    Message with line breaks
    Quotation marks and commas within message
    Endpoint #1
    POST /campaigns/:campaignId/messages
    Example request body
    {
      "recipient": "6599999999",
        "language": "english",
        "values": {
            // The following values are values for the parameters in the example template
            "name": "John Doe",
            "fruit": "apple"}
    }
    Example response body
    {
        "createdAt": "2024-01-29T17:39:35.574+08:00",
        "updatedAt": "2024-01-29T17:39:35.574+08:00",
        "id": "<YOUR_GENERATED_MESSAGE_ID>",
        "recipient": "6599999999",
        "values": {
            "name": "John Doe",
            "fruit": "apple"
        },
        "fullMessage": "<YOUR_FULL_MESSAGE>",
        "latestStatus": "created",
        "templateBodyId": "<YOUR_TEMPALTE_BODY_ID>",
        "campaignId": "<YOUR_CAMPAIGN_ID>",
        "language": "english"
    }
    • Filling the {{name}} variable with “Jonathan” adds 8 characters to the count

    Visit https://message-segment-calculator.postman.gov.sg to use the Postman Message Segment Calculator tool to count your total characters.

    Use the Message Segment Tool before sending messages

    Characters - English Language

    The characters in a single text message include the following for "English" language*, with additional formatting details:

    • Header: Free text field in message segment tool to type your agency name

    • Line breaker: use normal keyboard paragraphing to indicate line breaks. Do not use \n as \ will be blocked by Postman.

    • Slash icon ( --- ): 3 characters to separate sections

    • Body: Free text field for your message content

    • Line breaker: use normal keyboard paragraphing to indicate line breaks. Do not use \n as \ will be blocked by Postman.

    • Slash icon ( --- ): 3 characters to separate sections

    • Footer: 62 characters* for standardised "English" text used across all WOG messages

    *Do note that the character count is different for other languages such as Chinese and Tamil.

    Encoding used for English language

    The encoding used for Postman SMS messages is GSM-7 or UCS (Unicode). Postman will not be able to send messages that contain unsupported characters, and a warning message will appear below the calculator for using invalid characters.

    Enter your message template into the message segment tool to identify characters that are classified as GSM-7, non-GSM-7 and blocked characters in the "Underlying character codes" section.

    Encoding used for English language

    The encoding used for other languages (Chinese and Tamil) is Unicode, where both the footer contains either Chinese or Tamil characters.

    Number of segment

    A message segment refers to a portion of a text message when the total length exceeds 160 GSM-7 characters. If a single message is longer than 160 characters (including header and footer), it is divided into multiple segments. Each segment contains up to 160 GSM characters, including the header and footer. However, when a message uses more than one segment, the character limit per segment is reduced to 153 characters.

    If the text message contains a Unicode encoding character, the maximum character count for one segment is 70 characters. If the Unicode message is longer than 70 characters (including header and footer), the character limit per segment is reduced to 67 characters.

    • Understand more about message segment terminology

    You will be able to view how the message is broken up to multiple segments (as shown below) in “Message Parsed” and “Underlying Character Codes”, based on the character count, and this ensures that the character limits for each segment are properly managed.

    Blue blocks are considered as 1 segment and green blocks are considered as another segment

    Character count for message body

    The character count applies only to the content typed in the free text box for the message template. The maximum number of characters Postman allows is 1000, excluding header and footer.

    Total characters including header and footer

    The total character count includes the entire messages including the agency name as the header, the body of the message and the standardised government text as the footer.

    Estimated cost per SMS

    Use the message segment tool to estimate the cost for your SMS message. Do note that the cost is based on message segment which include header, body and footer. Refer to the policy guide on SMS charges and pricing.

    What is this feature about?

    This feature enables agencies to send messages to recipients using their NRIC instead of phone numbers, supporting the transition from Notify to Postman. Previously, some agencies relied on Notify for message delivery when they only had access to recipients' NRICs.

    Authorised users can make API calls to Postman by providing the recipient's NRIC. The system will retrieve the associated phone number and deliver the message to the recipient. Users can expect the same experience they had with Notify.

    This feature is exclusively available for authorised users, only through the Postman API.

    Does this guarantee my messages will be sent to the recipient, as long as I have their NRIC?

    No.

    If the recipient does not have a phone number mapped to his/her NRIC in Singpass, no messages will be sent to the recipient even if you have their NRIC.

    Release Schedule

    Test Environment

    The API specifications and feature will be available in Postman's test environment after April 20, 2025.

    Production Environment

    The target release date is June 2025, subject to potential delays.

    Is there anything I will need to do before the release of this feature

    Existing Notify users should have already received an email containing specific instructions and a form. You must complete this form before accessing the new feature in Postman's test environment.

    What this does?

    In Postman's test database, we will create a simulated database mapping unique identifiers to mobile numbers. These unique identifiers are designed to simulate NRIC-to-mobile number mapping, but they are not actual NRIC numbers.

    When a form is submitted, Postman will assign a unique identifier to each submitted phone number in our test environment. Once this process is complete, we will inform agencies of the mapping.

    When you make an API request using one of these unique identifiers, we will send a message to the corresponding phone number.

    However, when calling our endpoints with a real NRIC, no message will be sent, as the test environment does not have real NRIC data; users should only call the unique identifier provided to them.

    Attributes (sending SMSes using NRIC)

    recipient (send smses using nric, mandatory)


    To trigger a message to be sent to a mobile number when the recipient’s NRIC is provided, you will need to make some changes to the recipient attribute

    recipient
    input
    Remarks

    value

    SXXXXXXXA

    The recipient’s NRIC number, case sensitive

    type

    nric

    Explanation of the value

    Refer to this page for more information.

    Endpoints (sending SMSes using NRIC)

    Test environment:

    The value should be the unique identifier assigned to the phone number you have previously submitted.

    If the value used in our test environment is a real NRIC, no message will be sent out and a HTTP 400 error will be returned instead.

    If there is no NRIC mapped to the provided phone number, HTTP 400 will be returned with the following response body.

    The following diagram illustrates how the message is created on Postman and sent to recipients.

    Sending SMSes using NRIC in Postman production environment
    • Users can upload a CSV file of up to 30MB in size.

      The number of lines for this file size depends on the contents of your file.

  • If Postman is down, will there be a health check endpoint for agencies to check?

    • No, but the team will be considering this point.

  • What's the typical and max time for a message latestStatus to move from created to sent to success? ?

    • As this is a brand new platform, the team does not have any data to release to agencies regarding typical and max time on the latestStatus.

      Note that the time taken for a message to be sent will also depend on the load at the point of creating and sending these messages.

  • How are SMS statuses charged?

    • SMSes with a failure as the latestStatus will not be charged.

  • Do you provide a webhook for checking the status?

    • No, that is not currently provided.

  • When do I use a Single Send API and when do I use a batch send?

    • Single Send API is used for when you need to send just one message out at a time.

      Batch message is when you have a single campaign and would like to broadcast the same message to many.

      If you use the Single Send API option but create too many request, you may encounter a 429 error.

  • If the bulk upload does not pass the validation check, can I proceed to send?

    • No, the response will display row by row certain errors that need to be fixed before proceeding again.

  • Country Code Usage: If the country code, such as +65 for Singapore, is omitted, does Postman automatically assume it's intended for a Singapore number?

    • 65 is a mandatory field as Postman allows sending of messages overseas. The number will not be automatically assumed as a Singapore number if the country code is omitted.

      If the country code is omitted, the message will not be sent and a 4xx error will be reflected.

  • Language Specification : If our template and values are in Chinese, but we specify English as the language, how will Postman behave?

    • Scenario 1: You have removed English in the create campaign step, and specify english as a header in your .csv file. You will get an error informing you that you chose an unavailable language.

    • Scenario 2: You have included English in the campaign creation step, but your message content is in chinese. Your message will have its message content in Chinese, but the footer will be in English. More information

  • Language Parameter - Mandatory Field: Is the language parameter mandatory for sending messages?

    • Yes.

  • In the Send single SMS API, is it acceptable to transmit all content within the 'msg' under a value object?

    1. Refer to the available options from our API documents.

  • For latestStatus field, how long do we need to wait before message is sent? How long to wait before we know if it was success or failure?

    • The response on whether the message was created will come in immediately. However, you will need to query Retrieve message endpoint to get the message latestStatus. Refer to our API documents for more information.

      API users should call the GET status endpoint to retrieve the message status in real time.

      Alternatively, the delivery report with the sms status can be downloaded by the user from the Postman Admin Portal. This is a manual process and will not be automatically sent to the campaign admin’s email address.

  • How do I reach out if I have any issues with my API integration or questions regarding the documents?

    • Please fill up our contact us form, we aim to get back to you in 5 working days.

  • 1. Campaign deletion features

    You will no longer be able to do the following once a campaign is deleted

    1. You cannot retrieve a deleted campaign:

      1. Campaign deletion is an irreversible process

    2. No access to campaign

      1. No message can be sent out via this campaign, whether through the admin portal, API or SFTP

      2. No access to campaign logs - you will not be able to retrieve logs for this campaign

      3. No access to campaign or settings by all users except the agency's PIC

        1. This includes all members of the campaign that you have deleted

    3. Unable to call the API endpoints with this campaign ID

      1. No access to campaign's settings, including API keys and whitelisted IP addresses

      2. Please synsure no one from your agency/vendors are using this campaign before deleting it

    Actions that are still available after a campaign is deleted

    1. Agencies will still be charged for messages sent from this campaign before campaign deletion

      1. Follows Postman billing

        1. Paid for by MDDI before 1 July 2025

        2. Paid for by your agency from 1 July 2025

        3. Refer to our billing page in our policy guide for more information

    2. Agency Person(s) In-charge (PICs) will still be able to view deleted campaigns by users in their agency

      1. Able to do so via the Admin Dashboard

      2. Refer to our policy guide on how to navigate the

    2. When should you delete campaigns

    Scenario 1: Campaign created for testing purposes

    You have created a campaign to test out how to create a campaign, send a message and how to access the campaign settings.

    • No messages to MOPs were sent out through this campaign

    You may delete this campaign as it is a campaign that you've created to try Postman out - the campaign was created for testing purposes.

    • For API users: Before deleting this campaign, you should make sure that no other user/vendor is using this campaign when calling Postman’s API endpoints.

    • If messages were sent out

      • Before 1 July 2025: messages paid for by MDDI

      • From 1 July 2025: messages paid for by your agency

    Scenario 2: Campaign that is no longer in use

    It is now December. You have created this campaign for an event in August. Messages were sent out via Postman to MOPs in the month of August and you are not using the campaign now.

    • You are not planning to use this campaign now (December)

    You should not delete this campaign as:

    • You will no longer be able to retrieve campaign logs once you have deleted this campaign

      • you may need the logs when your agency is doing reconciliation of messages sent out by your agency

    • This campaign is not being used now, but may be used again in the future.

    3. Accessing campaign deleting feature

    1. Click on the campaign you wish to delete on Postman's admin portal

    2. Click on Settings

    3. Click on Delete campaign

    The Header corresponds to the email account that you have logged into Postman with.

    You may check on the email account that you've used to log into Postman by clicking on the avatar at the bottom right of the page. Refer to the image for more information

    If you have more than 1 official email address belonging to different agencies, ensure that you have logged in with the correct email address.

    Click on the avatar (bottom left) of page to check for the email address used to log into Postman

    Changing your message header

    Header name changes are permitted in specific cases, and approved on a case-by-case basis. Some examples where header name changes are permitted.

    Platform products

    Some products are used by multiple agencies, and recognised by the product name rather than agency name e.g. "Singpass", and not "Government Technology Agency". If you need to change the name in the header, please contact us with your use case.

    An agency sending on behalf of another agency

    If you are helping another agency send messages, the main agency should add your agency's users as members/admins to the campaign so they are able to send messages from the main agency's created campaign. Please contact us if you need further clarification for your specific use case.

    Cases where header name changes are not permitted

    If your agency has a project that sends out surveys or information on welfare packages etc, these do not qualify for header name changes.

    Message Preview
    Logo

    Retrieve Batch

    We will be updating our response payload to include a creatorId field from 24 Feb 2025. Please read the last section to find out where the amendment is and update your own systems if necessary, before 24 Feb 2025.

    Retrieves messages and their delivery statuses given a batch ID. Please refer to this table in possible message statuses and what they mean on what each message status means.

    Supported Query Parameters

    limit string (Mandatory)

    You can specify the number of messages to return per page using the limit query parameter. The minimum value is 1, and the maximum value is 1000.

    after string (Optional)

    Find messages after the cursorId

    before string (Optional)

    Find messages before the cursorId

    search string (Optional)

    This supports searching by recipient phone number only.

    It is a substring match, eg. a "11" would match with "91122233"

    [Now to 26 Jan 2025] Example response body

    [From 24 Feb 2025] The creatorId field will be inserted in the response payload for each message object from 24 Feb 2025. In this above example it will be inserted once per message object i.e. total of 3 times. Please amend your own code accordingly for

    "creatorId": "<USER_ID_OF_MESSAGE_CREATOR>"

    Message Delivery Errors

    Each error type is mapped to its corresponding code, as returned by the system, to diagnose delivery failures.

    Error Type
    Error Code
    Worth Retrying
    Test number for simulated error in Postman Test environment only**

    Sending Messages via Postman API

    How do I send out messages if I want to call Postman's API Endpoints

    Please ensure that you have read the before reading this page.

    Before calling Postman's API endpoints, please ensure

    1. You are connected to the .

    Privacy Policy

    Government Agency Privacy Statement

    This Government Agency Privacy Statement (“Privacy Statement”) must be read in conjunction with the Terms of Use that accompany the applicable service you are requesting from us (the “Service”).

    Endpoint: Sending SMS using NRIC
    POST /campaigns/:campaignId/messages
    Example request body
    {
      "recipient": {
    	  "value": "SXXXXXXXA",
    	  "type": "nric"
      },
     // request below is the same as that of existing single send endpoint
      "language": "english",
      "values": {
          "name": "John Doe",
          "fruit": "apple"
      }
    }
    Example response body
    {
        "createdAt": "2024-01-29T17:39:35.574+08:00",
        "updatedAt": "2024-01-29T17:39:35.574+08:00",
        "id": "<YOUR_GENERATED_MESSAGE_ID>",
        "recipient": "6511111111",
        "values": {
            "name": "John Doe",
            "fruit": "apple"
        },
        "fullMessage": "<YOUR_FULL_MESSAGE>",
        "latestStatus": "created",
        "templateBodyId": "<YOUR_TEMPALTE_BODY_ID>",
        "campaignId": "<YOUR_CAMPAIGN_ID>",
        "language": "english"
    }
    Example error response body
      "code": "nric_mobile_not_found",
      "message": "Recipient does not have a mobile number mapping",
      "type": "domain_error", 
      "id": "..." // Tracking ID to be provided to Postman team for inquiries
    Endpoint #6
    GET /campaigns/:campaignId/batch/:batchId/messages
    General

    1. This is a Government Agency digital service.

    2. Please note that:

    2.1. We may use "cookies", where a small data file is sent to your browser to store and track information about you when you enter our digital services. The cookie is used to track information such as the number of users and their frequency of use, profiles of users and their preferred digital services. While this cookie can tell us when you enter our digital services and which pages you visit, it cannot read data off your hard disk.

    2.2. You can choose to accept or decline cookies. Most web browsers automatically accept cookies, but you can usually modify your browser setting to decline cookies if you prefer. This may prevent you from taking full advantage of the digital service.

    2.3. The Service may utilise cookies to facilitate authentication and/or login to the Service. If such cookies are rejected, you might not be able to use the Service.

    3. Please see the Annex for any additional terms or information.

    4. Nothing in this Privacy Statement shall be construed as limiting or prejudicing our rights at law to collect, use or disclose any data without your consent or agreement.

    Use of data

    5. We may request or collect certain types of data from you in connection with your access or use of the Service. The data that may be requested/collected include those identified in the Annex herein. Your data may be stored in our servers, systems or devices, in the servers, systems or devices of our third party service providers or collaborators, or on your device, and may be used by us or our third party service providers or collaborators to facilitate your access or use of the Service. We or our third party service providers or collaborators may collect system configuration information and/or traffic information (such as an IP address) and/or use information or statistical information to operate, maintain or improve the Services or the underlying service of the third party service provider or collaborator. For the avoidance of doubt, in this Privacy Statement, a reference to a third party service provider or collaborator includes other third parties who provide a service or collaborate with our third party service provider or collaborator.

    6. If you provide us with personal data, or where we collect personal data from you:

    6.1. We may use, disclose and process the data for any one or more of the following purposes:

    6.1.1. to assist, process and facilitate your access or use of the Service;

    6.1.2. to administer, process and facilitate any transactions or activities by you, whether with us or any other Government Agency or third party service provider or collaborator, and whether for your own benefit, or for the benefit of a third party on whose behalf you are duly authorized to act;

    6.1.3. to carry out your instructions or respond to any queries, feedback or complaints provided by (or purported to be provided by) you or on your behalf, or otherwise for the purposes of responding to or dealing with your interactions with us;

    6.1.4. to monitor and track your usage of the Service, to conduct research, data analytics, surveys, market studies and similar activities, in order to assist us in understanding your interests, concerns and preferences and improving the Service (including any service of a third party service provider or collaborator) and other services and products provided by Government Agencies. For the avoidance of doubt, we may also collect, use, disclose and process such information to create reports and produce statistics regarding your transactions with us and your usage of the Services and other services and products provided by Government Agencies for record-keeping and reporting or publication purposes (whether internally or externally);

    6.1.5. for the purposes of storing or creating backups of your data (whether for contingency or business continuity purposes or otherwise), whether within or outside Singapore;

    6.1.6. to enable us to contact you or communicate with you on any matters relating to your access or use of the Service, including but not limited to the purposes set out above, via email, push notifications or such other forms of communication that we may introduce from time to time depending on the functionality of the Service and/or your device.

    6.2. We may share necessary data with other Government Agencies, and third party service providers or collaborators in connection with the Service, so as to improve or facilitate the discharge of public functions and/or serve you in the most efficient and effective way, unless such sharing is prohibited by law.

    6.3. We may share your personal data with non-Government Agency entities that have been authorised to carry out specific Government Agency services. We will NOT share your personal data with other non-Government Agency entities without your consent, except where such sharing is necessary for fulfilling any of the purposes herein, or complies with the law.

    6.4. For your convenience, we may also display to you data you had previously supplied us or other Government Agencies. This will speed up the transaction and save you the trouble of repeating previous submissions. Should the data be out-of-date, please supply us the latest data.

    6A. Please note that we may be required to disclose your data by law, including any law governing the use/provision of any service of a third party service provider or collaborator.

    7. You may withdraw your consent to the use and disclosure of your data by us with reasonable notice and subject to any prevailing legal or contractual restrictions; however, doing so may prevent the proper functioning of the Service and may also result in the cessation of the Service to you.

    Protection of data

    8. To safeguard your personal data, all electronic storage and transmission of personal data is secured with appropriate security technologies.

    9. The Service may contain links to external sites or services whose data protection and privacy practices may differ from ours. We are not responsible for the content and privacy practices of these other websites or services and encourage you to consult the privacy notices of those sites or services.

    Contact information

    10. Please contact [email protected] if you:

    10.1. have any enquires or feedback on our data protection policies and procedures; or

    10.2. need more information on or access to data which you have provided to us directly in the past.

    Definitions

    11. In this Privacy Statement, “Government Agency” refers to an Organ of State, Ministry, Department or Statutory Board and “personal data” shall have the same meaning as its definition in the Personal Data Protection Act 2012 (No. 26 of 2012), provided our obligations in respect of personal data under this Privacy Statement do not apply to:

    11.1. Business contact information; and

    11.2. Personal data of a deceased individual. However, clauses relating to the disclosure of personal data and protection of personal data shall apply in respect of the personal data of an individual who has been dead for 10 or less years.

    This version of the Privacy Statement is dated 4 June 2024.

    ANNEX

    1. Name of Service: Postman

    2. Types of data requested/collected:

    a. If you are a campaign creator, please note that GovTech will collect: (a) your email address; (b) other contact details; (c) details of your browser client; (d) device brand; (e) operating system; (f) IP address; (g) message content; (h) recipient number; (i) login sessions; (j) campaign content; and (k) all activities on Postman. In the event you request data from us concerning the campaign respondents, you warrant and represent that you have the consent of campaign respondents for us to provide the data to you or that such consent is not necessary under the applicable rules/laws.

    b. If you are a recipient of an SMS, please note that GovTech may collect, store and/or process data in accordance with this Privacy Statement (which applies in addition to the privacy policy/statement of the campaign administrator/creator agency(/ies)) and disclose the data to the campaign administrators/creator, or process the data for the campaign administrators/creator. However, if you have any enquiries or feedback on the campaign creator’s data protection, policies and procedures or need more information on or access to data which you have provided directly to the campaign creator in the past, please consult the privacy policy/statement of the campaign creator agency(/ies) and contact the campaign creator agency(/ies) directly.

    This version of the Privacy Policy is dated 8 April 2024.

    here
    .
    Logo
    Admin Dashboard here

    content_invalid

    No

    65 1111 3333

    routing_error

    Maybe*

    65 1111 4444

    message_expired

    Maybe*

    65 1111 5555

    delivery_unknown_error

    Maybe*

    65 1111 9999

    server_error

    server_unknown_error

    Maybe*

    65 2222 2222

    Important information *Not all messages are suitable for retries, especially OTPs, as the recipient's next steps will be to request for another OTP.

    **The test numbers are only available in the Postman test environment, as they are used to simulate different error messages. Do not use test numbers in the Postman production environment.

    Detailed explanation of error codes for specific troubleshooting steps

    recipient_invalid error code


    The recipient’s mobile number is not recognised by the network operator and cannot receive your SMS.

    Common causes for recipient_invalid:

    1. Deactivated or invalid number

      The recipient’s number might have been deactivated or is no longer in use.

    2. Incorrect number format

      The mobile number may be incorrectly formatted when entering the number (e.g. wrong country code, missing digits).

    Steps to troubleshoot:

    1. Verify the mobile number.

    2. Ensure your database is kept up to date by regularly validating the mobile numbers.

    recipient_unavailable error code


    The recipient’s device is not currently connected to the mobile network.

    Common causes for recipient_unavailable:

    1. Out of network coverage

      The recipient might be in an area with poor or no mobile network coverage, or there may be an ongoing issue with the telco operator.

    2. SIM card issue

      The recipient’s SIM card may be malfunctioning or damaged, causing the device to fail to connect to the network.

    3. Device issue

      There might be a technical issue with the handset, preventing it from connecting to the network.

    Steps to troubleshoot:

    1. Attempt to resend the message after some time.

    2. Instruct the recipient to check if their SIM card is functioning properly. They can try inserting the SIM or testing it in another device to rule out SIM issues.

    3. Ask the recipient to restart their device. If the problem persists, the recipient may need to reset their network settings, or consult their mobile operator for troubleshooting.

    content_invalid error code


    There is an issue with the message content, such as prohibited content or incorrect encoding.

    Common causes for content_invalid:

    1. Prohibited or sensitive content

      The message contains inappropriate keywords or phrases that are banned by the service provider.

    2. Special characters or unsupported encoding

      Certain characters or symbols in the message (e.g., non-GSM characters, emojis) are not supported by the declared message encoding.

    Steps to troubleshoot:

    1. Recreate a new campaign after modifying your content. You can refer here for the list of characters which Postman does not support.

    2. Identify non-GSM characters using Postman's message segment calculator tool.

    routing_error error code


    There is a failure in routing the messages to the recipient’s mobile network.

    Common causes for routing_error:

    1. Mobile number is not released by the regulator

      The mobile number is not approved for messaging by the country's telecom regulator.

    2. Networking routing configuration issue

      There is an issue with the mobile operator's routing infrastructure.

    Steps to troubleshoot:

    1. Confirm the mobile number is active and valid in the recipient's country.

    message_expired error code


    When a message from Postman is not delivered to the recipient handset within the 48-hour timeframe set by the SMS aggregators. This means that although the message was dispatched, it was not successfully delivered within the expected period, and its delivery status remains unknown.

    Common cause for message_expired:

    1. Delivery time frame exceeded

      Due to network delays, temporary issues with the aggregator's infrastructure may have caused delays in the message delivery.

    Steps to troubleshoot:

    1. It is unknown if the recipient has successfully received the message. You can consider resending critical messages.

    delivery_unknown_error error code


    The exact cause of the failure is not identifiable due to unknown configurations or issues on the recipient’s end. This means that while the message was sent successfully from Postman, the system cannot determine why it was not delivered.

    Common causes for delivery_unknown_error:

    1. Recipient's device configuration

      Unknown settings or configuration (e.g., third party mobile application, expired prepaid card) on the recipient's devices could affect the message delivery.

    2. International restrictions

      Certain countries or regions may have restrictions on SMS delivery to specific number ranges, or certain carries may block messages from external providers.

    Steps to troubleshoot:

    1. Contact the recipient to confirm if their device is active, properly configured, and connected to the network. If the problem persists, the recipient may need to reset their network settings, or consult their mobile operator for troubleshooting.

    2. For international restrictions issue, raise it to [email protected] and provide us with the message_ID of the affected messages.

    server_unknown_error error code


    This occurs when there is an internal error, typically due to an unknown issue with either Postman or the aggregator's server.

    Common cause for server_unknown_error:

    1. Temporary server outages

      One of the servers may experience temporary connectivity issues

    Steps to troubleshoot:

    1. For server issues, raise it to [email protected] immediately and provide us with the message_ID of the affected messages.

    2. Once we have fixed the issue with the server, you may resend the message after some time.

    delivery_error

    recipient_invalid

    No

    65 1111 1111

    recipient_unavailable

    Yes

    65 1111 2222

    Example response body
    {
        "data": [
            {
                "createdAt": "2024-05-16T16:34:06.582+08:00",
                "updatedAt": "2024-05-16T16:35:13.122+08:00",
                "id": "<YOUR_MESSAGE_ID>",
                "recipient": "6522222222",
                "values": {
                    "body": "test"
                },
                "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\ntest\n\n---\n\nThis is an automated message sent by the Singapore Government.",
                "latestStatus": "failure",
                "templateBodyId": "<YOUR_GENERATED_TEMPLATE_ID>",
                "campaignId": "<YOUR_GENERATED_CAMPAIGN_ID>",
                "templateBody": {
                    "createdAt": "2024-05-06T11:00:03.467+08:00",
                    "updatedAt": "2024-05-06T11:00:03.467+08:00",
                    "id": "<YOUR_GENERATED_TEMPLATE_BODY_ID>",
                    "templateId": "<YOUR_GENERATED_TEMPLATE_ID>",
                    "language": "english",
                    "body": "{{body}}",
                    "creatorId": "<YOUR_GENERATED_CREATOR_ID>"
                },
                "messageAttempts": [
                    {
                        "sentAt": "2024-05-16T16:35:13.118+08:00",
                        "deliveredAt": null,
                        "createdAt": "2024-05-16T16:34:06.604+08:00",
                        "updatedAt": "2024-05-16T16:35:13.118+08:00",
                        "id": "<YOUR_GENERATED_MESSAGE_ATTEMPT_ID>",
                        "messageId": "<YOUR_GENERATED_MESSAGE_ID>",
                        "externalAttemptId": "",
                        "status": "failure",
                        "errorType": "server_error",
                        "errorCode": "server_unknown_error",
                        "metadata": {},
                        "creatorId": "<YOUR_GENERATED_CREATOR_ID>",
                        "creator": {
                            "email": "<YOUR_GENERATED_CAMAPIGN_CREATOR_EMAIL>"
                        }
                    }
                ],
                "language": "english",
                "creatorEmail": "<YOUR_GENERATED_CAMPAIGN_CREATOR_EMAIL>",
                "numAttempts": 1
            },
            {
                "createdAt": "2024-05-16T16:34:06.582+08:00",
                "updatedAt": "2024-05-16T16:35:13.093+08:00",
                "id": "<YOUR_GENERATED_MESSAGE_ID>",
                "recipient": "6511119999",
                "values": {
                    "body": "test"
                },
                "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\ntest\n\n---\n\nThis is an automated message sent by the Singapore Government.",
                "latestStatus": "failure",
                "templateBodyId": "<YOUR_GENERATED_TEMPLATE_ID>",
                "campaignId": "<YOUR_GENERATED_CAMPAIGN_ID>",
                "templateBody": {
                    "createdAt": "2024-05-06T11:00:03.467+08:00",
                    "updatedAt": "2024-05-06T11:00:03.467+08:00",
                    "id": "<YOUR_GENERATED_TEMPLATE_BODY_ID>",
                    "templateId": "<YOUR_GENERATED_TEMPLATE_ID>",
                    "language": "english",
                    "body": "{{body}}",
                    "creatorId": "<YOUR_GENERATED_CREATOR_ID>"
                },
                "messageAttempts": [
                    {
                        "sentAt": "2024-05-16T16:35:13.089+08:00",
                        "deliveredAt": null,
                        "createdAt": "2024-05-16T16:34:06.604+08:00",
                        "updatedAt": "2024-05-16T16:35:13.090+08:00",
                        "id": "<YOUR_GENERATED_MESSAGE_ATTEMPT_ID>",
                        "messageId": "<YOUR_GENERATED_MESSAGE_ID>",
                        "externalAttemptId": "",
                        "status": "failure",
                        "errorType": "delivery_error",
                        "errorCode": "delivery_unknown_error",
                        "metadata": {},
                        "creatorId": "<YOUR_GENERATED_CREATOR_ID>",
                        "creator": {
                            "email": "<YOUR_GENERATED_CAMAPIGN_CREATOR_EMAIL>"
                        }
                    }
                ],
                "language": "english",
                "creatorEmail": <YOUR_GENERATED_CAMAPIGN_CREATOR_EMAIL>,
                "numAttempts": 1
            },
            {
                "createdAt": "2024-05-16T16:34:06.582+08:00",
                "updatedAt": "2024-05-16T16:36:05.595+08:00",
                "id": <YOUR_GENERATED_MESSAGE_ID>,
                "recipient": "6599999999",
                "values": {
                    "body": "test"
                },
                "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\ntest\n\n---\n\nThis is an automated message sent by the Singapore Government.",
                "latestStatus": "success",
                "templateBodyId": "<YOUR_GENERATED_TEMPLATE_ID>",
                "campaignId": "<YOUR_GENERATED_CAMPAIGN_ID>",
                "templateBody": {
                    "createdAt": "2024-05-06T11:00:03.467+08:00",
                    "updatedAt": "2024-05-06T11:00:03.467+08:00",
                    "id": "<YOUR_GENERATED_TEMPLATE_BODY_ID>",
                    "templateId": "<YOUR_GENERATED_TEMPLATE_ID>",
                    "language": "english",
                    "body": "{{body}}",
                    "creatorId": "<YOUR_GENERATED_CREATOR_ID>"
                },
                "messageAttempts": [
                    {
                        "sentAt": "2024-05-16T16:35:43.009+08:00",
                        "deliveredAt": null,
                        "createdAt": "2024-05-16T16:34:06.604+08:00",
                        "updatedAt": "2024-05-16T16:36:05.593+08:00",
                        "id": "<YOUR_GENERATED_MESSAGE_ATTEMPT_ID>",
                        "messageId": "<YOUR_GENERATED_MESSAGE_ID>",
                        "externalAttemptId": "<YOUR_GENERATED_EXTERNAL_ATTEMPT_ID>",
                        "status": "success",
                        "errorType": null,
                        "errorCode": null,
                        "metadata": {},
                        "creatorId": "<YOUR_GENERATED_CREATOR_ID>",
                        "creator": {
                            "email": "<YOUR_GENERATED_CAMAPIGN_CREATOR_EMAIL>"
                        }
                    }
                ],
                "language": "english",
                "creatorEmail": <YOUR_GENERATED_CAMAPIGN_CREATOR_EMAIL>,
                "numAttempts": 1
            }
        ],
        "pageData": {
            "hasNextPage": false,
            "hasPreviousPage": false,
            "startCursor": "WyIyMDI0LTA1LTE2VDE2OjM0OjA2LjU5MCswODowMCIsIjMwMjE5Il0=",
            "endCursor": "WyIyMDI0LTA1LTE2VDE2OjM0OjA2LjU5MCswODowMCIsIjMwMjE3Il0="
        }
    }
    You have entered the correct API key.

    Multiple message parameters (variables)

    In this example, we will be using the following message content with multiple message parameters (variables).

    Request Body example

    CSV example for batch send

    API users who do not want to manage your message templates within Postman

    If you are an API user that

    • manages message templates within your own system

    • uses Postman solely for sending out the full text of your message

    you may create a single variable, {{body}}, and insert the message into the {{body}} variable.

    Request Body example - single variable {{body}}

    CSV example for batch send - single variable {{body}}

    Line breaks in {{body}} messages

    When formatting line breaks in your request body, please note the differences between

    1. Campaign template creation

    2. CSV file for batch messages

    3. API request body

    Creating line breaks in campaign message template

    If your campaign requires sending via single send with line breaks, we advise you to create the campaign message template with line breaks included, during the campaign creation stage.

    Creating line breaks in message body for batch messages

    If your message template is already created, and you need to fill in message content with line breaks within the CSV file, use simple keyboard paragraphing to create the line breaks within your CSV file, then upload them.

    Excel automatically adds "" to your file after you have saved it as a .csv file.

    As such, do not encase the message in the {{body}} variable in "".

    Example of a CSV file

    Another example:

    Your message in the {{body}} variable will need to be encased in "" if you are creating messages from a text editor.

    Creating line breaks in API request body

    If you are sending an API single send message, you can add \n into the JSON request body. Do make sure your request body is in JSON format or you will receive an error.

    Example:

    And your message should look like this:

    If you are sending an API bulk send message, then use simple keyboard paragraphing to create the line breaks within your CSV file (see above).

    Postman Test Site limitations

    DO NOT conduct load testing on our test site.

    Postman test site has a .csv file limit of 20 rows to ensure no load testing is done on this site. More information here on load testing.

    Postman's test site is meant for agency users to test out the platform. As such, you should test out the site like how you would send out messages to MOPs in a real scenario, where each number will only receive a single message.

    Multiple messages to the same user

    If you send test messages with exact same content to the same person multiple times in 1 sitting in the same campaign:

    eg. "Hi your appointment is on 1 Jan 2024" was sent to Tom 10 times within 1 batch send.

    The telcos' automatic spam filter may be triggered . This means the message may not be delivered to Tom's phone at all, even though it will pass Postman’s send filters and status is reflected as delivered. See screenshot below on how the batch .csv is formatted in this failed example.

    Campaign Settings page
    whitelisted IP address for this campaign

    4. Fill your Twilio credentials on Postman

    You can only start configuring your Twilio account after you have completed the setup.

    You will first need to configure your Twilio account to ensure that it is functioning and is mapped to your Sender ID.

    1. Campaign Channel Type

    Upon creating a campaign name, you will be taken to select the campaign channel type.

    2. Adding Twilio Credentials

    Select Internal Staff and scroll down to key in your Twilio Credentials.

    Upon configuring your Twilio account, you will be able to obtain the necessary Twilio credentials required for you to input into your Postman campaign. More information can be found in

    Take note of the credentials you'll need to save-keep to input into Postman:

    1. (this is unretrievable once you proceed beyond this step, so make sure you have saved somewhere, or you will need to redo the set-up process to generate new keys).

    1. Account SID

    An account SID is the unique identifier assigned to your agency account, much like an NRIC number. This is immediately available on your dashboard once you log into your account console.

    1a. Account SID - Postman campaign settings

    Insert your Account SID from your Twilio account console into Postman.

    2. API key SID

    To set up your API key for Postman, select API keys & tokens on the side dashboard under Accounts.

    Then, create a new standard API key by selecting Create API key.

    Create a friendly name for your API key so you can easily identify it in the future, and select Standard as the API key type.

    You can find your API key under the Auth Tokens & API keys page.

    2a. API Key SID - Postman campaign settings

    Insert your API Key SID from your Twilio account console into Postman.

    3. API Secret

    When creating your API key, a secret key associated with your API key will be shown.

    Save your secret key

    Once you lose this secret key or if you do not save it, you will NOT be able to retrieve it again after moving on to the next step

    Make sure you copy and save these details somewhere safe

    Check the box and click Done.

    3a. API Secret - Postman campaign settings

    Insert your API Secret Key from your Twilio account console into Postman.

    4. Message Service ID

    This is the last detail you need to save before proceeding to Postman.

    There is no need to purchase a US phone number if your are sending messages only to Singapore numbers.

    If you are sending SMSes to foreign numbers, you will still need to purchase a phone number at USD$1.15. Otherwise, your messages will not be delivered. Find out how to purchase a phone number , and follow these to set up your messaging service ID. You can ignore the steps below if you are purchasing a phone number.

    If you don't have a need to purchase a phone number, follow these steps to obtain your messaging service SID.

    Go back to your Twilio home page, and select Set up a Messaging Service.

    On the side bar, click Develop > Messaging > Services > Create Messaging Service.

    Name your messaging service and indicate the purpose. This will help you better identify your use cases, especially if you have multiple, and will also help Twilio detect your specific use case quicker should you need their help for troubleshooting.

    Set up your alphanumeric Sender ID

    Configure your alphanumeric Sender ID by selecting Alpha Sender under Add Senders > Sender Type.

    Click Continue. You may ignore the notification indicating that Alphanumeric Sender is not enabled for this account.

    Specify the Alphanumeric Sender ID you want to use in the text box.

    It is best to align the Alphanumeric Sender ID with the Sender ID that you registered with SGNIC.

    If the Alphanumeric Sender ID you chose is protected, you will notice either of the two things below.

    • You encounter an error when setting it up on the Sender Pool page

    • You may not receive any message when you send a test SMS

    This also means that this Sender ID has been registered by another entity and you will not be able to use it.

    Once you have completed the step above, you may click the Skip Setup button below.

    After clicking "Skip setup" in the step above, you should be brought to the Properties page of this Messaging Service.

    On this page, you should be able to find the Messaging Service ID.

    4a. Message Service ID - Postman campaign settings

    Insert your Messaging Service SID into Postman.

    Expected Sender Name

    Under your Expected Sender Name, enter your registered Sender ID.

    You have now completed the set up of your internal channel. Continue creating the campaign by typing in your .

    Postman Message Segment Calculatormessage-segment-calculator.postman.gov.sg

    The message object

    Attributes


    id string

    Message identifier - this can be used to retrieve a single message and its delivery status (). It can also be used to re-send a message in the event where the first attempt failed ()


    creatorID string

    Dear {{name}}, your next appointment at {{clinic}} is on {{date}} at {{time}} hrs. 
    Example Request Body
    {
        "recipient": "6599999999",
        "language": "english",
        "values": {
            // The following values are values for the parameters in the example template
            "name": "John Doe",
            "clinic": "Example Clinic",
            "date": "11 Dec 2023",
            "time": "11:30 am"
        }
    }
    Example CSV for batch send
    recipient,language,name,clinic,date,time
    6599999999,ENGLISH,John Doe,Example Clinic,11 Dec 2023,11:30 am
    Example Request body
    {
        "recipient": "6599999999",
        "language": "english",
        "values": {
        // The following values are values for the parameters in the example template
            "body": "Fill in your system constructed message here"
        },
    }
    Example CSV for batch send
    recipient,language,body
    6599999999,english,"Fill in your system constructed message here"
    recipient,language,body
    6591234567,english,"Dear Amy 
    
    Your appointment for VACCINATION is confirmed.
    
    Please do not reply to this message."
    6599999999,english,"Dear John 
    
    Your appointment for VACCINATION is confirmed.
    
    Please do not reply to this message."
    {
      "recipient": "6599999999",
      "language": "english",
      "values": {
        "test": "This is a test for line breaks \n this is one line spacing \n\n this is a paragraph spacing"
      }
    }
    Step 6. Fill in your Twilio credentials in Postman
    Account SID
    API key SID
    API Secret
    Messaging Service ID
    here
    steps
    Campaign Content
    Add your Twilio credentials into your Postman campaign
    Locate your account SID
    Select "API keys & tokens"
    Select "Create API key"
    Name your API key, and set key type as "standard"
    Save the API key SID and Secret Key somewhere safe!
    Create your messaging service
    Fill in the required details
    Select "Alpha Sender"
    Add in your Sender ID
    Complete the set up
    This is your messaging service SID
    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.

    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.


    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.

    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.

    Check if your messages have any unsupported characters here.


    Trailing white spaces

    The content within your values object should not start nor end with a space, as this will trigger 400 Bad Request.

    latestStatus string

    Possible message statuses and what they mean

    Status in delivery report/API retrieve message status
    Corresponding status on UI dashboard
    What it means

    created

    pending

    Postman is aware of your request and has created the necessary records.

    However, it has not yet made the request to the relevant messaging service provider to have the message sent.

    enqueued

    pending

    Your message is now in our queue and in the process of getting sent to the relevant messaging service provider.

    sending

    pending

    Your message has been taken out of the queue and in the process of getting sent to the relevant messaging service provider.


    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 which includes:

    1. type - The error type

      1. delivery_error - Error with the delivery of the message

      2. server_error

    2. code - The error code

      1. recipient_invalid

      2. recipient_unavailable

      3. content_invalid

    The full description of each error code can be found in the Message delivery errors page

    Retrieve message
    Single Send- Retry

    Message content

    Message content

    This flow allows you to create your own message in Postman using an editor and can be used by both admin portal and API users.

    For API users who do not want to manage your message templates within Postman, click here for more information.

    Message parameters (variables)

    You can create multiple {{variables}} when typing out your message content. You can then input the values of each {{variable}}when you send the message from the admin portal or via API.

    Variables have to fulfil the following in order to be successfully created

    • Can only contain lowercase letters, numbers and _

    • Must start with a lowercase letter

    • If multiple languages are selected, the same variables must be present in all language tabs.

    • Characters are within the GSM-7 character set. See section below on unsupported characters for more info.

    Additional notes to message content

    Unsupported characters

    It is recommended to NOT paste message content into Postman from another editor/MS word/Outlook etc., as this may convert characters into unsupported (non-GSM-7) characters. Please type the message content directly into Postman.

    Postman message segment calculator

    You may make use of to

    • identify unsupported characters within your message content

    • identify non GSM characters within your message content

    • check the number of message segments

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

    1. unsupported characters changes the message encoding and therefore, significantly increases 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.

    Blocking unsupported characters at the UI and API layers [English language only]

    Messages containing avoidable unsupported characters will be blocked from sending. Please use the to check your message before sending.

    Message content containing unsupported characters will be blocked from sending.

    1. On the UI:

    Campaign templates that contain unsupported characters cannot be created on the UI/Postman admin portal. This blocking has been implemented since June 2024.

    1. On the API:

    If your message content is created only at the API layer, we will implement blocking on the Postman production environment from 5 May 2025. This blocking will be available on the Postman test environment from 17 February 2025.

    Details have been sent to you via email on 7 February 2025, and also available on the policy guide .

    Error message if your message contains unsupported characters at the API layer:

    Trailing white spaces in variables

    Note that the content within your variables should not start nor end with a space, as this will trigger an error where your message will not be created (400 Bad Request).

    eg. "Please report to Clinic A ."

    In this example, contents in the variable are coloured, and the trailing spaces at the start/end of the variable content are highlighted in blue. The additional spaces will trigger an error where your message will not be created in Postman.

    Possible replacements to unsupported characters

    Note that this unsupported character list below is not exhaustive. Please use the to check your message for unsupported characters.

    Excluded/unsupported Characters
    Description
    Possible Replacements that Postman supports
    {
      "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": "[email protected]",
      "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"
          }
        }
      ]
    }
    Message object: recipient
    "recipient": {
    	  "value": "S1234567A",
    	  "type": "nric"
    	  },
    routing_error
  • delivery_unknown_error

  • server_unknown_error

  • sent

    sent

    Postman has made the request to the relevant messaging service provider to have the message sent.

    However, it has not yet received a notification from the provider on the request status.

    sent_to_telco

    sent

    The relevant messaging service provider has sent an update to Postman saying that the message has been sent to the recipient's Telco.

    Note: 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. Beyond 48 hours, if the message status remains sent_to_telco, 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.

    success

    success

    The relevant messaging service provider has sent an update to Postman saying that the message has been delivered by the Telco to the recipient. Note: This is a terminal status meaning that the message has been delivered by the telco to the recipient.

    failure

    failure

    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.

    [

    left square bracket

    (

    ]

    right square bracket

    )

    ~

    tilde and variants

    -

    \

    backslash and variants

    '

    `

    backtick (note that this is not an apostrophe ' . You can find it to the left of the "1" on your keyboard) and variants

    "

    ‘

    acute accent and variants

    '

    “

    double prime quotation mark and variants

    "

    ”

    reversed double prime quotation mark and variants

    "

    ¬

    logical negation

    -

    «

    left-pointing double angle quotation mark

    "

    »

    right-pointing double angle quotation mark

    "

    ❝ or ❛

    heavy double/single turned comma quotation mark ornament

    "

    ❞ or ❜

    heavy double/single comma quotation mark ornament

    "

    ÷

    division sign

    /

    ¼, ½

    vulgar fractions and variants

    1/4, 1/2 etc.

    •

    bullet point

    -

    ⊛, ✢, ✣, ✤, ✥, ✺, ❃, ⧆ etc

    asterisk and variants

    *

    |

    vertical line and variants

    I (uppercase i)

    €

    euro

    EUR

    {

    left curly bracket and variants

    (

    }

    right curly bracket and variants

    Postman's message segment calculator
    message segment calculator
    here
    message segment calculator

    )

    {
    	"error": {
    		"code": "parameter_invalid",
    		"message": "Parameter values cannot contain avoidable expensive characters. Please refer to the guide (https://postman-v2.guides.gov.sg) to learn more.",
    		"type": "domain_error",
    		"id": "8758298681140894082"
    	}
    }

    Terms & Condition

    1. General

    1.1. These Terms of Use govern your access to and use of our services, including the application (whether as software or as a website or otherwise), its contents (including APIs, if any), push notifications and all other accompanying materials as identified in the Schedule below (collectively, the "Service”).

    1.2. This Service is provided to you by the Government Technology Agency ("GovTech"). GovTech’s office is located at 10 Pasir Panjang Road, #10-01, Mapletree Business City, Singapore 117438.

    1.3. By accessing or using any part of this Service, you unconditionally agree and accept to be legally bound by these Terms of Use and any amendments thereto from time to time. GovTech reserves the right to amend these Terms of Use at its sole discretion and at any time, with or without notice to you. Please read the Terms of Use carefully each time you access or use any part of this Service as (without prejudice to any other means your agreement to the Terms of Use as amended may manifest) such access or use shall constitute your agreement to the Terms of Use and any amendments to it. Your failure to do so shall not prejudice the effect or enforceability of the Terms of Use or any amendments thereto. GovTech may, at its sole discretion and without prejudice to its other rights under this Clause 1.3, also amend these Terms of Use by providing you with notice effective immediately or such other time designated by GovTech, and such notice may be provided by any means GovTech deems appropriate (for example, by posting the notice through the Service, any website related to the Service, or by email).

    1.4. If you do not agree to these Terms of Use, please do not use this Service or any part of this Service.

    1.5. If you are accessing or using the Service for and on behalf of another entity (such as your employer), you warrant and represent that you have the necessary authority to bind such entity to these Terms of Use.

    2. Nature of this Service

    Please see the Schedule for more information and terms concerning this Service.

    3. Licence Terms and Restrictions

    3.1. The Service, including the materials made available on or through the Service, is owned by, licensed to, managed or controlled by GovTech. Please see clause 4 (Third Party Materials) for more information.

    3.2. Subject to these Terms of Use, GovTech grants to you a non-exclusive, revocable, and non-transferable right to access and use the Service for personal or internal purposes only, and only for such use permitted by the functions of the Service and intended by GovTech.

    3.2A You shall not, and shall not authorise or permit any third party to:

    3.2A.1 bypass or circumvent any technical restrictions or digital protection measures in the Service or attempt to circumvent any such restrictions;

    3.2A.2. reverse engineer, decompile, disassemble, modify, translate, adapt or create derivative works of the Service (whether in relation to its source code, object code, underlying structure, ideas, algorithms or otherwise);

    3.2A.3. reproduce, publish, distribute, transfer, publicly display, resell, rent, lease, or sublicense the Service, or loan, lend, pledge, assign, or otherwise encumber the Service to or in favour of any third party;

    3.2A.4. remove or obscure the copyright, trademark and other proprietary notices contained on or in the Service;

    3.2A.5. use the Service in any manner that is contrary to any applicable laws or regulations or rights of third parties (however arising and of whatever nature), or in a manner that constitutes harmful, fraudulent, or obscene activity;

    3.2A.6. make the Service available in or through a network, file-sharing service, service bureau or any similar timesharing arrangement or as a managed service provider;

    3.2A.7. perform any benchmarking tests or analyses of the Service;

    3.2A.8. use the Service to create anything that would compete with the Service;

    3.2A.9. transfer, assign or permit the sharing of license keys to or with a third party;

    3.2A.10. use the Service to process or permit to be processed any code of a third party;

    3.2A.11. provide third party access to the Service; or.

    3.2A.12. export the Service in violation of any international sanctions or laws applicable to US entities.

    3.2B All express or implied rights to the Service not specifically granted herein are expressly reserved to GovTech.

    3.3. GovTech reserves the right to:

    3.3.1. Update or modify this Service from time to time;

    3.3.2. Deny or restrict access to or use of the Service by any particular person without ascribing any reasons whatsoever; and

    3.3.3. Discontinue or terminate this Service at any time without notice or liability to you whatsoever, whereupon all rights granted to you hereunder shall also terminate forthwith. You shall further upon notice from GovTech return or destroy all copies of the Service or materials therein that you may have been provided with.

    3.4. You will not interfere or attempt to interfere with the proper working of the Service or otherwise do anything that imposes an unreasonable or disproportionately large load on GovTech’s servers.

    3.5. You shall comply with all set-up procedures and requirements, as well as all policies, guidelines, rules, notices and instructions relating to the Service as may be issued by and/or amended by GovTech from time to time.

    3A. Account Access and Security

    3A.1. You are solely responsible for maintaining the confidentiality and security of any authentication credentials associated with your use of the Service, including the security of any of your devices which store the authentication credentials.

    3A.2. GovTech shall be entitled, but not obliged, to verify the identity of the person using the Service. Without prejudice to the foregoing, GovTech is not under any duty to verify that any biometric identifier used with the Service, or on your device, belongs to you.

    3A.3. GovTech shall have the sole and absolute discretion to invalidate any authentication credentials at any time, or require you to have to re-authenticate or refresh your authentication credentials at any time, without having to give any reason for the same.

    3A.4. GovTech shall be entitled, but not obliged, to act upon or rely on any instructions, information, transmissions of data, or communications received from the account or use of the Service in relation to your authentication credentials, as if such instructions, information, data or communications were issued by you, whether or not the same was authorized by you.

    3A.5. For the avoidance of doubt, you are solely responsible for any loss of whatever nature arising from unauthorized or unofficial modifications made to your device which permit or escalate privileged access, or remove restrictions to such access, which are not intended by the manufacturer or provider of your device or operating system of your device (e.g., “rooting” or “jailbreaking” your mobile phone).

    4. Third Party Materials

    4.1. The Service may require, enable or facilitate access to or use of software or services of a third party (“Third Party”). In such an event, there may be terms of use of the third party software or service (the “Third Party Terms”). GovTech may be required under or as a result of the Third Party Terms to notify you of certain terms that apply to you (either directly as an end user, or as a party whose acts or omissions could cause GovTech to breach the Third Party Terms) when you use the Services. An example of Third Party Terms may be open source software terms or standard form terms of the distribution platform from which you obtain any part of the Service (e.g. Google Play Store or Apple App Store terms) which bind GovTech as a developer or user of the distribution platform (the “Distribution Terms”). Information on the Third Party Terms are embedded in the Service, already accounted for in these Terms of Use, publicly available (e.g the Distribution Terms) or otherwise indicated in the Schedule herein. For the avoidance of doubt, insofar as this Clause 4 relates to the Distribution Terms, the relevant Distribution Terms are the terms of the specific platform from which you obtained a copy of the software or application that is part of the Service. For example, if you obtained the said copy from the Google Play Store, then the relevant terms are Google’s Distribution Terms.

    4.2. It is your responsibility to check and read the most up-to-date versions of these Third Party Terms and you are deemed to have notice of the same. In particular, you are deemed to have notice of the Third Party Terms that GovTech (under the Third Party Terms) is required to notify you, and you unconditionally agree to be bound by all the obligations in the Third Party Terms which are applicable to you (whether as end user, or as a party whose acts or omissions could cause GovTech to breach the Third Party Terms, or otherwise). For the avoidance of doubt, where Third Party Terms are listed, such Third Party Terms shall be deemed to include any privacy policies and acceptable use policies as are applicable to you.

    4.3. If the Third Party Terms require you to enter into an agreement directly with the Third Party, then you unconditionally agree to enter into such agreement, and in any event, to be legally bound by the Third Party Terms. For the avoidance of doubt:

    4.3.1. some Third Party Terms (particularly open-source terms) permit either a direct licence to you from the Third Party or a sublicence from GovTech to you. In such cases, your licence is a direct licence from the Third Party to you; and

    4.3.2. the terms of your agreement with the Third Party will govern your use of the relevant third party software or service, and not these Terms of Use.

    4.4. If the Third Party Terms expressly or impliedly require GovTech to incorporate certain terms in these Terms of Use (inclusive of terms which impose any minimum or maximum standards herein, and/or terms described in Clause 4.5 below), such terms are deemed to have been so incorporated (the “Incorporated Terms”). Examples of Incorporated Terms include provisions which require GovTech to give you notice of certain rights and liabilities or require GovTech to ensure that you acknowledge certain matters. Similarly, if the Third Party Terms expressly or impliedly require these Terms of Use to be altered such that the Third Party Terms are complied with, the parties herein agree that the Terms of Use shall be deemed to be so altered but only to the extent necessary for compliance.

    4.5. Some Third Party Terms grant the Third Party, or require GovTech to grant the Third Party, direct rights of enforcement of these Terms of Use as a third party beneficiary, against you. Such Third Party Terms are deemed to have been incorporated into these Terms of Use as Incorporated Terms, and you hereby agree to grant such Third Party, such direct rights of enforcement against you.

    4.5A Unless the applicable Third Party Terms permit you to commence legal proceedings against the relevant Third Party, you shall not threaten or commence legal proceedings against a Third Party without GovTech’s prior written approval.

    4.6. For the avoidance of doubt, without prejudice to Clause 4.4, to the extent of any inconsistency between these Terms of Use and the Third Party Terms, the latter shall prevail provided nothing in the Third Party Terms increases the liability of GovTech beyond that stated in Clause 6.

    4.7. Without prejudice and in addition to the foregoing, GovTech shall not be responsible for your use of any software or service of a Third Party.

    5. Your Consent to Your Data and to Access Functions of Your Device

    5.1. You hereby grant to GovTech a non-exclusive, worldwide, perpetual and royalty-free right to collect, use, disclose, process, modify, adapt, create derivative works of, reproduce, and sublicense any and all information or data submitted, uploaded or shared by you to the extent necessary to provide the Service or for any other purpose expressly or impliedly provided in these Terms of Use, or as permitted by law.

    5.2. Use of the Service may require you to allow access by the Service to certain functions of your device, such as push notifications, the obtaining and/or sharing of your location, or the collection of data from you in connection with the Service. Your use of the Service shall constitute your consent to the access by the Service of such functions of your device as may be reasonably required by the Service.

    5.3. You further irrevocably and unconditionally waive, and shall cause to be irrevocably and unconditionally waived, all existing and future moral rights (including the right of identification) wherever in the world in respect of any information or data submitted, uploaded or shared by you (including feedback, requests or suggestions concerning the Services) to GovTech. Such waiver shall also extend to GovTech’s licencees, assigns and successors-in-title.

    5.4. Please also see clause 8 (Privacy Statement).

    5A. Ownership of Feedback/Requests/Suggestions

    You agree that all title and interest in any feedback, requests or suggestions from you concerning the Services provided to GovTech shall be owned by GovTech and, without prejudice and in addition to clause 5.3, you shall waive all rights existing in or in respect of the same (including, for the avoidance of doubt, any signature requirements).

    5B. Confidentiality

    5B.1 If you receive information or data (in whatever form) from GovTech or a Third Party which is designated confidential or proprietary or is otherwise reasonably understood to be confidential or proprietary (collectively, “Confidential Information”), you shall not use, disclose or reproduce the Confidential Information except for the purpose for which it was provided to you. If consent to disclose the Confidential Information to a third party is given by GovTech or the Third Party to you, any act or omission in respect of the Confidential Information by that person shall be deemed to be your act or omission and you agree to be fully liable for the same. In all cases, you shall protect the Confidential Information to the same extent you protect your own confidential information but in no event less than a reasonable standard of care. You shall ensure that any recipients are bound by confidentiality terms at least as restrictive as this Clause.

    5B.2 You shall destroy any Confidential Information immediately upon request by GovTech or the Third Party.

    5B.3 In the event:

    5B.3.1 you are, or likely to be, required by an order of court to disclose Confidential Information; or

    5B.3.2 you have reasonable grounds to suspect the unauthorised use or disclosure or reproduction of Confidential Information;

    you shall immediately notify GovTech or the Third Party of the same and cooperate with GovTech or the Third Party to prevent or limit such disclosure.

    5B.4 Nothing in this Clause 5B shall prejudice GovTech’s or the Third Party’s other rights at law.

    6. Disclaimers and Indemnity

    6.1. The Service is provided on an "as is" and “as available” basis without warranties of any kind. To the fullest extent permitted by law, GovTech does not make any representations or warranties of any kind whatsoever in relation to the Service or its output and hereby disclaims all express, implied and/or statutory warranties of any kind to you or any third party, whether arising from usage or custom or trade or by operation of law or otherwise, including but not limited to any representations or warranties:

    6.1.1. as to the accuracy, completeness, correctness, currency, timeliness, reliability, availability, interoperability, security, non-infringement, title, merchantability, quality or fitness for any particular purpose of the Service or its output; and/or

    6.1.2. that the Service or its output or any functions associated therewith will be uninterrupted or error-free, or that defects will be corrected or that this Service, its output, website and the server are and will be free of all viruses and/or other malicious, destructive or corrupting code, programme or macro.

    6.2. GovTech shall also not be liable to you or any third party for any damage or loss of any kind whatsoever and howsoever caused, including but not limited to any direct or indirect, special or consequential damages, loss of income, revenue or profits, lost or damaged data, or damage to your computer, software or any other property, whether or not arising directly or indirectly from –

    6.2.1. your access to or use of this Service or its output, or any part thereof;

    6.2.2. any loss of access or use of this Service or any part of this Service or its output, howsoever caused;

    6.2.3. any inaccuracy or incompleteness in, or errors or omissions in the transmission of, the Service or its output;

    6.2.4. any delay or interruption in the transmission of the Service or its output, whether caused by delay or interruption in transmission over the internet or otherwise; or

    6.2.5. any decision made or action taken by you or any third party in reliance upon the Service or its output,

    regardless of whether GovTech has been advised of the possibility of such damage or loss.

    6.3. Without prejudice and in addition to the foregoing, insofar as the Service facilitates or requires the provision, use or functioning of, or is provided in conjunction with, other products, software, materials and/or services not provided by GovTech, GovTech makes no representation or warranty in relation to such products, software, materials and/or services (including without limitation any representation or warranties as to timeliness, reliability, availability, interoperability, quality, fitness for purpose, non-infringement, suitability or accuracy).

    6.4. You shall not rely on any part of the Service or its output to claim or assert any form of legitimate expectation against GovTech, whether or not arising out of or in connection with GovTech’s roles and functions as a public authority. GovTech shall have no responsibility or liability to you or any third party arising out of or in connection with any fraud, phishing, or any other illegal act or omission by other parties in relation to the Service and it is your own responsibility to ensure that the Service you are using or accessing is from a legitimate source.

    6.5. You agree to defend and indemnify and keep GovTech and its officers, employees, agents and contractors harmless against all liabilities, losses, damages, costs or expenses (including legal costs on an indemnity basis) howsoever arising out of or in connection with your access or use of the Service (including third party software or services) or its output or your non-compliance with the Terms of Use, Third Party Terms or Incorporated Terms, whether or not you had been advised or informed of the nature or extent of such liabilities, losses, damages, costs or expenses. You warrant and represent that your access or use of the Service and its output does not and will not breach or violate any laws, regulations, trade, economic and/or export sanctions (wherever in the world) applicable to you, and that you shall not transmit any malicious code, illegal, infringing or undesirable content or materials to GovTech or its agents or any Third Party.

    6.6. GovTech shall have the right to take any and all necessary actions/omissions to protect its interests, including complying with any legal requirements (such as taking down, disabling and disabling access to, removing (permanently or temporarily), and/or restoring (including restoring access to) any materials contained in, accessed through, uploaded to, and/or made available via the Service in response to any take-down or restoration notices). You agree that GovTech is not obliged to determine the merits of any take-down or restoration notices. You further waive any rights arising as a result of the actions/omissions taken by GovTech.

    6.7. Without prejudice and in addition to GovTech’s other rights:

    6.7.1. in no event shall GovTech’s total cumulative liability arising out of or in connection with these Terms of Use to you exceed the amount of fees or payment received by GovTech (and not paid or given to any Third Party by GovTech) from you for the Service in the 12 months preceding the date of the first cause of action; and

    6.7.2. no action may be brought by you against GovTech arising out of or in connection with these Terms of Use more than one (1) year after the cause of action arose.

    7. Hyperlinks

    7.1. Insofar as the Service provides a hyperlink to material not maintained or controlled by GovTech, GovTech shall not be responsible for the content of the hyperlinked material and shall not be liable for any damages or loss arising from access to the hyperlinked material. Use of the hyperlinks and access to such hyperlinked materials are entirely at your own risk. The hyperlinks are provided merely as a convenience to you and do not imply endorsement by, association or affiliation with GovTech of the contents of or provider of the hyperlinked materials.

    7.2. Caching and hyperlinking to, and the framing of, any part of the Service is prohibited save where you have obtained GovTech’s prior written consent. Such consent may be subject to any conditions as may be determined by GovTech in its sole discretion. If you hyperlink to or frame any part of the Service, that shall constitute your acceptance of these Terms of Use and all amendments thereto. If you do not accept these Terms of Use as may be amended from time to time, you must immediately discontinue linking to or framing of any part of the Service.

    7.3. GovTech reserves all rights:

    7.3.1. to disable any links to, or frames of, any materials which are unauthorised (including without limitation materials which imply endorsement by or association or affiliation with GovTech, materials containing inappropriate, profane, defamatory, infringing, obscene, indecent or unlawful topics, names, or information that violates any written law, any applicable intellectual property, proprietary, privacy or publicity rights); and

    7.3.2. to disclaim responsibility and/or liability for materials that link to or frame any part of the Service.

    8. Privacy Statement

    You also agree to the terms of the Government Agency Privacy Statement for this Service as may be amended from time to time. The Government Agency Privacy Statement will form part of these Terms of Use.

    9. Rights of Third Parties

    Subject to the rights of the Third Party and/or Singapore public sector agencies, a person who is not a party to this Terms of Use shall have no right under the Contract (Rights of Third Parties) Act or otherwise to enforce any of its terms. Variation or rescission of these Terms of Use shall not require the consent of any third party, including any Third Party and/or other Singapore public sector agencies.

    10. Assignment

    10.1. You may not assign or sub-contract this Terms of Use without the prior written consent of GovTech.

    10.2. GovTech may assign, novate, transfer, or sub-contract the rights and liabilities in respect of the Service and this Terms of Use, without notifying you and without further reference to you. Your acceptance of this Terms of Use shall also constitute your consent to such assignment, novation, transfer or sub-contract.

    10A. Severability

    If any term of these Terms of Use is held by a court or tribunal of competent jurisdiction to be invalid or unenforceable, then these Terms of Use, including all of the remaining terms, will remain in full force and effect as if such invalid or unenforceable term had never been included but, to the extent permissible, such invalid or unenforceable terms shall be deemed to have been replaced by terms that are (a) valid and enforceable and (b) express the intention or produce the result closest to the original intention of the invalid or unenforceable terms.

    10B. Order of Precedence

    In the event of any conflict, inconsistency or ambiguity between or in any one or more terms in these Terms of Use, such conflict, inconsistency or ambiguity shall be resolved in favour of GovTech and the provision or interpretation which is more favourable to GovTech shall prevail. Notwithstanding any other term, GovTech has the sole and absolute discretion to determine which term or interpretation is more favourable to it and such decision shall be binding on you.

    10C. Entire Agreement

    These Terms of Use contains the entire and whole agreement concerning the subject matter of these Terms of Use. The Terms of Use supersedes all prior written or oral representations, agreements and/or understandings between GovTech and yourself. Except for amendments by GovTech under these Terms of Use, no amendment to these Terms of Use shall be of any force unless agreed upon in writing by both parties.

    10D. Waiver

    10D.1. Any delay, failure or omission on the part of GovTech in enforcing any right, power, privilege, claim or remedy (“Remedy”), which is conferred under the Terms of Use or at law or in equity, or arises from any breach by you, shall not (a) be deemed to be or be construed as a waiver or variation of the Remedy, or of any other such Remedy, in respect of the particular circumstances in question, or (b) operate so as to bar the enforcement or exercise of the Remedy, or of any other such Remedy in any other subsequent instances.

    10D.2. No waiver by GovTech of any breach of the Terms of Use by you shall be deemed to be a waiver of any other or of any subsequent breach.

    10D.3. Any waiver by GovTech granted under the Terms of Use must be in writing and may be given subject to conditions. Such waiver under the Terms of Use shall be effective only in the instance and for the purpose for which it is given.

    11. Governing Law and Dispute Resolution

    11.1. These Terms of Use shall be governed by and construed in accordance with laws of Singapore.

    11.2. Subject to clause 11.3, any dispute arising out of or in connection with these Terms of Use, including any question regarding its existence, validity or termination, shall be referred to and finally resolved in the Courts of the Republic of Singapore and the parties hereby submit to the exclusive jurisdiction of the Courts of the Republic of Singapore.

    11.3. GovTech may, at its sole discretion, refer any dispute referred to in clause 11.2 above to arbitration administered by the Singapore International Arbitration Centre (“SIAC”) in Singapore in accordance with the Arbitration Rules of the SIAC ("SIAC Rules") for the time being in force, which rules are deemed to be incorporated by reference in this clause. Further:

    11.3.1. The seat of the arbitration shall be Singapore.

    11.3.2. The tribunal shall consist of one (1) arbitrator.

    11.3.3. The language of the arbitration shall be English.

    11.3.4. All information, pleadings, documents, evidence and all matters relating to the arbitration shall be confidential.

    Where GovTech is the defendant or respondent, it shall be given at least 30 days before the commencement of any legal action against it to elect to exercise the right herein to have the dispute submitted to arbitration. This right to elect shall not prejudice GovTech’s right to a limitation defence and the period to exercise the right shall not be abridged by reason of any accrual of a limitation defence in favour of GovTech during the said period.

    These Terms of Use are dated 4 June 2024.

    SCHEDULE

    1. Name of Service: Postman

    2. Nature of Service

    1. Notwithstanding anything in the Terms of Use, the Service is intended for use by a Singapore public sector agency, or an education institution permitted by GovTech in its sole and absolute discretion.

    2. This Service is a tool for the permitted entities (listed in sub-paragraph 2a. above) to create mass messaging campaigns that reach Members of Public (MOPs) and / or staff. This Service also allows permitted entities to invite each other to collaborate on campaigns.

    3. You are responsible for ensuring that your use of the Service is compliant with all applicable laws, including without limitation the Personal Data Protection Act and the Spam Control Act.

    3. Third party software/services

    1. Twilio, Inc.’s, Acceptable Use Policy, Privacy Policy ()

    2. NestJS - Service Terms ()

    3. Axios - Service Terms ()

    4. Bluebird - Service Terms ()

    GovTech is not responsible for the content of the messages you choose to send, nor for any agreement you have (or purport to have) with the recipient of your messages.
  • Use of the Service may require you to already have the right to use certain third party service providers. For example, you may be required to have a Twilio account in order to use the Services. You may be required to provide details of your account via email in order to use the Services.

  • You warrant and represent to GovTech that (without prejudice to GovTech’s other rights in the Terms of Use such as Clauses 3.2 and 6) you have full rights to use such third party services within or with the Service and your acts and/or omissions in respect of the such services will not cause GovTech to incur liability to any third party, including the service provider.

  • Please note that GovTech may collect, store and/or process data created by the Service. Please see the Privacy Statement for more details.

  • GovTech shall have the right to give your message recipients notice of GovTech’s Terms of Use and Privacy Statement in the campaigns you create. For clarity, GovTech is able to access and store the messages sent using the Service.

  • Without prejudice and in addition to GovTech’s other rights in the Terms of Use, GovTech shall have the right to halt or suspend your use of the Service where you have or run any campaigns that affect overall system health (such as system abuse, unannounced huge campaigns, etc) GovTech has the sole and absolute discretion to determine whether any campaign affects overall system health.

  • Express - Service Terms (https://github.com/expressjs/express?tab=MIT-1-ov-file)

  • Helmet - Service Terms (https://github.com/helmetjs/helmet?tab=MIT-1-ov-file)

  • Nanoid - Service Terms (https://github.com/ai/nanoid?tab=MIT-1-ov-file)

  • Pino - Service Terms (https://github.com/pinojs/pino?tab=MIT-1-ov-file)

  • Postmark - Service Terms (https://postmarkapp.com/terms-of-service)

  • Sequelize - Service Terms (https://github.com/sequelize/sequelize?tab=MIT-1-ov-file)

  • Typescript - Service Terms (https://github.com/microsoft/TypeScript?tab=Apache-2.0-1-ov-file)

  • Chakra UI - Service Terms (https://github.com/chakra-ui/chakra-ui?tab=MIT-1-ov-file)

  • React - Service Terms (https://github.com/facebook/react?tab=MIT-1-ov-file)

  • Vite - Service Terms (https://github.com/vitejs/vite?tab=MIT-1-ov-file)

  • Terms of Service
    http://www.twilio.com/legal/tos
    https://devtools.nestjs.com/legal/terms-of-service
    https://github.com/axios/axios/blob/v1.x/LICENSE
    https://github.com/petkaantonov/bluebird/?tab=MIT-1-ov-file
    Logo

    Billing Overview

    From 1 July 2025, SMSes sent out via Postman will be charged to agencies. Please read this page to understand about the billing process along with the prerequisites for billing.

    Cost of messages

    Only messages sent out from Postman's production environment will be charged (messages to members-of-public must be sent from the production environment).

    Messages will be charged based on the recipient's number. All charges are subject to GST which will be charged in the final invoice. The cost for recipients are as follows:

    • Local numbers (+65) - $0.046 SGD per message segment

    • Foreign numbers (all other numbers) - $0.23 SGD per message segment

    GST will be included in the final invoice at the prevailing GST rate. The Postman team previously communicated to several agencies that no GST would be included. We regret this error and apologise for any inconvenience caused. Please reach out to the BTN Finance team via email should you have any questions.

    Also note that prices above are based on message segments. Each message to recipients can contain multiple message segments based on its length. Refer to the page below for more details on how message segments are calculated.

    Messages which have failed to be delivered due to invalid numbers will also be charged. Refer to the page below for more details.

    Billing Process

    Billing will be based on the campaign creator's email domain.

    • e.g. if a campaign is created by [email protected], SMS charges will be billed to CPF directly via an invoice from GovTech.

    Please ensure that all campaigns have the correct campaign creator set as billing charges will not be reversed.

    PICs and campaign creators can see monthly billing reports in the billing dashboard (invoices are only sent out yearly). A yearly report will also be made available for download in mid-March.

    If there are any discrepancies for the monthly reports, a dispute can be raised with the Postman team via email within 30 days from the posted date.

    Billing will follow a post-paid model, where agencies will be invoiced annually in March for their previous year's usage. A breakdown of the billing cycles are shown below.

    Usage Period
    Invoice Date

    Agency PICs will need to submit their agency's payment information to OGP before November 2025.

    Monitoring Usage

    PICs and campaign creator are able to see to costs on SMS usage via the Postman dashboard.

    Discrepancies on monthly billing reports

    Billing reports are available to PICs and campaigns creators on a monthly basis via the billing dashboard.

    Should there be any discrepancies, disputes can be raised via email within 30 days of the report being available. After 30 days, the billing report will be final and no changes can be made.

    First year 1 July 2025 - 31 January 2026

    GovTech invoice will be sent to agencies in mid-March 2026

    Second year 1 February 2026 - 31 January 2027

    GovTech invoice will be sent to agencies in mid-March 2027

    Subsequent years (same cycle as second year)

    (GovTech invoice will be sent to agencies in mid-March similar to the second year)

    message segment calculator
    detailed charges and pricing
    Message segment calculator
    Detailed charges and pricing
    via this form
    Billing checklist
    How to use the billing dashboard
    FAQs on billing

    Postman Guide latest updates

    Latest updates made to this document

    Date
    Pages
    Updates

    31 July 2025

    How to have line breaks without using \n. Updated expectations for ticket response times.

    23 July 2025

    Added deliverability expectations for sending to foreign numbers and overseas recipients

    1 July 2025

    Detailed charges and pricing

    Added clarity that only messages sent out from Postman's production environment are charged.

    30 June 2025

    Billing Overview Message segment calculator Detailed charges and pricing Billing checklist How to use the billing dashboard FAQs on billing

    Added a new section on Billing as all messages sent from Postman v2 will be charged from 1 July 2025.

    17 June 2025

    Sending Messages via SFTP

    Added information on max file size limits

    SFTP and Other integration methods

    Removed outdated information.

    5 May 2025

    Message content

    Direct users to Postman message segment calculator to detect unsupported characters and updated replacement suggestions

    21 Apr 2025

    Sending SMS using NRIC

    Release of endpoints

    8 Apr 2025

    Sending SMS using NRIC

    Updated feature to support decommission of Notify

    4 Apr 2025

    Terms of Use

    Updated the Terms of Use

    25 Feb 2025

    Rate Limits

    Updated Default API Rate Limit to 10

    18 Feb 2025

    Postman Data Security and Sensitivity classification

    Restricted sensitive-normal data

    10 Feb 2025

    Blocking unsupported characters at the API layer

    Details on blocking unsupported characters at the API layer Relevant API response error message

    22 Jan 2025

    Load Test Booking Requirement

    What is load test and how can you book for load test

    16 Jan 2025

    The message object Single Send Single Send - Retry Retrieve Message Retrieve Batch Retrieve Campaign Message

    Explanation of creatorId string

    Inserted creatorId into new response payloads effective 24 Feb 2025

    26 Dec 2024

    Deleting Campaigns

    How to delete campaigns

    10 Dec 2024

    How do identify my agency PICs?

    How to identify your agency PIC(s)

    26 Nov 2024

    Service Status

    Postman's service status

    Postman Certificates

    Link to Policy Document - for users who need to identify root CAs

    19 Nov 2024

    Postman v2 SLOs

    Updated terminology Included more details on SLOs

    14 Nov 2024

    Postman v2 SLAs

    Updated our SLAs

    12 Nov 2024

    Campaign creation

    Changed "full access" and "can send messages only" campaign role terms to "campaign owner" and "member" respectively

    24 Oct 2024

    Message delivery errors

    Updates on retrying routing_error

    30 Sep 2024

    Estimated SMS costs

    Updates on new estimated costs for SMS

    18 Sep 2024

    The message object

    recipients: changed from string to numeric

    17 Sep 2024

    Sending emails to users (Legacy Postman)

    Updated link to access Legacy Postman to send emails out

    Sending messages via the Admin Portal

    How to format messages to contain commas, line breaks and quotation marks

    Detailed explanation of error codes and new error code type: message_expired

    Detailing error codes with troubleshooting steps, and introducing message_expired error code (release on 30 September 2024)

    Load test booking link

    Book your TPS load test on Postman load test environment

    New fields to Retrieve Message API Body

    Added "sent_at" and "delivered_at" fields to Retrieve Message API body.

    21 Aug 2024

    Updates to using "fake" numbers

    Updated consequence of using "fake" numbers

    20 Aug 2024

    Checking whether sending via SFTP is successful

    Updated examples of successful and failed file uploads

    2 Aug 2024

    User Access

    Adding and removing PIC(s)

    Fill your Twilio credentials on Postman

    Merged step 6 into step 4 as the information was repeated. Added some troubleshooting tips in step 5

    2 Aug 2024

    Message Delivery Error

    Removed 65 9999 9999 from example trigger conditions for recipient_invalid error code

    24 Jul 2024

    Postman Policy Guide

    [25 Jul 2024] Fix deployed for Postman Policy guide. Please log in with your TechPass/agency email address to view.

    16 Jul 2024

    Message Content Character Count

    Updated with Postman's message segment calculator

    4 Jul 2024

    Postman v2 SLAs

    Updated SLA

    2 Jul 2024

    Do not use "fake" numbers as recipients

    Do not use fake numbers to send SMSes for testing purposes

    27 Jun 2024

    Message Content Message Object

    Update on unsupported characters Update for corresponding status in dashboard

    19 Jun 2024

    Message Object

    success definition under From 31 May had errors but has since been amended

    No changes to the success definiiton in the lateststatus string table

    12 Jun 2024

    Message Content

    Removed 。 from unsupported characters list

    12 Jun 2024

    Rate Limits Message Content Message Object

    Provided updates for Rate Limits and SLAs. Added more unsupported characters.

    10 Jun 2024

    Rate Limits SLAs

    Provided updates for Rate Limits and SLAs.

    5 Jun 2024

    Message Content Message Object

    Updated variables where variable content should not start or end with a space.

    4 Jun 2024

    Authorised Sender ID Switch

    New page how to switch sender IDs

    30 May 2024

    Message Content Message Object

    Added ` (backtick) to list of unsupported characters. Added list of unsupported characters to Message Content page

    24 May 2024

    SFTP Integration

    Removal of Oracle guide on SSH Key generation

    Generating SSH Keys

    New commands to generate your SSH key pair Example of SSH keys

    20 May 2024

    The message object

    Updated latest status

    16 May 2024

    Postman SFTP Production Site Launch

    Launch of Postman SFTP Production Site

    API Errors

    Renamed Errors page to API Errors

    The message object

    Updated API response Updated status

    Attempt array of objects

    New message objects for attempts

    Latest status

    Updated with delivered

    Message delivery errors

    New page - errors

    Retrieve message

    Updated API response

    Retrieve batch

    Updated API response

    Retrieve campaign message

    Updated API response

    14 May 2024

    Single Send - Retry Batch Send - Retry

    Added Single and Batch Send Retry endpoints

    Create campaign

    Feature release: Campaign create access

    3 May 2024

    Logging into Postman v2

    Removed Singpass login

    Access related inquiries

    Updated with Singpass login FAQ

    26 Apr 2024

    Changing your message header

    Updated criteria and examples where header name changes are permitted.

    15 Apr 2024

    Postman SFTP Integration Test

    Updated with form link

    8 Apr 2024

    Terms & Condition

    Privacy Policy

    Added Terms & Condition and Privacy Policy

    31 Mar 2024

    Postman v2 Production site launch

    Updated production base URL. Please note that message sending is currently unavailable.

    Useful links

    Updated with Postman v2's API Integration Test

    SFTP on Production Site

    SFTP is not available on Postman v2's production site until June 2024.

    Temporary Sender Name

    Updated conditions for agency's sender ID to appear under Postman v2's dropdown on production site.

    21 Mar 2024

    Internal SMS

    Created guide for admin portal users on sending internal messages

    13 Mar 2024

    Important dates

    Updated UI Training dates

    8 Mar 2024

    Load testing information

    Do not conduct load testing on our test site

    26 Feb 2024

    Create campaign

    General campaign creation guide for all users

    Message Logs

    Created message logs page

    Sending messages via the Admin Portal

    Created guide for admin portal users on sending messages

    Postman FAQ

    Updated FAQ

    23 Feb 2024

    SLAs

    SLAs for Postman v2.

    SFTP update

    Updated the SFTP documentation

    FAQ updates

    Added questions on SMS retry, priority tags, read statuses.

    19 Feb 2024

    SFTP update

    Updated key types and info on IP address whitelisting

    9 Feb 2024

    Character Count

    Updated character count rules

    Admin/member access

    Differences between admin and member access

    SFTP update

    Updated port number

    29 Jan 2024

    Rate Limits

    Actual rate limits will be released at a later date

    Endpoints for API users

    Updated full API payload for endpoints

    Character Count

    Updated character count per message

    23 Jan 2024

    API users who do not want to manage your message templates within Postman

    How to create line breaks in a message

    Postman v2 Admin Portal for API users

    Updated screens

    22 Jan 2024

    Create campaign - Temporary sender name

    Created temporary sender name section

    Overview

    Updated production environment release dates

    19 Jan 2024

    The message object

    Updated list of unsupported characters

    Integrations - IP address whitelisting

    Updated IP address whitelisting

    16 Jan 2024

    SFTP Integration

    Updated SFTP Docs

    11 Jan 2024

    Important Dates

    Training dates updated on MS Teams

    8 Jan 2024

    Release of Postman test environment

    Postman API test environment is now live. This site is meant for API testing purpose only.

    5 Jan 2024

    Release of WOG BTN MS Teams channel

    WOG BTN Teams channel set up for agency PICs

    4 Jan 2024

    Create message Endpoints for API users Batch Send Retrieve Batch

    Edited bulk to batch Edited endpoints containing word bulk to batch

    31 Dec 2023

    Postman test environment

    We will be migrating our test environment domain, URL release will be shifted from 31 Dec 2023 to 8 Jan 2024

    The message object

    recipient string - Removed the + in front of the country code

    Postman v2 admin portal

    Created the UI flow for API users - end goal for users to whitelist IP addresses and obtain API keys

    20 Dec 2023

    Create message workflow

    Updated workflow process

    Removal of "Option 2"

    API documents latest updates

    Created page for updates to the API documents

    Postman v2 SMS API FAQ

    Updated FAQ list

    19 Dec 2023

    Retrieve Batch

    Updated Supported Query Parameters

    18 Dec 2023

    Postman v2 SMS API FAQ

    Updated FAQ list

    16 Dec 2023

    SFTP

    Released SFTP documentation

    Postman v2 SMS API FAQ

    Updated FAQ list

    Updates to line breaks formatting
    Updates to ticket response SLOs
    Sending to Foreign Numbers

    Retrieve Campaign Message

    We will be updating our response payload to include a creatorId field from 24 Feb 2025. Please read the last section to find out where the amendment is and update your own systems if necessary, before 24 Feb 2025.

    Retrieves messages and their delivery statuses given a campaign ID, as well as information about the campaign template. Please refer to this table in Possible message statuses and what they mean on what each message status means.

    Supported Query Parameters

    limit string (Mandatory)

    You can specify the number of messages to return per page using the limit query parameter. The minimum value is 1, and the maximum value is 1000.

    after string (Optional)

    Find messages after the cursorId

    before string (Optional)

    Find messages before the cursorId

    search string (Optional)

    This supports searching by recipient phone number only. It is a substring match, eg. a "11" would match with "91122233"

    [Now to 26 Jan 2025] Example response body

    [From 24 Feb 2025] The creatorId field will be inserted in the response payload for each message object from 24 Feb 2025. In this above example it will be inserted once per message object i.e. total of 4 times. Please amend your own code accordingly for

    "creatorId": "<USER_ID_OF_MESSAGE_CREATOR>"

    Endpoint #7
    GET /campaigns/:campaignId/messages
    Response Body
    {
        "data": [
            {
                "createdAt": "2024-05-16T17:04:09.071+08:00",
                "updatedAt": "2024-05-16T17:05:39.704+08:00",
                "id": "<YOUR_MESSAGE_ID>",
                "recipient": "6511112222",
                "values": {
                    "otp": "123456",
                    "name": "tom"
                },
                "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\nDear tom, here is your 123456.\n\n---\n\nThis is an automated message sent by the Singapore Government.",
                "latestStatus": "failure",
                "templateBodyId": "<YOUR_TEMPLATE_BODY_ID>",
                "campaignId": "<YOUR_CAMPAIGN_ID>",
                "templateBody": {
                    "createdAt": "2024-05-16T16:55:30.736+08:00",
                    "updatedAt": "2024-05-16T16:55:30.736+08:00",
                    "id": "<YOUR_TEMPLATE_BODY_ID>",
                    "templateId": "<YOUR_TEMPLATE_ID>",
                    "language": "english",
                    "body": "Dear {{name}}, here is your {{otp}}.",
                    "creatorId": "<YOUR_CREATOR_ID>"
                },
                "batches": [
                    {
                        "createdAt": "2024-05-16T17:02:59.467+08:00",
                        "updatedAt": "2024-05-16T17:05:09.690+08:00",
                        "id": "<YOUR_BATCH_ID>",
                        "originalFileName": "(sample) API Test.csv",
                        "status": "messages_enqueued",
                        "campaignId": "<YOUR_CAMPAIGN_ID>",
                        "creatorId": "<YOUR_CREATOR_ID>",
                        "totalMessages": 3,
                        "BatchMessage": {
                            "createdAt": "2024-05-16T17:04:09.079+08:00",
                            "updatedAt": "2024-05-16T17:04:09.079+08:00",
                            "id": "30234",
                            "batchId": "<YOUR_BATCH_ID>",
                            "messageId": "<YOUR_MESSAGE_ID>",
                        }
                    }
                ],
                "messageAttempts": [
                    {
                        "sentAt": "2024-05-16T17:05:39.702+08:00",
                        "deliveredAt": null,
                        "createdAt": "2024-05-16T17:04:09.092+08:00",
                        "updatedAt": "2024-05-16T17:05:39.702+08:00",
                        "id": "<YOUR_MESSAGE_ATTEMPT_ID>",
                        "messageId": "<YOUR_MESSAGE_ID>",
                        "externalAttemptId": "",
                        "status": "failure",
                        "errorType": "delivery_error",
                        "errorCode": "recipient_unavailable",
                        "metadata": {},
                        "creatorId": "<YOUR_CREATOR_ID>",
                        "creator": {
                            "email": "<YOUR_GENERATED_CAMPAIGN_EMAIL>"
                        }
                    }
                ],
                "language": "english",
                "batchId": "<YOUR_BATCH_EMAIL>",
                "creatorEmail": "<YOUR_CREATOR_ID>"
                "numAttempts": 1
            },
            {
                "createdAt": "2024-05-16T17:04:09.071+08:00",
                "updatedAt": "2024-05-16T17:05:09.746+08:00",
                "id": "<YOUR_MESSAGE_ID>",
                "recipient": "6522222222",
                "values": {
                    "otp": "123456",
                    "name": "mary"
                },
                "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\nDear mary, here is your 123456.\n\n---\n\nThis is an automated message sent by the Singapore Government.",
                "latestStatus": "failure",
                "templateBodyId": "<YOUR_TEMPLATE_BODY_ID>",
                "campaignId": "<YOUR_CAMPAIGN_ID>",
                "templateBody": {
                    "createdAt": "2024-05-16T16:55:30.736+08:00",
                    "updatedAt": "2024-05-16T16:55:30.736+08:00",
                    "id": "<YOUR_TEMPLATE_BODY_ID>",
                    "templateId": "<YOUR_TEMPLATE_ID>",
                    "language": "english",
                    "body": "Dear {{name}}, here is your {{otp}}.",
                    "creatorId": "<YOUR_CREATOR_ID>"
                },
                "batches": [
                    {
                        "createdAt": "2024-05-16T17:02:59.467+08:00",
                        "updatedAt": "2024-05-16T17:05:09.690+08:00",
                        "id": "<YOUR_BATCH_EMAIL>",
                        "originalFileName": "(sample) API Test.csv",
                        "status": "messages_enqueued",
                        "campaignId": "<YOUR_CAMPAIGN_ID>",
                        "creatorId": "<YOUR_CREATOR_ID>",
                        "totalMessages": 3,
                        "BatchMessage": {
                            "createdAt": "2024-05-16T17:04:09.079+08:00",
                            "updatedAt": "2024-05-16T17:04:09.079+08:00",
                            "id": "30235",
                            "batchId": "<YOUR_BATCH_ID>",
                            "messageId": "<YOUR_MESSAGE_ID>"
                        }
                    }
                ],
                "messageAttempts": [
                    {
                        "sentAt": "2024-05-16T17:05:09.743+08:00",
                        "deliveredAt": null,
                        "createdAt": "2024-05-16T17:04:09.092+08:00",
                        "updatedAt": "2024-05-16T17:05:09.743+08:00",
                        "id": "<YOUR_MESSAGE_ATTEMPT_ID>",
                        "messageId": "<YOUR_MESSAGE_ID>",
                        "externalAttemptId": "",
                        "status": "failure",
                        "errorType": "server_error",
                        "errorCode": "server_unknown_error",
                        "metadata": {},
                        "creatorId": "<YOUR_CREATOR_ID>",
                        "creator": {
                            "email": "<YOUR_CREATOR_EMAIL>"
                        }
                    }
                ],
                "language": "english",
                "batchId": "<YOUR_BATCH_EMAIL>",
                "creatorEmail": "<YOUR_CREATOR_ID>",
                "numAttempts": 1
            },
            {
                "createdAt": "2024-05-16T17:04:09.071+08:00",
                "updatedAt": "2024-05-16T17:04:09.071+08:00",
                "id": "message_6e4fedf2-9377-50ef-8457-81cb1f1c8831",
                "recipient": "6599999999",
                "values": {
                    "otp": "123456",
                    "name": "john"
                },
                "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\nDear john, here is your 123456.\n\n---\n\nThis is an automated message sent by the Singapore Government.",
                "latestStatus": "created",
                "templateBodyId": "<YOUR_TEMPLATE_BODY_ID>",
                "campaignId": "<YOUR_CAMPAIGN_ID>",
                "templateBody": {
                    "createdAt": "2024-05-16T16:55:30.736+08:00",
                    "updatedAt": "2024-05-16T16:55:30.736+08:00",
                    "id": "template-body_6df15c76-cbd4-4c5b-ac8b-c66fefaf634a",
                    "templateId": "template_738af768-8050-41d6-8bc5-2a140b5b67df",
                    "language": "english",
                    "body": "Dear {{name}}, here is your {{otp}}.",
                    "creatorId": "<YOUR_CREATOR_ID>"
                },
                "batches": [
                    {
                        "createdAt": "2024-05-16T17:02:59.467+08:00",
                        "updatedAt": "2024-05-16T17:05:09.690+08:00",
                        "id": "batch_f1896233-7f4e-4162-bdd5-888fcf5e85c9",
                        "originalFileName": "(sample) API Test.csv",
                        "status": "messages_enqueued",
                        "campaignId": "<YOUR_CAMPAIGN_ID>",
                        "creatorId": "<YOUR_CREATOR_ID>",
                        "totalMessages": 3,
                        "BatchMessage": {
                            "createdAt": "2024-05-16T17:04:09.079+08:00",
                            "updatedAt": "2024-05-16T17:04:09.079+08:00",
                            "id": "30233",
                            "batchId": "<YOUR_BATCH_ID>",
                            "messageId": "<YOUR_MESSAGE_ID>"
                        }
                    }
                ],
                "messageAttempts": [
                    {
                        "sentAt": "2024-05-16T17:05:39.757+08:00",
                        "deliveredAt": null,
                        "createdAt": "2024-05-16T17:04:09.092+08:00",
                        "updatedAt": "2024-05-16T17:05:39.757+08:00",
                        "id": "<YOUR_MESSAGE_ATTEMPT_ID>",
                        "messageId": "<YOUR_MESSAGE_ID>",
                        "externalAttemptId": "<YOUR_EXTERNAL_ATTEMPT_ID>",
                        "status": "sent",
                        "errorType": null,
                        "errorCode": null,
                        "metadata": {},
                        "creatorId": "<YOUR_CREATORN_ID>",
                        "creator": {
                            "email": "<YOUR_GENERATED_CAMPAIGN_EMAIL>"
                        }
                    }
                ],
                "language": "english",
                "batchId": "batch_f1896233-7f4e-4162-bdd5-888fcf5e85c9",
                "creatorEmail": "[email protected]",
                "numAttempts": 1
            },
            {
                "createdAt": "2024-05-16T16:57:53.761+08:00",
                "updatedAt": "2024-05-16T16:58:06.526+08:00",
                "id": "<YOUR_MESSAGE_ID>",
                "recipient": "6599999999",
                "values": {
                    "otp": "12345",
                    "name": "John Doe"
                },
                "fullMessage": "This is a test message used for training purposes.\n\nOpen Government Products\n\n---\n\nDear John Doe, here is your 12345.\n\n---\n\nThis is an automated message sent by the Singapore Government.",
                "latestStatus": "success",
                "templateBodyId": "<YOUR_TEMPLATE_BODY_ID>",
                "campaignId": "<YOUR_CAMPAIGN_ID>",
                "templateBody": {
                    "createdAt": "2024-05-16T16:55:30.736+08:00",
                    "updatedAt": "2024-05-16T16:55:30.736+08:00",
                    "id": "<YOUR_TEMPLATE_BODY_ID>",
                    "templateId": "<YOUR_TEMPLATE_ID>",
                    "language": "english",
                    "body": "Dear {{name}}, here is your {{otp}}.",
                    "creatorId": "<YOUR_CREATOR_ID>"
                },
                "batches": [],
                "messageAttempts": [
                    {
                        "sentAt": "2024-05-16T16:57:53.908+08:00",
                        "deliveredAt": null,
                        "createdAt": "2024-05-16T16:57:53.763+08:00",
                        "updatedAt": "2024-05-16T16:58:06.525+08:00",
                        "id": "<YOUR_MESSAGE_ATTEMPT_ID>",
                        "messageId": "<YOUR_MESSAGE_ID>",
                        "externalAttemptId": "<YOUR_EXTERNAL_ATTEMPT_ID>",
                        "status": "success",
                        "errorType": null,
                        "errorCode": null,
                        "metadata": {},
                        "creatorId": "<YOUR_CREATOR_ID>",
                        "creator": {
                            "email": "<YOUR_CREATOR_EMAIL>"
                        }
                    }
                ],
                "language": "english",
                "creatorEmail": "<YOUR_CREATOR_EMAIL>",
                "numAttempts": 1
            }
        ],
        "pageData": {
            "hasNextPage": false,
            "hasPreviousPage": false,
            "startCursor": "WyIyMDI0LTA1LTE2VDE3OjA0OjA5LjA3MSswODowMCIsIm1lc3NhZ2VfZTgxN2NjM2EtMTA0NC01ODYxLWJmZDUtMDMwM2IwYzczYjcxIl0=",
            "endCursor": "WyIyMDI0LTA1LTE2VDE2OjU3OjUzLjc2MSswODowMCIsIm1lc3NhZ2VfZDhiNWY5M2QtZDgyYi00NWRkLWIyZTctMWYxMTlmMjUwMTcyIl0="
        }
    }

    Postman v2 API FAQ

    1. Can I share the API docs link with my vendors?

      • Yes, please do so. The API docs are hosted on the Internet.

    2. Currently, we do API post with long SMS text content. Our SMS vendor will automatically split the message into several SMS messages to the end user. Is Postman the same?

      • For long message content, it will be combined and will appear as a single message to the user.