Guide
Pinbloom generates unique QR codes: each one is good exactly once. You print them or send them to people, and when they are used for entry, pickup or redemption, an operator validates them with the app: the first scan is valid, every later scan is rejected.
This guide explains how to use Pinbloom from the dashboard: plans and quota, collections, QR code statuses, operators and validation. If you would rather generate QR codes from your own system and receive the outcomes by webhook, go to the Documentation.
1. Plans, quota and extra credits
Every plan includes a monthly quota of QR codes, which renews each billing cycle. The quota is shared across the whole account: it makes no difference whether you generate QR codes from a collection or from your own system through the API (see section 7), both draw from the same count.
You can see how many you have left in the quota bar at the top of the sidebar, or on the Dashboard.
When the quota runs out
- You can no longer generate new QR codes — neither from a collection nor through the API — until you have availability again.
- Existing QR codes keep working as usual: they can still be scanned, revoked and restored without limits.
- The monthly quota renews automatically at the next billing cycle.
- Alternatively, you can buy extra credits at any time from Settings → Subscription — they are used only after the month's quota is exhausted, and they never expire: they stay available after your plan renews.
You can also change plan at any time from the same Subscription page, if you need a higher monthly quota on an ongoing basis. The page shows your active subscription, with its billing cycle, next renewal and codes used: Plan details opens the list of everything it includes. Below it is the plan table, with monthly price, yearly price and how much you save by choosing yearly.
If you need volumes different from the plans, the pricing section of the home page has Request a quote: tell us the volumes you need and whether you prefer to pay monthly or yearly, and we will reply with a tailored proposal. The form is open to people without an account too.
Payments and invoices
Payments for Pinbloom are handled by Paddle, our Merchant of Record: an authorised reseller that collects payment on our behalf and takes care of everything tax-related. That is why your card statement and your invoice show Paddle's name and not ours.
- Invoices and receipts: Paddle issues them. You will find them in Settings → Invoices and in the links that come with each receipt.
- VAT and taxes: the prices you see on the website are exclusive of VAT. The tax due is calculated at the time of payment, based on your country and on whether you are a VAT-registered business or a private individual.
- Cancellation: you can cancel at any time from Settings → Subscription. The service stays active until the end of the period you have already paid for, and there is no minimum term.
- Refunds and disputes: they go through Paddle, under its conditions. If you are not sure who to contact, write to us and we will point you the right way.
More details are in the Terms of Service.
The free trial
With "Try it free" on the landing you get a free trial, with no card. It starts when you confirm your email, or straight away if you sign up with Google. Choosing a plan instead leads to payment, without a trial.
- 14 days and 50 codes, with the Micro plan's features: 1 sandbox and 1 live key, up to 5 operators.
- If you choose a plan, during the trial or after: the codes created in the trial stay and work, and do not count towards the plan. Unused trial codes are not added.
- When the trial ends you cannot create new codes. The ones you created stay valid for 30 days, then the account is suspended, as described in "When your subscription ends".
- One trial per person and per company. If the address, or the company domain, already had a trial, the account is still created, without a trial, and you can choose a plan straight away.
- Emails: we write to you at the start, halfway, 2 days before the end, at the end and 5 days before your codes stop working.
When your subscription ends
If you cancel or stop paying, your subscription stays active until the end of the period already paid.
- Until the end date: everything works as usual.
- For 6 months after the end date: codes are validated as usual, with their own rules, and webhooks are sent. You can still revoke codes and manage operators, API keys and webhooks. You cannot create new codes or change collections, even if you have extra credits.
- After the 6 months: codes are no longer validated, whatever their status, and the app answers "Service expired". The account stays readable: you can see your data, export and download codes, change your password, delete the account or choose a plan.
- Emails: we write to you when the subscription ends and 7 days before your codes stop working.
- Extra credits: they stay on your account and can be used again with a new subscription.
2. Collections
A collection is a group of QR codes generated together for a specific purpose — a trade fair, a promotion, a single print run. It is the most direct way to create QR codes for the physical world, without going through the API.
Creating a collection
From the Collections menu click New collection. A window walks you through a few steps, and you see a summary before anything is generated.
- Details — Give the collection a name. If you like, set the validity period (from / to) and the grace period past midnight (more on that below).
- Codes — Choose what you need: Codes only, to download, or With a print template, to get badges, tickets or vouchers already laid out as a PDF. Then say how many codes to generate: below the field you see how many you have left. With a template you can also upload a CSV file (see below).
- Printing (only if you chose a template) — Choose the language of the printed text and check your company details and logo. They are taken from your Settings, but you can change them for each batch: every time you add more codes to the collection you can set a different language, details and logo.
- Confirm — Check the summary, tick the two confirmation boxes and click Create collection.
Good to know before creating a collection
QR codes are generated immediately and deducted from your quota at that moment — not on first use. They are never refunded, even if you made a mistake or delete the collection right after.
One collection, many batches
A collection is not generated just once. From the collection page you can use Add more codes whenever you like: each group of codes generated together is a batch. Each batch can have a different template, layout, CSV, language and print details, while the name and validity stay those of the collection. The codes of all batches are validated the same way and appear in the same list.
Codes only or print template
When you generate codes you can choose between two ways:
- Codes only: you get the QR codes to download, one by one or all together in a ZIP, and use them as you wish.
- With a print template: the QR codes are placed in a ready-made design, such as a badge, a ticket or a voucher, and you get a PDF to print or send to the print shop.
Print templates depend on your plan: with Micro and Starter you generate codes only, with Pro you choose from the template library, with Business you can also upload your own.
Different details on every piece (CSV)
Many templates have fields to fill in, such as name, seat, row. To fill them you upload a CSV file: one row per code, so the number of rows is the number of QR codes that will be generated. The CSV needs one column for each field of the template; if one is missing, you are told which. In the Codes step you can download a sample CSV already filled in with the right format: just edit it.
Uploaded templates must use the allowed fonts: the list is in the Custom templates section.
Validity and expiry
When you create a collection you can set, if you wish, a start date and an end date.
- Start date: codes are valid from that day, from midnight in the collection's timezone. Scanned before it, the app answers «not yet valid» with the date they become valid from, and the code stays unused.
- End date: all the collection's codes expire at the end of that day. After that, a scan returns "expired" even if the code was never used. With no end date, codes never expire.
- Grace period past midnight (minutes): by default codes expire at midnight on the end date. If use can take place later, for example for a show that starts late or a party that ends at dawn, add a grace period in minutes. Leave it empty if use always ends before midnight.
The collection's status depends on the end date:
| Collection status | When |
|---|---|
| Active | No end date, or the end date has not passed yet. |
| Expired | The end date has passed. |
A collection can only be deleted if none of its QR codes has been used — a safeguard against accidentally deleting data you may still need (who scanned what).
3. Custom templates
With the Business plan you can upload your own templates: an SVG file drawn in your design software (Illustrator, Inkscape, Figma) in which the QR code, each person's details and your company's details end up where you put them. When you upload it we check it and, if something is wrong for printing, we tell you right away what to fix: better a refusal now than a misprinted run.
Size
The <svg> tag must have width and height in a print unit: mm, cm, in, pt or pc. Pixels and bare numbers are not accepted, because their real size depends on the resolution and there is no telling how the print will turn out.
<svg xmlns="http://www.w3.org/2000/svg" width="100mm" height="150mm">
The QR code box
The template must contain exactly one element with id="pinbloom:code", with x, y, width and height: it is the space we put the QR code in, so its position and size are up to you. The simplest way is to draw a <rect>. It must be square (width and height equal) and at least 20 mm across: a stretched or smaller code is hard to read.
<rect id="pinbloom:code" x="60" y="90" width="30" height="30" />
Text to fill in
Where you want different details on each piece, write a placeholder as text, for example {{name}} or {{seat}}. Each placeholder matches a CSV column with the same name: if the CSV lacks a column, we tell you which. Fixed wording, that is text without a placeholder, should be written in English: it is translated into the language chosen for the batch.
<text x="10" y="20">Hello {{name}}, your seat is {{seat}}</text>
name,seat
Marta,A12
Luca,A13
Company details and logo
Your company data, taken from Settings, is inserted with the fields listed below.
- [[azienda.nome]]
- [[azienda.sito]]
- [[azienda.email]]
- [[azienda.telefono]]
- [[azienda.indirizzo]]
- [[azienda.piva]]
When you create the collection, the printing step shows a field for each one the template uses: you can keep the value from Settings or change it, and the change applies to that collection only. A field left empty is not printed. Any field other than those listed gets the template rejected.
<text x="10" y="140">[[azienda.nome]] · [[azienda.sito]]</text>
To show the company logo (the one in Settings, or another chosen for the collection) add a <rect> with id="azienda:logo" and with x, y, width and height. That box is the space you give it: the logo fits in whole, centred and undistorted. If you know your logo's shape, give it a box of the same proportions and no empty space is left.
<rect id="azienda:logo" x="10" y="10" width="60" height="30" />
If the logo never changes, you can also place it directly in the artwork like any other image: no id is needed then.
Allowed fonts
A template asks for a font by name, and that font must be installed on our printing system. A font embedded in the SVG file is not read. To avoid prints in a typeface other than the one you chose, we reject templates that use fonts we do not have. The allowed ones are:
- Archivo
- DejaVu Sans
- DejaVu Sans Mono
- DejaVu Serif
- Inter
- Liberation Mono
- Liberation Sans
- Liberation Serif
- Lora
- Montserrat
- Open Sans
- Oswald
- Playfair Display
- Raleway
- Roboto
- Roboto Mono
- Source Serif 4
- Work Sans
What if you want another font? In your design software, convert the fixed text to outlines: it becomes a drawing and the font is no longer needed. This applies to titles and captions that never change. Text filled in from the CSV, that is placeholders such as {{name}}, must stay as text and use one of the allowed fonts.
Why an upload is rejected
Every rejection says what to change. These are all the reasons:
| What we tell you | What to do |
|---|---|
| The file could not be read as an SVG | Export the file again as a plain SVG. |
| There is no element with id pinbloom:code | Add the QR code box. |
| More than one element with id pinbloom:code | Exactly one is needed: remove the duplicates. |
| The box has no x, y, width and height | Use a rectangle, which always has them. |
| The svg tag has no width and height | Set the size of the sheet. |
| The size is not in a print unit | Use mm, cm, in, pt or pc. |
| The file contains scripts or event handlers | Remove them: a template is artwork only. |
| The template asks for company details we do not have | Use only the company fields listed above. |
| The font is not installed | Use an allowed font or convert the text to outlines. |
| The code box is not square | Make it square. |
| The code box is under 20 mm | Enlarge it to at least 20 mm across. |
| The upload is no longer available | It has expired: upload the file again. |
4. QR code statuses
Every QR code, whether it came from a collection or from the API, goes through the same statuses — it applies everywhere in the app.
| Status | What it means |
|---|---|
| Unused | Ready to be scanned. |
| Used | Already validated once by an operator. Final — it never goes back, and it cannot be revoked. |
| Revoked | Deactivated manually by you — a scan rejects it. Only possible on a QR code that is still unused, and reversible at any time (see below). |
Expired does not appear as a status in the table: it is checked at the moment of the scan. That is why a code whose end date has passed can still show as "Unused" in the list, while the operator who scans it will see it as expired.
Revoking or restoring QR codes
Revoking a code means deactivating it: while it is revoked, a scan is rejected. You can reactivate it (restore it) whenever you like, but only if it has not been used yet.
- On a collection's page or in the QR codes API section, click Enable selection.
- Select QR codes by hand, or use Select all to grab every "Unused" one, every "Revoked" one, or both.
- Click Revoke selected or Restore selected — the action only touches QR codes in the right status for that step (revoke only unused ones, restore only revoked ones); the others in the selection stay unchanged.
5. Operators: account vs collection
An operator is a person authorised to validate QR codes with the app in the field. You can invite them in two different ways, depending on how broad their access should be.
- Collection operator — invited from the "Operators" tab inside a specific collection. They can only validate that collection's QR codes.
- Account-level operator — invited from the "Operators" page in the main menu. They can validate any QR code on the account: both those generated through the API and those of any collection.
The mechanism is the same for both: the operator receives an email telling them they have been authorised, and has nothing to confirm. To sign in to the app they enter their email and the 6-digit code sent to them by email. The authorisation is valid immediately, until you revoke it: you can do so at any time from the page where you invited the operator. Each operator uses the app on one phone at a time: signing in on another phone closes the session on the first. The Micro and Starter plans have a maximum number of operators: 5 for Micro, 20 for Starter. Pro and Business have no limit. The same operator on several collections counts once, and a revoked operator does not count.
6. Validating QR codes with the app
The operator uses the Pinbloom app (on any Android or iOS phone), points it at the QR code and sees the outcome straight away:
- Valid (green): the code is good and from now on it counts as Used. If the code carries details, such as seat, row or name, the operator sees them at once.
- Already used (red): the code was validated before; the app shows when.
- Expired or Revoked: the code is no longer valid and is rejected, with a message saying why.
Every scan is recorded with its outcome. To see who validated what and when, open Operators and click the history icon next to the operator: you will find the date, code, collection and outcome of every scan.
Without network: if the network is missing, the app keeps working. The scan results are synced with the server as soon as the phone is back online.
Recommended system requirements
For the best experience, especially when the network is temporarily unavailable:
- System
- Android 15 or later
- Processor
- Recent mid-range
- Memory (RAM)
- 8 GB or more
- Minimum
- Android 7.0
- System
- iOS 13 or later
7. Connecting your system (for developers)
If you have an online shop or a back office, you can have your own system generate QR codes directly, without going through the dashboard, and react to what happens in the field.
- API: your system asks Pinbloom to generate a QR code (or a barcode) and places it where needed, for example in an order confirmation. Codes generated this way draw from the same quota as your collections.
- API keys: you create them from Settings → Developers, one for each integration. There is also a test (sandbox) key to try things out without using quota.
- Webhooks: on every scan Pinbloom notifies your system with a signed request. That lets you update your own data automatically: for example, when a customer picks up goods and the scan succeeds, your system marks the order as "picked up".
Examples, formats and technical details are in the Documentation, which you can read without signing up.
8. Support
For questions or problems you can open a ticket straight from your account area, without going through email.
- Opening a ticket: from Support at the bottom of the left menu choose New ticket, write the subject and describe the problem.
- Replies: we answer from the account area and also notify you by email, in your language. The ticket page shows the whole conversation and you can add more messages.
- Status: a ticket is “Waiting for support” when our team owes you a reply, “Answered by support” when it is your turn, “Closed” once it is solved.
- Closing and reopening: you can close a ticket when you are done, and reopen it by writing again. If our team closed it, it stays closed: open a new ticket for further requests.