printless Developers
Go Printless button

Add Printless to your site in one line.

Drop a button on any page. Put it next to your print. Your customer taps it and instantly gets the print — a receipt, token, ticket or invoice — in the Printless app or over WhatsApp. No printer, no paper.

Install

Install in 30 seconds

Load the script once, then place a button anywhere with your publishable key and a template reference. That's it — the button renders itself and handles delivery and status. It issues the print and stays on your page: it never navigates or redirects.

<script src="https://js.printless.app/button.js" async></script>

<div class="printless-button"
     data-printless-key="pk_live_your_publishable_key"
     data-printless-template="tmpl_your_template"></div>

Create a publishable key

In the Business Portal's Developers page, generate a pk_live_ key locked to your website's domain. It's safe to put in public HTML.

Register a template

Define the print once (type, title, content) with your secret key. You get a tmpl_ reference to point the button at.

Drop the button

Paste the snippet next to your print. On tap, Printless delivers it — in-app, or WhatsApp for new customers. If you set the customer's phone, it sends at once; otherwise a small popup asks for it.

Reference

Attributes

Set these on the button element. Only the key and template are required.

AttributeDescription
data-printless-keyrequiredYour publishable key (pk_live_…). Origin-locked, create-only.
data-printless-templaterequiredWhat to issue: a button template reference (tmpl_…), the GUID of a custom template designed in the Business Portal's Templates page — for an agreement your customer signs, a Contract template.
data-printless-labelButton text. Default Go Printless.
data-printless-mobileThe customer's phone, if you already have it. A tap then sends the print straight away, with no popup, and the button shows the status. If the API says the number isn't valid, the popup opens with it filled in.
data-printless-variablesJSON object filling {{placeholders}} in a button template, e.g. {"order":"A-91"} — or, for a custom template, its fields by key.
data-printless-themelight for a white button on dark backgrounds. Default is brand indigo.
data-printless-sizecompact for a smaller pill.

You can also render programmatically: Printless.render('#el', { key, template }), open the phone popup with Printless.open({ key, template }), or send with no UI with Printless.send({ key, template, mobile }) (returns a Promise). onSuccess(result), onError(error) and onClose(result) are optional callbacks; an error carries status, the API's code and its detail. When the API refuses a print, the customer sees a short message and the API's reason is logged to the browser console for you.

Your own print types

Custom templates

A custom template is a print type you design yourself in the Business Portal's Templates page (Standard plan and above) — "Advance Payment", "Repair Estimate", "Delivery Note" — with your own fields, a summary and a footer. Point the button at the template's GUID instead of a tmpl_ reference and put the field values, keyed by field key, in data-printless-variables. Values are text (numbers and true/false are sent as text); money and number fields are parsed, a select must match one of its options, and a notes variable becomes the notes paragraph. Line items, pictures, signatures, tables and files aren't supported from the button: a template that requires one of them won't issue from it. Issue those from your backend with POST /ent/v1/print/template.

<div class="printless-button"
     data-printless-key="pk_live_your_publishable_key"
     data-printless-template="6d0b8a4e-3c2f-4b7e-9a1d-2f5e8c9b0a11"
     data-printless-variables='{"customerName":"Ari Nakamura","advanceAmount":"15000"}'></div>

The customer receives a native Print document built from your template — the same one the Business Portal's New Print page issues.

Sign it · Open with it · Redeem it

Contracts, keys and coupons

Contract. Save a Contract template in the Business Portal's Templates page with the terms written into it, and point the button at its GUID. Your customer fills in only the fields the template asks for (from data-printless-variables) and signs on their own phone with Face ID or a fingerprint. The button never carries the text of an agreement itself: anyone can read a page's markup, so the terms live in your template.

<div class="printless-button"
     data-printless-key="pk_live_your_publishable_key"
     data-printless-template="YOUR-CONTRACT-TEMPLATE-GUID"
     data-printless-variables='{"counterpartyName":"Ari Nakamura","agreementDate":"2026-10-01"}'></div>

Key. Keys are not issued from the button — anyone who can see your page could mint a door key. Issue them from your own system once a stay is paid for or checked in, with a secret key: POST /ent/v1/print/key (see the API reference). The guest can add the key to Apple or Google Wallet, and your door reader checks every scan with POST /ent/v1/key/verify. The same goes for access cards (Card of kind Access, Gate or Key).

Coupon. Coupons can't be issued from the button either: a coupon is worth money at your till, and anyone who can see your page could mint as many as they liked. The API won't register a button template for a coupon, and the button won't issue one (403 TEMPLATE_NOT_PUBLIC). Issue coupons from the Printless Printer apps or the Business Portal, or from your own system with a secret key: POST /ent/v1/print/coupon. Your till checks and redeems them with POST /ent/v1/coupon/verify and POST /ent/v1/coupon/redeem (see the API reference).

Beyond the button

Richer documents (server-to-server)

The button issues a template print in one tap — perfect for receipts, tokens, tickets and invoices. When you need a full multi-page document, issue it from your backend with an API key instead of the button:

FormatUse it for
Print — native .printlessA structured, multi-page document rendered natively and end-to-end encrypted on the customer's phone. POST /ent/v1/print (Professional plan and above). Since v1.2 a document can carry its own lang and dir — an Arabic document reads right-to-left whatever the reader's phone language — and a meter block shows a value against its range.
Legacy — PDFA finished PDF delivered as-is and opened in the phone's native PDF viewer. POST /ent/v1/print/document, deprecated — Business plan only, the same rule as the PDF upload in the business apps and portal. Don't build anything new on it.

Full request shapes and the block vocabulary are in the API reference.

Try it

Live demo

This is the real SDK, loaded from js.printless.app/button.js, rendering exactly what your customers see. Tap it — no real print is sent.

Live
Demo — no real print is sent