Links

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 Token & API Key Generation

Bearer authentication (also called token authentication) is an HTTP authentication scheme that involves security tokens called bearer tokens. ForSG 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 ForSG's API.
Keep the bearer token safe: You should not share the bearer token with anyone. Use services like 1Password to store it.

Authentication

ForSG's API uses APIKey for authentication. User can view and manage API Keys in ForSG's 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://for.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.

Errors

ForSG's 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 ForSG's API end.
{
"message": "Unauthorized"
}

Rate Limits

For all of ForSG APIs, ForSG allows up to 100 requests per second (Subject to change).

Endpoints

Environment
Endpoint
Production
Staging

Get Urls

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 = 1000
Returns:
{
"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
nuh-appt (ie. full URL will look like https://for.sg/nuh-appt)
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

Create Url

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"
}

Update Url

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"
}