API

API pública.

REST simples, chave no header, rate limit generoso. Crie links programaticamente via CI/CD, bot de WhatsApp, webhook — qualquer coisa que fale HTTP.

01Autenticação

Todas as requests precisam incluir uma API Key no header Authorization. API Keys estão disponíveis exclusivamente no plano Business.

Gere sua key em Dashboard → API.

Authorization: Bearer lks_sua_api_key_aqui

02Base URL

https://greedy-bat-366.convex.site

03Criar link

POST/api/v1/links

Request body

{
  "url": "https://example.com/minha-pagina-muito-longa",
  "title": "Minha Página"  // opcional
}

Response (201)

{
  "data": {
    "id": "k97f9ja122...",
    "shortCode": "kPOYCu",
    "shortUrl": "https://linkshort.com.br/kPOYCu",
    "originalUrl": "https://example.com/minha-pagina-muito-longa"
  }
}

Exemplos

cURL
curl -X POST https://greedy-bat-366.convex.site/api/v1/links \
  -H "Authorization: Bearer lks_sua_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'
JavaScript
const res = await fetch("https://greedy-bat-366.convex.site/api/v1/links", {
  method: "POST",
  headers: {
    "Authorization": "Bearer lks_sua_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ url: "https://example.com" }),
});
const data = await res.json();
Python
import requests

res = requests.post(
    "https://greedy-bat-366.convex.site/api/v1/links",
    headers={"Authorization": "Bearer lks_sua_key"},
    json={"url": "https://example.com"},
)
data = res.json()

04Listar links

GET/api/v1/links

Query params

ParamDefaultDescrição
limit20Quantidade de itens por página (1–100)
offset0Quantos itens pular (paginação)

Response (200)

{
  "data": [
    {
      "id": "k97f9ja122...",
      "shortCode": "kPOYCu",
      "shortUrl": "https://linkshort.com.br/kPOYCu",
      "originalUrl": "https://example.com",
      "clicks": 42,
      "createdAt": 1712620800000
    }
  ],
  "meta": { "total": 42, "limit": 20, "offset": 0 }
}

05Detalhes do link

GET/api/v1/links/{linkId}

Retorna detalhes completos do link incluindo estatísticas básicas (top 5 países, dispositivos e navegadores).

Response (200)

{
  "data": {
    "id": "k97f9ja122...",
    "shortCode": "kPOYCu",
    "shortUrl": "https://linkshort.com.br/kPOYCu",
    "originalUrl": "https://example.com",
    "title": "Minha Página",
    "clicks": 42,
    "isActive": true,
    "createdAt": 1712620800000,
    "stats": {
      "totalClicks": 42,
      "topCountries": [{ "key": "BR", "count": 30 }],
      "topDevices":   [{ "key": "mobile", "count": 25 }],
      "topBrowsers":  [{ "key": "Chrome", "count": 28 }]
    }
  }
}

06Desativar link

DELETE/api/v1/links/{linkId}

Soft delete — marca o link como inativo. Redirecionamentos passam a retornar 410 Gone. Os dados ficam preservados pra histórico.

Response (200)

{ "data": { "ok": true } }

07Rate limiting

Limite de 100 requests por minuto por API Key.

HeaderValorDescrição
X-RateLimit-Limit100Limite máximo na janela
X-RateLimit-RemainingRequests restantes na janela atual
X-RateLimit-ResetUnix timestamp do reset da janela

08Erros

StatusCódigoDescrição
400MISSING_URLCampo url ausente no body
401UNAUTHORIZEDAPI key ausente ou inválida
403FORBIDDENPlano não permite acesso à API
404NOT_FOUNDLink não encontrado
429RATE_LIMITEDLimite de requests excedido

Formato do erro

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Missing or invalid API key"
  }
}

Quer começar agora?

API Keys saem em segundos pelo dashboard do plano Business.

Criar minha API Key