Create a QR code
curl --request POST \
--url https://management.scanova.io/qr/ \
--header 'Authorization: <api-key>'import requests
url = "https://management.scanova.io/qr/"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://management.scanova.io/qr/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://management.scanova.io/qr/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://management.scanova.io/qr/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://management.scanova.io/qr/")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://management.scanova.io/qr/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_bodyQR Code Management
Create QR Code
Creates a new dynamic QR Code with the specified category and content. Authentication required — include your API key in the Authorization header.
POST
/
qr
/
Create a QR code
curl --request POST \
--url https://management.scanova.io/qr/ \
--header 'Authorization: <api-key>'import requests
url = "https://management.scanova.io/qr/"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://management.scanova.io/qr/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://management.scanova.io/qr/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://management.scanova.io/qr/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://management.scanova.io/qr/")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://management.scanova.io/qr/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_bodyTry it dropdowns: The category dropdown shows IDs (1, 9, 10, …). qr_type shows
dy / st. Use the tables below to match values to labels.Request Body — Fields
Required fields| Field | Type | Description |
|---|---|---|
category | integer | QR Code category ID. See Category List. Try it dropdown shows IDs; see Category dropdown reference below for labels. |
info | string | JSON string containing QR Code component data (see Components Reference). |
name | string | Human-readable name for the QR Code. |
qr_type | string | QR type: dy = Dynamic (editable after creation), st = Static (fixed content). Try it dropdown shows dy / st. |
Category dropdown reference (Try it)
| Value | Label |
|---|---|
1 | Website URL |
9 | Custom Page |
10 | App Store |
11 | Google Map |
13 | Document |
14 | Wedding |
15 | Social Media |
16 | Audio |
17 | Coupon |
18 | Product |
19 | Image |
20 | Event |
23 | App Deep Link |
24 | Business Card |
25 | Restaurant |
26 | Feedback |
27 | Real Estate |
28 | Link Page |
31 | GS1 |
44 | Restaurant |
qr_type dropdown reference (Try it)
| Value | Label |
|---|---|
dy | Dynamic (editable after creation) |
st | Static (fixed content) |
Note: Advanced features (custom domains, geo-fencing, lead capture, expiry) may require specific plan quotas or entitlements.
| Field | Type | Description |
|---|---|---|
pattern_info | object or string | (Optional) Design customization (pattern, colors, eyes, frame, errorCorrection). See Pattern Info Reference. Some clients require this serialized as a JSON string. |
custom_domain | integer | Custom domain ID (advanced plan feature). |
expire_on | string (date-time) | Expiration timestamp (requires plan quota). |
expire_on_text | string (HTML) | HTML content to show when QR is expired. |
expire_on_timezone | string | Timezone for expiry (e.g., Asia/Kolkata). |
high_accuracy_confirmation | boolean | High-accuracy confirmation for location QR codes. |
high_accuracy_geo_fencing | boolean | Enable geo-fencing (requires plan quota). |
high_accuracy_geo_fencing_config | object | Geo-fencing config (displayText, fallback, mapLocation, range, unit, redirectUrl). |
high_accuracy_mode | boolean | Request location access behavior toggle. |
high_accuracy_mode_text | string | Text shown when requesting location permission. |
lead_list | integer | Lead list ID to capture leads. |
minimum_age | integer | Minimum age required to access content. |
password | string | Password to protect QR Code content. |
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. management.scanova.io) — the same key sent to the regular API host will not authenticate.
Response
201
QR code created
Was this page helpful?
⌘I