AVANÇADO

Docs

A API

A Kilo é API-first: o painel em que você entra é um cliente da mesma API HTTP que você pode chamar. Qualquer coisa que você faça clicando - criar um link, ler suas estatísticas, adicionar uma regra de roteamento - é uma requisição com uma chave. Esta página cobre a URL base, como se autenticar, os dois escopos, o formato de erro e os limites de taxa.

URL base

A API é servida pelo mesmo Cloudflare Worker que resolve seus links, na origem da Kilo QR. Hoje isso significa que as requisições vão para qr2r.com sob o prefixo /api:

Base URL
https://qr2r.com/api

Cada caminho nestes guias é relativo a essa base - /links significa https://qr2r.com/api/links. Uma forma rápida de confirmar que uma chave funciona é a raiz da API, que devolve a sua identidade:

GET /api
{ "api": "qr2r", "version": 0, "user": { "uid": 42, "email": "", "admin": false } }

Um nome de host estável está a caminho

A API compartilha a origem em que seus links resolvem porque esse Worker é a plataforma. Um nome de host dedicado api.qr2r.com está sendo preparado para a janela de lançamento; até ele entrar no ar, aponte os clientes para a mesma origem acima. Os caminhos e os payloads não mudam quando o nome de host muda.

Autentique-se com uma chave de API

Envie sua chave como token bearer no cabeçalho Authorization. A chave é verificada antes do cookie de sessão, então um cliente de API fica em um único modo de autenticação sem um cookie de navegador velho se infiltrar.

Authorization header
Authorization: Bearer qr2r_live_1a2b3c…

As chaves começam com qr2r_live_ (ou qr2r_test_ para uma chave em modo de desenvolvimento). Esse prefixo qr2r_ é um identificador de infraestrutura que deliberadamente não foi renomeado - a mesma razão pela qual o domínio ainda é qr2r.com. Você gera uma chave no painel, em API keys; o token completo é mostrado uma única vez na criação, e a Kilo armazena apenas o hash SHA-256, então coloque-o direto em um gerenciador de segredos. Uma requisição sem chave válida (e sem sessão) é recusada:

401 Unauthorized
{ "error": "unauthorized" }

As chaves são geradas de forma interativa

Criar, listar e revogar chaves é uma ação apenas de sessão - uma chave bearer não pode gerar nem revogar outra chave, então um token vazado não pode em silêncio provisionar uma frota própria. Gerencie as chaves pelo painel. Uma conta pode ter até 10 chaves ativas por vez.

O acesso à API é um recurso de plano pago. Uma chave em um plano sem ele é recusada com 402 e { "error": "plan_required", "feature": "api_access" }.

Escopos: leitura e escrita

Uma chave carrega um ou ambos de dois escopos. Uma chave de leitura só pode chamar métodos seguros - GET, HEAD, OPTIONS. Uma chave de escrita tem permitido ainda POST, PUT, PATCH e DELETE. Uma tentativa de escrita com uma chave de somente leitura é recusada:

403 Forbidden
{ "error": "insufficient_scope", "required": "write" }

Os escopos são toda a história de permissões de uma chave: uma chave pode gerenciar links, regras e ler análise, mas nunca pode gerenciar membros, cobrança ou outras chaves - essas ações ficam ligadas a uma sessão interativa. Dê a uma integração uma chave de leitura quando tudo o que ela faz é puxar números.

Os erros são sempre JSON

Cada resposta de erro é um objeto JSON com uma string error, mais campos extras onde ajudam. As falhas de validação carregam a lista completa de problemas sob issues:

400 Bad Request
{ "error": "invalid_body", "issues": [ /* zod issues */ ] }

Os códigos que você mais encontrará:

  • 400 invalid_body - o corpo da requisição falhou na validação.
  • 401 unauthorized - chave ausente ou inválida.
  • 402 plan_required - o recurso precisa de um plano superior (carrega feature).
  • 403 insufficient_scope / forbidden - a chave não pode executar este método ou ação.
  • 404 not_found - não existe tal link, regra ou domínio no seu espaço de trabalho.
  • 409 - um conflito, como name_taken ou cap_reached.
  • 422 destination_unsafe - o destino falhou na verificação de segurança.
  • 429 rate_limited - requisições demais (veja abaixo).

Limites de taxa

As requisições autenticadas têm limite de taxa. O balde geral permite 60 requisições por minuto por usuário. Além disso, uma chave de API ganha seu próprio teto por chave e por minuto, tirado do limite api_rpm do seu plano. Ultrapasse qualquer um e a resposta é:

429 Too Many Requests
{ "error": "rate_limited", "retry_after": 42 }

O valor retry_after (enviado também como cabeçalho Retry-After) é o número de segundos até a janela se reiniciar. Aguarde esse tempo e tente de novo.

Honestos sobre o limitador atual

Hoje o limitador roda em cada localidade de borda da Cloudflare de forma independente, então os números por minuto são um piso mais do que um contrato global rígido; um limitador durável e entre localidades chega junto com o plano pago. Construa seu cliente para respeitar 429 e Retry-After e ele continuará funcionando sem mudanças quando essa chave for acionada.

Com uma chave em mãos, o próximo guia percorre os endpoints de links uma chamada por vez.

Gerenciar suas chaves de API
PróximoLinks pela APICrie, leia, atualize e aposente links por HTTP, com exemplos de curl para cada chamada.Ler o guia