Documentação da API

QR Codes

Crie, personalize, atualize e baixe QR Codes com as mesmas opções visuais do editor.

Use Authorization: Bearer SUA_CHAVE em todas as chamadas. Obtenha ou renove a chave em Minha conta → API. Exige API ativa no plano, assinatura válida e permissão para o tipo de QR Code. A renovação invalida a chave anterior. Nunca exponha a chave no navegador de visitantes.

Limite: 60 requisições por minuto por chave. Confira X-RateLimit-Limit, X-RateLimit-Remaining e Retry-After em respostas 429. A criação respeita a quantidade de QR Codes do plano.

Envie application/json, application/x-www-form-urlencoded ou multipart/form-data. Use POST com multipart para arquivos; PATCH aceita JSON. Campos omitidos na edição preservam os valores anteriores. Use false/0 para desativar opções, none para remover logo/fundo e null para desvincular projeto/link.

id e uuid retornam o UUID público. Use UUID nas rotas e em project_id/link_id. Identificadores numéricos antigos ainda são aceitos nas rotas de QR Codes, apenas para compatibilidade. Um recurso de outra conta retorna 404.

OpenAPI JSON

Operações

GET /api/qr-codes Listar: page ≥ 1 e results_per_page de 1 a 100 (padrão 25).
GET /api/qr-codes/options Consultar tipos, estilos, olhos, molduras, fontes, logos, padrões e limites atuais.
POST /api/qr-codes Criar: name, type e os campos obrigatórios do tipo.
GET /api/qr-codes/{uuid} Consultar o QR Code e suas configurações.
POST / PATCH /api/qr-codes/{uuid} Editar conteúdo, personalização, nome, projeto ou substituir o PDF.
DELETE /api/qr-codes/{uuid} Excluir o QR Code e seus arquivos.
GET /api/qr-codes/{uuid}/download Baixar: ?format=svg|png|jpg|webp. Padrão: svg. A imagem usa o tamanho salvo; JPG recebe fundo branco quando necessário.
GET /api/qr-codes/{uuid}/readability Avaliar legibilidade: nota 0–100, cor, leitura confirmada e mensagem. É uma estimativa de qualidade, não uma probabilidade de leitura.

Conteúdo por tipo

Textos: até 2048 caracteres. vCard exige pelo menos um campo preenchido. Listas de vCard: até 20 itens, até 1024 caracteres cada; vcard_social_label e vcard_social_value precisam ter o mesmo tamanho. Datas de evento: YYYY-MM-DDTHH:mm, com fuso IANA em event_timezone. Para QR dinâmico de URL, informe link_id com o UUID de um link da conta; seu endereço será usado automaticamente.

typeObrigatóriosOpcionais
texto text
url url
pdf pdf_file
telefone phone
sms sms sms_body
email email email_subject, email_body
whatsapp whatsapp whatsapp_body
facetime facetime
localizacao location_latitude, location_longitude
wifi wifi_ssid wifi_password, wifi_encryption, wifi_is_hidden
evento event, event_start_datetime event_location, event_url, event_note, event_end_datetime, event_timezone
criptomoeda crypto_address crypto_coin, crypto_amount
vcard vcard_birthday, vcard_city, vcard_company, vcard_country, vcard_email, vcard_first_name, vcard_job_title, vcard_last_name, vcard_note, vcard_phone_numbers, vcard_region, vcard_social_label, vcard_social_value, vcard_street, vcard_url, vcard_zip
paypal paypal_email, paypal_title, paypal_currency paypal_type, paypal_price, paypal_thank_you_url, paypal_cancel_url
pix-estatico chave_pix, nome_beneficiario, cidade_beneficiario valor_pix, descricao_pix

Integrações antigas: text, phone, location, event e crypto continuam aceitos como aliases dos tipos atuais. style, inner_eye_style e outer_eye_style correspondem a pattern, marker_in e marker_out; square vira default e round vira rounded. Use os nomes atuais em novas integrações.

Personalização comum a todos os tipos

Cores usam #RRGGBB. Transparência: 0 = opaco, 100 = transparente. custom_eyes_color ativa cores dos olhos; different_eyes_color ativa cores diferentes por posição. harmonize_background depende de use_image_background. remove_margin remove a margem somente sem moldura. Use size de 200 a 800, em passos de 100. A aparência não garante leitura: valide o resultado em celulares antes de imprimir.

ParâmetrosPadrãoValores e limites
background_color "#FFFFFF" string
background_color_transparency 0 0 … 100
bg_image "none" string
custom_eyes_color false true / false (1 / 0)
different_eyes_color false true / false (1 / 0)
ecc "M" L, M, Q, H
eyes_inner_bottom_left_color "#000000" string
eyes_inner_color "#000000" string
eyes_inner_top_right_color "#000000" string
eyes_outer_bottom_left_color "#000000" string
eyes_outer_color "#000000" string
eyes_outer_top_right_color "#000000" string
foreground_color "#000000" string
foreground_gradient_one "#000000" string
foreground_gradient_style "vertical" vertical, horizontal, diagonal, inverse_diagonal, radial
foreground_gradient_two "#FFFFFF" string
foreground_type "color" color, gradient
frame "none" Ver opções com prévia
frame_color "#000000" string
frame_text "" string
frame_text_color "#FFFFFF" string
frame_text_font "Organo.svg" Ver opções com prévia
frame_text_size 100 10 … 100
harmonize_background false true / false (1 / 0)
logo "none" string
margin 2 0 … 25
marker_in "default" Ver opções com prévia
marker_out "default" Ver opções com prévia
pattern "default" Ver opções com prévia
qr_code_logo_size 100 30 … 100
remove_margin false true / false (1 / 0)
size 500 200 … 800
use_image_background false true / false (1 / 0)

wifi_encryption: nopass, WEP, WPA/WPA2

crypto_coin: bitcoin, ethereum, elrond

paypal_type: buy_now, add_to_cart, donation

Catálogo visual

Compare as opções e use o identificador exibido abaixo da prévia no campo correspondente da API.

Imagens e PDF

Para logo próprio, envie qr_code_logo como arquivo ou logo como data URI base64. Para fundo, envie bg_image como arquivo ou data URI e use use_image_background=true. Aceitos: PNG, JPEG, GIF, WebP e SVG sanitizado, até 500.000 bytes por imagem; imagens raster até 4096 × 4096 px. URLs remotas e caminhos arbitrários não são aceitos. Para logo pronto, use um nome retornado por GET /api/qr-codes/options em logo.

PDF: envie pdf_file via multipart, até 104.857.600 bytes (100 MB). Exige a permissão exclusiva de PDF. O documento fica público pelo endereço com UUID. Na edição, reenviar pdf_file troca o documento mantendo o endereço. Não envie url para escolher o endereço de um PDF.

Exemplos prontos

cURL — JSON

curl -X POST "https://gerarqrcode.online/api/qr-codes" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Campanha","type":"url","url":"https://example.com","pattern":"rounded","marker_out":"rounded","foreground_color":"#223322","size":800,"ecc":"H"}'

cURL — PDF + logo

curl -X POST "https://gerarqrcode.online/api/qr-codes" \
  -H "Authorization: Bearer $API_TOKEN" \
  -F "name=Catalogo" -F "type=pdf" \
  -F "pdf_file=@catalogo.pdf;type=application/pdf" \
  -F "qr_code_logo=@logo.png;type=image/png" \
  -F "qr_code_logo_size=60" -F "ecc=H"

cURL — PATCH

curl -X PATCH "https://gerarqrcode.online/api/qr-codes/UUID" \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Novo nome","foreground_color":"#112233","remove_margin":true}'

cURL — PNG

curl "https://gerarqrcode.online/api/qr-codes/UUID/download?format=png" \
  -H "Authorization: Bearer $API_TOKEN" --output qr-code.png

GET /api/qr-codes/{uuid}/readability

Avaliar legibilidade: nota 0–100, cor, leitura confirmada e mensagem. É uma estimativa de qualidade, não uma probabilidade de leitura.

{
    "data": {
        "score": 100,
        "scale": 100,
        "color": "hsl(120, 70%, 38%)",
        "confirmed": true,
        "message": "Leitura confirmada.",
        "passes": 5,
        "recovered": false,
        "contrast": 21,
        "marginQuality": 1
    }
}

JavaScript — Node.js

const response = await fetch("https://gerarqrcode.online/api/qr-codes", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_TOKEN}`, "Content-Type": "application/json" },
  body: JSON.stringify({ name: "Contato", type: "vcard", vcard_first_name: "Ana", vcard_phone_numbers: ["+5511999999999"] })
});
const result = await response.json();
if (!response.ok) throw new Error(JSON.stringify(result.errors));
console.log(result.data.uuid);

Resposta de criação/edição

{
    "data": {
        "id": "019a0000-0000-7000-8000-000000000001",
        "uuid": "019a0000-0000-7000-8000-000000000001",
        "name": "Campanha",
        "type": "url",
        "project_id": null,
        "link_id": null,
        "qr_code": "https://gerarqrcode.online/uploads/qr_codes/example.svg",
        "qr_code_logo": null,
        "settings": {
            "url": "https://example.com",
            "size": 800,
            "ecc": "H"
        },
        "url": "https://example.com",
        "pdf_name": null,
        "pdf_size": null,
        "download": "https://gerarqrcode.online/api/qr-codes/019a0000-0000-7000-8000-000000000001/download",
        "datetime": "2026-10-17 12:00:00",
        "last_datetime": "2026-10-17 12:00:00"
    }
}

Erros

400 JSON inválido; 401 chave ausente/inválida ou sem acesso à API; 403 permissão, assinatura ou limite do plano; 404 recurso inexistente/de outra conta; 405 método; 413 requisição acima do limite; 415 formato de requisição; 422 campo/arquivo inválido; 429 limite de requisições; 500 falha ao salvar/exportar; 503 API desligada. Erros usam {"errors":[{"title":"...","status":422}]}.