A QR code API for managed campaign assets

Create assets, change destinations and read reports without bypassing workspace permissions or plan limits.

Get your API token
View as Markdown
requests.post(
  'https://qrcodetransfer.com/api/v1/workspaces/ID/assets',
  headers={'Authorization': 'Bearer YOUR_KEY'},
  json=data,
  timeout=10
)
QR code example

DOCIntroduction

Build your workflow around workspace-owned QR codes, short links, pages, forms and GS1 links. The API applies the same ownership checks, input validation and quotas as the user center. Start with one test asset before automating a batch.

Base URL

https://qrcodetransfer.com/api/v1/

Workspace data stays private. Every request is checked against the workspace and the permissions of its user or API key.

AUTHAuthentication

Create an API key in the user center when your plan includes API access. Keep it on your server. Each key belongs to one workspace and has read or write scopes.

Authorization: Bearer YOUR_API_KEY

QRQR codes

Dynamic QR codes keep their printed address when you update the destination. Static QR codes encode the original content directly and cannot have their destination changed.

POST /api/v1/workspaces/WORKSPACE_ID/assets

{
  "kind": "QRCODE",
  "name": "Spring campaign",
  "payload": {
    "type": "LINK",
    "url": "https://example.com/campaign",
    "dynamic": true
  }
}

PDFPDF codes

Upload a PDF to your workspace first, then create a QR code with its file identifier. Uploading a new file leaves the previous version available until you update the asset. Unpublished files require an authenticated workspace download.

POST /api/v1/workspaces/WORKSPACE_ID/files
Content-Type: multipart/form-data

POST /api/v1/workspaces/WORKSPACE_ID/assets
{ "kind": "QRCODE", "name": "Product guide",
  "payload": { "type": "PDF", "fileId": 123, "dynamic": true } }

PAGELanding pages

Pages start as drafts. Add a title and links, then publish. Editing a draft does not change the public version until you publish again.

POST /api/v1/workspaces/WORKSPACE_ID/assets
{ "kind": "PAGE", "name": "Our links", "payload": {
  "title": "Our links",
  "links": [{ "label": "Website", "url": "https://example.com" }]
} }

POST /api/v1/workspaces/WORKSPACE_ID/assets/ASSET_ID/actions/publish

FORMForms

Forms store published field definitions alongside each response. Submit answers using field identifiers. An idempotency key makes a repeated submission return the original result. Closing a form keeps its page available and stops new responses.

POST /api/public/forms/FORM_SLUG/submissions
{ "answers": { "email": "[email protected]" },
  "idempotencyKey": "submission-unique-id" }

GS1GS1 Digital Link

Product codes include an application identifier in their URI. Validate your identifier before printing. The product identity stays fixed while you change the destination. Test the final code with your retail and packaging workflow.

POST /api/v1/workspaces/WORKSPACE_ID/assets
{ "kind": "GS1", "name": "Product", "payload": {
  "identifierType": "01", "identifierValue": "09506000134369",
  "destinationUrl": "https://example.com/product"
} }

BULKBulk generation

Preview each row before creating a batch. Invalid URLs and reserved paths appear in the preview. Use the same Idempotency-Key when retrying the same batch, so successful records are not created twice.

POST /api/v1/workspaces/WORKSPACE_ID/bulk/preview
POST /api/v1/workspaces/WORKSPACE_ID/bulk/execute
Idempotency-Key: unique-batch-id

{ "kind": "SHORTLINK", "rows": [
  { "name": "Launch", "url": "https://example.com/launch" }
] }

HOOKWebhooks

Workspace owners can manage webhook endpoints when their plan includes this feature. Delivery must be enabled and configured before events are sent. Delivery records show the actual result; a saved endpoint alone does not mean a notification has been sent.

HTTPErrors and state

Errors contain code and message, with field errors when applicable. 401 requires a valid session or credential; 403 denies a permission or feature; 409 reports a state, version, path, quota, or idempotency conflict; 422 reports invalid input; 503 reports an unavailable service. Paused or blocked public codes return 410.

MCPMCP integration

Connect an HTTP MCP client with the same workspace API key. This stateless endpoint supports JSON responses and five tools: list assets, get an asset, create an asset, update an asset and analytics. Write tools require write scope. Individual hosted clients and direct client sign-in are still being checked.

POST /api/mcp
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{ "jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {} }
Help