Skip to Content
APIReferência

Referência

Endpoint

GET https://app.qrcode.kadu.pro/api/v1/qr POST https://app.qrcode.kadu.pro/api/v1/qr

Autenticação: Authorization: Bearer gq_…

Parâmetros

ParâmetroTipoPadrãoDescrição
typestringurlUm dos doze tipos estáticos
datastring ou objetoO conteúdo (veja abaixo)
sizenúmero1000100 a 5000 px
formatsvg | jsonsvgFormato da resposta
designobjetopadrãoSó no POST

data

Aceita duas formas:

String — atalho para o campo principal do tipo.

{ "type": "url", "data": "kadu.pro" }

Objeto — os campos nomeados, para tipos com mais de um.

{ "type": "wifi", "data": { "ssid": "MinhaRede", "security": "WPA", "password": "senha123" } }

Os nomes dos campos são os mesmos descritos em Tipos de QR Code.

No GET, data é sempre string — a query string não carrega objeto. Para tipos de vários campos, use POST.

design

Só no POST. É mesclado sobre o design padrão, então você envia apenas o que quer mudar.

{ "type": "url", "data": "kadu.pro", "size": 1200, "design": { "dots": { "shape": "rounded", "color": "#582D1D", "roundness": 0.4, "scale": 1 }, "eyes": { "frameShape": "rounded", "ballShape": "circle", "frameColor": "#644a40" }, "background": { "color": "#ffffff" }, "frame": { "style": "label-bottom", "label": "Escaneie-me", "color": "#582D1D" }, "errorCorrection": "Q", "quietZone": 4 } }

Campos do design

CaminhoValores
dots.shapesquare, rounded, dots, classy, extra-rounded
dots.colorhexadecimal
dots.roundness0 a 1
dots.scale0.5 a 1
dots.gradient{ type, rotation, stops }
eyes.frameShapesquare, rounded, circle
eyes.ballShapesquare, circle
eyes.frameColor / eyes.ballColorhexadecimal; ausente herda
background.colorhexadecimal ou transparent
frame.stylenone, label-bottom, label-top
frame.label / frame.colortexto / hexadecimal
errorCorrectionM, Q, H
quietZonemódulos (padrão 4)

A API não avalia escaneabilidade. Ela obedece ao design que você mandar, inclusive um que o editor marcaria como Risco. Se você monta designs por código, garanta o contraste do seu lado — as faixas estão em O selo de escaneabilidade.

Respostas

format=svg (padrão)

Content-Type: image/svg+xml; charset=utf-8, com o SVG no corpo.

format=json

{ "payload": "https://kadu.pro", "svg": "<svg …>", "size": 1000 }

payload é o conteúdo final gravado no código — útil para conferir o que a normalização fez com a sua entrada (o https:// acrescentado, o telefone normalizado, o BR Code montado).

Headers

HeaderSignificado
X-RateLimit-LimitSeu teto por minuto
Cache-ControlSempre no-store

no-store é proposital: o conteúdo pode ser específico de um usuário, e respostas de QR não deveriam ficar em cache compartilhado. Se você precisa de cache, faça no seu lado, com a chave que fizer sentido para você.

Erros

HTTPerrorSignificadoO que fazer
401missing-keySem header AuthorizationEnvie Bearer gq_…
401invalid-keyChave inexistente ou revogadaGere outra em Minha conta
401key-expiredA chave passou da validadeCrie outra no console
429quota-exceededCota do dia ou do mês esgotadaVeja quota no corpo; espere ou suba de plano
429rate-limitedLimite por minuto estouradoEspere; veja limit_per_minute
400unknown-typeTipo inválidoVeja supported na resposta
400invalid-dataConteúdo não montaVeja detail
400blocked-urlURL recusada pela segurançaVeja detail e Link
400invalid-jsonCorpo do POST malformadoConfira o JSON

O corpo do erro é sempre JSON:

{ "error": "invalid-data", "detail": "Endereço inválido" }

Boas práticas

  • Guarde a chave em variável de ambiente, nunca no código versionado.
  • Chame do servidor. Chave em navegador é chave pública.
  • Faça cache do resultado quando o conteúdo se repete — o mesmo QR gerado mil vezes gasta mil chamadas à toa.
  • Trate o 429 com espera e nova tentativa, em vez de insistir em laço.
  • Prefira format=json quando quiser registrar o payload gerado.
  • Uma chave por integração. Assim revogar uma não derruba as outras.
Last updated on