curl -X POST "https://api.scanova.io/qr/Qa1b2c3d4e5f6g7h8/ai/" \
-H "Authorization: 401f7ac837da42b97f613d789819ff93537bee6a" \
-H "Content-Type: application/json" \
-d '{
"prompt": "cyberpunk city skyline at night",
"negative_prompt": "blurry, low quality"
}'
{
"results": [
{ "id": 501, "provider": "quickqr", "status": "generating", "selected": false },
{ "id": 502, "provider": "qrcode_ai", "status": "generating", "selected": false }
]
}
QR Codes
List and generate AI QR Code variants
GET, POST /qr//ai/
GET
/
qr
/
{qrid}
/
ai
/
curl -X POST "https://api.scanova.io/qr/Qa1b2c3d4e5f6g7h8/ai/" \
-H "Authorization: 401f7ac837da42b97f613d789819ff93537bee6a" \
-H "Content-Type: application/json" \
-d '{
"prompt": "cyberpunk city skyline at night",
"negative_prompt": "blurry, low quality"
}'
{
"results": [
{ "id": 501, "provider": "quickqr", "status": "generating", "selected": false },
{ "id": 502, "provider": "qrcode_ai", "status": "generating", "selected": false }
]
}
Lists and generates AI artwork variants for one Dynamic QR Code.
Generating consumes the
Every other field —
GET https://api.scanova.io/qr/{qrid}/ai/
POST https://api.scanova.io/qr/{qrid}/ai/
Authorization: 401f7ac837da42b97f613d789819ff93537bee6a
string
required
The QR Code’s
qrid. Must be a Dynamic (dy) QR Code — a static one returns 400.AI_QR_CODE quota.
Generate (POST)
string
required
The image prompt, max 200 characters.
string
What to avoid, max 50 characters.
weight, qr_code_pattern, preset, provider, status, selected, is_scannable, qr_image_url, qr_image, created — is read-only.
curl -X POST "https://api.scanova.io/qr/Qa1b2c3d4e5f6g7h8/ai/" \
-H "Authorization: 401f7ac837da42b97f613d789819ff93537bee6a" \
-H "Content-Type: application/json" \
-d '{
"prompt": "cyberpunk city skyline at night",
"negative_prompt": "blurry, low quality"
}'
{
"results": [
{ "id": 501, "provider": "quickqr", "status": "generating", "selected": false },
{ "id": 502, "provider": "qrcode_ai", "status": "generating", "selected": false }
]
}
One
POST creates one record per configured AI provider, so the response is a {"results": [...]} list, not a single object. Don’t write client code that expects a single created resource — and remember each of those records counts against your generation quota.Generation is asynchronous.
status moves new → generating → generated (or failed). The default GET returns only generated variants, so poll in-flight records explicitly with ?ids=501,502 until they leave generating.Related
- Retrieve and select an AI variant — read one record and mark it as the chosen design.
- Create a QR Code —
ai_session_idlinks a new QR Code to an AI Assistant session. - Update a QR Code’s design — the non-AI design path.
- QR Manager overview — the quotas, role permissions, and Trash model shared by every endpoint in this module.
- Management API overview — the auth scheme and quota rules that apply to this endpoint.
Authorizations
Send your Management API key as the raw value of the Authorization header — no "Bearer " or "Token " prefix, and no other characters. Example: Authorization: 401f7ac837da42b97f613d789819ff93537bee6a. A header containing more than one space-separated part is rejected outright. Requests also require the request's Host header to be the management API host (e.g. api.scanova.io) — the same key sent to the regular API host will not authenticate.
Path Parameters
The QR code's qrid — the opaque public identifier returned by the list endpoint, not the numeric id.
Query Parameters
Comma-separated AI-record ids. Returns those records regardless of status, instead of the default generated-only listing.
Response
AI variants for this QR code.
Was this page helpful?