Comment on page
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 get/create/update shortlinks.
Bearer authentication (also called token authentication) is an HTTP authentication scheme that involves security tokens called bearer tokens. GoGovSG uses bearer authentication.
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 GoGovSG's API. 

Keep the bearer token safe: You should not share the bearer token with anyone. Use services like 1Password to store it.
GoGovSG's API uses APIKey for authentication. User can view and manage API Keys in Go 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.
curl --location --request POST 'https://go.gov.sg/api/v1/urls' \
--header 'Authorization: Bearer live_v1_YOUR_API_KEY'
All API requests must be made over HTTPS. Calls made over plain HTTP will fail and requests without authentication will also fail.
Go API uses conventional API Error to indicate the success or failure of an API request.
Status Codes | Description |
---|---|
200 - OK | Everything worked as expected. |
400 - Bad Request | The request was unacceptable, often due to missing a required parameter. |
401 - Unauthorized | No valid API key provided. |
402 - Request Failed | The parameters were valid but the request failed. |
404 - Not Found | The requested resource doesn't exist. |
429 - Too Many Requests | Too many requests hit the API too quickly. We recommend an exponential backoff of your requests. |
500, 502, 503, 504 - Server Errors | Something went wrong on GoGovSG's API end. |
{
"message": "Unauthorized"
}
For all of GoGovSG's APIs, GoGovSG allows up to 100 requests per second (Subject to change).
Environment | Endpoint |
---|---|
Production | |
Staging |
GET /v1/urls?...
Request Query Parameters:
Parameter | Type | Default value | Required? |
---|---|---|---|
limit | number | 1000 | No, optional |
offset | number | 0 | No, optional |
searchText | string | nil | No, optional |
state | enum (”ACTIVE”, “INACTIVE”) | nil | No, optional |
orderBy | enum (”createdAt”, “clicks”) | createdAt | No, optional |
sortDirection | enum (”desc”, “asc”) | desc | No, optional |
isFile | boolean | nil | No, optional |
Note: Max values for
limit
= 1000Returns:
{
"urls": [
{
"shortUrl": "197abc",
"longUrl": "https://link.com",
"state": "ACTIVE",
"clicks": 0,
"createdAt": "2022-09-19T03:31:00.131Z",
"updatedAt": "2022-09-19T03:31:00.131Z"
}
],
"count": 1
}
Explanation of fields returned:
Field Returned | What it means | Example |
---|---|---|
shortUrl | Short link name | agsubmit
(ie. full URL will look like https://go.gov.sg/agsubmit) |
longUrl | Original link | https://google.com |
state | Whether short link is active or inactive | "ACTIVE" or "INACTIVE" |
clicks | Number of clicks on the short link since creation | 888 |
count | Counts the total number of links matching search filters (except limit and offset ) | 8 |
POST /v1/urls
Request body:
Property | Type | Required? |
---|---|---|
longUrl | string | Yes, required |
shortUrl | string | No, optional |
longUrl
has to start with https://- If no
shortUrl
is provided, then a random 8 character alphanumeric shortUrl name will be generated for the link.
Returns:
{
"shortUrl": "197abc",
"longUrl": "https://link.com",
"state": "ACTIVE",
"clicks": 0,
"createdAt": "2022-09-19T03:31:00.131Z",
"updatedAt": "2022-09-19T03:31:00.131Z"
}
{
"message": "Short link \\"asd\\" is already used.",
"type": "ShortUrlError"
}
PATCH /v1/urls/{shortUrl}
Note: Indicate
shortUrl
name you wish to update in above PATCH request, ie. {shortUrl}Request body:
Property | Type | Required? |
---|---|---|
longUrl | string | No, optional |
state | enum (”ACTIVE”, “INACTIVE”) | No, optional |
longUrl
has to start with https://
Returns:
{
"shortUrl": "197abc",
"longUrl": "https://link.com",
"state": "ACTIVE",
"clicks": 0,
"createdAt": "2022-09-19T03:31:00.131Z",
"updatedAt": "2022-09-19T03:31:00.131Z"
}
Last modified 4mo ago