openapi: 3.1.0
info:
title: Bulk QR Code Generator
description: Send a list of texts — website addresses, phone numbers, plain words, WiFi details, anything — and get back
a ready-to-use QR code image for each one. Every QR code comes as a base64-encoded PNG you can drop straight into a webpage
or save to disk. Great for marketing campaigns, event tickets, product labels, menus, or any situation where you need
many QR codes in one go. Empty entries are quietly skipped. Each input is limited to 700 characters. You must send at
least one non-empty entry.
version: 1.0.0
contact:
name: _done
url: https://forms.gle/5KzuSFH7p8hHtDmz7
email: info@underscoredone.com
x-openapi-url: https://qr-code-generator.underscoredone.com/openapi.json
x-logo:
url: https://underscoredone.com/logo.png
altText: _done
x-guidance: 'POST a JSON body with a key ''texts'' containing an array of strings. Each string becomes one QR code. The
response is an array of objects in the same order as the non-empty inputs, each containing ''text'' (the original string)
and ''qr_base64'' (a data URI string starting with ''data:image/png;base64,'' ready for use in an HTML img src or file
save). Strings longer than 700 characters or that are empty after stripping whitespace are rejected with a 400 error identifying
the offending index. The output is fully deterministic: the same input text always produces the same base64 PNG. Use the
''size'' parameter (integer, pixels, default 600, range 100–1200) to control image width. Use ''error_correction'' parameter
(L, M, Q, H — default H) to control scan reliability.'
x-ai-instructions: 'POST a JSON body with a key ''texts'' containing an array of strings. Each string becomes one QR code.
The response is an array of objects in the same order as the non-empty inputs, each containing ''text'' (the original
string) and ''qr_base64'' (a data URI string starting with ''data:image/png;base64,'' ready for use in an HTML img src
or file save). Strings longer than 700 characters or that are empty after stripping whitespace are rejected with a 400
error identifying the offending index. The output is fully deterministic: the same input text always produces the same
base64 PNG. Use the ''size'' parameter (integer, pixels, default 600, range 100–1200) to control image width. Use ''error_correction''
parameter (L, M, Q, H — default H) to control scan reliability.'
x-provider: _done — single-purpose utility APIs for developers and AI agents. Pay per call with USDC on Base Mainnet or
Solana Mainnet.
x-pricing:
model: pay-per-call
currency: USDC
network: Base Mainnet or Solana Mainnet
price: $0.01
x-keywords: []
x-category: qr code
x-provider-url: https://underscoredone.com
x-agentcash-auth:
mode: paid
x-402:
price: $0.01
network: eip155:8453
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
facilitator: https://api.cdp.coinbase.com/platform/v2/x402
scheme: exact
description: Send a list of texts — website addresses, phone numbers, plain words, WiFi details, anything — and get back
a ready-to-use QR code image for each one. Every QR code comes as a base64-encoded PNG you can drop straight into a
webpage or save to disk. Great for marketing campaigns, event tickets, product labels, menus, or any situation where
you need many QR codes in one go. Empty entries are quietly skipped. Each input is limited to 700 characters. You must
send at least one non-empty entry.
mime_type: application/json
networks:
- network: eip155:8453
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
pay_to: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
- network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
pay_to: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
paths:
/generate:
post:
tags:
- qr code
- qr code generator
- qr
- generate qr
- text to qr code
- qr code image
- url to qr
- wifi qr code
- bulk qr codes
- qr png
- create qr code
- qr code api
- vcard qr
- make qr code
summary: Convert a list of texts into QR code PNG images in one request
description: Turn a list of texts into QR code PNG images. Empty entries are skipped. At least one real entry must be
in the list.
operationId: generate_generate_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/QRRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/QRResponse'
examples:
success:
summary: Successful response
value:
api_version: 1.0.0
count: 2
results:
- text: https://example.com
qr_base64: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAYAAAC+ZpjcAA...
- text: 'Phone: +1-800-555-0199'
qr_base64: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAYAAAC+ZpjcAA...
'422':
description: Unprocessable — a required field is missing or the wrong type. Check the detail field for specifics.
content:
application/json:
schema:
type: object
properties:
detail:
type: array
'402':
description: Payment required. Send a signed USDC payment on Base Mainnet or Solana Mainnet using the x402 protocol.
headers:
X-Payment-Response:
description: x402 payment challenge — base64-encoded JSON with payment details.
schema:
type: string
'400':
description: Bad request — your input failed validation or could not be processed. Check the detail field for specifics.
content:
application/json:
schema:
type: object
properties:
detail:
type: string
x-ai-instructions: 'POST a JSON body with a key ''texts'' containing an array of strings. Each string becomes one QR
code. The response is an array of objects in the same order as the non-empty inputs, each containing ''text'' (the
original string) and ''qr_base64'' (a data URI string starting with ''data:image/png;base64,'' ready for use in an
HTML img src or file save). Strings longer than 700 characters or that are empty after stripping whitespace are rejected
with a 400 error identifying the offending index. The output is fully deterministic: the same input text always produces
the same base64 PNG. Use the ''size'' parameter (integer, pixels, default 600, range 100–1200) to control image width.
Use ''error_correction'' parameter (L, M, Q, H — default H) to control scan reliability.'
x-guidance: 'POST a JSON body with a key ''texts'' containing an array of strings. Each string becomes one QR code.
The response is an array of objects in the same order as the non-empty inputs, each containing ''text'' (the original
string) and ''qr_base64'' (a data URI string starting with ''data:image/png;base64,'' ready for use in an HTML img
src or file save). Strings longer than 700 characters or that are empty after stripping whitespace are rejected with
a 400 error identifying the offending index. The output is fully deterministic: the same input text always produces
the same base64 PNG. Use the ''size'' parameter (integer, pixels, default 600, range 100–1200) to control image width.
Use ''error_correction'' parameter (L, M, Q, H — default H) to control scan reliability.'
x-payment-info:
price:
fixed:
mode: fixed
currency: USD
amount: '0.01'
protocols:
- x402: {}
components:
schemas:
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
QRRequest:
properties:
texts:
items:
type: string
type: array
title: Texts
description: The list of things you want turned into QR codes — website addresses, phone numbers, plain text, WiFi
credentials, anything you like. Each entry must be 700 characters or fewer. Empty entries are skipped. At least
one real entry is required.
size:
anyOf:
- type: integer
- type: 'null'
title: Size
description: How wide (and tall — QR codes are square) the output image should be, measured in pixels. Must be between
100 and 1200. Defaults to 600 if you leave it out.
default: 600
error_correction:
anyOf:
- type: string
- type: 'null'
title: Error Correction
description: How much damage or dirt the QR code can survive and still scan correctly. Choose L (least tough, smallest
code), M, Q, or H (most tough, slightly larger code). Defaults to H, which is best for printed labels or stickers.
default: H
type: object
required:
- texts
title: QRRequest
example:
error_correction: H
size: 600
texts:
- https://example.com
- https://example.com/product/42
QRResponse:
properties:
api_version:
type: string
title: Api Version
description: API version
default: 1.0.0
count:
type: integer
title: Count
description: How many QR codes were generated — matches the number of non-empty entries you sent.
results:
items:
$ref: '#/components/schemas/QRResult'
type: array
title: Results
description: One entry for each non-empty text you sent, in the same order, each containing the original text and
its QR code image.
type: object
required:
- count
- results
title: QRResponse
example:
api_version: 1.0.0
count: 1
results:
- qr_base64: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...
text: https://example.com
QRResult:
properties:
text:
type: string
title: Text
description: The original text that was turned into this QR code.
qr_base64:
type: string
title: Qr Base64
description: The QR code image as a data URI string starting with 'data:image/png;base64,' — paste it straight into
an HTML img src or decode it to save as a PNG file.
type: object
required:
- text
- qr_base64
title: QRResult
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
securitySchemes:
siwx:
type: apiKey
in: header
name: SIGN-IN-WITH-X
description: CAIP-122 wallet signature for repeat access after payment
servers:
- url: https://qr-code-generator.underscoredone.com
description: Production
tags:
- name: qr code
- name: qr code generator
- name: qr
- name: generate qr
- name: text to qr code
- name: qr code image
- name: url to qr
- name: wifi qr code
- name: bulk qr codes
- name: qr png
- name: create qr code
- name: qr code api
- name: vcard qr
- name: make qr code
x402Version: 2
x-payment-accepts:
- scheme: exact
network: eip155:8453
payTo: '0xE9740820225B3918b4ddd1292C7cA4Ca0e2C2F08'
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
- scheme: exact
network: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
payTo: 8ugAWAXDB8V18kiUrGZTq1oMvU3C6Fxs8hfC6rvzQT3b
asset: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v