Developer API (beta)

The QR Code Spot API

Create editable QR codes, change where they go, pause them and read their scans from your own software, a spreadsheet script or an automation tool. Included with the Pro and Scale plans.

What you can do

The API follows exactly the same rules as your dashboard: the same plan limits, the same unsafe-link check, and codes made through the API show up in My codes like any other.

Plans

ProScale
API access✓✓
API keys at a time520
Editable codes3001,000
Scan statsAll timeAll time

If your plan changes to one without the API, your keys stop answering until it's back on Pro and Scale. Nothing is deleted, and every printed code keeps working (our guarantee). See all plans.

Keys

Make a key on the API keys page (signed in). Give it a name, like "Zapier", and choose Read and change codes or Read only. The key is shown once: copy it then. We only keep a scrambled copy that can check it.

Send it with every request in the Authorization header:

curl https://qrcodespot.com/api/v1/me \
  -H "Authorization: Bearer qcs_live_YOUR_KEY"

Keep keys on servers and in tools like Zapier or Make, never in a web page or an app people download: anyone with a key can change your codes. The API doesn't answer browsers on other websites. If a key might have leaked, revoke it on the keys page and make a new one.

The code object

{
  "id": "k7m2xq",
  "label": "Spring menu",
  "destination": "https://example.com/menu",
  "short_url": "https://qrsx.net/k7m2xq",
  "folder": "Bella Cafe",
  "status": "active",
  "locked": false,
  "type": "link",
  "external_id": "crm-1042",
  "created_at": "2026-11-01T14:03:00Z",
  "updated_at": "2026-11-01T14:03:00Z"
}

Endpoints

Base address: https://qrcodespot.com/api/v1. Send and receive JSON.

RequestKey accessWhat it does
GET /meReadYour account, plan and usage. A good way to test a key.
GET /codesReadYour codes, newest first, a page at a time.
POST /codesChangeMake an editable code.
GET /codes/{id}ReadOne code.
PATCH /codes/{id}ChangeChange its destination, name or folder.
POST /codes/{id}/pauseChangePause it.
POST /codes/{id}/resumeChangeResume it.
DELETE /codes/{id}ChangeDelete it. Its short link is never given to anyone else.
GET /codes/{id}/statsReadIts scans.

Make a code

curl https://qrcodespot.com/api/v1/codes \
  -H "Authorization: Bearer qcs_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"destination": "https://example.com/menu", "label": "Spring menu", "folder": "Bella Cafe", "external_id": "crm-1042"}'

Answers 201 with the code object. Only destination is needed. Names are up to 60 characters and folders up to 40.

Retries are safe with external_id. Tools like Zapier retry when a request is slow. If a code with the same external_id already exists, you get that code back with 200 instead of a second one (or a 409 if its destination is different). Use any reference of yours up to 100 characters, like a row id.

List codes

curl "https://qrcodespot.com/api/v1/codes?limit=50" \
  -H "Authorization: Bearer qcs_live_YOUR_KEY"
{ "data": [ { "id": "k7m2xq", ... } ], "has_more": true, "next_cursor": "eyJ0Ijo..." }

Add cursor= with next_cursor for the next page. Filters: limit (1 to 100, default 50), folder, status (active, paused, disabled) and created_after (a time, like 2026-11-01T00:00:00Z, for "new code" checks).

Change where a code goes

curl -X PATCH https://qrcodespot.com/api/v1/codes/k7m2xq \
  -H "Authorization: Bearer qcs_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"destination": "https://example.com/summer-menu"}'

Send any of destination, label and folder (null clears a name or folder). The answer is the code object plus "counted_as_edit": only a new destination counts as a change, the same as in the dashboard, where changes from the API and the dashboard share one monthly allowance.

Scan stats

curl "https://qrcodespot.com/api/v1/codes/k7m2xq/stats?days=30" \
  -H "Authorization: Bearer qcs_live_YOUR_KEY"
{
  "id": "k7m2xq",
  "window_days": 30,
  "total": 1284,
  "daily": [ { "date": "2026-10-03", "scans": 41 } ],
  "by_method": { "qr": 1201, "button": 70, "hybrid": 13 },
  "devices": [ { "label": "iPhone", "scans": 702 } ],
  "countries": [ { "code": "US", "scans": 911 } ]
}

Leave out days for your plan's whole window (all time on Pro and Scale, with window_days as null), or ask for 1 to 90 days. The numbers match your dashboard; link-preview bots aren't counted. Stats are refreshed every 5 minutes.

Errors

Every error looks the same, with a type your code can check and a message for people:

{
  "error": {
    "type": "plan_limit",
    "message": "Your Pro plan includes 300 editable codes (links and service-request locations together). You have 300.",
    "upgrade_url": "https://qrcodespot.com/upgrade"
  }
}
StatustypeWhen
400invalid_requestThe JSON or a value isn't right
400invalid_destinationNot a web address, or it points to another QR Code Spot code
400unsafe_destinationThe link is flagged as unsafe (phishing or malware)
401invalid_keyThe key is missing, wrong or revoked
403insufficient_scopeA read-only key tried to change something
403plan_requiredThe account's plan doesn't include the API
403plan_limitAll the plan's editable codes are in use
403edit_limitThe month's destination changes are used up
403code_lockedThe plan no longer covers changing this code
404not_foundNo such code in this account, or no such endpoint
409service_code, code_disabledThis code can't be changed here
409idempotency_conflictThat external_id is on a code with another destination
429rate_limitedToo many requests: wait for Retry-After seconds
500server_errorOur fault: try again, and quote the X-Request-Id header if you email us

Limits

Need more? Email support@qrcodespot.com.

Zapier and Make

Ready-made Zapier and Make apps are on the way. Until then, both can call the API directly: use a "Webhooks" or "HTTP" step with your key in the Authorization header, and an external_id so retries never make extra codes.

Beta

The API is new. Version 1 won't change in ways that break your code; new fields may be added, so ignore ones you don't know. Tell us what you build, and what's missing: support@qrcodespot.com.

Questions

Is the API included in my plan?

It's included with Pro and Scale, at no extra cost. There's no charge per request.

Can I make the QR code image with the API?

Not yet. The API gives you each code's short link; put it in any QR code library, or download designed codes from your dashboard. The short link is all a printed code needs.

Do codes made with the API ever stop working?

No. They're ordinary editable codes, covered by the same guarantee: they keep working whatever your plan, with no scan limit.

Can I use the API for my clients?

Yes. Use folders and external_id to keep each client's codes apart. Every code stays in your account and counts towards your plan.

Start with a key

Make an API key on Pro and Scale, or see what each plan includes.