Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Generation API page →
Developer Tools

Generation API & Scraper

The Generation API creates PDFs, social/OG images and charts on the fly and returns them as clean JSON (base64 or a download token).

21 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary pdf_render endpoint returns a rendered PDF with filename, content type, byte size and a page hint, and the set also covers PDF from HTML or a URL, OG and template images, charts of many types and batch rendering. It is built for products that need server-side document and image generation without running a headless-browser render farm. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

What comes back, and what gets rejected

Every action here is deterministic: the same input renders the same bytes. That also means the input checks are strict rather than forgiving, so knowing which mistakes are rejected outright saves a debugging session. All figures measured on 2026-08-27.

ActionWhat you get backMeasured
pdf_render, pdf_from_htmlfile{file_b64, bytes, content_type, filename, delivery}The built-in invoice template rendered to 9,075 bytes, delivery 'inline'
og_image1200x630 PNG by default, width and height overridable to 4000og_basic with a title and subtitle = 15,605 bytes
chartPNG or SVG from a Chart.js-shaped spec, 8 chart types onlytype 'violin' returned INVALID_PARAM listing bar, horizontal_bar, line, area, pie, doughnut, scatter, radar
barcodeCheck digit computed or validated, never silently corrected5901234123456 returned INVALID_PARAM with detail.valid_code 5901234123457
qrpng_base64 plus version, designator, modules and is_microA short URL at error correction m = version 2, designator 2-M, 25 modules
vcard, icalRaw file text plus a data_uri, and a QR of it if as_qr is setvCard 3.0 = 134 bytes, field_count 4; iCal uid is [email protected]
Remote images or CSSBlocked at render unless the host is in allow_hostsA PDF referencing one remote image returned INVALID_PARAM naming the blocked URL
validate_htmlLints without rendering, flags what the renderer will blockvalid false, remote_resources listing both blocked URLs, tags_open 3 vs tags_close 1
batch, batch_pdf, batch_imageUp to 50 small assets or 20 documents, per-item errors3 items returned count 3, ok_count 2, the bad barcode carrying its own error
template_listThe complete set of built-ins with a data_contract for each4 PDF templates, 4 image templates, and no stored-template CRUD

code_image language auto-detection is unreliable, so pass `language` explicitly. Left to guess, a two-line Python function was labelled 'Tera Term macro' and a one-line SQL SELECT was labelled 'Text only'. Passing language 'python' for the same snippet returned language 'Python' and a correctly highlighted 7,095-byte PNG.

Live example

Real request and response JSON

Captured from the indexed primary action, pdf_render, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/generate/v1/pdf_render",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "template_name": "invoice",
    "data": {
      "company": {
        "name": "Acme"
      },
      "items": [
        {
          "description": "Widget",
          "qty": 2,
          "unit_price": 9.5
        }
      ],
      "subtotal": 19,
      "total": 19
    }
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "generate",
    "endpoint": "pdf_render",
    "mode": "live",
    "latency_ms": 1384.7,
    "record_count": 1,
    "bytes": 9074,
    "cache_hit": false
  },
  "data": {
    "file": {
      "filename": "invoice.pdf",
      "format": "pdf",
      "content_type": "application/pdf",
      "bytes": 9074,
      "source": "template",
      "pages_hint": null,
      "file_b64": "JVBERi0xLjcKJfCflqQKNSAwIG9iago8PC9GaWx0ZXIgL0ZsYXRlRGVjb2RlL0xlbmd0aCA4MDY+PgpzdHJlYW0KeNqtV8uO0zAU3ecr8gPjuU/bVxqNBOIlJEBABQLEYigzbOgCWPD7XCdt3g20g6LWaZycc3yPfZxiDX5coH9lwZCzpSj1dlf9qCAkbXq7k+Zyf1w+wAD1t19+Z7YMbH6ngeZM5YRQo9VvnlZY/65iDpJIBGsyDplz4ljvKiYJqJJFhte/V2+r136cyLEMtquE1J/lrPwfSJbBdpWKBWGK/4FiCWpXJScmyiz/QgHCyMmRm5b9hMFZpVDQ2A5NATQy88SO/vqZHMtgYzvuTbIMNrTj3hRLUGM7/kqBrb9+EiFl8RPqqmQxZPX5IDWLhsRGWvRHDGY50vDy6eiLMCPxc/TLm7+X5ue36uGmwkN29NMJwWUkRNF6s6suX3589Oj9q5piiDECxnpzV326AiC5Bm8kNo1C+ytfw+d687x6vDkyqimtkI+OAHNtPtc4WhzTQse3bRgY28bahppm30etFhqJELQIuRRAEmhRo+CXcF4AC+5/Rq0RUxAAl99Ieffm",
      "delivery": "inline"
    }
  }
}
Actions

What the Generation API does

ActionDescriptionConcrete use caseKey params
pdf_renderRender a PDF from inline HTML/CSS (Jinja2) or a built-in template_name + data (invoice/receipt/certificate/report). WeasyPrint, fonts pinned, network-off. Output: inline base64 (≤8MB) or one-time download token.Platform and DevOps teams call pdf_render to render a PDF from inline HTML/CSS (Jinja2) or a built-in template_name + data (invoice/receip….html, template_name, data, paper, filename, ...
pdf_from_htmlShortcut for rendering inline HTML directly to PDF — the same WeasyPrint engine as pdf_render; `html` is required.Security and supply-chain teams call pdf_from_html to get shortcut for rendering inline HTML directly to PDF.html, data, paper, filename, allow_hosts
pdf_from_urlRender a built-in or inline template to PDF, populating it with data fetched live from a JSON URL you supply. Useful when your invoice or report data lives at a public API endpoint — no manual copy-paste needed.Developer-tool builders call pdf_from_url to render a built-in or inline template to PDF, populating it with data fetched live from a JSON….data_url, template_name, html, data_path, paper, ...
og_imageRender a social / Open Graph card image (1200×630 default) from a built-in template or an inline layout spec. Supports automatic text-wrap and font scaling for long titles, colour gradients and badge overlays.AI-agent developers call og_image to render a social / Open Graph card image (1200×630 default) from a built-in template or an inl….template_name, layout, vars, width, height, ...
image_from_templateAlias of og_image (explicit Bannerbear 'create image from template' naming). template_name + vars → PNG.Platform and DevOps teams call image_from_template to get alias of og_image (explicit Bannerbear 'create image from template' naming).template_name, vars, width, height, format, ...
image_from_urlRender an image template with `vars` fetched from a JSON URL (proxy, SSRF-validated). Data-driven banner generation.Security and supply-chain teams call image_from_url to render an image template with `vars` fetched from a JSON URL (proxy, SSRF-validated).data_url, template_name, layout, data_path, width, ...
chartRender a chart from a Chart.js-style spec — returns a PNG or SVG image. Supported chart types: bar, horizontal_bar, line, area, pie, doughnut, scatter and radar. Powered by a matplotlib backend.Developer-tool builders call chart to render a chart from a Chart.js-style spec.spec, format, filename
chart_typesList all supported chart types with a description of each. No input required.AI-agent developers call chart_types to list all supported chart types with a description of each.none
batch_pdfRender up to 20 PDFs in one call. `jobs` = array of pdf_render param objects.Platform and DevOps teams call batch_pdf to render up to 20 PDFs in one call.jobs
batch_imageRender up to 20 images in one call. `jobs` = array of og_image param objects.Security and supply-chain teams call batch_image to render up to 20 images in one call.jobs
template_listList built-in templates (PDF + image) with their data contracts. Stateless — there is NO stored-template management (create/upload/delete out of scope).Developer-tool builders call template_list to list built-in templates (PDF + image) with their data contracts.none
validate_htmlLint HTML/CSS for the PDF path WITHOUT rendering: flags remote resources that the SSRF-safe renderer will block, size, and tag-balance hints. Deterministic.AI-agent developers call validate_html to get lint HTML/CSS for the PDF path WITHOUT rendering.html
healthRenderer diagnostics — which backends (WeasyPrint/Pillow/matplotlib) are loadable and their versions. No input.Platform and DevOps teams call health to get renderer diagnostics.none
qrGenerate a QR code (PNG or SVG) with custom fg/bg color, error-correction, and an OPTIONAL center logo fetched from logo_url (SSRF-guarded, via proxy). Use error_correction=h when embedding a logo so it stays scannable.Security and supply-chain teams call qr to generate a QR code (PNG or SVG) with custom fg/bg color, error-correction, and an OPTIONAL ce….data, format, error_correction, scale, border, ...
barcodeGenerate a 1D barcode IMAGE (PNG or SVG) from data: EAN-13/8, UPC-A, Code-128, Code-39, ISBN-10/13, ITF, GS1-128, JAN, PZN, Codabar. Check digits are validated — a wrong EAN/UPC/ISBN check digit returns a structured error, not a silent fix.Developer-tool builders call barcode to generate a 1D barcode IMAGE (PNG or SVG) from data.data, type, format, show_text, module_height, ...
code_imageRender a syntax-highlighted code snippet as a PNG with a carbon/ray.so-style window frame. 500+ languages (Pygments), 40+ themes, optional line numbers.AI-agent developers call code_image to render a syntax-highlighted code snippet as a PNG with a carbon/ray.so-style window frame.code, language, theme, window_style, line_numbers, ...
faviconTurn one source image into a complete favicon bundle: multi-resolution favicon.ico, a named PNG set (16→512 incl. apple-touch-icon + android-chrome), site.webmanifest, and the ready-to-paste <head> <link> snippet. Source from image_url (SSRF-guarded) or a base64 upload.Platform and DevOps teams call favicon to turn one source image into a complete favicon bundle.image_url, image_base64
vcardBuild a vCard (.vcf) contact file from contact fields (vCard 3.0 or 4.0). Returns the raw.vcf text + a base64 data-URI you can download or encode into a QR.Security and supply-chain teams call vcard to build a vCard (.vcf) contact file from contact fields (vCard 3.0 or 4.0).full_name, first_name, last_name, organization, title, ...
icalBuild an iCalendar (.ics) event file from event fields (RFC 5545). Supports timed or all-day events, end-time or duration, location, description, organizer. Returns the raw.ics + a base64 data-URI.Developer-tool builders call ical to build an iCalendar (.ics) event file from event fields (RFC 5545).summary, start, end, duration_minutes, location, ...
wifiGenerate a WiFi-join QR code (PNG/SVG) from network credentials — scan to connect, no typing. Encodes the standard WIFI: payload (WPA/WEP/open, hidden networks).AI-agent developers call wifi to generate a WiFi-join QR code (PNG/SVG) from network credentials.ssid, password, encryption, hidden, format, ...
batchGenerate up to 50 small assets in one request. Items run independently — a bad item yields its own error entry, never fails the batch. NOTE: items that fetch a remote logo_url/image_url ARE supported and SSRF-guarded.Platform and DevOps teams call batch to generate up to 50 small assets in one request.items
Code samples

Call pdf_render from your stack

curl -X POST https://api.reefapi.com/generate/v1/pdf_render \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"template_name":"invoice","data":{"company":{"name":"Acme"},"items":[{"description":"Widget","qty":2,"unit_price":9.5}],"subtotal":19,"total":19}}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.generate.pdf_render with {"template_name":"invoice","data":{"company":{"name":"Acme"},"items":[{"description":"Widget","qty":2,"unit_price":9.5}],"subtotal":19,"total":19}}.
Use cases

Who uses this API and why

  • SaaS products call pdf_from_html to turn invoices, reports and receipts into downloadable PDFs.
  • Marketing tools use og_image and image_from_template to auto-generate share images at scale.
  • Dashboards use chart to render server-side charts for emails and PDFs where JS cannot run.
FAQ

Questions developers ask before integrating

Is this a text or AI generation endpoint?

No. Despite the name, nothing here is model-backed and no prompt is involved. It renders files from structured input: HTML and template data to PDF, a card spec to PNG, a data series to a chart, a string to a QR or barcode, contact fields to .vcf and event fields to .ics. The same input renders the same bytes every time, and a health call reports the concrete renderers in use with their versions.

How does the file reach me?

Base64 in the response body. The PDF and image actions wrap it in a file object carrying file_b64, bytes, content_type, filename and a delivery field that read 'inline' on every render measured. QR, barcode, code_image and wifi return png_base64 plus a ready-to-use data_uri instead. vCard and iCal return the raw file text as well, so you can inspect a .vcf or .ics without decoding anything.

What happens if my EAN or UPC check digit is wrong?

It is rejected with the correct code in the error, not silently fixed. Sending 5901234123456 as an ean13 returned INVALID_PARAM with the message that the last digit is a computed checksum and detail.valid_code set to 5901234123457. Sending too few digits fails differently, with a message stating EAN must have 12 digits and how many arrived. Supply the 12 data digits and let the engine compute the thirteenth if you would rather not do the arithmetic.

Can my PDF or card pull in a logo from my CDN?

Only if you allow that host explicitly. By default the renderer runs with no outbound network at all, and HTML referencing a remote image returned INVALID_PARAM naming the blocked URL and suggesting a data: URI. Pass allow_hosts with a comma-separated list of https hosts to open specific ones. For a single logo, embedding it as a data: URI is usually simpler and makes the render fully reproducible. Run validate_html first if you want the list of resources that would be blocked before you spend a render.

Can I upload and store my own templates?

No, and that is deliberate. The engine is stateless: there is no create, upload, list-mine or delete. template_list returns the four built-in PDF templates (invoice, receipt, certificate, report) and the four card layouts (og_basic, og_article, og_quote, og_product), each with a data_contract naming the exact keys it expects. To go beyond them, send inline `html` for PDFs or an inline `layout` object for images on each request. Your template lives in your repo, not in ours.

What does validate_html tell me that a failed render would not?

It tells you before you spend the render, and it separates two different problems. Linting a small snippet returned valid false, a remote_resources array with both offending URLs, an issues array explaining that each will be blocked by the renderer, and tags_open 3 against tags_close 1. Note that self-closing tags count toward tags_open, so a mismatch there is a hint to check your markup rather than proof of a bug.

One item in my batch is broken. Does the whole call fail?

No. Items run independently and a bad one produces its own error entry. A three-item batch with a valid QR, an invalid barcode and a valid wifi code returned ok:true at the top with count 3 and ok_count 2, the barcode row carrying an inline INVALID_PARAM. batch takes up to 50 small assets across qr, barcode, code_image, favicon, vcard, ical and wifi; batch_pdf and batch_image take up to 20 documents each. Always read ok_count.

Why does a QR response report a version and a module count?

Because they decide how large the code must be printed to stay scannable. A short URL at error correction m came back as version 2, designator 2-M and 25 modules across. More data or a higher error-correction level pushes the version up and the modules with it. If you are embedding a center logo, use error_correction 'h' and keep logo_size at or below 0.25: the parameter accepts up to 0.30, and past 0.25 the code can stop scanning even at the highest recovery level.

What is the Generation API?

Generation API is a ReefAPI endpoint group for generation It returns live JSON through POST requests under /generate/v1.

Is the Generation API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Generation calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Generation login or account?

No login to Generation is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Generation data?

The page example is captured from a live pdf_render call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Generation API use?

Generation actions currently cost 1-4 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Generation from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call generate actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / generate

Generation

Generation

base /generate/v121 endpoints
post/generate/v1/pdf_render4 credits

Render a PDF from inline HTML/CSS (Jinja2) or a built-in template_name + data (invoice/receipt/certificate/report). WeasyPrint, fonts pinned, network-off. Output: inline base64 (≤8MB) or one-time download token.

ParameterAllowed / rangeDescription
htmloptionalInline HTML/CSS document (Jinja2 syntax allowed; rendered in a SANDBOXED env — no code execution). Mutually exclusive with template_name.
template_nameoptionalinvoice · receipt · certificate · reportBuilt-in PDF template (stateless — lives in engine, not stored). Supply `data` matching its contract (see template_list).
dataoptionalTemplate variables (JSON object) — merged into the template. For built-ins see each template's data_contract.
paperoptionalA4 · A4 landscape · Letter · Letter landscape · A5 · LegalPage size override for built-in templates.
filenameoptionalSuggested download filename.
allow_hostsoptionalComma-separated https hosts whose images/CSS the PDF may fetch (default NONE = network-off, SSRF-safe). Use data: URIs to embed assets without this.
Try in playground →
post/generate/v1/pdf_from_html4 credits

Shortcut for rendering inline HTML directly to PDF — the same WeasyPrint engine as pdf_render; `html` is required.

ParameterAllowed / rangeDescription
htmlrequiredHTML/CSS document to render (Jinja2 allowed, sandboxed).
dataoptionalOptional Jinja2 variables for the HTML.
paperoptionalA4 · A4 landscape · Letter · A5 · LegalPage size (only if your CSS uses {{ paper }}).
filenameoptionalSuggested filename.
allow_hostsoptionalAllowlisted https hosts for remote assets (default none).
Try in playground →
post/generate/v1/pdf_from_url4 credits

Render a built-in or inline template to PDF, populating it with data fetched live from a JSON URL you supply. Useful when your invoice or report data lives at a public API endpoint — no manual copy-paste needed.

ParameterAllowed / rangeDescription
data_urlrequiredhttps URL returning a JSON object used as template `data`.
template_nameoptionalinvoice · receipt · certificate · reportBuilt-in template to fill.
htmloptionalInline HTML template (instead of template_name).
data_pathoptionalOptional dotted path into the fetched JSON to use as data (e.g. 'result.invoice').
paperoptionalA4 · A4 landscape · Letter · A5 · LegalPage size override.
filenameoptionalSuggested filename.
Try in playground →
post/generate/v1/og_image2 credits

Render a social / Open Graph card image (1200×630 default) from a built-in template or an inline layout spec. Supports automatic text-wrap and font scaling for long titles, colour gradients and badge overlays.

ParameterAllowed / rangeDescription
template_name = og_basicoptionalog_basic · og_article · og_quote · og_productBuilt-in card layout. See template_list for each layout's vars.
varsoptionalCard content (JSON): title/subtitle/badge/quote/author/site/name/tagline/cta + colors bg/bg2/fg/accent (hex).
layoutoptionalInline layout override (JSON) — {size:[w,h], ...} for a fully custom card without a built-in template.
width = 1200optional200–4000Canvas width px.
height = 630optional200–4000Canvas height px.
format = pngoptionalpng · jpeg · webpOutput image format.
filenameoptionalSuggested filename.
Try in playground →
post/generate/v1/image_from_template2 credits

Alias of og_image (explicit Bannerbear 'create image from template' naming). template_name + vars → PNG.

ParameterAllowed / rangeDescription
template_namerequiredog_basic · og_article · og_quote · og_productBuilt-in image template.
varsoptionalTemplate variables (see template_list).
width = 1200optional200–4000Canvas width px.
height = 630optional200–4000Canvas height px.
format = pngoptionalpng · jpeg · webpOutput format.
filenameoptionalSuggested filename.
Try in playground →
post/generate/v1/image_from_url2 credits

Render an image template with `vars` fetched from a JSON URL (proxy, SSRF-validated). Data-driven banner generation.

ParameterAllowed / rangeDescription
data_urlrequiredhttps URL returning a JSON object used as card `vars`.
template_name = og_basicoptionalog_basic · og_article · og_quote · og_productBuilt-in template.
layoutoptionalInline layout override (JSON).
data_pathoptionalDotted path into the JSON to use as vars.
width = 1200optional200–4000Canvas width px.
height = 630optional200–4000Canvas height px.
format = pngoptionalpng · jpeg · webpOutput format.
filenameoptionalSuggested filename.
Try in playground →
post/generate/v1/chart1 credit

Render a chart from a Chart.js-style spec — returns a PNG or SVG image. Supported chart types: bar, horizontal_bar, line, area, pie, doughnut, scatter and radar. Powered by a matplotlib backend.

ParameterAllowed / rangeDescription
specrequiredChart spec: {type, data:{labels:[...], datasets:[{label, data:[...], color?}]}, options:{title, x_label, y_label, width, height, legend}}.
format = pngoptionalpng · svgOutput format.
filenameoptionalSuggested filename.
Try in playground →
post/generate/v1/chart_typesfree

List all supported chart types with a description of each. No input required.

Try in playground →
post/generate/v1/batch_pdf4 credits

Render up to 20 PDFs in one call. `jobs` = array of pdf_render param objects.

ParameterAllowed / rangeDescription
jobsrequiredArray of ≤20 pdf_render param objects ({html|template_name, data, ...}).
Try in playground →
post/generate/v1/batch_image2 credits

Render up to 20 images in one call. `jobs` = array of og_image param objects.

ParameterAllowed / rangeDescription
jobsrequiredArray of ≤20 og_image param objects ({template_name|layout, vars, ...}).
Try in playground →
post/generate/v1/template_listfree

List built-in templates (PDF + image) with their data contracts. Stateless — there is NO stored-template management (create/upload/delete out of scope).

Try in playground →
post/generate/v1/validate_htmlfree

Lint HTML/CSS for the PDF path WITHOUT rendering: flags remote resources that the SSRF-safe renderer will block, size, and tag-balance hints. Deterministic.

ParameterAllowed / rangeDescription
htmlrequiredHTML document to lint.
Try in playground →
post/generate/v1/healthfree

Renderer diagnostics — which backends (WeasyPrint/Pillow/matplotlib) are loadable and their versions. No input.

Try in playground →
post/generate/v1/qr1 credit

Generate a QR code (PNG or SVG) with custom fg/bg color, error-correction, and an OPTIONAL center logo fetched from logo_url (SSRF-guarded, via proxy). Use error_correction=h when embedding a logo so it stays scannable.

ParameterAllowed / rangeDescription
datarequiredThe content to encode: a URL, text, vCard string, etc.
format = pngoptionalpng · svgOutput image format. png supports logo-embed + colors; svg is scalable (logo-embed requires png).
error_correction = moptionall · m · q · hRecovery level: l~7% · m~15% · q~25% · h~30%. Use h with a logo.
scale = 8optional1–40Module size in pixels.
border = 4optional0–20Quiet-zone width in modules (spec default 4).
coloroptionalForeground (dark) color: #rrggbb / #rgb / basic CSS name.
backgroundoptionalBackground color, or 'transparent'.
logo_urloptionalURL of a logo to embed in the center (PNG output only). Fetched through the proxy with a full SSRF guard.
logo_size = 0.22optional0.05–0.3Logo size as a fraction of the QR side (0.05–0.30; >0.25 risks unscannable codes even at EC-H).
Try in playground →
post/generate/v1/barcode1 credit

Generate a 1D barcode IMAGE (PNG or SVG) from data: EAN-13/8, UPC-A, Code-128, Code-39, ISBN-10/13, ITF, GS1-128, JAN, PZN, Codabar. Check digits are validated — a wrong EAN/UPC/ISBN check digit returns a structured error, not a silent fix.

ParameterAllowed / rangeDescription
datarequiredThe value to encode. For EAN/UPC supply the digits; the check digit is computed (or validated if you include it).
typerequiredean13 · ean8 · ean14 · upca · code128 · code39 · isbn13 · isbn10 · issn · itf · gs1_128 · jan · pzn · codabarBarcode symbology.
format = pngoptionalpng · svgOutput image format.
show_text = trueoptionalPrint the human-readable value under the bars.
module_height = 15optional2–100Bar height in mm.
coloroptionalBar color (#rrggbb / name).
backgroundoptionalBackground color (#rrggbb / name).
Try in playground →
post/generate/v1/code_image2 credits

Render a syntax-highlighted code snippet as a PNG with a carbon/ray.so-style window frame. 500+ languages (Pygments), 40+ themes, optional line numbers.

ParameterAllowed / rangeDescription
coderequiredThe source code to render.
languageoptionalLanguage for highlighting (python, javascript, go, rust, sql…). Omit to auto-detect.
theme = monokaioptionalabap · algol · algol_nu · arduino · autumn · borland · bw · coffee · colorful · default · dracula · emacs · friendly · friendly_grayscale · fruity · github-dark · gruvbox-dark · gruvbox-light · igor · inkpot · lightbulb · lilypond · lovelace · manni · material · monokai · murphy · native · nord · nord-darker · one-dark · paraiso-dark · paraiso-light · pastie · perldoc · rainbow_dash · rrt · sas · solarized-dark · solarized-light · staroffice · stata-dark · stata-light · tango · trac · vim · vs · xcode · zenburnColor theme (Pygments style).
window_style = darkoptionaldark · darker · light · noneFrame: dark/darker/light window chrome with traffic-light dots, or 'none' for a bare image.
line_numbers = falseoptionalShow line numbers in the gutter.
font_size = 20optional10–48Font size in px.
Try in playground →
post/generate/v1/favicon2 credits

Turn one source image into a complete favicon bundle: multi-resolution favicon.ico, a named PNG set (16→512 incl. apple-touch-icon + android-chrome), site.webmanifest, and the ready-to-paste <head> <link> snippet. Source from image_url (SSRF-guarded) or a base64 upload.

ParameterAllowed / rangeDescription
image_urloptionalURL of the source image (PNG/JPG/etc). Fetched through the proxy with a full SSRF guard. Provide this OR image_base64.
image_base64optionalBase64-encoded source image (data-URI prefix accepted). Use instead of image_url for direct uploads.
Try in playground →
post/generate/v1/vcard1 credit

Build a vCard (.vcf) contact file from contact fields (vCard 3.0 or 4.0). Returns the raw.vcf text + a base64 data-URI you can download or encode into a QR.

ParameterAllowed / rangeDescription
full_nameoptionalFull display name (or supply first_name/last_name).
first_nameoptionalGiven name.
last_nameoptionalFamily name.
organizationoptionalCompany/organization.
titleoptionalJob title.
phoneoptionalPhone number(s) — string or array.
emailoptionalEmail address(es) — string or array.
urloptionalWebsite URL(s) — string or array.
addressoptionalPostal address (single line).
noteoptionalFree-text note.
birthdayoptionalBirthday (YYYY-MM-DD).
version = 3.0optional3.0 · 4.0vCard spec version (3.0 = widest compatibility, 4.0 = modern).
as_qr = falseoptionalAlso return a scannable PNG QR of the vCard (add-to-contacts).
Try in playground →
post/generate/v1/ical1 credit

Build an iCalendar (.ics) event file from event fields (RFC 5545). Supports timed or all-day events, end-time or duration, location, description, organizer. Returns the raw.ics + a base64 data-URI.

ParameterAllowed / rangeDescription
summaryrequiredEvent title.
startrequiredStart: ISO-8601 (2026-07-01T15:00:00+00:00) or YYYY-MM-DD (all-day).
endoptionalEnd time (ISO-8601 or YYYY-MM-DD). Omit to use duration_minutes.
duration_minutes = 0optional0–100000Event length in minutes (used when `end` is absent).
locationoptionalEvent location.
descriptionoptionalEvent details.
urloptionalEvent URL.
organizer_emailoptionalOrganizer email.
uidoptionalStable UID (auto-generated if omitted).
as_qr = falseoptionalAlso return a scannable PNG QR of the event.
Try in playground →
post/generate/v1/wifi1 credit

Generate a WiFi-join QR code (PNG/SVG) from network credentials — scan to connect, no typing. Encodes the standard WIFI: payload (WPA/WEP/open, hidden networks).

ParameterAllowed / rangeDescription
ssidrequiredNetwork name (SSID).
passwordoptionalNetwork password (required unless encryption=nopass).
encryption = WPAoptionalWPA · WEP · nopassSecurity type: WPA (incl. WPA2/WPA3), WEP, or nopass (open network).
hidden = falseoptionalMark the network as hidden (non-broadcast SSID).
format = pngoptionalpng · svgOutput image format.
scale = 8optional1–40Module size in pixels.
error_correction = moptionall · m · q · hQR recovery level.
Try in playground →
post/generate/v1/batch1 credit

Generate up to 50 small assets in one request. Items run independently — a bad item yields its own error entry, never fails the batch. NOTE: items that fetch a remote logo_url/image_url ARE supported and SSRF-guarded.

ParameterAllowed / rangeDescription
itemsrequiredUp to 50 items, each {action, params} where action is qr|barcode|code_image|favicon|vcard|ical|wifi.
Try in playground →