# QRKit API - [Introduction](https://docs.useqrkit.com/introduction.md): Generate, customize, and manage QR codes with the QRKit API - [Quickstart](https://docs.useqrkit.com/quickstart.md): Create your first QR code in 5 minutes - [Authentication](https://docs.useqrkit.com/authentication.md): API key management, Bearer tokens, and scopes - [Errors](https://docs.useqrkit.com/errors.md): Error response format and error codes reference - [Rate Limiting](https://docs.useqrkit.com/rate-limiting.md): Rate limits by plan, response headers, and handling 429 errors - [Pagination](https://docs.useqrkit.com/pagination.md): Cursor-based pagination for list endpoints - [Webhooks](https://docs.useqrkit.com/webhooks.md): Receive signed event notifications when things happen in your workspace - [API Reference](https://docs.useqrkit.com/api-reference/overview.md): Complete reference for the QRKit API - [Create QR Code](https://docs.useqrkit.com/api-reference/qr-codes/create.md): Creates a QR code, renders its image (SVG, stored on QRKit's CDN) and returns the full object. Requires the `qr:write` scope. - [List QR Codes](https://docs.useqrkit.com/api-reference/qr-codes/list.md): Lists dynamic and static QR codes in the workspace (newest first by default), with cursor pagination. Requires the `qr:read` scope. - [Retrieve QR Code](https://docs.useqrkit.com/api-reference/qr-codes/retrieve.md): Retrieve one QR code by id. - [Update QR Code](https://docs.useqrkit.com/api-reference/qr-codes/update.md): Updates a QR code. Requires the `qr:write` scope. - [Delete QR Code](https://docs.useqrkit.com/api-reference/qr-codes/delete.md): Soft-deletes the QR code — it disappears from the dashboard and API immediately. Requires the `qr:write` scope. - [Download QR Image](https://docs.useqrkit.com/api-reference/qr-codes/download.md): Regenerates the QR image at the requested size and format from the stored design. Requires the `qr:read` scope. - [QR Code Analytics](https://docs.useqrkit.com/api-reference/qr-codes/analytics.md): Scan analytics for a dynamic QR code: totals, daily series and top breakdowns. Requires the `analytics:read` scope. Static codes have no scan tracking and return `422`. - [Create Batch](https://docs.useqrkit.com/api-reference/batches/create.md): Creates up to 1,000 QR codes asynchronously. Returns `202` immediately; poll `GET /batches/{id}` for progress. Available on Plus, Pro, Ultra and Agency plans. Requires the `qr:write` scope. - [List Batches](https://docs.useqrkit.com/api-reference/batches/list.md) - [Get Batch](https://docs.useqrkit.com/api-reference/batches/retrieve.md): Batch status with item-level results. Poll until `status` is `completed`. - [Download Batch](https://docs.useqrkit.com/api-reference/batches/download.md): ZIP archive of all completed QR images in the batch. Returns `422` while the batch is still processing. - [Create Folder](https://docs.useqrkit.com/api-reference/folders/create.md) - [List Folders](https://docs.useqrkit.com/api-reference/folders/list.md) - [Update Folder](https://docs.useqrkit.com/api-reference/folders/update.md) - [Delete Folder](https://docs.useqrkit.com/api-reference/folders/delete.md): Deletes the folder. The QR codes inside are kept — they just leave the folder. - [Create API Key](https://docs.useqrkit.com/api-reference/tokens/create.md): Creates an API key. Authenticated with a **Clerk session token** (dashboard sign-in), not an API key — most users should create keys from the [dashboard](https://useqrkit.com/dashboard/api-keys) instead. The full key is returned **once**; only its prefix is retrievable later. Available on every plan… - [List API Keys](https://docs.useqrkit.com/api-reference/tokens/list.md): Lists the workspace's active API keys (prefixes only). Clerk session auth. - [Revoke API Key](https://docs.useqrkit.com/api-reference/tokens/revoke.md): Immediately and permanently invalidates the key. Clerk session auth. - [Rotate API Key](https://docs.useqrkit.com/api-reference/tokens/rotate.md): Revokes the old key and returns a new one with identical name, scopes, environment and expiry. Clerk session auth. - [Retrieve Account](https://docs.useqrkit.com/api-reference/account/retrieve-account.md): Identifies the workspace behind the API key. Requires no scope — any valid key works. Integrations use this as the connection test and to build a human-readable connection label. - [List QR Codes](https://docs.useqrkit.com/api-reference/qr-codes/list-qr-codes.md): Lists dynamic and static QR codes in the workspace (newest first by default), with cursor pagination. Requires the `qr:read` scope. - [Create QR Code](https://docs.useqrkit.com/api-reference/qr-codes/create-qr-code.md): Creates a QR code, renders its image (SVG, stored on QRKit's CDN) and returns the full object. Requires the `qr:write` scope. - [Retrieve QR Code](https://docs.useqrkit.com/api-reference/qr-codes/retrieve-qr-code.md): Retrieve one QR code by id. - [Delete QR Code](https://docs.useqrkit.com/api-reference/qr-codes/delete-qr-code.md): Soft-deletes the QR code — it disappears from the dashboard and API immediately. Requires the `qr:write` scope. - [Update QR Code](https://docs.useqrkit.com/api-reference/qr-codes/update-qr-code.md): Updates a QR code. Requires the `qr:write` scope. - [Download QR Image](https://docs.useqrkit.com/api-reference/qr-codes/download-qr-image.md): Regenerates the QR image at the requested size and format from the stored design. Requires the `qr:read` scope. - [GS1 Linkset](https://docs.useqrkit.com/api-reference/qr-codes/gs1-linkset.md): The RFC 9264 linkset for a dynamic GS1 Digital Link code: every link the resolver would serve for this identifier, with one anchor per lot/serial override. Requires the `qr:read` scope. - [QR Code Analytics](https://docs.useqrkit.com/api-reference/qr-codes/qr-code-analytics.md): Scan analytics for a dynamic QR code: totals, daily series and top breakdowns. Requires the `analytics:read` scope. Static codes have no scan tracking and return `422`. - [List Batches](https://docs.useqrkit.com/api-reference/batches/list-batches.md) - [Create Batch](https://docs.useqrkit.com/api-reference/batches/create-batch.md): Creates up to 1,000 QR codes asynchronously. Returns `202` immediately; poll `GET /batches/{id}` for progress. Available on Plus, Pro, Ultra and Agency plans. Requires the `qr:write` scope. - [Get Batch](https://docs.useqrkit.com/api-reference/batches/get-batch.md): Batch status with item-level results. Poll until `status` is `completed`. - [Download Batch as ZIP](https://docs.useqrkit.com/api-reference/batches/download-batch-as-zip.md): ZIP archive of all completed QR images in the batch. Returns `422` while the batch is still processing. - [List Folders](https://docs.useqrkit.com/api-reference/folders/list-folders.md) - [Create Folder](https://docs.useqrkit.com/api-reference/folders/create-folder.md) - [Delete Folder](https://docs.useqrkit.com/api-reference/folders/delete-folder.md): Deletes the folder. The QR codes inside are kept — they just leave the folder. - [Update Folder](https://docs.useqrkit.com/api-reference/folders/update-folder.md) - [List API Keys](https://docs.useqrkit.com/api-reference/tokens/list-api-keys.md): Lists the workspace's active API keys (prefixes only). Clerk session auth. - [Create API Key](https://docs.useqrkit.com/api-reference/tokens/create-api-key.md): Creates an API key. Authenticated with a **Clerk session token** (dashboard sign-in), not an API key — most users should create keys from the [dashboard](https://useqrkit.com/dashboard/api-keys) instead. The full key is returned **once**; only its prefix is retrievable later. Available on every plan… - [Revoke API Key](https://docs.useqrkit.com/api-reference/tokens/revoke-api-key.md): Immediately and permanently invalidates the key. Clerk session auth. - [Rotate API Key](https://docs.useqrkit.com/api-reference/tokens/rotate-api-key.md): Revokes the old key and returns a new one with identical name, scopes, environment and expiry. Clerk session auth. - [List Webhook Endpoints](https://docs.useqrkit.com/api-reference/webhooks/list-webhook-endpoints.md): Returns all webhook endpoints for the workspace, across all sources. The `secret` field is masked. Requires the `webhooks:read` scope. - [Create Webhook Endpoint](https://docs.useqrkit.com/api-reference/webhooks/create-webhook-endpoint.md): Registers a new webhook endpoint. The signing secret (`secret`) is returned **only on this response** and on `rotate-secret` — store it securely. Requires the `webhooks:write` scope. Endpoint caps are counted per `source`: 10 for `api` (the default), 50 for each integration source. - [Retrieve Webhook Endpoint](https://docs.useqrkit.com/api-reference/webhooks/retrieve-webhook-endpoint.md): Returns a single webhook endpoint. The `secret` field is masked. Requires the `webhooks:read` scope. - [Delete Webhook Endpoint](https://docs.useqrkit.com/api-reference/webhooks/delete-webhook-endpoint.md): Permanently deletes the endpoint and stops all pending deliveries. Requires the `webhooks:write` scope. - [Update Webhook Endpoint](https://docs.useqrkit.com/api-reference/webhooks/update-webhook-endpoint.md): Updates one or more fields of a webhook endpoint. All fields are optional — supply only the ones you want to change. Set `status` to `enabled` to re-enable an endpoint that was manually or automatically disabled (resets the consecutive failure count). Requires the `webhooks:write` scope. - [Rotate Webhook Secret](https://docs.useqrkit.com/api-reference/webhooks/rotate-webhook-secret.md): Generates a new signing secret for the endpoint and returns it (full value, shown once). The previous secret remains valid as a second `v1=` signature entry for 24 hours to allow zero-downtime rotation. Requires the `webhooks:write` scope. - [Send Test Webhook](https://docs.useqrkit.com/api-reference/webhooks/send-test-webhook.md): Sends a `ping` event to this endpoint synchronously through the real signing and delivery pipeline, and returns the resulting `WebhookDelivery` plus a `succeeded` boolean. The endpoint must have `status: enabled`. Requires the `webhooks:write` scope. - [List Webhook Deliveries](https://docs.useqrkit.com/api-reference/webhooks/list-webhook-deliveries.md): Returns the delivery log for an endpoint (newest first). Requires the `webhooks:read` scope. - [List Events](https://docs.useqrkit.com/api-reference/events/list-events.md): Returns the workspace event archive (newest first), with cursor pagination. Events are retained for 30 days. Requires the `webhooks:read` scope. - [Retrieve Event](https://docs.useqrkit.com/api-reference/events/retrieve-event.md): Returns a single event by id. Events are retained for 30 days. Requires the `webhooks:read` scope. ## OpenAPI Specs - [openapi](/openapi.yaml)