qr-cow API & MCP
Create QR codes, manage dynamic destinations, and pull scan analytics from any programming language. Plug-and-play with Claude Desktop, Claude Code, Cursor, and Zed via MCP.
Get a token
qrc_live_… value — copy it once; we only store the hash.Make a call
Or wire MCP
Try it
Pick an endpoint and a language. The token in the snippets is a placeholder — paste your own from the dashboard.
Create a QR code
POST /qrcodes — every content type the studio supports (URL, Wi-Fi, vCard, …).
curl https://qr-cow.com/api/v1/qrcodes \
-H "Authorization: Bearer qrc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Café menu",
"type": "static",
"content_type": "url",
"content": "https://my-cafe.com/menu"
}'Endpoint reference
Everything in /api/v1 — same shape across languages.
| Method | Path | What it does |
|---|---|---|
| GET | /auth/me | Authenticated user + plan |
| POST | /qrcodes | Create a static or dynamic QR |
| GET | /qrcodes | List your QR codes (paginated) |
| GET | /qrcodes/{id} | Get one QR's full details |
| PATCH | /qrcodes/{id} | Update name / dynamic destination |
| DELETE | /qrcodes/{id} | Soft-delete a QR |
| GET | /analytics/qrcodes/{id} | Scans, geo, device, hour-of-day |
| GET | /dev/tokens | List API tokens |
| POST | /dev/tokens | Create a token (returns plaintext ONCE) |
| DELETE | /dev/tokens/{id} | Revoke a token |
MCP — Model Context Protocol
MCP is an open protocol Anthropic published for connecting AI clients to external tools. Once wired up, your assistant can say things like "make a QR code for my new menu" or "show me which countries scanned my café QR last week" and call qr-cow directly.
Claude Desktop / Claude Code
{
"mcpServers": {
"qr-cow": {
"command": "uvx",
"args": ["qr-cow-mcp"],
"env": { "QRCOW_API_TOKEN": "qrc_live_..." }
}
}
}Cursor / Zed / others
Same shape — the editor's MCP config uses command, args, and an env block. The MCP server is a stdio process — anything that speaks MCP can use it.
Tools exposed by the server
| Tool | What it does |
|---|---|
| create_qrcode | Create a static or dynamic QR (URL, Wi-Fi, vCard, …). |
| list_qrcodes | List recent QR codes in the user's account. |
| get_qrcode | Fetch one QR's current design + destination. |
| update_qrcode_destination | Change a dynamic QR's destination — printed code keeps working. |
| delete_qrcode | Soft-delete a code. |
| get_qrcode_analytics | Scans + breakdown by country, device, hour. |
| me | The signed-in user's profile + plan. |
Authentication
Send Authorization: Bearer qrc_live_… on every request. Tokens are universal — they work against every endpoint a session JWT does. Revoked tokens are rejected immediately.
Errors
All responses follow {success, data, error}. HTTP status codes match RFC 7231; theerror field carries a short machine-readable code (e.g. token_limit_reached).
Rate limits & security
Reads
600 / minute
Per user, GETs only.
Writes
60 / minute
POST / PATCH / DELETE.
Token cap
20 / user
Active tokens. Revoke to make room.
We only store the SHA-256 of each token. Revoke immediately if a token leaks; a new one takes seconds to provision in the dashboard.
Ready to build?
Provision your first token and ship a "make a QR code from this URL" integration in under 5 minutes.
Open the dashboard
