Skip to content

API documentation

Create, edit and track your QR codes programmatically. The REST API is included on Business; the OpenAPI 3.1 specification is public.

Updated September 24, 2026

Authentication

Every request carries an API key in the Authorization: Bearer qrt_live_... header. Create keys in Settings, API, with read-only or read and write scope. qrt_test_ keys create real codes outside your quota, visible only with a test key.

Rate limits

60 requests per minute and 50,000 per month per account. X-RateLimit-* headers show your usage; beyond the limits the API returns 429.

Base URL

https://qrtada.com/api/public/v1

Endpoints

Public API v1 endpoints
MethodPath
GET/codes
POST/codes
POST/codes/bulk
GET/codes/{id}
PATCH/codes/{id}
DELETE/codes/{id}
GET/codes/{id}/image
GET/codes/{id}/stats
GET/folders
POST/folders
GET/account/usage

Examples

GET /codes : list codes

cURL

curl -X GET "https://qrtada.com/api/public/v1/codes?limit=30" \
  -H "Authorization: Bearer $QRTADA_API_KEY"

JavaScript

const res = await fetch("https://qrtada.com/api/public/v1/codes?limit=30", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.QRTADA_API_KEY}`,
  },
});
const { data } = await res.json();

Python

import os, requests

res = requests.get(
    "https://qrtada.com/api/public/v1/codes?limit=30",
    headers={"Authorization": f"Bearer {os.environ['QRTADA_API_KEY']}"},
)
data = res.json()["data"]

POST /codes : create a code

cURL

curl -X POST "https://qrtada.com/api/public/v1/codes" \
  -H "Authorization: Bearer $QRTADA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Menu du midi","kind":"dynamic","type":"url","content":{"url":"https://chezpaul.fr/menu"}}'

JavaScript

const res = await fetch("https://qrtada.com/api/public/v1/codes", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.QRTADA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"name":"Menu du midi","kind":"dynamic","type":"url","content":{"url":"https://chezpaul.fr/menu"}}),
});
const { data } = await res.json();

Python

import os, requests

res = requests.post(
    "https://qrtada.com/api/public/v1/codes",
    headers={"Authorization": f"Bearer {os.environ['QRTADA_API_KEY']}"},
    json={"name":"Menu du midi","kind":"dynamic","type":"url","content":{"url":"https://chezpaul.fr/menu"}},
)
data = res.json()["data"]

Download the OpenAPI specification

Ready to print a QR code that never dies?

7 days for $0, card required, a reminder 2 days before the first charge, cancel in 2 clicks.