Short links your code and agents can drive
getlinks.si is API-first. Your scripts and AI agents can create, update, list and measure short links over a small JSON API, and an OpenAPI 3.1 document plus an llms.txt summary let agents find their own way.
API access is on every plan, including Free. Calls count against the same limits as the dashboard.
Get an API key- openapi.json
- llms.txt
- Base URL
https://api-staging.getlinks.si/v1
Quickstart
- 1
Sign in and open Dashboard › Developers. Create a key and copy it: it is shown only once.
- 2
Copy the example request shown there: it already contains your workspace id.
- 3
Send it with your key in the Authorization header, as below.
curl -X POST https://api-staging.getlinks.si/v1/workspaces/cmv4workspace01/links \
-H "Authorization: Bearer $GETLINKS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"destination":"https://getviral.staging.lishugupta.in/write-hooks-first-three-seconds","slug":"my-article","title":"My article"}'Authentication
Authorization: Bearer gl_xxxxxxxx…Keys start with "gl_" and belong to one workspace; use that workspace's id in the path.
The full key is shown once when it is created. Only its first characters are stored in clear.
Keys work only on the endpoints listed below. Every other endpoint answers 403.
Owners and admins can revoke a key at any time in Dashboard → Developers; it stops working immediately.
Rate limits
Each API key can make 120 requests per 60 seconds. Over that, the API answers 429 RATE_LIMITED.
- 120 / 60s
Every client IP also has a budget of 240 requests per 60 seconds.
- 240 / 60s
Your plan's limits (for example links per month) apply to API calls exactly as in the dashboard.
Endpoints
All paths are under /v1. Request and response bodies are JSON.
Errors
Every error uses the same envelope. Branch on code; message is for humans and may change.
{
"error": {
"code": "SLUG_TAKEN",
"message": "Slug already in use",
"requestId": "01M5RJF0CMD5JPTA7F9R3X8W1Z",
"retryable": false
}
}UNAUTHENTICATED401: the key is missing, malformed or revoked.
FORBIDDEN403: API keys are not accepted on this endpoint.
WORKSPACE_FORBIDDEN403: the key belongs to a different workspace, or its creator left the workspace.
PLAN_FEATURE_LOCKED403: the workspace's plan does not include API access or the requested feature (for example custom flows or passwords).
VALIDATION_FAILED400: the body or query is invalid; details.issues lists each field.
LINK_NOT_FOUND404: no link with this id in the workspace.
SLUG_TAKEN409: the custom slug is already used.
SLUG_RESERVED409: the custom slug is reserved.
DESTINATION_BLOCKED422: the destination host is not allowed.
LINK_LIMIT_REACHED403: the plan's monthly link limit is used up.
RATE_LIMITED429: too many requests for this key or IP; retry later.