Make My QR Code - API v1

Create, bulk-import and re-point QR codes programmatically.

B2B API

Authentication

Every request needs a token in the Authorization header. Bearer is the standard form; the legacy Token prefix is still accepted.

# preferred
Authorization: Bearer YOUR_API_TOKEN

# also accepted
Authorization: Token YOUR_API_TOKEN

Get your token with GET /api/v1/token/ (authenticated with your normal account credentials), or from the API tab in your dashboard. Rotating it with POST /api/v1/token/ invalidates the previous key immediately.

Quickstart

BASE=https://app.makemyqrcode.com/api/v1
TOKEN=YOUR_API_TOKEN

# 1. check plan, quota and usage
curl -s -H "Authorization: Bearer $TOKEN" $BASE/

# 2. create one QR code
curl -s -X POST "$BASE/qrcodes/" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Table 1","category":"website","value":"https://example.com/menu"}'

# 3. re-point it after printing (dynamic codes only)
curl -s -X PATCH "$BASE/qrcodes/42/" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"value":"https://example.com/new-menu"}'

Endpoints

MethodPathPurpose
GET/api/v1/Plan, quota, usage and endpoint discovery
GET/api/v1/token/Read your token
POST/api/v1/token/Rotate your token
GET/api/v1/qrcodes/List your QR codes
POST/api/v1/qrcodes/Create one QR code
GET/api/v1/qrcodes/{id}/Retrieve one
PATCH/api/v1/qrcodes/{id}/Change the destination after printing
DELETE/api/v1/qrcodes/{id}/Delete one
POST/api/v1/bulk/Create up to 5,000 codes from JSON or CSV

Create a QR code

POST /api/v1/qrcodes/
Content-Type: application/json

{
  "name": "Menu - Table 1",
  "category": "website",
  "value": "https://example.com/menu",
  "type": "qr"
}

category defaults to website, type to qr. Optional: is_dynamic, is_protected, is_lead_capture, settings. The response includes id, short_slug and short_url.

Change the destination after printing

PATCH /api/v1/qrcodes/{id}/
Content-Type: application/json

{ "value": "https://example.com/new-destination" }

The printed code never changes - only where it points. This works for dynamic codes; a static code stores its data inside the pattern and cannot be re-pointed.

Bulk create

JSON

POST /api/v1/bulk/
Content-Type: application/json

{
  "codes": [
    { "name": "Table 1", "category": "website", "value": "https://example.com/1" },
    { "name": "Table 2", "category": "website", "value": "https://example.com/2" }
  ]
}

CSV

POST /api/v1/bulk/
Content-Type: multipart/form-data

file=@codes.csv
name,value,category
Table 1,https://example.com/1,website
Table 2,https://example.com/2,website
All-or-nothing. If any row fails validation the entire batch is rolled back and nothing is created. The response names the offending row and field:
{
  "error": "Bulk creation failed. No codes were created.",
  "created": 0,
  "failed": 1,
  "rows": [{ "row": 2, "error": { "value": ["This field may not be blank."] } }]
}

Quotas and rate limits

PlanPriceAPI calls / monthQR codesBulk per upload
BasicRs 99-50-
ProRs 2995,000250100
BusinessRs 79925,0001,000500
EnterpriseRs 2,499100,00020,0001,000

Every successful call returns the remaining allowance:

X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4987
X-RateLimit-Rate: 120/min
X-Quota-Period: 2026-10

Exceeding the per-minute rate returns 429 with a Retry-After header. Exceeding the monthly quota returns 429 until the first day of the next month.

Errors

StatusMeaning
401Missing or invalid token
403Plan does not include API / bulk creation, or bulk_limit exceeded
402Subscription inactive, or QR code limit reached
400Validation failed (see rows for bulk)
429Rate limit or monthly quota exceeded

Notes