QR Code GenieWish it, scan it
HomePricingDocsDashboard
QR Code Genie

Create beautifully styled QR codes for any purpose — from Wi-Fi and contact cards to dynamic links, analytics, bulk generation, and API-powered campaigns.

QR Code Generators

Profile Business Card QR CodevCard QR CodePhoto Gallery QR CodeWi-Fi QR CodeMenu QR CodeFile QR CodeAudio QR CodeVideo QR CodeCrypto QR CodeSocial Media QR CodeSMS QR CodeLocation QR CodeEmail QR CodeText QR CodePhone QR CodeMeCard QR CodePet QR CodeEvent QR CodeApp QR Code

Product

  • QR Code Generator
  • Pricing
  • Dynamic Links
  • Bulk Generation
  • API Documentation

Company

  • About QR Code Genie
  • Contact Us

Legal

  • Privacy Policy
  • Terms of Service
© 2026 QR Code Genie. All rights reserved.
“QR Code” is a registered trademark of DENSO WAVE INCORPORATED.

API docs

OverviewAuthenticationQR GenerationDynamic LinksBulk GenerationWebhooksStyle Reference
OverviewAuthenticationQR GenerationDynamic LinksBulk GenerationWebhooksStyle Reference

API docs

Bulk Generation

Queue up to 100 QR codes in a single request. Batches process asynchronously — poll the status endpoint, then download a ZIP once it's ready.

POST/v1/qr/bulk

Enqueue a bulk generation batch

Schedules an async worker job to generate up to 100 QR codes in one request. Each item can override the global size/format/style, or inherit it.

Bulk limit is up to 1000 items per request depending on plan.

Example response · 200

{
  "task_id": "task_abc123xyz",
  "item_count": 2,
  "status": "queued",
  "message": "Batch processing job successfully scheduled."
}
Try it

Stored only in this browser's local storage — never sent anywhere but the API itself.

curl -X POST "https://api.qrcode-genie.com/v1/qr/bulk" \
  -H "X-QRGenie-Api-Key: <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"data":"https://user1.com","filename":"user1-promo-qr"},{"data":"https://user2.com","filename":"user2-promo-qr"}],"size":512,"file_format":"png","global_config":{"body_type":"body2","eye_frame":"frame3"}}'
POST/v1/qr/bulk/dynamic

Enqueue a bulk dynamic link batch

Creates a dynamic link and a matching QR code for each item in one job. Any global_* field sets a default for the whole batch; an item can override it individually by setting the same field on itself. Requires a plan with dynamic link access.

An item-level field always wins over the matching global_* field — e.g. an item with its own expires_at ignores global_expires_at entirely.

Bulk limit, webhooks limit, and dynamic-link plan limits all apply — this call is rejected if the batch would exceed your plan's bulk_max_items or the maximum webhooks allowed or its remaining dynamic link capacity.

A custom_domain used by any item (or set as global_custom_domain) must already be verified on your account before this call — see Custom domains under Dynamic Links.

Poll /v1/qr/bulk/status/{task_id}, then download from /v1/qr/bulk/download/{task_id} once ready — identical to the static bulk flow.

The downloaded ZIP includes a manifest.csv mapping each generated filename to its short_key, short_url, destination_url, and title.

Example response · 200

{
  "task_id": "task_abc123xyz",
  "item_count": 2,
  "status": "queued",
  "message": "Bulk dynamic link job queued. Poll /v1/qr/bulk/status/{task_id} for progress."
}
Try it

Stored only in this browser's local storage — never sent anywhere but the API itself.

curl -X POST "https://api.qrcode-genie.com/v1/qr/bulk/dynamic" \
  -H "X-QRGenie-Api-Key: <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"items":[{"destination_url":"https://example.com/promo-a","title":"Promo A","tags":["marketing","q3"],"filename":"promo-a","qr_config":{"body_type":"body2","eye_frame":"frame3","colors":{"bg_color":"#ffffff","body_color":"#4F46E5"}}},{"destination_url":"https://example.com/promo-b","title":"Promo B","expires_at":"2026-12-31T23:59:59Z","ios_url":"https://apps.apple.com/app/x","android_url":"https://play.google.com/store/apps/details?id=x","geo_targeting":{"US":"https://example.com/us","GB":"https://example.com/uk"}}],"size":512,"file_format":"png","global_is_active":true,"global_tags":["marketing"],"global_qr_config":{"body_type":"body2","eye_frame":"frame3","colors":{"bg_color":"#ffffff","body_color":"#4F46E5"}}}'
GET/v1/qr/bulk/status/{task_id}

Check batch status

Poll this to determine whether a batch job has finished and whether its archive is ready to download.

Parameters

task_idstringrequired

The task ID returned when the batch was created.

Example response · 200

{
  "task_id": "d3005699-cf69-46ad-93b1-05d58af26b35",
  "status": "SUCCESS",
  "ready": true,
  "completed_count": 10,
  "total_count": 10,
  "download_available": true,
  "download_url": "/v1/qr/bulk/download/d3005699-cf69-46ad-93b1-05d58af26b35"
}
Try it

Stored only in this browser's local storage — never sent anywhere but the API itself.

curl -X GET "https://api.qrcode-genie.com/v1/qr/bulk/status/d3005699-cf69-46ad-93b1-05d58af26b35" \
  -H "X-QRGenie-Api-Key: <your_api_key>"
GET/v1/qr/bulk/download/{task_id}

Download a batch archive

Downloads the finished batch as a ZIP archive once status reports download_available: true.

Parameters

task_idstringrequired

The completed task's ID.

Example response · 200

Raw application/zip binary stream containing every generated file from the batch.

Try it

Stored only in this browser's local storage — never sent anywhere but the API itself.

curl -X GET "https://api.qrcode-genie.com/v1/qr/bulk/download/d3005699-cf69-46ad-93b1-05d58af26b35" \
  -H "X-QRGenie-Api-Key: <your_api_key>"