Veritura veritura Docs
veritura.co Open workspace

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#

  1. 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.
  2. The lot clears. A lot is cleared, pending_review, or flagged. 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.
  3. 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.
  4. 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.
  5. 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#

The full walkthrough of both public pages is in patient record pages.

Release refusals you may see#

CodeMeaningThe fix
lot_not_clearedThe lot has not cleared its own document set.Complete the record, receive through the gate, or (own preparation) pharmacist release.
dispenser_identity_requiredSelf-dispensed source, but the pharmacy's identity is not declared.Settings → Pharmacy licence (503A/503B, legal name, state licence).
supplier_unqualifiedPurchased material with no supplier qualification file.Build the supplier file; the refusal lists the elements it needs.
lot_recalled / lot_on_holdA live recall signal or hold stands on the lot.Resolve it on the lot record; a signature never clears a finding.
phi_in_order_refsAn 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.

Veritura reads documents. It does not test material. Documentation status only: never a quality, safety, or FDA-approval determination.