Un piano con l'API
L'accesso all'API è incluso nei piani indicati nella pagina della funzionalità. Serve anche un account con l'email confermata.
Tutto quello che serve per creare e gestire i QR dal tuo software: autenticazione, esempi pronti da copiare e limiti. Il riferimento completo di ogni endpoint è nella documentazione interattiva.
L'accesso all'API è incluso nei piani indicati nella pagina della funzionalità. Serve anche un account con l'email confermata.
In Impostazioni → API dai un nome alla chiave e copiala subito: la mostriamo una sola volta, poi ne conserviamo solo un'impronta.
Manda la chiave nell'intestazione Authorization di ogni richiesta. Le risposte sono JSON, tranne le immagini.
Ogni richiesta a /api/v1/qrcodes porta la chiave come token Bearer. La chiave inizia con ogqr_ seguita da 64 caratteri esadecimali; i token di sessione del sito non sono accettati.
Authorization: Bearer $QRCODENOW_API_KEY
https://qrcodenow.ai/api/v1.429 con Retry-After: 60.401.Un QR dinamico punta al nostro indirizzo di reindirizzamento: la destinazione si può cambiare dopo la stampa. Per un link basta il tipo 2 con target_url.
curl -X POST https://qrcodenow.ai/api/v1/qrcodes \
-H "Authorization: Bearer $QRCODENOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"idtype": 2, "title": "Volantino autunno", "target_url": "https://example.com/autunno"}'
Risposta 201 (abbreviata)
{
"success": 1,
"data": {
"id": 128,
"code": "k3x9q2m7ab",
"idtype": 2,
"is_dynamic": 1,
"is_paused": 0,
"title": "Volantino autunno",
"target_url": "https://example.com/autunno",
"qr_image_url": "https://…/i/k3x9q2m7ab.png",
"scan_count": 0,
"my_role": "owner"
}
}
Conserva id per le chiamate successive e code per l'immagine. Il QR occupa un posto nella quota del piano come uno creato dalla dashboard: a quota piena la risposta è 403 con code: plan_qr_limit.
I tipi che codificano il contenuto nel QR stesso (vCard, WiFi, email…) leggono i campi da qr_payload, senza target_url:
{
"idtype": 4,
"title": "Biglietto da visita",
"qr_payload": {
"firstname": "Giulia",
"lastname": "Bianchi",
"phone": "+39 333 1234567",
"email": "giulia@example.com"
}
}
La lista è paginata: p è la pagina (da 1), c gli elementi per pagina (massimo 100), srt il campo di ordinamento (date_create, date_update, title, scan_count), o il verso (ASC o DESC) e s una ricerca su titolo e codice.
curl "https://qrcodenow.ai/api/v1/qrcodes?p=1&c=50&srt=scan_count&o=DESC" \
-H "Authorization: Bearer $QRCODENOW_API_KEY"
La risposta contiene rows, total (tutti i risultati), count (quelli in questa pagina) e page. Il dettaglio di un singolo QR è GET /api/v1/qrcodes/{id}.
Con PATCH cambi title e target_url. Il codice stampato non cambia: chi lo scansiona arriva subito alla nuova destinazione. Serve almeno il ruolo editor sul QR.
curl -X PATCH https://qrcodenow.ai/api/v1/qrcodes/128 \
-H "Authorization: Bearer $QRCODENOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"target_url": "https://example.com/inverno"}'
Ogni QR ha un'immagine pubblica in qr_image_url, in PNG; cambiando l'estensione in .svg ottieni il vettoriale per la stampa. Non serve la chiave. Aggiungi ?download=1 per scaricarla come file.
curl -o qr.svg "https://…/i/k3x9q2m7ab.svg?download=1"
Per codificare un testo senza salvarlo nell'account usa POST /api/v1/qrcodes/static: risponde direttamente con il PNG e non occupa quota. Il testo può essere lungo fino a 1273 byte.
curl -X POST https://qrcodenow.ai/api/v1/qrcodes/static \
-H "Authorization: Bearer $QRCODENOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Testo da codificare"}' \
-o static-qr.png
Solo il proprietario può eliminare un QR. La risposta è 204 senza corpo; da quel momento il codice stampato non reindirizza più.
curl -X DELETE https://qrcodenow.ai/api/v1/qrcodes/128 \
-H "Authorization: Bearer $QRCODENOW_API_KEY"
I tipi dinamici richiedono target_url. Gli altri sono diretti: il contenuto è dentro il QR e si passa in qr_payload.
idtype |
Tipo | Modalità | Campi |
|---|---|---|---|
1 |
App store (iOS, Android, desktop) | Dinamico | target_url, url_ios, url_android, url_desktop |
2 |
Link a un sito | Dinamico | target_url |
3 |
Menu digitale | Dinamico | target_url |
4 |
Biglietto da visita (vCard) | Diretto | firstname, lastname, phone, email, company, role, address, website |
5 |
Profilo social | Dinamico | target_url |
6 |
Rete WiFi | Diretto | ssid, password, encryption (WPA | WEP | NOPASS), hidden |
7 |
Email precompilata | Diretto | email_to, email_subject, email_body |
8 |
SMS precompilato | Diretto | sms_phone, sms_message |
9 |
Chat WhatsApp | Diretto | wa_phone, wa_message |
10 |
Chiamata | Diretto | phone_number |
11 |
Testo | Diretto | text |
12 |
Documento online (PDF) | Dinamico | target_url |
13 |
Evento in calendario | Diretto | event_title, event_location, event_start, event_end, event_description |
14 |
Posizione sulla mappa | Diretto | geo_lat, geo_lng |
Date degli eventi nel formato 2026-10-20T18:00. Le combinazioni di campi obbligatori sono verificate alla creazione: in caso di errore la risposta 422 dice quale campo manca.
Gli errori applicativi usano il formato qui sotto: error è un messaggio e code un identificatore. La validazione risponde 400 con error, message ed eventuali errors per campo; il 401 può non avere code e il 429 non ha corpo: leggi lo stato HTTP e Retry-After.
{ "success": 0, "error": "…", "code": "plan_qr_limit" }
400 |
Corpo JSON non valido o campi che non rispettano lo schema: consulta message ed errors. |
|---|---|
401 |
Chiave API mancante, non valida o revocata. |
403 |
Il QR non è condiviso con te, il tuo ruolo non basta o la quota del piano è piena. |
404 |
QR inesistente o eliminato. |
409 |
Conflitto: per esempio un membro già presente o l'ultimo proprietario di un QR. |
422 |
Contenuto rifiutato: campo mancante, URL non valido, tipo non supportato. |
429 |
Troppe richieste: riprova dopo i secondi indicati in Retry-After. |