# About LetterSG

## What is LetterSG?

LetterSG is a government platform that allows public officers to create, issue and track personalised official e-letters to citizens.

It is built by [Open Government Products](https://www.open.gov.sg/), a team under Government Technology Agency.

## Who can use LetterSG?

If you are a public officer:

* with a ".[gov.sg](http://gov.sg/)" email OR
* from whitelisted public healthcare / education institutions

You may login via your official email & create letters on LetterSG.

## Where can I find more information on LetterSG?

You can refer to our slides here: <https://go.gov.sg/lettersg-slides>


# Updates & Releases

Here's the summary of our product updates for LetterSG.

## Q3 **2025**

LetterSG is currently on **maintenance.** As such, you can expect slower response times and restriction of features to selected users. These include:

* Starting **8 Sep 2025**, new users will no longer be able to create, edit, or clone templates. They will still be able to generate and send letters using templates shared with them. No changes will be made for existing users.

## Q4 2024 Oct - Dec

**Dec 23rd:**

* **Search for templates easily**
  * Agency users can find templates more easily by using the search bar in the Template Library
* **Preview how letters will look on mobile for recipients**
  * Agency users can easily check that letters are formatted for both small and big screens by checking the mobile preview when creating or editing their templates
* **Send letters via email to 2 recipients at once**
  * A highly requested feature from schools, agency users can now specify up to 2 email recipients for each letter
  * This feature is not currently available for mobile.

**Dec 5th:**

* **\[Pilot] Send physical letters through LetterSG**
  * Agency users can send both digital and physical letters directly through LetterSG. Physical letters will be printed and handled by a vendor.&#x20;
* **New API bulk endpoints: Query for letter batches and create batches of letters!**
  * System integrations can now create and retrieve letter details in bulk on LetterSG instead of using the single creation endpoint.&#x20;

**Oct 10th:**

* **Citizen feedback**
  * Citizens will be asked to provide feedback on their digital letter experience when they receive a letter. We hope to gather this data over the next few months and share back when we're ready!

## Q3 2024 Jul-Sep

**Aug 21st:**

* **\[Fully released] PDF Download for citizens**
  * Citizens can download their letters as PDFs for archiving or printing. Preview your template PDFs when creating templates to ensure that there is no rendering or whitespace issues.
* **Miscellanous improvements:**
  * Resolved bug in email validation that caused a number of email addresses to be rejected as "invalid email addresses"

**Aug 15th:**

* **\[New Feature]  Template creation**
  * Users are now able to create new templates on the platform! Select from a range of pre-designed layouts and customize them with your own content. No more wait to onboard new templates.
  * Templates are mobile-responsive by default
* **Improved template editing experience**
  * Rename your templates in the editor
  * Replace images in the editor by double-clicking on the image in the template, or drag new images into the editor directly

## Q2 2024 Apr-Jun

**Jun 23rd:**

* **\[New Feature] Switch to Gov.SG sender ID**
  * Government agency users will now send outgoing LetterSG SMS notifications with gov.sg senderID. If you are eligible to use gov.sg, no action is required on your part—everything is automatically set up for you.
  * If you are a LetterSG user and you want your LetterSG SMS to show your agency’s name in the message header, please approach your agency’s nominated person-in-charge (PIC) to integrate LetterSG with a Postman campaign.
* **\[New Feature] Archive unused templates**
  * Keep your Template Library organised by hiding away templates that you are not using. Letters previously issued from archived templates will remain available in your dashboard. Archiving a template will also archive it for all users who have access to it.

**May 31st:**

* **Miscellaneous Enhancements:**&#x20;
  * Improved OTP security
  * Improved support for more fonts
  * Improved UX for API key generation

**Apr 30th:**

* **\[Fully released] PDF downloads**
  * Users can now download batched PDF files directly from your dashboard. Save offline copies of the letters to print or archive.
  * Users can preview your templates in PDF mode directly from the editor page.
* **\[Fully released] API integrations**
  * Users are now able to create letters and download letters as PDF using LetterSG APIs.
* **\[New Feature] Citizen sharing:**
  * Citizens can now share their letters easily via the Share button to WhatsApp, email or SMS
  * Letter link previews will contain the issuing agency logos & website titles
* **\[New Feature] PDF Download for citizens (Beta)**
  * Citizens can download their letters as PDFs for archiving or printing. This is a beta feature, if you are an agency user who would like to trial this, do contact us [here](https://go.gov.sg/lettersg-beta-access).&#x20;

**Apr 4th:**

* **\[New Feature] Image Uploads in Template Editor:**
  * Users are now able to directly upload images into their templates by dragging their images into the editor.&#x20;
* **Miscellaneous Enhancements:**&#x20;
  * Improved styling of outgoing emails for readability and legitimacy. Outgoing emails now contain agency name and logos to allow recipients to quickly see who the letter is from
  * Improvement in batch load responsiveness for larger batches
  * UIUX upgrades and standardizations across product.

## Q1 2024 Jan-Mar

**Mar 12th:**

* **\[New Feature] Template Cloning:**
  * Users are now able to duplicate their existing templates to easily create new letter templates.
* **Template Editing:**
  * All users are now able to easily edit templates by themselves at their own convenience.
* **Landing Page Updates**:&#x20;
  * Users are now able to view different information as a public officer and as a member of public.
* **\[New Feature]  LetterSG APIs (Beta):**
  * Users are now able to create letters and download letters as PDF using LetterSG APIs.

**Jan 15th:**

* **\[New Feature]  Access Control - Sharing of Issued Batches of Letters:**
  * Users are now able to share access to issued letters with others and allow collaborators to view previously issued letters.

**Jan 10th:**

* **\[New Feature] PDF Download (Beta):**
  * Users are now able to receive a copy of their generated letters in PDF for their printing/record-keeping needs.
* **\[New Feature]  Template Editing (Beta):**
  * Users are now able to easily edit templates by themselves at their own convenience.

## Q4 2023 Oct-Dec

**Dec 14th:**

* **\[New Feature]  Access Control - Sharing of Templates:**
  * Users are now able to share access to templates with others and allow collaborators to issue letters using the same template.
* **Miscellaneous Enhancements:**&#x20;
  * Thumbnails of letter templates are automatically generated in the Template Library
  * New tooltips for buttons on template library
* **Bug Fixes:**
  * Fixed error message for CSV uploads to show up properly on GSIB/SOE laptops

**Nov 21st:**

* **Landing Page Updates**:&#x20;
  * Users are now able to view examples of some existing letter templates on our landing page
* **\[New Feature] Sample Template:**
  * Users are now able to try out issuing a letter using our "Certificate of Curiosity" to try out the product, regardless of whether they have previously onboarded any templates

**Nov 8th:**

* **UIUX Enhancements:**
  * Improved channel selection in the issuance flow
  * Confetti screen on successful letter generation
  * Delivery Status Enhancements: Users are now able to see bounced delivery status for their issued letters on their detailed dashboard view

**Oct 11th:**

* **UIUX Enhancements**:&#x20;
  * Revamped UX flow: Users are now able to issue letters with greater ease and also check previously issued letters on their dashboard more intuitively.
* **\[New Feature]  Access Control:**
  * Users will only have access to their own templates from now. This ensures that your templates remain private and eliminates the risk of other users potentially misusing them.
  * Please contact us [here](https://go.gov.sg/lettersg-support) if you do not see any of your previously onboarded templates, or if you believe that you have been wrongly granted access to additional templates.

## Q3 2023 Jul-Sep

#### Sept 1st:

* **Removal of password protection for letters**&#x20;
  * If you require this, please write into our team [here](https://go.gov.sg/lettersg-support).

#### August 11th:

* **\[New Feature] Email Sending:** You are now able to send out generated letters within the product by adding the recipient's email address number to your CSV file.
* **UI/UX Enhancements:**
  * Dashboard Revamp: You can now easily view all previously issued letters by batches on the dashboard.
  * View Read Receipts in CSV files:  You can now download information regarding your letters for every batch you have issued (eg. read status) in CSV files.

#### August 2nd:

* **\[New Feature]  SMS Sending:** You are now able to send out generated letters within the product by adding the recipient's mobile number to your CSV file. The SMSes will be sent from the sender ID "LetterSG." Please exercise caution with this new feature and try a test send to preview the letter.
* **UI/UX Enhancements:**
  * Bulk Generate Letters UI Revamp: You can now easily choose how to deliver generated letters on the product to recipients and enable/disable password protection in a full-screen view.
* **Bug Fixes:** Our team addressed a few bugs reported by users such as
  * Improving password requirements - Ensuring a min 8 character requirement and accepting ASCII characters only
  * Removal of white spaces in password validation
* **Other Enhancements**:
  * Handling and display of CSV Errors - Empty rows are removed and any missing fields are displayed by row for clarity
  * Editing the “Letter Link” header in generated CSV to “letter\_link” so the file is properly formatted for ingestion on Postman
  * Adding a rating mechanism for users to easily provide feedback
  * Mobile optimization for viewing letters

## Q2 2023 Apr-Jun

* **\[New Feature] Password Protection**: You are now able to password protect your letters to ensure sensitive information within your letters are kept safe & only viewed by the intended recipients.


# Accessing LetterSG

LetterSG is built for public officers. There is no onboarding process or any installation required. Simply login at <https://letters.gov.sg> with your agency email (e.g. @tech.gov.sg).&#x20;

You will receive an OTP in your email inbox.

<figure><img src="/files/0k0POgGOl4fbGmwolV5Z" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
If you receive any error messages or are unable to login, please contact us [here](https://go.gov.sg/lettersg-support).&#x20;
{% endhint %}


# Creating Letter Templates

{% hint style="warning" %}
**From 8 Sep 2025:** New LetterSG users will not be allowed to create, edit, or clone templates till further notice.
{% endhint %}

## How do I create a template on LetterSG?

1. Navigate to the "Template Library" section. Under Template Library, click the "Create templates" button.

   <figure><img src="/files/IQiib30PVPVUEBi7IAyK" alt=""><figcaption></figcaption></figure>
2. You should be able to see a range of pre-designed layouts that you are able to choose from.&#x20;

   <figure><img src="/files/hzrRYTTG0evLMp1jMYyk" alt=""><figcaption></figcaption></figure>
3. Choose a template layout relevant to your use case, for example a letter, notification, or certificate. You should be able to preview the layout when you select the layout card.&#x20;

   <figure><img src="/files/D0LdgUgV6jpkQmVIc2Qg" alt=""><figcaption></figcaption></figure>
4. Select the layout you want to proceed with, and click "Start with this". The template editor should open with your selected template layout. You are able to customise the content of your template within the editor.&#x20;

   <figure><img src="/files/whs7HEf3BluY1xtWDNgr" alt=""><figcaption></figcaption></figure>

## What can I do with the editor?

Please refer to the section on template editing [here](https://guide.letters.gov.sg/for-agency-users/editing-letter-templates#what-can-i-do-with-the-editor).

<figure><img src="/files/Ooc1U7IUhplpKG2jJMrO" alt=""><figcaption></figcaption></figure>

## How should I format personalised fields in my letter?

**Guidelines on accepted fields**

* Field names should contain only alphanumerical characters and/or underscore: A-Z, a-z, 0-9,\_
* Field names should not contain whitespace in the middle of variable names: {{ your name }} is invalid.
* Field names should not contain special characters: {{ your\&name }} is invalid.
* Field names can be styled (e.g. italicised/bolded). Ensure that the styling applies to the entire field name, including the curly brackets: **{{&#x20;*****your*****\_name** }} is invalid.

{% hint style="danger" %}
Invalid variables will just be treated as plain text
{% endhint %}


# Bulk Generating Letters

## How do I bulk generate letters on LetterSG?

1. **After logging into LetterSG, you will be brought to the dashboard. Click on the "Create letters" button to proceed**

<figure><img src="/files/9Ol1Cb8Al2JVsgpeLXHQ" alt=""><figcaption></figcaption></figure>

2. **Select a template that you wish to generate your letters from**

<figure><img src="/files/PApPg1hfxuzBFJdUDHTx" alt=""><figcaption></figcaption></figure>

3. **Select how you would like to send out your letters.**

<figure><img src="/files/moOcOQdg2QatWeDnWed2" alt=""><figcaption></figcaption></figure>

If you would like LetterSG to handle sending for you directly, select your preferred medium: "SMS" or "Email".

Else, if you would like to disseminate your letters physically or via your own email or SMS provider, select "Other services". &#x20;

### Please refer to the following steps on these pages here on how to send out the letters:

**For SMS:** [Sending Out Letters](/for-agency-users/sending-out-letters#how-do-i-send-out-generated-letters-to-recipients-via-sms)

**For Email:** [Sending Out Letters](/for-agency-users/sending-out-letters#how-do-i-send-out-generated-letters-to-recipients-via-email)

**For Other services:** [Sending Out Letters](/for-agency-users/sending-out-letters#how-do-i-send-out-generated-letters-to-recipients-via-other-services)


# Sending Out Letters

There are 3 modes of delivery offered: SMS, email and other services.

## How do I send out generated letters to recipients via SMS?

{% hint style="info" %}
**Note:** LetterSG has switched to the gov.sg SMS sender ID. <br>

If you are eligible to use gov.sg, no action is required on your part—everything is automatically set up for you.<br>

If you are a LetterSG user and you want your LetterSG SMS to show your agency’s name in the message header, please approach your agency’s nominated person-in-charge (PIC) to integrate LetterSG with a Postman campaign.
{% endhint %}

1. **Select "SMS" for the options under how you would like to send out your generated letters. You will see preview of the message that will be sent out to your recipient under the LetterSG Sender ID on the right.**

   <figure><img src="/files/3io9w8QpyIHbiE0xZdrb" alt=""><figcaption></figcaption></figure>

   If you would like to preview how the message will look like for your recipients, you can also do so by sending a test letter to yourself.
2. **If it is your first time generating letters with this template, click on "Download Sample" to download a sample CSV file to fill up.**&#x20;

<figure><img src="/files/pil7yEr8aL4AqHBv8tFh" alt=""><figcaption></figcaption></figure>

3. **Fill up your CSV file with the information you wish to be personalised in each letter as well as your recipients' phone numbers like in the example below.**

{% hint style="warning" %}
Note: Ensure to format your CSV file properly to avoid errors in the upload process, eg. omitting empty rows/cells.
{% endhint %}

<figure><img src="/files/YMSeja8cu52CytK7T78U" alt=""><figcaption></figcaption></figure>

* LetterSG will add the +65 for you automatically when you enter the eight-digit phone number for a Singapore phone number.
* We currently **do not** support sending of LetterSG links to foreign numbers. If you require such a feature, please let us know through this form: <https://go.gov.sg/lettersg-feature-request>

4. **Drag and drop the file into the upload area. If your CSV file is formatted properly, a success screen like this should show up.**&#x20;

<figure><img src="/files/nyYnlg81xpjXDYKDEEQP" alt=""><figcaption></figcaption></figure>

5. **Once you have verified that the SMS looks good, you can click the button to "Next: Review and send". A final confirmation popup will appear, and you can click on the button to confirm sending out the letters.**

<figure><img src="/files/Twt6hQiq8ydI3TYZ1uXC" alt=""><figcaption></figcaption></figure>

7. **You will be redirected to the dashboard where you can view all the information regarding the letters that you sent out.**

<figure><img src="/files/jo2rkyTfOVXgOpVrdXzg" alt=""><figcaption></figcaption></figure>

### What will citizens see when they receive the SMS and click on the link?

* When citizens receive the SMS, it should look something like this:

<figure><img src="/files/sMPgvDBy8oDvLvVvYtLq" alt=""><figcaption></figcaption></figure>

* When citizens click on the link, it should look something like this:

<figure><img src="/files/mlS5V1NrHeZ7c5f0g9lK" alt="" width="375"><figcaption></figcaption></figure>

### How do I send SMSes to foreign numbers?

We currently do not support sending of letters to foreign numbers.

## How do I send out generated letters to recipients via email?

1. **Select "Via email" for the options under how you would like to send out your generated letters. You will see preview of the email that will be sent out to your recipient on the right.**

<figure><img src="/files/m5tmZ4tgnPhLDQPg75CE" alt=""><figcaption></figcaption></figure>

Agency users will see the name and logo of their own agency as the issuer, instead of "Open Government Products".

If you would like to preview how the email will look like for your recipients, you can also do so by sending a test letter to yourself.

2. **If it is your first time generating letters with this template, click on "Download CSV template here" to download a sample CSV file to fill up.**&#x20;

<figure><img src="/files/T71h3BbY2ElzCWCcXcY2" alt=""><figcaption></figcaption></figure>

3. **Fill up your CSV file with the information you wish to be personalised in each letter as well as your recipients' email addresses like in the example below.**

{% hint style="warning" %}
Note: Ensure to format your CSV file properly to avoid errors in the upload process, eg. omitting empty rows/cells.
{% endhint %}

<figure><img src="/files/Pn1W6dSW74bDMHg8eLGR" alt=""><figcaption></figcaption></figure>

For email sending, you can specify up to 2 recipients per letter. To do so, simply separate the email addresses with a semicolon (;) in the Email(s) column.

4. **Drag and drop the file into the upload area. If your CSV file is formatted properly, a success screen like this should show up.**

<figure><img src="/files/nyYnlg81xpjXDYKDEEQP" alt=""><figcaption></figcaption></figure>

4. **Once you have verified that the email looks good, you can click the button to "Next: Review and send". A final confirmation popup will appear, and you can click on the button to confirm sending out the letters.**

<figure><img src="/files/irnluknB84crWa7SCf1P" alt=""><figcaption></figcaption></figure>

7. **You will be redirected to the dashboard where you can view all the information regarding the letters that you sent out.**

<figure><img src="/files/JPNhdAJHgvJpsnI3t4k8" alt=""><figcaption></figcaption></figure>

## What will citizens see when they receive the email and click on the link?

* When citizens receive the email, it should look something like this. The agency name and logo will be replaced with the agency name and logo.

  <figure><img src="/files/bdaPzb95Xp71aEtwgvLs" alt=""><figcaption></figcaption></figure>
* When citizens click on the link it should look something like this:

<figure><img src="/files/tTwNcvALZeTbrp7yXD7A" alt="" width="375"><figcaption></figcaption></figure>

## How do I send out generated letters to recipients via other services?

1. **If it is your first time generating letters with this template, click on "Download CSV template here" to download a sample CSV file to fill up.**&#x20;

<figure><img src="/files/kbCOWuCCwRDajFVWPfID" alt=""><figcaption></figcaption></figure>

2. **Fill up your CSV file with the information you wish to be personalised in each letter like in the example below.**

{% hint style="danger" %}
Note: Ensure to format your CSV file properly to avoid errors in the upload process, eg. omitting empty rows/cells.
{% endhint %}

<figure><img src="/files/1m6bRawG4jpEHSjeTBbs" alt=""><figcaption></figcaption></figure>

3. **Drag and drop the file into the upload area. If your CSV file is formatted properly, a success screen like this should show up.**

<figure><img src="/files/WKnoHLUfayrMeNUfvBrr" alt=""><figcaption></figcaption></figure>

4. **Once you click on "Next: Create letter links", you will see a confirmation screen like this.**

<figure><img src="/files/ra65I0pH2nbO36Afuhtt" alt=""><figcaption></figcaption></figure>

* **Upon clicking on "Download letter links", you will get a CSV that looks like the screenshot below, with 2 new columns on the right ("date\_of\_issue" and "letter\_link").**

<figure><img src="/files/GXPe7V4eaYapQsgIIpOH" alt=""><figcaption></figcaption></figure>

5. **By adding a separate column named "recipient" and adding the email address you wish to send the letters to, you will be able to use this file to upload onto** [**Postman**](https://postman.gov.sg/) **to send out to your intended recipients!**&#x20;

* For more information on this, please refer to Postman's guide here: <https://postman-v1.guides.gov.sg/campaign-guide-email/email>

<figure><img src="/files/6mBXigtHjHKjaabY0Qdh" alt=""><figcaption></figcaption></figure>


# Sharing Access to Templates & Letters

## How do I share access to a template with others?

1. Navigate to the "Template Library" section.

   <figure><img src="/files/eWn4SPVmZR8PNQXKixf6" alt=""><figcaption></figcaption></figure>
2. Select the template that you want to edit, then click on the dropdown button beside "Use this template"

   <figure><img src="/files/dWGMJFYnm6MB6hefnhmS" alt=""><figcaption></figcaption></figure>
3. Select "Manage sharing access" to add new collaborators or remove existing collaborators

   <figure><img src="/files/AQ1wh9QpLUvnLnxgdOvb" alt=""><figcaption></figcaption></figure>
4. A popup should appear. This is where you indicate the emails you would like to share access to the letter template with. Once you have indicate the email, click on "Add".

   <figure><img src="/files/4RpLKsQCwiq6vOjTAkOA" alt=""><figcaption></figcaption></figure>
5. You should see a success message at the top once access has been added successfully.&#x20;

   <figure><img src="/files/toll3V3Cw1C81SUfN3qd" alt=""><figcaption></figcaption></figure>

## How do I share access to generated letters with others?

{% hint style="info" %}
If you have previously shared access to the template with other users, they will already have access to the letters generated from the template. You will not need to share access twice.
{% endhint %}

1. Navigate to the "Dashboard".

   <figure><img src="/files/fVmxJDD7phNHoC2eICqP" alt=""><figcaption></figcaption></figure>
2. Select the batch of issued letters that you want to share access to.

   <figure><img src="/files/ugmqG8hdR2ld00jmZnYS" alt=""><figcaption></figcaption></figure>
3. Click on "Share access" and add the emails you would like to collaborate with

   <figure><img src="/files/4irHHT9Pl4ZMgzjUw4ET" alt=""><figcaption></figcaption></figure>

## I am having issues adding emails to allow my colleagues to access templates. Where can I get further help for this?

If you encounter any issues while adding access, please write to us via[ this form](https://go.gov.sg/lettersg-support) or at <support@letters.gov.sg>.


# Editing Letter Templates

{% hint style="warning" %}
**From 8 Sep 2025**: New LetterSG users will not be allowed to create, edit, or clone templates till further notice.
{% endhint %}

## How do I access the template editor?

1. Navigate to the "Template Library" section.

   <figure><img src="/files/0W85VW4DlelQpDI5dAfE" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/1GvwkFZTAudoaljTQmFA" alt=""><figcaption><p>You can use the search bar to find your desired template easily!</p></figcaption></figure>
2. Select the template that you want to edit, then click on the dropdown button beside "Use this template"

   <figure><img src="/files/1Hl2ugTcRsoKKoeW3033" alt=""><figcaption></figcaption></figure>
3. Select "Edit template" to open the template editor.

   <figure><img src="/files/nIqycIuG6wNyxtGnS17j" alt=""><figcaption></figcaption></figure>

## What can I do with the editor?&#x20;

1. **Text Edits**

   You are able to modify the text in your template with various tools in the template editor.

   In order to make edits, highlight the text you want to edit and use the toolbar for formatting options such as bold, italic, and underline. <br>

   For more text formatting options, you can click on the triple dots on the right, where you will be able to change the format of text (eg. header/paragraph), fonts and highlighting of text.

   <figure><img src="/files/3tn5Q9pycB678ylW9Qe1" alt=""><figcaption><p>LetterSG template editor text edit options</p></figcaption></figure>

   \
   *The font I would like to use is not supported?*\
   \
   The fonts that we support are [web safe fonts](https://webflow.com/blog/web-safe-fonts) to ensure that they render well on a variety of devices (Window laptops, MacBooks, Apple phones and Android phones). Unfortunately, this means that some of the fonts you might like to use are not supported, as they are not guaranteed to work well on your recipients' devices. \
   \
   Please choose from the fonts supported for the best viewing experience for your recipients.<br>
2. **Add or edit images**<br>

   **To add a new image, you can either:**

   1. Drag your image file into the editor. The new image should be uploaded shortly, and you should be able to see it in the editor as well as the preview on the right.
   2. Select the "Image" button in the toolbar. A file-selection window should pop up, prompting you to pick the new image.&#x20;

   Select the new image. The new image should be uploaded shortly, and you should be able to see it in the editor as well as the preview on the right.<br>

   <figure><img src="/files/MCx74Rpm0Bf6Yp0IjizJ" alt=""><figcaption><p>File selection window to let you choose which image to upload </p></figcaption></figure>

   <br>

   <figure><img src="/files/0efQwhSyMSE1zrp3P8K5" alt=""><figcaption><p>A notification should pop up after you've uploaded the image to let you know that the image is being uploaded.</p></figcaption></figure>

   \
   **To replace an existing image, double-click** on the image you want to replace. A file-selection window should pop up, prompting you to pick the new image. \
   \
   Select the new image. The new image should be uploaded shortly, and you should be able to see it in the editor as well as the preview on the right.\
   \
   The maximum size supported for each image file is 3MB, allowed file types are *gif*, *png* and *jpeg*. Note that signature images should not be hosted for security reasons, as signature images can be potentially misused by malicious actors.\
   \
   The recommend size for background images is 1414px by 2000px which is the standard A4 portrait size. You can create these images using Canva or other design tools.<br>
3. **Rename templates**\
   To rename your template, click on the template name at the top of the editing bar. The template name should become an editable field. Rename your template as needed. \
   \
   Your new template name is not saved until you click on "Save template"

   <figure><img src="/files/6UYY4zautcNchFlfFocZ" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Your template name should be simple and professional as it is displayed to citizens. Keep your template name short and descriptive. Suggested format: \
Agency short name - Letter for XXX\
*e.g. OGP - Certificate of Curiosity*
{% endhint %}

4. **Add or edit tables**\
   The template editor supports the easy creation of tables. \
   \
   To add a table:\
   a. Click on the "Table" icon in the toolbar.\
   b. Specify the number of rows and columns.

   \
   To add a border to the outermost table outline:\
   a. Click on the "Table" icon in the toolbar.\
   b. Select Table properties in the dropdown. \
   Under "General", choose the thickness of the border to  change the Border width. \
   Under "Advanced", select your border style and border colour. \
   \
   To add a border to specific cells:\
   a. Click on the "Table" icon in the toolbar.\
   b. Select Cell and then Cell properties.\
   c. Under "Advanced", select your border width, border style and border colour. \
   \
   You can further customise the background colour and border colour of the table. By default the colour of the border is set to transparent.

<figure><img src="/files/zbD8uGSTOKDmCl2hylES" alt=""><figcaption><p>Select the number of rows and columns you want to add to your table</p></figcaption></figure>

\
**To adjust vertical alignment of text in table cells:**\
a. Click on the "Table" icon in the toolbar.\
b. Select Cell > Cell properties properties in the dropdown. \
c. Under "General", look for "Vertical align" and select Top, Middle or Bottom alignment of text within the cell.<br>

4. **Add or edit links**\
   To insert hyperlinks into your template, highlight the text you want to link,  click on the "Link" icon, and enter the URL. \
   \
   "Text to display", is the actual text that gets displayed on the letter. The "Title" is what users will see when they hover over the link created and it is an optional field.

   <figure><img src="/files/dPB3pl3YufZ42TIC3IQk" alt=""><figcaption><p>Link settings for a hyperlink</p></figcaption></figure>

   <br>
5. **Add page breaks** \
   Page breaks are only registered for letters when they're downloaded as PDFs. \
   \
   For the digital letters, page breaks do not show up. This is to optimise the viewing experience for users so that they do not have a disrupted visual flow when scrolling through the digital letter. \
   \
   To add a page break, select in the editor which line where you would like to add the page break, then press the  "Page break" button on the toolbar. <br>

   <figure><img src="/files/okXoX41efzbhllSJrCgG" alt=""><figcaption><p>Page break button on toolbar</p></figcaption></figure>

   \
   You should see a dotted bar appear in the editor, where you've added the page break. You should not see any change to the digital letter in the preview on the right, as the line breaks do not affect the appearance of the digital letter.<br>

   <figure><img src="/files/aO0vosCq04UFrIVjMwpD" alt=""><figcaption><p>You should see a dotted bar on the editor where the line break is, but no change to the digital letter preview. Preview the letter PDF to see where the line break is. <br><br></p></figcaption></figure>

   If you preview the letter PDF, you should see that where you've inserted the page break, a new page should start. (see step 7 for how to preview the letter PDF)<br>

   <figure><img src="/files/lTqdCqJ6R0ak24kS4TgG" alt=""><figcaption><p>You should see a page break in the letter PDF</p></figcaption></figure>

   <br>
6. **Adding personalised fields** \
   \
   If you are wrapping URL links inside your personalised fields, do not include a full stop immediately after the link. Due to the way Android phones parse links, the links may become broken and recipients using Android devices will not be able to access the link.\
   \
   Avoid:\
   `Hello, this is your letter link {{letter_link}}.`\
   \
   Acceptable:\
   `Hello, this is your letter link {{letter_link}}` \
   &#x20;<br>
7. **Preview letter PDF**\
   Citizens that receive your letter will be able to download a PDF copy of the letter. To ensure that the PDF letter renders as expected, always preview your template PDF when making the content edits to your template. \
   \
   To preview the letter PDF, click on "Preview PDF" in the editor. The PDF file is being generated, this can take a couple of seconds.

   <figure><img src="/files/iw7SfsjGUIFExBW258t9" alt=""><figcaption></figcaption></figure>

   When the PDF file is generated, a new window with the sample letter PDF should pop up shortly. Ensure that the contents in the PDF letter shows up as expected, as this is how the downloaded PDF will look like if citizens download a PDF copy of the digital letter.

   <figure><img src="/files/kxHOaT0XO0esipBDchoc" alt=""><figcaption></figcaption></figure>
8. **Preview Letters on Mobile Devices**

   You can now preview how your letters will appear on mobile devices directly within the editor. This helps ensure your letters are properly formatted for all screen sizes, offering a seamless experience for your recipients.

   <figure><img src="/files/F9miM5KZKeB97yXCy4ux" alt=""><figcaption></figcaption></figure>

## Do my edits apply to all users or just myself?

* Any changes to the template are currently applied to the master copy of the template, which will apply to all users once saved.

## How do I keep track of previous versions of templates?

* You will be able to track changes made to your template over time with the version history feature by clicking into the icon shown below:

  <figure><img src="/files/KsG4ff3OXBSeOZ1QbLqw" alt=""><figcaption></figcaption></figure>

  <figure><img src="/files/nTEP55zCKVIHTw2IRmMI" alt=""><figcaption></figcaption></figure>

## Can I design a letter/certificate in landscape format?

We do not support landscape format as it is not ideal for mobile viewing. We recommend converting your letter to portrait format instead.

## I have some issues with the editor. Where can I seek help?

If you encounter any issues while using the template editor, please share your thoughts with us by reaching out to us via[ this form](https://go.gov.sg/lettersg-support) or at <support@letters.gov.sg>.

Your feedback helps us improve and enhance your experience.


# Cloning Letter Templates

{% hint style="warning" %}
**From 8 Sep 2025**: New LetterSG users will not be allowed to create, edit, or clone templates till further notice.
{% endhint %}

## How do I clone my templates?

1. Navigate to the "Template Library" section.

   <figure><img src="/files/YGCVJKAnTPLd7NZN4M3O" alt=""><figcaption></figcaption></figure>
2. Select the template that you want to clone, then click on the dropdown button beside "Use this template"

   <figure><img src="/files/XGsnGcQvTx9zf3VIjzdb" alt=""><figcaption></figcaption></figure>
3. Select "Duplicate template" to copy this template

   <figure><img src="/files/1IW7oCTNaOoLYIPr0r3z" alt=""><figcaption></figcaption></figure>
4. Give your new template a name. This template name will be displayed to citizens, so please name the template carefully.

   <figure><img src="/files/NQRT5b80MN38TAdMfFVn" alt=""><figcaption></figcaption></figure>
5. Make your edits and save the new template.

   <figure><img src="/files/5xemB3nxsQweQzOQfg3o" alt=""><figcaption></figcaption></figure>

   <figure><img src="/files/ZqJWXndEKNkLwmg0LFwL" alt=""><figcaption></figcaption></figure>

## I have issues cloning my template. What do I do?

If you encounter any issues, please share your thoughts with us by reaching out to us via[ this form](https://go.gov.sg/lettersg-support) or at <support@letters.gov.sg>.

Your feedback helps us improve and enhance your experience.


# Archiving Letter Templates

## I have templates that I no longer use. How can I hide them away or archive them?

{% hint style="info" %}
**Note:**  Archiving a template will also archive it for all users who have access to it. You can unarchive it later if needed.\
\
Letters previously issued from archived template will still be visible by the letter recipients, and will remain available in your dashboard.&#x20;
{% endhint %}

1. Navigate to the "Template Library" section.

   <figure><img src="/files/YGCVJKAnTPLd7NZN4M3O" alt=""><figcaption></figcaption></figure>
2. Select the template that you want to archive, then click on the dropdown button beside "Use this template"

   <figure><img src="/files/XGsnGcQvTx9zf3VIjzdb" alt=""><figcaption></figcaption></figure>
3. Select "Archive template" to hide this template away

   <figure><img src="/files/xRWh71SFfc9U85zkTZAw" alt=""><figcaption></figcaption></figure>
4. A popup should appear, asking you to confirm if you would like to archive the template.&#x20;

   <figure><img src="/files/QrdDTwRlszGAgTEwEDez" alt=""><figcaption></figcaption></figure>

## I would like to see my previously archived templates.

You are able to see your previously archived templates if you have one or more archived templates.&#x20;

1. Navigate to the "Template Library" section.&#x20;

   <figure><img src="/files/0Jax3f4dU9c2K7MqhUtG" alt=""><figcaption></figcaption></figure>
2. At the bottom of the page, click on "See archived templates". If you do not see this option, this may mean that you do not have any archived templates.

   <figure><img src="/files/FHU3rLRc5NP8XTtuWlLO" alt=""><figcaption></figcaption></figure>
3. You should be able to see all your archived templates.

   <figure><img src="/files/gYxaoFCfkNEhyyc0muWM" alt=""><figcaption></figcaption></figure>

## I would like to restore my archived template.

1. Navigate to the Archived templates page

   <figure><img src="/files/KZOAtfrtMn81q3c9xNN3" alt=""><figcaption></figcaption></figure>
2. Select the template that you would like to restore, then click on the "Restore from archive" button

   <figure><img src="/files/jeFdGjGVKldiH09ACXms" alt=""><figcaption></figcaption></figure>

## I have issues archiving my template. What do I do?

If you encounter any issues, please share your thoughts with us by reaching out to us via[ this form](https://go.gov.sg/lettersg-support) or at <support@letters.gov.sg>.

Your feedback helps us improve and enhance your experience.

<br>


# Viewing Previously Generated Letters

## How do I view previously generated letters on LetterSG?

1. Click on "Dashboard" and you should see a dashboard that displays batches of all the letters you have previously generated. You can click on each row to view the details of your letters in every batch.

<figure><img src="/files/p4dESGzUQ9npFjaLYGGN" alt=""><figcaption></figcaption></figure>

* In every batch of letters, you should be able to view the read status of all letters in that batch.

<figure><img src="/files/sp3HulArEYEv2D3a3Wz2" alt=""><figcaption></figcaption></figure>

#### How can I download or export my letter data?

3. Alternatively, you can click on the download icon on the main dashboard or the "Download CSV report" on the detailed batch dashboard to check the read status of your letters.

<figure><img src="/files/TE2YqaylwMNDShxMEXES" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/fU6VJt976PVHlATCFq0v" alt=""><figcaption></figcaption></figure>

* When you open your CSV, you will be able to track the read receipt of your generated letters in the CSV file under the "read\_status" column for every letter.

<figure><img src="/files/hZsczyDnIUdL9IjIFw7X" alt=""><figcaption></figcaption></figure>


# Downloading Letters as PDF

The steps below guide you through the process to download the batch of issued letters as a single PDF.  If you would like to find out how your letter recipients can download their PDFs, please refer [here](/for-citizens/downloading-your-letter-as-pdf).

## How do I download issued letters as PDF?

1. **Downloading from the Dashboard:** Navigate into the batch of letters that you would like to download, and select the Download menu on the batch dashboard. Click 'Download' > 'PDFs'.

   <figure><img src="/files/uryAaaXg9URZWfE9bBOf" alt=""><figcaption></figcaption></figure>

   \
   If the PDFs are ready, a new window will open with the PDFs to be downloaded. You can view the PDFs within the browser window or download them to your local machine.<br>

   <figure><img src="/files/XP5pjGM5AhSS9xB8AVx7" alt=""><figcaption></figcaption></figure>

   \
   Otherwise, a toast message will appear to inform you that your PDFs are being generated and will be sent directly to your email.&#x20;

<figure><img src="/files/3eCMQ32oJI5bZxxFTjge" alt=""><figcaption></figcaption></figure>

2. **Downloading from your email:** If you have followed Step 1, and your PDFs are being sent to your inbox, you should see the PDFs in your email within 15 minutes. \
   \
   Due to SGMail issues however, this may sometimes take up to 30 minutes to reach your inbox.<br>

   <figure><img src="/files/07CK9NF3XctIeq8DqyDM" alt=""><figcaption></figcaption></figure>

   \
   Click on 'Download'. A new window will open with the PDFs to be downloaded. You can view the PDFs within the browser window or download them to your local machine.

{% hint style="info" %}
If the download link in your email has expired, you can always return to the Dashboard to download the PDF files. &#x20;
{% endhint %}

If you have any issues with your PDF formatting, please write to us at <support@letters.gov.sg>.


# FAQs

## General

#### What is the difference between LetterSG and Postman?

| LetterSG                                                                                                              | Postman                                                                                                                     |
| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Helps public officers to issue and send personalised & verifiable digital official communications to citizens quickly | Mass broadcasting communication tool for public officers to reach citizens. Offers both email and SMS (via gov.sg) channels |

#### What is the difference between LetterSG and FileSG/ TrustDocs/ OpenAttestation?

| LetterSG                                                                                                              | FileSG/ TrustDocs/ OpenAttestation                                                                      |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| Helps public officers to issue and send personalised & verifiable digital official communications to citizens quickly | Offers tamper-proof certifications on the blockchain that meet international standards for verification |

#### How can we check if the recipient has read the letter?

You will be able to check the read status of the letter via your LetterSG dashboard. After logging in,  click on **Dashboard** → Select the relevant batch → Find the relevant recipient letter → `Read` status column.

#### Is there a maximum limit for the number of letters that can be sent via LetterSG?

Currently, we support a maximum batch size of 500 letters. If you have more recipients, consider splitting your recipients into multiple batches of 500 for issuance.

#### How long will the letters be accessible for?

Letters issued will be accessible at all times and will not expire.

## Security

#### What is the security and sensitivity classification of LetterSG?

We can handle up to restricted sensitive-normal data.&#x20;

#### Is it safe to send out LetterSG links to citizens?

* Yes, you may refer to SNDGO's press release for the whole of government here: <https://www.smartnation.gov.sg/media-hub/parliament/04072022/>
  * In essence, this outlines the SNDGO policy that states that links ending with ".[gov.sg](http://gov.sg/)" are allowed in SMSes to citizens.
* If you require to send out links that need password protection and are in doubt of policy clearance, please contact us [here](https://go.gov.sg/lettersg-support) for further assistance.

**When should/shouldn't I use LetterSG?**

LetterSG should only be used for **documents that can be safely shared in public**, where any unintended exposure would have minimal impact on your agency or recipients. Anyone with the link can access the e-letter, so **please avoid using LetterSG for private or confidential documents**.

While we ensure the LetterSG platform is secure, we cannot prevent third parties (individuals or automated systems) from exposing links. This can happen if a recipient publishes the link, or if a third-party application on their device inadvertently “leaks” it. In such cases, LetterSG will not carry out remediation (e.g., proactive web scans or link takedowns). If removal is necessary, agencies may contact the relevant platforms or services directly.

#### Where is the data on LetterSG stored?&#x20;

It is stored on servers in Singapore, complying with IM8 policy.

#### Can we attach our signature at the end of the letter?

We do not allow the hosting of digital signature images on our platform as it could be a potential security risk. Instead, we advise our users to use the Brush script font as a digital signature. The document is recognised as a valid e-document as it is issued on a .[gov.sg](http://gov.sg) domain.

## Getting started

#### **I've issued a test letter and opened the letter link to check the contents. When viewing the dashboard, why doesn't the letter's read status change to "Read"?**

If you're logged in as an agency user, we do not register an update to the read status for a letter. This is to allow agency users to check the contents of the letter without accidentally registering a "Read" count. \
\
To test for a status update, please open the letter in a separate device or log out of [letters.gov.sg](https://letters.gov.sg/) beforehand.

<figure><img src="/files/GBKIv3I2movlmC1J6t4Y" alt=""><figcaption><p>If you see this at the top of the letter, you will not see an update to the read status as you are logged in as an agency user. Log out of letters.gov.sg or open the letter link in incognito to test the read receipt.</p></figcaption></figure>

## Sending letters via email and SMS

#### Can we change the title name and content in the letter email and SMS notifications?

Outgoing emails sent via LetterSG will have the email title *”**Letter from {{template\_name}}**” .* We are able to change the template name for you, but we are unable to customise the body of the email any further as it is intentionally standardised for all outgoing emails from LetterSG to improve legitimacy and readership of letters.&#x20;

However, if you need to change the copy in the outgoing email/SMS to your recipients, you could choose to use [Postman](https://postman.gov.sg) where you would be able to set your own email/SMS copy, and embed the generated LetterSG letter link within the email/SMS.

#### **Can we customise the logo and agency information in the letter email and SMS notifications?**

The logo and agency name cannot be customised as it is automatically determined based off your user email domain.&#x20;

If you'd like to update the logo or have other concerns, please write to our team via this [form](https://go.gov.sg/lettersg-support).&#x20;

#### **Can we change the reply-to email address in the letter email notification?**

The reply-to email address will correspond to the email address of the user who sent the letters. Users can consider using a shared team email address to issue the letters.

#### **Can we resend a letter to the same recipient?**

We do not support resending of the same letter to recipients to prevent spamming. If you wish to use the same letter, you can consider sharing the original letter link with the recipient, or using Postman to send another SMS or email containing this letter link, to the same recipient.&#x20;

Alternatively, you may issue a new letter to the recipient which will generate a new letter link.

#### Can we use our agency sender ID to send SMSes?

From June 2024, all SMSes will be sent using [Gov.sg](http://Gov.sg) sender under securing government wide communications initiative. However, if you’d still like to use your agency sender ID (e.g. HDB, MOH etc.) before June 2024, you can setup or reuse your Twilio (SMS Aggregator) account via [Postman](https://postman.gov.sg). Please reach to us [here](https://go.gov.sg/lettersg-support) for further assistance.

#### What is the cost involved with using the SMS function?

We will be migrating over to GovSG sender ID by end of Q2 2024. Prior to migration, we are happy to absorb the costs for sending SMS to users. After switching over, the cost attribution will be dependent on the cost attribution policy that GovSG adopts, and we will provide more information on this at a later date.

#### Can we add attachments / images / files / PDFs to letters?

We do not support attachments in the letter currently. If you would like to add files which are not of a sensitive nature, we recommend uploading the files on [GoGov](https://go.gov.sg) first, generating a GoGov link and then adding that link into the letter content itself.

## Others

#### I am unable to receive an OTP/ unable to log into LetterSG. **What should I do?**

Please write to our team via this [form](https://go.gov.sg/lettersg-support). We will get back to you as soon as we can.

#### I am interested in using LetterSG but I am unable to register or log in. **What should I do?**

LetterSG is only available for public officers. For schools, we are only available for use in (i) [Polytechnics or ITEs](https://www.sgdi.gov.sg/ministries/moe); or (ii) [government-funded schools](https://www.moe.gov.sg/schoolfinder).&#x20;

If you have an email address with a government agency domain but are unable to log in, please write to our team via this [form](https://go.gov.sg/lettersg-support). We will get back to you as soon as we can.

#### **I cannot find an answer to my question on this guide. What should I do?**

Please write to our team via this [form](https://go.gov.sg/lettersg-support). We will get back to you as soon as we can.


# Downloading your letter as PDF

You are able to download your digital letter as a PDF if you would like to keep a local copy of it.

On the top right of the letter link page, select Download. The PDF copy of the letter should begin downloading to your device immediately.

<figure><img src="/files/uaXcf9O6OwQkQaJEEO8V" alt=""><figcaption></figcaption></figure>

**Do I have to download my letter?**

Letters issued will be accessible at all times and will not expire. You will not need to download your letter unless you require an offline copy of your letter for printing.


# Add your certificate to LinkedIn

Certificates issued via LetterSG can be added to LinkedIn and displayed for anyone viewing your LinkedIn profile.&#x20;

**To add a certificate:**

1. Login to your LinkedIn account and navigate to your profile page.&#x20;
2. Scroll down to the bottom until you see the "**Licenses & certifications**" section.&#x20;
3. Click the "+" plus icon to add a certificate. For more on how to add a certificate, [see LinkedIn's guide here](https://www.linkedin.com/help/linkedin/answer/a567169).
4. If you would like to let others to view the actual certificate, enter the certificate URL link or the certificate's ID so that the "Show credential" option shows. It should look like this:

<figure><img src="/files/UP8SURvFdRuFxf8ObPGJ" alt="" width="563"><figcaption></figcaption></figure>

The certificate's ID is the string of random alphanumerical characters (i.e. *8glro-hkw0e-6difr-fzkl9*) that can be obtained from the back of the certificate's URL link **OR** from the bottom of the certificate page.

<div align="center"><figure><img src="/files/RB7aaaq8uW9p0Wfb95OL" alt="" width="563"><figcaption></figcaption></figure></div>


# FAQs

#### Are LetterSG links safe to click on?

* Yes, LetterSG links end with ".gov.sg" and are safe to click on.&#x20;
* You may refer to SNDGO's press release here for further assurance: <https://www.smartnation.gov.sg/media-hub/parliament/04072022/>
  * In essence, this outlines the SNDGO policy that states that links ending with ".[gov.sg](http://gov.sg/)" are safe to click on for citizens.

#### Is there an expiry period for the link to my letter from [Letter.gov.sg](http://Letter.gov.sg)?

Letters issued will be accessible at all times and will not expire.

**I have questions about the letter and I need to get in touch with the government agency. Who can I ask?**

As the platform provider, LetterSG is not able to assist with any queries about the letter content. Please reach out to the letter issuer or the government agency who issued your letter instead.

**I cannot find an answer to my question on this guide. What should I do?**

* Please write to our team via this form: <https://go.gov.sg/lettersg-citizens>. We will get back to you as soon as we can.


# API Documentation

This page is meant for developers, vendors, and IT administrators to understand how to generate the bearer token to access our API to create/send and fetch status of letters.

## Bearer Token & API Key Generation

**Bearer authentication** (also called **token authentication**) is an HTTP **authentication** scheme that involves security **tokens** called **bearer tokens**. LetterSG uses bearer authentication.&#x20;

To generate the token, click on "API Integration" in the navigation bar. From there, click on `Generate API key` and copy the token. Use this key to start using LetterSG's API.&#x20;

<figure><img src="/files/mgjCUdPlH2qDC6EM9fb2" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/d4EWCNGjJpgtNWk3JdB7" alt=""><figcaption></figcaption></figure>

## Authentication

LetterSG's API uses APIKey for authentication. User can view and manage API Keys in LetterSG API Dashboard.

Staging secret keys will have `test_v1_`version prefix.

Production secret keys will have `live_v1_`version prefix.

Authentication to the API is performed via bearer auth.

All API requests must be made over HTTPS. Calls made over plain HTTP will fail and requests without authentication will also fail.

To verify that your API key is working, send a curl request:

```bash
curl --location \
--request GET 'https://letters.gov.sg/api/v1/templates/155' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY'
```

This request gets the template details for template 155, our sample template **OGP - Certificate of Curiosity**.

You should see a response containing the details for template 155:

```json
{
    "templateId": 155,
    "fields": [
        "recipient_name"
    ],
    "name": "OGP - Certificate of Curiosity",
    "createdAt": "2023-11-09T04:17:49.631Z",
    "updatedAt": "2023-11-09T04:17:50.000Z"
}
```

## Errors

LetterSG API uses conventional API Error to indicate the success or failure of an API request.

<table><thead><tr><th width="358">Status Codes</th><th>Description</th></tr></thead><tbody><tr><td>200 - OK</td><td>Everything worked as expected.</td></tr><tr><td>302 - Redirect</td><td>(PDF endpoint) Redirects to the presigned URL for PDF.</td></tr><tr><td>400 - Bad Request</td><td>The request was unacceptable, often due to missing a required parameter.</td></tr><tr><td>401 - Unauthorized</td><td>No valid API key provided.</td></tr><tr><td>402 - Request Failed</td><td>The parameters were valid but the request failed.</td></tr><tr><td>404 - Not Found</td><td>The requested resource doesn't exist.</td></tr><tr><td>429 - Too Many Requests</td><td>Too many requests hit the API too quickly. We recommend an exponential backoff of your requests.</td></tr><tr><td>500, 502, 503, 504 - Server Errors</td><td>Something went wrong on LetterSG's API end.</td></tr></tbody></table>

## Rate Limits

Unless otherwise stated, LetterSG allows up to 20 requests per second per user (subject to change).

## Endpoints

| Environment | Endpoint                              |
| ----------- | ------------------------------------- |
| Production  | <https://letters.gov.sg/api/>         |
| Staging     | <https://staging.letters.gov.sg/api/> |

## Get All Templates

To see all templates that you have access to, send a GET request to list all templates. This endpoint also returns template fields that you will need to provide when generating the letters for each template.

```jsx
GET /v1/templates
```

**Request body:**

<table><thead><tr><th width="147">Parameter</th><th width="95.33333333333331">Type</th><th width="134">Default value</th><th width="126">Required?</th><th>Description</th></tr></thead><tbody><tr><td><code>limit</code></td><td>number</td><td>100</td><td>No, optional</td><td>Maximum number of templates to be returned at once</td></tr><tr><td><code>offset</code></td><td>number</td><td>0</td><td>No, optional</td><td>Offset of the first template returned in the collection.</td></tr></tbody></table>

**Returns:**

<pre class="language-jsx"><code class="lang-jsx"><strong>// list of all templates that the user has access to
</strong><strong>[
</strong><strong>    templates: {
</strong>      templateId: number
      fields: string[]
      name: string
      createdAt: string
      updatedAt: string
    }[],
    count: number
]
</code></pre>

**Sample request:**

<pre class="language-bash"><code class="lang-bash"><strong># replace live_v1_YOUR_API_KEY with your actual API key
</strong>curl --location \
--request GET 'https://letters.gov.sg/api/v1/templates?limit=2&#x26;offset=5' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY'
</code></pre>

**Response**:

<pre class="language-json"><code class="lang-json">[
    "templates": [
      {
        "templateId": 234,
        "fields": ["name", "name_2"],
        "name": "Template Name 1",
        "createdAt": "2022-09-19T03:31:00.131Z",
        "updatedAt": "2022-09-19T03:31:00.131Z"
<strong>      },
</strong>      {
        "templateId": 45,
        "fields": ["name", "name_2"],
        "name": "Template Name 2",
        "createdAt": "2022-09-19T03:31:00.131Z",
        "updatedAt": "2022-09-19T03:31:00.131Z"
     }
<strong>    ],
</strong>    "count": 40
]
</code></pre>

## Get Template Details by ID

To see the details of a template, send a GET request with the template ID of the template. This endpoint returns the template fields you need to provide when generating a letter.

```jsx
GET /v1/templates/:id
```

**Request body**

<table><thead><tr><th width="155">Parameter</th><th width="141.33333333333331">Type</th><th width="135">Required?</th><th></th></tr></thead><tbody><tr><td><code>id</code></td><td>number</td><td>Yes, required</td><td>ID of the template</td></tr></tbody></table>

**Returns:**

<pre class="language-jsx"><code class="lang-jsx"><strong>// details of template
</strong><strong>{
</strong>    templateId: number
    fields: string[] 
    name: string
    createdAt: string
    updatedAt: string
}
</code></pre>

**Sample request:**

```bash
# replace live_v1_YOUR_API_KEY with your actual API key
curl --location \
--request GET 'https://letters.gov.sg/api/v1/templates/155' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY'
```

**Response**:

```json
{
    "templateId": 155,
    "fields": [
        "recipient_name"
    ],
    "name": "OGP - Certificate of Curiosity",
    "createdAt": "2023-11-09T04:17:49.631Z",
    "updatedAt": "2023-11-09T04:17:50.000Z"
}
```

## (Single) Create Letter

To create a new letter, send a POST request specifying the template you would like to use, and the provide the relevant template fields for the letter. If you are unsure which template fields are required for the template, see [Get Template Details By Id](#get-template-details-by-id).

The endpoint returns the link to the created letter, the public id of the letter, and the html of the created letter. If you need to [query the status of the letter or retrieve information about the letter](#get-letter-metadata), please store the public id of the letter as this is the unique identifier for this letter.

```jsx
POST /v1/letters
```

**Request body:**

<table><thead><tr><th width="192.33333333333331">Property</th><th width="94">Type</th><th width="112">Required?</th><th>Description</th></tr></thead><tbody><tr><td>templateId</td><td>number</td><td>Yes, required</td><td>ID of the template</td></tr><tr><td>letterParams</td><td>JSON</td><td>Yes, required</td><td>Key-value pairs of the letter, based on the params contained in the template.<br><br>If params values are not available, param must still be provided but you may use an empty space to indicate that the param is not available e.g.<code>"name": " "</code></td></tr><tr><td>notificationParams</td><td>JSON</td><td>No, optional</td><td><p>Controls whether Letters should notify the recipient on your behalf.</p><ul><li>If provided — Letters sends the letter link to the recipient via the specified channel. notificationMethod must be one of <code>EMAIL</code> or <code>SMS</code>. See the object format below.</li><li>If omitted — The letter is still created and a public URL is generated, but no email or SMS is sent. Use this if you want to deliver the letter link through your own system. The URL can be constructed from the <code>letterLink</code> returned in the response.</li></ul></td></tr></tbody></table>

* Notification params, if provided, should look like so:

<table><thead><tr><th width="194">Property</th><th width="149">Type</th><th width="142">Required</th><th>Description</th></tr></thead><tbody><tr><td>recipient</td><td>string</td><td>Yes, required</td><td>Contact of recipient, can be either phone number or email, provided as string. <br><br>Phone numbers should start with either 8 or 9. Only local phone numbers supported for now.</td></tr><tr><td>notificationMethod</td><td>ENUM ("SMS" or "EMAIL") </td><td>Yes, required</td><td>Case sensitive</td></tr></tbody></table>

**Returns**:

<pre class="language-jsx"><code class="lang-jsx"><strong>// created letter
</strong><strong>{
</strong>    publicId: string
    issuedLetter: string
    letterLink: string
    createdAt: string
    firstReadAt: string
    notificationStatus?: NotificationStatus
    recipient?: string
}
</code></pre>

**Sample request:**

<pre class="language-bash"><code class="lang-bash"># replace live_v1_YOUR_API_KEY with your actual API key

# sample request to create a letter only, without SMS or EMAIL notification
curl --location 'https://letters.gov.sg/api/v1/letters' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY' \
--data '{
    "templateId": 155,
    "letterParams": {
        "recipient_name": "Maxine Marcella"
    }
}'

# sample request with SMS notification
# replace YOUR_PHONE_NUMBER_STARTING_WITH_8_OR_9 with your phone number
<strong># this sends a real SMS out, please test with your own phone number
</strong><strong>curl --location 'https://letters.gov.sg/api/v1/letters' \
</strong>--header 'Content-Type: application/json' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY' \
--data '{
    "templateId": 155,
    "letterParams": {
        "recipient_name": "Maxine Marcella"
    },
    "notificationParams": {
        "recipient": "YOUR_PHONE_NUMBER_STARTING_WITH_8_OR_9",
        "notificationMethod": "SMS"
    }
}'

# sample request with EMAIL notification
# replace YOUR_EMAIL with your email address
# this sends a real email out, please test with your own email address
curl --location 'https://letters.gov.sg/api/v1/letters' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY' \
--data '{
    "templateId": 155,
    "letterParams": {
        "recipient_name": "Maxine Marcella"
    },
    "notificationParams": {
        "recipient": "YOUR_EMAIL",
        "notificationMethod": "EMAIL"
    }
}'
</code></pre>

**Response:**

```json
{
    "publicId": "2here-8o5td-9g4b6-xfd86",
    "letterLink": "https://letters.gov.sg/2here-8o5td-9g4b6-xfd86",
    "createdAt": "Fri May 17 2024",
    "issuedLetter": "<div style=\"background-image: url('https://file.go.gov.sg/3f5f3u.png'); background-size: cover; aspect-ratio: 1/1.435; color: black;\">\n<div style=\"position: absolute; text-align: center; width: 100%; top: 45.8%; transform: translate(0, -50%);\">\n<div style=\"font-family: georgia, palatino, serif; font-size: 26px; line-height: 1.5; letter-spacing: 0.05rem;\"><span style=\"font-size: 36px;\">CERTIFICATE OF</span><br><span style=\"font-size: 36px;\">CURIOSITY</span></div>\n<br>\n<div style=\"margin-top: 10px; font-family: verdana, geneva, sans-serif; letter-spacing: 0.2rem; color: #666c7a; font-size: 12px;\"><span style=\"font-size: 14px;\">AWARDED TO</span></div>\n<div style=\"font-family: symbol; font-size: 45px; margin-top: 50px; margin-left: 3rem; margin-right: 3rem;\"><span style=\"font-size: 58px; font-family: 'times new roman', times, serif;\"><em>Maxine Marcella</em></span></div>\n<br>\n<div style=\"font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.5; margin-top: 15px;\"><span style=\"font-size: 18px;\">for the successful completion of sending out your e-letter</span><br><span style=\"font-size: 18px;\">from <strong>LetterSG</strong></span></div>\n<br>\n<table style=\"width: 100%; text-align: center; margin-top: 15px;\"><colgroup> <col width=\"10%\"> <col width=\"10%\"> <col width=\"10%\"> <col width=\"10%\"> <col width=\"10%\"> </colgroup>\n<tbody>\n<tr style=\"font-family: 'Brush Script MT', cursive; font-size: 24px;\">\n<td>&nbsp;</td>\n<td style=\"border-bottom: 2px solid black; padding-bottom: 3px;\"><span style=\"color: rgb(0, 0, 0); font-size: 36px;\">Yung</span></td>\n<td>&nbsp;</td>\n<td style=\"border-bottom: 2px solid black;\"><span style=\"color: rgb(0, 0, 0); font-size: 36px;\">A</span></td>\n<td>&nbsp;</td>\n</tr>\n<tr>\n<td>&nbsp;</td>\n<td style=\"vertical-align: top; padding-top: 12px; font-family: Arial, Helvetica, sans-serif; font-size: 12px;\"><span style=\"font-size: 16px;\">Yung Guo En</span><br>\n<div style=\"font-family: verdana, geneva, sans-serif; letter-spacing: 0.1rem; font-size: 8px; padding-top: 5px;\"><span style=\"font-size: 10px;\">LETTERSG TRAINER</span></div>\n</td>\n<td colspan=\"3\" style=\"vertical-align: top; padding-top: 12px; font-family: Arial, Helvetica, sans-serif; font-size: 12px;\"><span style=\"font-size: 16px;\">Abbas Noor Bin Naqib Riduan</span><br>\n<div style=\"font-family: verdana, geneva, sans-serif; letter-spacing: 0.1rem; font-size: 8px; padding-top: 5px;\"><span style=\"font-size: 10px;\">LETTERSG ASSISTANT TRAINER</span></div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>"
}
```

**Potential error responses (non-exhaustive):**

```json
{
    "statusCode": 404,
    "message": "Template not found",
    "error": "Not Found"
}
```

```json
// extra letter param in request, serial_number
{
    "message": "Invalid letter params.",
    "error": [
        {
            "id": 0,
            "param": "serial_number",
            "message": "Invalid attribute in param",
            "displayedErrorMessage": " is an extra field"
        }
    ]
}

// missing letter param in request, recipient_name
{
    "message": "Invalid letter params.",
    "error": [
        {
            "id": 0,
            "param": "recipient_name",
            "message": "Missing param",
            "displayedErrorMessage": " field is missing"
        }
    ]
}
```

## (Bulk) Create letters

To create a batch of letters, send a POST request specifying the template you would like to use, and the provide a list of template fields, one set of template fields for each letter to be generated. If you are unsure which template fields are required for the template, see [Get Template Details By Id](#get-template-details-by-id).&#x20;

The endpoint returns the id of the created batch of letters. If you need to [query the status of the batch](https://guide.letters.gov.sg/developer-guide/api-documentation#get-batch-metadata), please store the id of the batch as this is the identifier for this batch.

This endpoint is generates a max of 500 letters at one time. Supported TPS: 1 transaction per second per user.&#x20;

Please contact us if you need us to increase the rate limits.

```
POST /v1/letters/bulks
```

**Request body:**

<table><thead><tr><th width="192.33333333333331">Property</th><th width="93">Type</th><th width="98">Required?</th><th></th></tr></thead><tbody><tr><td>templateId</td><td>number</td><td>Yes, required</td><td>ID of the template</td></tr><tr><td>lettersParams</td><td>JSON</td><td>Yes, required</td><td>An array containing key-value pairs for each letter, based on the params contained in the template.<br><br>If param values are not available, param must still be provided but you may use an empty space to indicate that the param is not available e.g.<code>"name": " "</code></td></tr><tr><td>notificationMethod</td><td>string</td><td>No, optional</td><td><p>Controls whether Letters should notify the<br>recipients on your behalf.</p><ul><li>If provided — Letters sends the letter link to each recipient via the specified channel. notificationMethod must be one of <code>EMAIL</code> or <code>SMS</code>. recipients must be provided alongside it. See the object format below.</li><li><p>If omitted — The letters are still created and stored, but no email or SMS is sent. Use this if you want to deliver the letter links through your own system. To retrieve the links: </p><ul><li>Use the <code>batchId</code> from the response to call <a href="#get-batch-metadata">Get Batch Metadata</a>, which returns a <code>letterPublicIds</code> array. </li><li>For each <code>publicId</code>, call <a href="#get-letter-metadata">Get Single Letter Metadata </a>to retrieve its full <code>letterLink</code>.</li></ul></li></ul></td></tr><tr><td>recipients</td><td>JSON</td><td>No, optional</td><td><p>An array of recipients that correspond to the letters. This list is <strong>required</strong> if a notification is to be sent. Each recipient will be notified via the method specified at the batch level.</p><p></p><p>If notificationMethod is <code>"EMAIL"</code> or <code>"SMS"</code>, <code>recipients</code> must be provided.<br><br>Contact of recipient can be either phone number or email, provided as strings. <br><br>Phone numbers should start with either 8 or 9. Only local phone numbers supported for now.</p></td></tr></tbody></table>

**Returns:**

```jsx
// created letter
{ batchId: number }
```

**Sample request:**

```bash
# sample request to create letters only, without SMS or EMAIL notification
curl --location 'https://letters.gov.sg/api/v1/letters' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY' \
--data '{
    "templateId": 155,
    "lettersParams": [
        {
            "recipient_name": "Test1"
        },
        {
            "recipient_name": "Test2"
        }
    ]
}'

# sample request with SMS notifications
# replace YOUR_PHONE_NUMBER with your phone numbers
# this sends a real sms out, please test with your own phone numbers
curl --location 'https://letters.gov.sg/api/v1/letters' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY' \
--data '{
    "templateId": 155,
    "lettersParams": [
        {
            "recipient_name": "Test1"
        },
        {
            "recipient_name": "Test2"
        }
    ],
    "notificationMethod": "SMS",
    "recipients": ["YOUR_PHONE_NUMBER", "YOUR_PHONE_NUMBER"]
}'


# sample request with EMAIL notification
# replace YOUR_EMAIL with your email address
# this sends a real email out, please test with your own email address
curl --location 'https://letters.gov.sg/api/v1/letters' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY' \
--data '{
    "templateId": 155,
    "lettersParams": [
        {
            "recipient_name": "Test1"
        },
        {
            "recipient_name": "Test2"
        }
    ],
    "notificationMethod": "EMAIL",
    "recipients": ["YOUR_EMAIL", "YOUR_EMAIL"]
}'
```

**Response:**

```json
{
    batchId: 3
}
```

**Potential error responses (non-exhaustive):**

```typescript
// 404 Not Found errors 

// template does not exist
{
    "message": "Template not found",
}
```

<pre class="language-typescript"><code class="lang-typescript">// 400 Bad Request errors 

// invalid, missing or extra params
<strong>{
</strong>    "message": "Invalid letter params/ recipients",
    "errors": [
        {
            "id": 0,
            "errorType": "Invalid attribute in param",
            "message": "hello is an extra field"
        },
        {
            "id": 0,
            "errorType": "Missing param",
            "message": "recipient_name field is missing"
        },
        {
            "id": 1,
            "errorType": "Missing param",
            "message": "serial_number field is missing"
        }
    ]
}

{
    "message": "Notification method must be one of 'EMAIL', 'SMS'",
}

// invalid recipients or missing recipients
{
    "message": "Invalid letter params/ recipients",
    "errors": [
        {
            "id": 1,
            "errorType": "Invalid phone number",
            "message": "Phone Number should be local SG handphone number"
        },
        {
            "id": 2,
            "errorType": "Missing param",
            "message": "Phone Number field is missing"
        },
}
</code></pre>

## Get Letter Metadata

To retrieve the status of the letter, send a GET request with the public id of the letter that you would like to retrieve metadata for. You are only able to retrieve the metadata of letters that you have access to.

```jsx
GET /v1/letters/:publicId 
```

**Request Query Parameters:**

<table><thead><tr><th width="139">Parameter</th><th width="93.33333333333331">Type</th><th width="140">Required?</th><th>Description</th></tr></thead><tbody><tr><td><code>publicId</code></td><td>string</td><td>Yes, required</td><td>Letter ID for fetching the status e.g. <em>xxyyy-12345-ddsss-d3454</em></td></tr></tbody></table>

**Returned object**:

```jsx
// letter metadata
{
     publicId: string
     issuedLetter: string
     letterLink: string
     createdAt: string
     firstReadAt?: string
     notificationStatus?: NotificationStatus
     recipient?: string
}
```

**Explanation of fields returned:**

<table><thead><tr><th width="183">Field Returned</th><th width="256">What it means</th><th>Example</th></tr></thead><tbody><tr><td>publicId</td><td>Letter ID for fetching the read status </td><td> xxyyy-12345-ddsss-d3454</td></tr><tr><td>letterLink</td><td>Original link of the letter</td><td>https://letters.gov.sg/letters/public-letter-id</td></tr><tr><td>createdAt</td><td>Timestamp of letter creation</td><td><pre><code>2022-09-19T03:31:00.131Z
</code></pre></td></tr><tr><td>firstReadAt</td><td>(Optional) Timestamp of first read of letter, if letter is read</td><td><pre><code>2022-09-19T03:31:00.131Z
</code></pre></td></tr><tr><td>notificationStatus</td><td>(Optional) Status of the notification that was sent, this could be "SENT", "FAILED", "INVALID_RECIPIENT", "PENDING"</td><td>"SENT"</td></tr><tr><td>recipient</td><td>(Optional) String of the recipient's info</td><td>abcss@example.com</td></tr></tbody></table>

**Sample Request:**

```bash
# replace live_v1_YOUR_API_KEY with your actual API key
curl --location \
--request GET 'https://letters.gov.sg/api/v1/letters/2here-8o5td-9g4b6-xfd86' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY'
```

**Returns:**

```json
{
    "publicId": "2here-8o5td-9g4b6-xfd86",
    "letterLink": "https://letters.gov.sg/2here-8o5td-9g4b6-xfd86",
    "createdAt": "Fri May 17 2024",
    "issuedLetter": "<div style=\"background-image: url('https://file.go.gov.sg/3f5f3u.png'); background-size: cover; aspect-ratio: 1/1.435; color: black;\">\n<div style=\"position: absolute; text-align: center; width: 100%; top: 45.8%; transform: translate(0, -50%);\">\n<div style=\"font-family: georgia, palatino, serif; font-size: 26px; line-height: 1.5; letter-spacing: 0.05rem;\"><span style=\"font-size: 36px;\">CERTIFICATE OF</span><br><span style=\"font-size: 36px;\">CURIOSITY</span></div>\n<br>\n<div style=\"margin-top: 10px; font-family: verdana, geneva, sans-serif; letter-spacing: 0.2rem; color: #666c7a; font-size: 12px;\"><span style=\"font-size: 14px;\">AWARDED TO</span></div>\n<div style=\"font-family: symbol; font-size: 45px; margin-top: 50px; margin-left: 3rem; margin-right: 3rem;\"><span style=\"font-size: 58px; font-family: 'times new roman', times, serif;\"><em>Maxine Marcella</em></span></div>\n<br>\n<div style=\"font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 1.5; margin-top: 15px;\"><span style=\"font-size: 18px;\">for the successful completion of sending out your e-letter</span><br><span style=\"font-size: 18px;\">from <strong>LetterSG</strong></span></div>\n<br>\n<table style=\"width: 100%; text-align: center; margin-top: 15px;\"><colgroup> <col width=\"10%\"> <col width=\"10%\"> <col width=\"10%\"> <col width=\"10%\"> <col width=\"10%\"> </colgroup>\n<tbody>\n<tr style=\"font-family: 'Brush Script MT', cursive; font-size: 24px;\">\n<td>&nbsp;</td>\n<td style=\"border-bottom: 2px solid black; padding-bottom: 3px;\"><span style=\"color: rgb(0, 0, 0); font-size: 36px;\">Yung</span></td>\n<td>&nbsp;</td>\n<td style=\"border-bottom: 2px solid black;\"><span style=\"color: rgb(0, 0, 0); font-size: 36px;\">A</span></td>\n<td>&nbsp;</td>\n</tr>\n<tr>\n<td>&nbsp;</td>\n<td style=\"vertical-align: top; padding-top: 12px; font-family: Arial, Helvetica, sans-serif; font-size: 12px;\"><span style=\"font-size: 16px;\">Yung Guo En</span><br>\n<div style=\"font-family: verdana, geneva, sans-serif; letter-spacing: 0.1rem; font-size: 8px; padding-top: 5px;\"><span style=\"font-size: 10px;\">LETTERSG TRAINER</span></div>\n</td>\n<td colspan=\"3\" style=\"vertical-align: top; padding-top: 12px; font-family: Arial, Helvetica, sans-serif; font-size: 12px;\"><span style=\"font-size: 16px;\">Abbas Noor Bin Naqib Riduan</span><br>\n<div style=\"font-family: verdana, geneva, sans-serif; letter-spacing: 0.1rem; font-size: 8px; padding-top: 5px;\"><span style=\"font-size: 10px;\">LETTERSG ASSISTANT TRAINER</span></div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>",
    "firstReadAt": "Fri May 17 2024"
}
```

## Get Batch Metadata

To retrieve the status of the letter batch, send a GET request with the batch id that you would like to retrieve metadata for. You are only able to retrieve the metadata of batches that you have access to.

```jsx
GET /v1/batches/:id 
```

**Request Query Parameters:**

<table><thead><tr><th width="145">Parameter</th><th width="173.33333333333331">Type</th><th>Required?</th><th>Description</th></tr></thead><tbody><tr><td><code>id</code></td><td>number</td><td>Yes, required</td><td>ID of batch</td></tr></tbody></table>

**Returned object**:

```jsx
// letter metadata
{
    batchId: number,
    templateId: number,
    createdAt: Date,
    totalCount: number,
    readCount: number,
    notificationMethod: enum("SMS", "EMAIL"),
    "letterPublicIds": string[]
}
```

**Explanation of fields returned:**

<table><thead><tr><th width="192">Field Returned</th><th width="256">What it means</th><th>Example</th></tr></thead><tbody><tr><td>batchId</td><td>ID of batch issued</td><td> 40091</td></tr><tr><td>templateId</td><td>ID of template used to issue batch</td><td>155</td></tr><tr><td>totalCount</td><td>Total number of letters in batch</td><td>1</td></tr><tr><td>readCount</td><td>Number of letters that have been read in batch</td><td>0</td></tr><tr><td>notificationMethod</td><td>(Optional) Method that letters sent via, could be "SMS", "EMAIL"</td><td>"SMS"</td></tr><tr><td>letterPublicIds</td><td><p>Array of public id of the letters in the batch. </p><p></p><p>You may use letter publicId to <a href="https://guide.letters.gov.sg/developer-guide/api-documentation#get-letter-metadata">retrieve metadata about the letter</a></p></td><td><pre><code>["lkq15-8w7ur-rznn5-kigvo"]
</code></pre></td></tr></tbody></table>

**Sample request:**

```bash
curl --location \
--request GET 'https://letters.gov.sg/api/v1/batches/40091' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY'
```

**Response:**

```typescript
{
    "batchId": 40091,
    "templateId": 155,
    "createdAt": "Mon, 27 Jan 2025 09:37:24 GMT",
    "totalCount": 1,
    "readCount": 0,
    "notificationMethod": "EMAIL",
    "letterPublicIds": [
        "lkq15-8w7ur-rznn5-kigvo"
    ]
}
```

## Get Downloadable Letter PDF (Beta)

To download the issued letter as a PDF for archiving, send a GET request with the publicId of the letter.&#x20;

{% hint style="info" %}
**Note:** We may choose to further rate limit this endpoint in the future. This endpoint currently is offered in beta, and may not be always offered as a synchronous response.
{% endhint %}

<pre class="language-jsx"><code class="lang-jsx"><strong>GET /v1/letters/:publicId/pdfs
</strong></code></pre>

**Request Query Parameters:**

<table><thead><tr><th width="188">Parameter</th><th width="201.33333333333331">Type</th><th width="178">Default value</th><th>Required?</th></tr></thead><tbody><tr><td><code>publicId</code></td><td>string</td><td>nil</td><td>Yes, required</td></tr></tbody></table>

**Returns**:

Redirects to presigned URL link with a 1-hour expiry (returning a 302 status).&#x20;

```jsx
// url to download link
{
  presignedUrl: string
}
```

**Sample request:**

```bash
# downloads PDF as 2here-8o5td-9g4b6-xfd86.pdf on your device
# replace live_v1_YOUR_API_KEY with your actual API key
curl --location \
--request GET 'https://letters.gov.sg/api/v1/letters/2here-8o5td-9g4b6-xfd86/pdfs' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY' --output 2here-8o5td-9g4b6-xfd86.pdf
```

## Others

**How can I whitelist LetterSG / What is LetterSG's IP address?**\
LetterSG endpoints reside in the internet zone, so you can make the request with your API key.  As we are being served by Cloudflare DNS, you may whitelist this range of Cloudflare's IP addresses ([see here](https://www.cloudflare.com/en-gb/ips/)).

## Keen on APIs?

For more information on integrating your systems with LetterSG, reach out to us at **<support@letters.gov.sg>**&#x20;


# Terms of Use

#### 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, 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 change these Terms of Use at its sole discretion and at any time.**You should read the Terms of Use carefully each time you access or use any part of this Service as such access or use will constitute your agreement to the Terms of Use and any amendments to it.**

1.4. **If you do not agree to these Terms of Use, please do not use this Service or any part of this Service.**

#### 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 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. You shall not, amongst other things, modify, reverse-engineer, decompile, adapt, publish, redistribute or sublicense the Service or any part of the Service without the prior written consent of GovTech or the respective third party owners. You also shall not use the Service in violation of any applicable laws or agreements that you have with any third parties. 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 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 downloaded.

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.

**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 listed 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 as the end user.

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.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.

#### 5. Your Consent to Access Functions of Your Device

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. Please also see clause 8 (Privacy Policy). 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.

#### 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 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; and/or \
\
6.1.2. that the Service or any functions associated therewith will be uninterrupted or error-free, or that defects will be corrected or that this Service, 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 arising directly or indirectly from –

6.2.1. your access to or use of this Service, or any part thereof; \
\
6.2.2. any loss of access to our use of this Service or any part of this Service, howsoever caused; \
\
6.2.3. any inaccuracy or incompleteness in, or errors or omissions in the transmission of, the Service; \
\
6.2.4. any delay or interruption in the transmission of the Service, 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, 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 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.

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 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.

#### 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 Policy

You also agree to the terms of the Privacy Policy for this Service as may be amended from time to time. The Privacy Policy will form part of these Terms of Use.

#### 9. Rights of Third Parties

Subject to the rights of the Third Party set out in Clause 4.5, a person who is not a party to these Terms of Use shall have no right under the Contracts (Rights of Third Parties) Act (Cap 53B, Rev Ed 2002) or otherwise to enforce any of its terms.

#### 10. Assignment

10.1. You may not assign or sub-contract these Terms of Use without the prior written consent of the Government.

10.2. The Government may assign, novate, transfer, or sub-contract the rights and liabilities in respect of the Service and these Terms of Use, without notifying you and without further reference to you. Your acceptance of these Terms of Use shall also constitute your consent to such assignment, novation, transfer or sub-contract.

#### 11. Governing Law and Dispute Resolution

11.1. These Terms of Use shall be governed 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.

#### Annex

1\. Name of Service: LetterSG\
2\. Nature of Service >a. This Service facilitates the shortening of URLs, so that any public officer may create short links using an official government domain. By sharing these links, any officer is able to redirect other websites and URL endpoints.\
\
b. Notwithstanding anything in the Terms of Use, the Service is intended for use by a Singapore public sector agency only.

3\. Third party software/services

a. Please see this link for a list of open source components used in the Service.

This Schedule was last updated on 01 July 2023.


# Privacy Policy

This Privacy Policy must be read in conjunction with the Terms of Use that accompany the applicable service you are requesting from us (the "**Service**"). If you are a form respondent, this Privacy Policy will also apply in addition to any other privacy policy that the form creator provides to you as part of the form. In this Privacy Policy, "**Public Sector Entities**" means the Government (including its ministries, departments and organs of state) and public authorities (such as statutory boards) and"personal data" shall have the same meaning as its definition in the Personal Data Protection Act 2012 (No. 26 of 2012).

1. Insofar as the Service consists of or is provided to you through a website, please note that:
   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 websites. The cookie is used to track information such as the number of users and their frequency of use, profiles of users and their preferred sites. While this cookie can tell us when you enter our sites and which pages you visit, it cannot read data off your hard disk.
   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 website.
2. We may request/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 Policy, 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.
3. If you provide us with personal data:
   1. We may use, disclose and process the data for any one or more of the following purposes:
      1. to assist, process and facilitate your access or use of the Service;
      2. to administer, process and facilitate any transactions or activities by you, whether with us or any other Public Sector Entity 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;
      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;
      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 Public Sector Entities. 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 Public Sector Entities for record-keeping and reporting or publication purposes (whether internally or externally);
      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. 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, SMS, instant messaging, 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.
   2. We may share necessary data with other Public Sector Entities, and third party service providers in connection with the Service, so as to provide the Service to you in the most efficient and effective way unless such sharing is prohibited by law.
   3. We will NOT share your personal data with entities which are not Public Sector Entities, except where such sharing is necessary for such entities to assist us in providing the Service to you or for fulfilling any of the purposes herein.
   4. For your convenience, we may also display to you data you had previously supplied us or other Public Sector Entities. 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.
4. 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.
5. To safeguard your personal data, all electronic storage and transmission of personal data is secured with appropriate security technologies.
6. 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.
7. The Service may contain links to external sites whose data protection and privacy practices may differ from ours. We are not responsible for the content and privacy practices of these other websites and encourage you to consult the privacy notices of those sites.
8. Please see the Annex for additional terms/notices.
9. Please contact <letters@open.gov.sg> if you:
   1. have any enquiries or feedback on our data protection policies and procedures; or
   2. need more information on or access to data which you have provided to us in the past.

This Privacy Policy is dated 6 Feb 2023.

## Annex

Name of Service: LetterSG

1. If you are a letter administrator or creator, please note that GovTech will collect your email address and other contact details. In the event you request data from us concerning the letter recipients, you warrant and represent that you have the consent of letter recipients for us to provide the data to you or that such consent is not necessary under the applicable rules/laws.
2. If you are a letter recipient, please note that GovTech may collect, store and/or process data in accordance with this Privacy Policy (which applies in addition to the privacy policy/statement of the letter administrator/creator agency(/ies) and disclose the data to the letter administrators/creator, or process the data for the letter administrators/creator. However, if you have any enquiries or feedback on the form creator’s data protection, policies and procedures or need more information on or access to data which you have provided directly to the letter creator in the past, please consult the privacy policy/statement of the letter creator agency(/ies) and contact the letter creator agency(/ies) directly.


