Guide
QR Passport integration
Every dispensed vial carries a small seal with a QR code and a short serial. The code opens a live record at verify.veritura.co/u/<serial> that tells the patient three things in plain language: is this the real thing, is anything wrong with its batch, and who to call. This guide is the full path from a certificate on file to that page: and the two ways a pharmacy system plugs in.
The flow#
- The certificate is read. The pharmacy's laboratory certificate (Eagle, ARL, Sterling, …) is uploaded: in the workspace, or via
POST /v1/check. Veritura reads it deterministically, runs an independent second read whose every confirmation cites a source line re-found verbatim in the document, and files the report. A lot is created carrying the certificate's identity. - The lot clears. A lot is
cleared,pending_review, orflagged. Purchased material clears through complete documentation or the Receiving Gate. A pharmacy's own preparation: a lot whose source is the pharmacy itself: is released by the responsible pharmacist: one recorded act, with a stated reason, stamped with the pharmacist's name and declared state licence on the lot's history. A flagged lot can never be released by signature; a finding is answered with a corrected document. - Seals are minted. A seal batch mints one serial per unit (
VS-XXXX-XXXX, an alphabet with no ambiguous glyphs). Serials can be bound to order or prescription references, which then print on the label for packing checks. Labels download as raw ZPL for Zebra-class thermal printers, a thermal-sized PDF, or an Avery 5160 sheet: see the label specification. - The passport releases. An Evidence Passport is the document-side record issued per order. In production it releases only from a cleared lot. When the source is the pharmacy itself, the release rests on the pharmacy's declared identity (legal name and state licence, declared once in Settings): no supplier qualification file is required for the pharmacy's own work. For purchased material, the supplier file remains the gate.
- The patient scans. The seal resolves to the unit record; the passport's share link resolves to the passport record. Both live on
verify.veritura.co, both are public, and both carry the boundary: documentation status only.
Declare the pharmacy identity first. For self-dispensed flows, the workspace owner sets the facility type (503A or 503B) and the state pharmacy licence under Settings → Pharmacy licence. Until that declaration exists, the pharmacist release and the self-dispensed passport release are refused, and the refusal says exactly that.
Mode A: print Veritura's seal labels#
Nothing to build. The operator mints a batch in the workspace (or your system calls the API below), downloads ZPL or PDF, and prints on the bench thermal printer. One auxiliary label beside the Rx label; no change to the pharmacy-management workflow.
# Mint 30 seals for a lot (API key)
POST /v1/seal-batches
Authorization: Bearer vk_live_...
{
"lot_id": "LOT-…", // or: supplier + product + lot_number to match a logged lot
"count": 30,
"order_refs": ["RX-10001", …] // optional; opaque references only, never patient information
}
→ { ok, batch_id, lot_id, count, serials: ["VS-…", …], labels: { zpl, pdf_thermal, pdf_avery } }
# Download the labels
GET /v1/seal-batches/<id>/labels?format=zpl // raw ZPL, one ^XA…^XZ block per serial
GET /v1/seal-batches/<id>/labels?format=thermal // thermal-sized PDF
GET /v1/seal-batches/<id>/labels?format=avery // Avery 5160 sheet (default)
Mode B: embed the serial in your own Rx label#
Your label template renders the QR and serial itself; Veritura supplies the serials. Mint with POST /v1/seal-batches exactly as above, then encode each serial's URL into your template's QR element:
https://verify.veritura.co/u/<serial>
Requirements when embedding: error correction M or better; a four-module quiet zone on every side; the serial printed in human-readable text near the code; and the typeable address (verify.veritura.co/u/<serial>) somewhere on the label for the patient whose phone will not scan. The URL host must be exactly verify.veritura.co: a printed QR is permanent, and this host is maintained permanently for that reason.
What the patient page shows#
- Headline state, live at scan time: "This vial is on record" (green), "There is a notice on this vial's batch" (amber), recalled (red). The medicine and batch sit directly under the verdict.
- Is this the real thing?: a serial that was never issued, or was altered, does not resolve at all.
- Recall alerts: an optional email; Veritura keeps the email and the vial's code, nothing else, never a name or a prescription.
- What the laboratory paperwork says: the certificate values Veritura transcribed, with the note that the source certificate stays with the pharmacy.
- Who do I call: the dispensing pharmacy, with an optional tap-to-call contact set in Settings.
The full walkthrough of both public pages is in patient record pages.
Release refusals you may see#
| Code | Meaning | The fix |
|---|---|---|
lot_not_cleared | The lot has not cleared its own document set. | Complete the record, receive through the gate, or (own preparation) pharmacist release. |
dispenser_identity_required | Self-dispensed source, but the pharmacy's identity is not declared. | Settings → Pharmacy licence (503A/503B, legal name, state licence). |
supplier_unqualified | Purchased material with no supplier qualification file. | Build the supplier file; the refusal lists the elements it needs. |
lot_recalled / lot_on_hold | A live recall signal or hold stands on the lot. | Resolve it on the lot record; a signature never clears a finding. |
phi_in_order_refs | An order reference looked like patient information. | Use opaque order or PO numbers, never names or DOBs. |
Printer questions to settle before the first roll: printer resolution (the shipped ZPL targets 203 dpi; a 300 dpi variant is produced on request: name the model), label stock loaded, and the smallest vial dispensed (very small vials fit better with Mode B). See the label specification.