---
title: "Create a QR code"
method: POST
path: "/qrcodes"
tags: ["QR Codes"]
---

# Create a QR code

`POST /qrcodes`

## Request

- Base URL: `https://getdynamicqr.com/api/v1`
- URL: `https://getdynamicqr.com/api/v1/qrcodes`
- Auth: API key in header `X-Client-ID` and HTTP bearer

Supports all 14 QR types. URL-based types (url, video, social, app, pdf, coupon, menu)
use `destination_url`. Content types (wifi, vcard, email, sms, phone, text, whatsapp)
pass their fields inside `qr_meta` as a key-value object.

qr_meta fields per type:
  whatsapp: { phone, message }
  wifi:     { ssid, password, encryption (WPA|WEP|nopass) }
  vcard:    { name, phone, email, organization, title, website, address }
  email:    { to, subject, body }
  sms:      { phone, message }
  phone:    { phone }
  text:     { content }

## Request body

- object
  - `name` string, required: Label for the QR code.
  - `qr_type` string: One of: url, whatsapp, wifi, vcard, email, sms, phone, text, video, social, app, pdf, coupon, menu. Default: url.
  - `destination_url` string: Required for url/video/social/app/pdf/coupon/menu types.
  - `qr_meta` object: Type-specific fields (see below).
  - `color_foreground` string: Hex colour for QR dots.
  - `color_background` string: Hex background colour.
  - `frame_text` string: Label text below QR frame.
  - `expires_at` string: ISO-8601 expiry datetime.
  - `expired_url` string: Fallback URL after expiry.
  - `design_preset` string: A QR Studio look to create the code already wearing. Requires the qr_studio plan flag.
  - `design` object: QR Studio fields, applied over design_preset (or over the studio defaults on their own). Requires the qr_studio plan flag.
  - `slug` string: A memorable short link, e.g. `summer-menu`, in place of the uuid. Needs the custom_slug plan feature; sent without it, it is ignored rather than refused.
  - `dot_style` string: Module shape: square, rounded (default), dots, classy, classy_rounded, extra_rounded.
  - `frame_style` string: Frame around the code: none, simple (default), rounded, bold, banner, label_top.
  - `show_type_icon` boolean: Draw the type's icon in the middle. Default: true. Ignored when the code carries a logo.

## Response `201`

Created

## Other responses

- `401`: No credentials, or credentials that are not valid.
- `403`: The account is inactive, or the plan does not carry this feature.
- `422`: Validation failed
- `429`: Rate limit exceeded. See `Retry-After`.

---

[API](https://skmtc.dev/getdynamicqr/apis/d-qr-rest-api.md) · [All operations](https://skmtc.dev/getdynamicqr/apis/d-qr-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getdynamicqr/apis/d-qr-rest-api/revisions/4467aeca30ce?raw)
