Developer API

CraftMyQR API documentation

Business workspaces can create dynamic QR codes with API keys and receive creation events through webhooks. All production requests use the CraftMyQR API host shown below.

Base URL: https://craftmyqr.comBearer API KeyDynamic QRWebhookCustom Domain

Quick start

The v1 API creates managed dynamic QR codes. Use the Dashboard manager to edit, pause, review analytics or delete a code.

BASEhttps://craftmyqr.com
1Use a Business workspace and open API & integrations from the Dashboard.
2Create an API key and copy the secret when it is shown. The full key is displayed only once.
3Send a POST request to the endpoint with your destination URL.

Authentication

Create an API key in API & integrations. The complete secret is shown once; afterward the service stores only a hash, prefix and last four characters.

Authorization: Bearer YOUR_API_KEYOpen API & integrations

Create a dynamic QR code

This endpoint creates a managed QR code with an editable destination and scan analytics, then returns its CraftMyQR short link.

POSThttps://craftmyqr.com/api/v1/qr-codes

Request body

{ "title": "Menu", "targetUrl": "https://your-site.com/menu", "folder": "Stores", "tags": ["menu", "print"], "expiresAt": null, "scanLimit": 10000 }
targetUrlRequired HTTP or HTTPS destination. Replace the sample with the page your QR code should open.
titleOptional display name, up to 80 characters.
folderOptional organization label, up to 40 characters.
tagsOptional array containing up to eight tags.
expiresAtOptional ISO 8601 date-time, or null for no expiration.
scanLimitOptional positive integer, or null for no scan limit.

cURL example

curl -X POST https://craftmyqr.com/api/v1/qr-codes \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{"title":"Menu","targetUrl":"https://your-site.com/menu","folder":"Stores","tags":["menu","print"],"scanLimit":10000}'

Response example

{ "ok": true, "code": { "id": "qr_xxxxxxxx", "slug": "AbC1234", "title": "Menu", "targetUrl": "https://your-site.com/menu", "folder": "Stores", "tags": ["menu", "print"], "expiresAt": null, "scanLimit": 10000, "isExpired": false, "scanLimitReached": false, "isActive": true, "createdAt": "2026-08-25T09:00:00.000Z", "updatedAt": "2026-08-25T09:00:00.000Z", "shortUrl": "https://craftmyqr.com/r/AbC1234", "scansCount": 0, "scansThisMonth": 0 } }

By default, shortUrl uses https://craftmyqr.com/r/.... If a custom short domain is configured and routed to CraftMyQR, the API returns that domain instead.

Webhook events

After you configure a webhook URL in API & integrations, creating a dynamic QR code sends a signed event. Webhook delivery runs after creation and does not delay the API response.

X-CraftMyQR-Event: dynamic_qr.created X-CraftMyQR-Signature: HMAC_SHA256_SIGNATURE

Event body example

{ "event": "dynamic_qr.created", "createdAt": "2026-08-25T09:00:00.000Z", "data": { "id": "qr_xxxxxxxx", "shortUrl": "https://craftmyqr.com/r/AbC1234" } }

The signature is the lowercase hexadecimal HMAC-SHA256 digest of the raw JSON body using your webhook secret.

Team roles

OwnerManages business settings, team members, API keys, webhooks, QR codes and file QR codes.
AdminManages business settings, team members, API keys, webhooks, QR codes and file QR codes.
EditorCan create, edit and delete dynamic QR codes and file QR codes, but cannot manage business settings.
ViewerHas read-only access to dynamic QR codes, file QR codes and analytics.

Error responses

400Invalid JSON, destination URL or field value.
401The API key is missing, invalid or revoked.
403The current plan does not include API access.
429The API key and client IP exceeded 120 requests per minute.