Skip to main content
POST
/
qr-codes
curl --request POST \
  --url https://api.useqrkit.com/v1/qr-codes \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "Summer campaign",
  "target": {
    "type": "url",
    "destination": "https://example.com/landing",
    "utm": {
      "source": "print",
      "medium": "qr",
      "campaign": "summer"
    }
  }
}
'
{
  "id": "qr_123",
  "object": "qr_code",
  "name": "<string>",
  "short_code": "AB3D5",
  "short_url": "https://scan.useqrkit.com/AB3D5",
  "target": {
    "type": "<string>",
    "destination": "<string>"
  },
  "design": {
    "colors": {
      "foreground": "<string>",
      "background": "<string>"
    },
    "gradient": {
      "start": "<string>",
      "end": "<string>",
      "type": "<string>"
    },
    "shapes": {
      "body": "<string>",
      "eye_frame": "<string>",
      "eye_ball": "<string>"
    },
    "eye_colors": {
      "frame": "<string>",
      "ball": "<string>"
    },
    "has_logo": true,
    "transparent_background": true
  },
  "folder_id": "fld_12",
  "tags": [
    "<string>"
  ],
  "image_url": "https://img.useqrkit.com/qr-AB3D5-1717000000000.svg",
  "download_url": "/v1/qr-codes/qr_123/download",
  "is_active": true,
  "scan_count": 123,
  "utm": {
    "source": "<string>",
    "medium": "<string>",
    "campaign": "<string>",
    "term": "<string>",
    "content": "<string>"
  },
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z"
}

Authorizations

Authorization
string
header
required

API key in the Authorization header: Bearer qr_live_… or Bearer qr_test_…. Token endpoints take a Clerk session JWT instead.

Body

application/json
target
object
required

What the QR code points to. Each type takes structured fields, or a pre-encoded destination string if you prefer to encode yourself.

name
string

Defaults to "Campaign {code}" / "Static {code}".

Maximum string length: 255
type
enum<string>

Only meaningful for url targets — wifi/email/sms/text/event are always static, vcard always dynamic. Omit to use the type's default.

Available options:
dynamic,
static
design
object

Visual customization. Stored with the code, so the dashboard shows exactly what the API created.

folder_id
string

Folder to place the code in (e.g. fld_12).

tags
string[]
Maximum array length: 10
Maximum string length: 50

Response

QR code created

id
string

qr_… for dynamic, sqr_… for static.

Example:

"qr_123"

object
string
Example:

"qr_code"

kind
enum<string>
Available options:
dynamic,
static
name
string
type
enum<string>
Available options:
url,
text,
email,
sms,
wifi,
event,
vcard
short_code
string
Example:

"AB3D5"

short_url
string | null

null for static codes.

Example:

"https://scan.useqrkit.com/AB3D5"

target
object
design
object
folder_id
string | null
Example:

"fld_12"

tags
string[]
image_url
string
Example:

"https://img.useqrkit.com/qr-AB3D5-1717000000000.svg"

download_url
string
Example:

"/v1/qr-codes/qr_123/download"

is_active
boolean
scan_count
integer | null

null for static codes (no tracking).

utm
object

UTM parameters (null unless set on a dynamic url code).

created_at
string<date-time>
updated_at
string<date-time>