Skip to content

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

Quickstart

  1. 1

    Sign in and open Dashboard › Developers. Create a key and copy it: it is shown only once.

  2. 2

    Copy the example request shown there: it already contains your workspace id.

  3. 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
  }
}
UNAUTHENTICATED

401: the key is missing, malformed or revoked.

FORBIDDEN

403: API keys are not accepted on this endpoint.

WORKSPACE_FORBIDDEN

403: the key belongs to a different workspace, or its creator left the workspace.

PLAN_FEATURE_LOCKED

403: the workspace's plan does not include API access or the requested feature (for example custom flows or passwords).

VALIDATION_FAILED

400: the body or query is invalid; details.issues lists each field.

LINK_NOT_FOUND

404: no link with this id in the workspace.

SLUG_TAKEN

409: the custom slug is already used.

SLUG_RESERVED

409: the custom slug is reserved.

DESTINATION_BLOCKED

422: the destination host is not allowed.

LINK_LIMIT_REACHED

403: the plan's monthly link limit is used up.

RATE_LIMITED

429: too many requests for this key or IP; retry later.