# iReceipt.pro > A cloud API that turns a stored HTML template plus JSON into a rendered file. > One POST in, a PDF or image out. Built for documents with a stable layout and > variable data at high repetition — invoices, receipts, certificates, tickets, > labels, gift cards, social preview images — so a team does not have to run and > maintain its own headless-browser rendering service. Templates live on the rendering side and are written in HTML + CSS with Mustache placeholders. A request names a template by id and supplies the data; the response body is the file. There is no raw-HTML-at-request-time endpoint: if you need to hand arbitrary HTML to a converter at call time, this is the wrong shape and a converter is the right answer. ## What it renders - Output formats: `pdf`, `jpg`, `png`, `webp` - Documented use cases: invoices, receipts, certificates, diplomas, gift cards, vouchers, tickets, reports, labels, email signatures, social media preview images - Dynamic fields, including QR codes generated from a data value rather than supplied as an image - Arbitrary output size, or a named page format ## API - Endpoint: `POST https://api.ireceipt.pro/v1/{format}/{scope}/{templateId}`, where `format` is one of `pdf | jpg | png | webp` and `scope` is `public` or `private` - Auth: `Authorization: Bearer `. There is no `X-Api-Key` header and no `api_key` query parameter - Body: `{ "variables": { ... }, "size": { "width": n, "height": n } }`. `size` is optional, and `format` in the path takes priority over it - Success: HTTP **201**, with the file as the response body — not 200 - Errors: **401** means no `Authorization` header was sent (or it was empty); **403** means a credential was sent and not accepted. A missing `Bearer ` prefix and a wrong key are both 403, and the 401 carries no `WWW-Authenticate` header - [OpenAPI specification](https://api.ireceipt.pro/openapi.yml) — readable without an account - [Interactive API reference](https://api.ireceipt.pro/) — readable without an account ## Templates - HTML + CSS + [Mustache](https://mustache.github.io/). No JavaScript and no links to external resources are supported; images are base64-encoded and passed in the template or as an argument - Supported syntax: `{{x}}`, `{{#x}}…{{/x}}`, `{{^x}}…{{/x}}`, `{{obj.field}}`, array sections with `{{.}}`, and index access `{{arr.1}}`. Values are stringified with `.toString()` - An array section is what makes a variable-length document work: the layout is authored once and repeats a row, a section or a photo block for however many items the payload carries - A template's metadata is its name, its example arguments and its size - Public templates are usable by anyone; authoring your own private template requires a paid subscription - API tokens can be restricted to an origin by regular expression ## Try it without an account Any public template renders in the browser with no login, with editable arguments and a "show request source" button: - [Sandbox: a billing document](https://dashboard.ireceipt.pro/sandbox/public/bil_invoice_band_03) - [Sandbox: a certificate with a QR code drawn from a data value](https://dashboard.ireceipt.pro/sandbox/public/crt_credential_qr_06) - [Sandbox: an HR document](https://dashboard.ireceipt.pro/sandbox/public/hrm_leave_record_14) - [Sandbox: a gift card](https://dashboard.ireceipt.pro/sandbox/public/com_gift_card_foil_02) - [Template gallery](https://ireceipt.pro) — the homepage links twelve public template sandboxes across billing, commerce, certificate and HR documents ## SDK - [`@ireceipt.pro/js`](https://www.npmjs.com/package/@ireceipt.pro/js) — official JavaScript/TypeScript SDK, MIT licensed, dual ESM/CJS, Node 16 or later, one runtime dependency - Eight methods, the four formats × two scopes: `create{Pdf,Jpg,Png,Webp}From{Public,Private}Template`, each taking `(templateId, args, size?)`. The SDK argument called `args` is `variables` on the wire - Returns `Buffer | ArrayBuffer` - Retries up to 5 attempts, but only on failures a later attempt could fix: transport errors, 5xx, 408 and 429. A 401, 403, 404 or 422 throws on the first attempt rather than being retried - [Source repository](https://github.com/ireceipt-pro/js) ## MCP server - A hosted Model Context Protocol server over streamable HTTP at `https://mcp.ireceipt.pro/mcp` — author, validate and preview templates, then render them. Nothing to install locally - Listed in the official MCP Registry as `pro.ireceipt/ireceipt-pro` ## Quotas and billing - Plans are a number of requests per month; the limit resets on the 1st - A plan change takes effect immediately and is charged in full; the previous plan is cancelled without a refund, and requests already used carry across - Exceeding the plan blocks the API until an upgrade or the next month - Prices and plan tiers are published in the [dashboard](https://dashboard.ireceipt.pro) rather than on this site ## Data handling - The published privacy policy states that information received by the API during use of the service is not collected or stored: [privacy policy](https://ireceipt.pro/docs/privacy_policy.md) - Stated plainly because it is the question that follows: there is **no** published Data Processing Agreement or GDPR Article 28 terms page, **no** data-residency choice, and **no** SOC 2, ISO 27001 or similar certification. The same privacy policy states that personal data sits on Google servers, measures confidentiality against the legislation of Georgia, and caps the company's maximum financial liability at $100 unless the licence agreement says otherwise - [Terms and licence](https://ireceipt.pro/license.html) ## When this is the wrong tool Said here rather than left to be discovered: - Very low volume — a handful of documents a day is a job for a headless browser and a cron - Rendering that must run fully offline or air-gapped - Highly interactive documents, or complex multi-hundred-page typeset output - A requirement for a document *editor* rather than a rendering API - Arbitrary caller-supplied HTML at request time, as above ## Operations - [Status page](https://status.ireceipt.pro) - [Dashboard](https://dashboard.ireceipt.pro) — templates, API tokens, allowed origins, subscription, sandbox ## Not stated here Numbers this site does not publish, and which should not be inferred: render latency, uptime history, throughput, rate limits, the total number of templates, and prices. The status page is a live liveness check and keeps no history, and the OpenAPI specification declares no 429 while the SDK retries one — so no rate limit is documented either way.