Veritura

For telehealth platforms, clinics and anyone who buys compounded medicine

Buyer API

Read pharmacy and supplier files from your own software: every item with who checked it, when, and the receipt for the lookup. Free to read. Webhooks are on a paid plan.

Free to readFiles, your lookups, your watches and the FDA's lists
300 a minutePer workspace, test and live apart
Dated versionsPin 2026-10-01 with X-Veritura-Version
A receipt on every itemWho checked it, when, at which source

Start in two minutes

  1. Make a keyNo workspace yet? Create a free clinic or telehealth workspace; it takes a minute. Then in Settings, Developer, choose Make a test key. It is shown once; keep it in your server's secret settings.
  2. Ask for the pharmacy filesA test key reads a fixed sample with invented names, so you can build before you read anything real. In the examples, replace vk_test_... with your key.
  3. Switch to a live keyThe same calls read every published file, your watches and your private lookups.
curl https://www.veritura.co/v1/pharmacies \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"

Call it from your server. A key in a browser or an app can be copied by anyone who opens it.

Keys and modes

Every key carries one permission, network:read, and nothing else: it cannot read your documents, record a decision, issue a passport or change anything in your workspace.

Test key

Starts vk_test_. Reads a fixed sample: three published files and two private lookups, all with invented names, the same in every environment. Watches made with it stay in the sample. Every answer says "mode": "test".

Live key

Starts vk_live_. Reads every published pharmacy and supplier file, your workspace's watches and your private lookups. Every answer says "mode": "live".

  • A key is shown once, when it is made. Veritura keeps only its SHA-256 fingerprint, so a lost key is revoked and a new one made.
  • A key lasts 90 days unless you choose a shorter time, and stops at once when it is revoked in Settings, or when the teammate who made it leaves the workspace.
  • Send it as Authorization: Bearer vk_.... Cookies are never accepted here.

Versioning

Send X-Veritura-Version: 2026-10-01 with every request. Every answer carries X-Veritura-Version with the version it was answered under. With no header, the latest stable version answers, and that changes when a new version ships: pin the version in production.

VersionStatusReleased
2026-10-01Latest stableOct 1, 2026

What changes without a new version

New endpoints, new optional parameters, new fields in an answer, new error codes and new wording in sentences such as checkedByWord or a change's line. Write your code to ignore fields it does not know.

What needs a new version

Removing or renaming a field or an endpoint, changing what a field holds or its type, a new required parameter, and a new value in a field whose values the OpenAPI file lists (such as kind or checkedBy).

How long an old version is kept, and how a change is announced

  • A breaking change ships only under a new dated version. The version it replaces keeps working for at least 12 months after the new one is released.
  • Each new version, and the date the old one stops, is announced in the dated changelog on the day it ships.
  • From that day, every answer under the old version carries Deprecation and Sunset headers (RFC 9745 and RFC 8594) and a Link to this section, so your logs show what still uses it.
  • An unknown version is a 400 version_unknown, and its versions field lists the versions this API accepts.
curl -i https://www.veritura.co/v1/pharmacies \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
An unknown version 400
{
  "error": "\"2026-01-01\" is not a version of this API. Send X-Veritura-Version: 2026-10-01, or leave the header out for the latest stable version.",
  "code": "version_unknown",
  "versions": [
    "2026-10-01"
  ]
}

Pagination

Every list takes limit and cursor and answers with next_cursor. Send next_cursor back as cursor for the next page; null means you have every row.

  • A cursor marks a place in the list (the last row you read), not a count of rows. A file published while you page never repeats a row or skips one that was already there; a new row after your place shows up on a later page.
  • Treat a cursor as opaque: its contents can change. It belongs to the list, the filters and the key's mode it came from; sent with anything else it is a 400 cursor_invalid.
  • offset is deprecated. /v1/pharmacies and /v1/suppliers still take limit and offset, and will until at least Oct 1, 2027. An answer that used offset carries Deprecation, Sunset and Link headers. Send cursor or offset, never both.
ListlimitOrder
GET /v1/pharmacies1 to 500, default 100Alphabetical
GET /v1/suppliers1 to 500, default 100Alphabetical
GET /v1/lookups1 to 500, default 100Alphabetical
GET /v1/watches1 to 500 of each, default 100Watches oldest first, changes newest first; one cursor pages both
GET /v1/exposure1 to 24, default 24The order you named the products; counts covers them all
curl -G https://www.veritura.co/v1/pharmacies -d limit=1 \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"

# then, with next_cursor from that answer:
curl -G https://www.veritura.co/v1/pharmacies -d limit=1 -d cursor=vc1_... \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
A first page limit=1, from a test key: the cursor works with any test key
{
  "ok": true,
  "mode": "test",
  "order": "alphabetical",
  "note": "Listed in alphabetical order. Nothing is ranked or graded.",
  "total": 2,
  "limit": 1,
  "next_cursor": "vc1_eyJsIjoicGhhcm1hY2llcyIsInMiOiI2NTIyZDhjNmQzYTc1YmE3IiwiayI6WyJTYW1wbGUgQmF5dmlldyBDb21wb3VuZGluZyIsInZmbF9zYW1wbGVfYmF5dmlldyJdfQ",
  "pharmacies": [
    {
      "id": "vfl_sample_bayview",
      "name": "Sample Bayview Compounding",
      "fileUrl": "/v1/pharmacies/vfl_sample_bayview/file",
      "sample": true
    }
  ]
}

Idempotency

POST /v1/lookups and POST /v1/watches take an Idempotency-Key header. Send a new random key with each new request (a UUID works), and the same key again when you retry that request after a timeout or a dropped connection.

You sendWithin 24 hours you get
The same key and the same bodyThe first answer again, with Idempotent-Replayed: true. Nothing runs twice. A replay counts toward the 300 a minute, not toward the 10 lookups a minute.
The same key and a different bodyA 409 idempotency_key_reused. Use a new key for a new request.
The same key while the first request is still runningA 409 idempotency_in_progress with Retry-After: 1.
The same key after an errorA fresh run: only a successful answer is kept, so fix the request and send it again with the same key.
  • Keys are kept for 24 hours, per workspace and per mode. After that a key is free to use again.
  • The body is compared field by field, so the order of the fields does not matter.
  • Both clients send a key with every write and reuse it on their own retries. Pass your own key to tie a write to a record in your system.
  • DELETE /v1/watches/{id} needs no key: a second delete answers 404 and changes nothing.
curl -X POST https://www.veritura.co/v1/watches \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01" \
  -H "Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -H "Content-Type: application/json" \
  -d '{"kind":"pharmacy","id":"vfl_sample_northgate"}'
The same key with a different body 409
{
  "error": "This Idempotency-Key was used in the last 24 hours for a different request. Use a new key for a new request.",
  "code": "idempotency_key_reused"
}

Rate limits

300 requests a minute for each workspace, counted apart for test and live keys, free. A workspace on a paid plan reads 600 a minute, and one with supported API automation (Operations) 1,200 a minute. Running a lookup has its own budget of 10 a minute. Every answer says where you stand:

HeaderWhat it says
X-RateLimit-LimitRequests allowed this minute: 300 free, 600 on a paid plan, 1,200 with API automation.
X-RateLimit-RemainingRequests left this minute.
X-RateLimit-ResetWhen the minute resets, in Unix seconds.
Retry-AfterOn a 429 only: seconds to wait.

Need more? Higher volume is on a paid plan. Write to us and say what you are building.

Reading a file

A file lists the items that apply to the firm (a 503A pharmacy, a 503B outsourcing facility, a maker or a distributor). Each item says what it reads now, who checked it, when, and how; findings sit apart, first. What was not checked says so, in words, and is never read as clean.

Who checked it

checkedBycheckedByWord, as it readsWhat it means
public_sourcePublic source lookupVeritura ran a lookup at the source itself (the FDA, openFDA, NPPES, OIG) on the date shown. The receipt keeps the query and the answer.
independent_personChecked at the issuer by Casey Park, Sample Lakeside ClinicSomeone independent of the firm opened the issuer's own record and recorded what it said, with their name and company.
selfRecorded by the pharmacy's own staffThe firm checked itself. Shown as its own record, never as an independent confirmation.
documentRead by VerituraVeritura read the document line by line against the rule it answers to.
claimTyped in; nobody checked it at the issuerA value someone typed. Nothing checked it.

The receipt

Every item that was checked carries a receipt: which source was asked, the query, the date and what came back.

FieldWhat it holdsIn the sample
sourceThe source asked.FDA registered outsourcing facilities
queryWhat was asked."Sample Northgate Outsourcing"
capturedAtThe date it was asked.2026-10-20
resultWhat the source returned."Sample Northgate Outsourcing" is on the FDA's list of registered outsourcing facilities.
urlA link to the source, https only.https://www.fda.gov/drugs/human-drug-compounding/registered-outsourcing-facilities
hashSHA-256 of the captured row.3a4ea307caee41de...

For telehealth buyers

Every file also carries telehealth: LegitScript for the website it sells through, the states it is licensed in, the pharmacist in charge with the OIG screen, and its "essentially a copy" practice. And exposure: where each product stands on the FDA's public lists, with the source and the date of each list. Facts, never a verdict; whether a preparation may be compounded is the pharmacy's and the prescriber's call.

completeness counts what is on file and how it was checked, never a rating: checked is the items a public source, someone independent of the firm, the issuer or Veritura's own read answered, out of applicable; selfRecorded is the firm's own records, which are never counted as checked and read "state": "self_recorded". Compare two files item by item, never by their counts: a firm with more items checked is not a better firm.

Endpoints

Base URL https://www.veritura.co. Every success is { "ok": true, "mode": ..., ... }. Lists are alphabetical unless they say otherwise; nothing is ranked.

List published pharmacy files

GET/v1/pharmacies

Published pharmacy files, in alphabetical order. Each row carries the facts a buyer reads before opening the file: when the public sources were last looked up, how many findings came from them, the states it is licensed in, and how many documents were read. Paged with limit and cursor.

ParameterWhat it is
qPart of the name. Up to 80 characters.
stateHome state, two letters: TX.
npiThe 10-digit NPI.
limit1 to 500. Default 100.
cursornext_cursor from the page before.
offsetDeprecated: use cursor. Works until at least Oct 1, 2027.
curl -G https://www.veritura.co/v1/pharmacies \
  -d state=TX -d limit=50 \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response From a test key: the sample data
{
  "ok": true,
  "mode": "test",
  "order": "alphabetical",
  "note": "Listed in alphabetical order. Nothing is ranked or graded.",
  "total": 2,
  "limit": 100,
  "next_cursor": null,
  "pharmacies": [
    {
      "id": "vfl_sample_bayview",
      "slug": "sample-bayview-compounding",
      "url": "",
      "name": "Sample Bayview Compounding",
      "side": "pharmacy",
      "kind": "pharmacy",
      "profile": {
        "logoDataUrl": "",
        "headline": "",
        "location": "",
        "website": "",
        "specialties": [],
        "presentations": [],
        "authored": "The firm's own words. Veritura does not establish them."
      },
      "documents": [],
      "kindLabel": "503A compounding pharmacy",
      "homeState": "TX",
      "npi": "",
      "publishedAt": "2026-08-07",
      "lastRefreshAt": "2026-10-20",
      "facts": {
        "checked": 6,
        "applicable": 26,
        "notChecked": 18,
        "selfRecorded": 2,
        "coverage": "6 of 26 items checked",
        "lastLookedUp": "2026-10-20",
        "publicFindings": 0,
        "documentFindings": 0,
        "recordsFindings": 0,
        "findings": 0,
        "licensedStates": [],
        "selfLicensedStates": [
          "TX"
        ],
        "certificatesRead": 2,
        "testReportsRead": 2,
        "supplierCertificatesRead": 0,
        "credentials": []
      },
      "fileUrl": "/v1/pharmacies/vfl_sample_bayview/file",
      "sample": true,
      "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
    },
    {
      "id": "vfl_sample_northgate",
      "slug": "sample-northgate-outsourcing",
      "url": "",
      "name": "Sample Northgate Outsourcing",
      "side": "pharmacy",
      "kind": "outsourcing",
      "profile": {
        "logoDataUrl": "",
        "headline": "",
        "location": "",
        "website": "",
        "specialties": [],
        "presentations": [],
        "authored": "The firm's own words. Veritura does not establish them."
      },
      "documents": [],
      "kindLabel": "503B outsourcing facility",
      "homeState": "FL",
      "npi": "",
      "publishedAt": "2026-08-07",
      "lastRefreshAt": "2026-10-20",
      "facts": {
        "checked": 5,
        "applicable": 26,
        "notChecked": 20,
        "selfRecorded": 1,
        "coverage": "5 of 26 items checked",
        "lastLookedUp": "2026-10-20",
        "publicFindings": 1,
        "documentFindings": 0,
        "recordsFindings": 0,
        "findings": 1,
        "licensedStates": [],
        "selfLicensedStates": [
          "FL"
        ],
        "certificatesRead": 0,
        "testReportsRead": 0,
        "supplierCertificatesRead": 0,
        "credentials": []
      },
      "fileUrl": "/v1/pharmacies/vfl_sample_northgate/file",
      "sample": true,
      "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
    }
  ]
}

Read one published pharmacy file

GET/v1/pharmacies/{id}/file

The same file a buyer reads on the pharmacy's public page, as data. Findings come first. Each item says who checked it (checkedBy, checkedByWord), when, and carries its receipt. An unpublished file does not exist here: the answer is 404.

ParameterWhat it is
idThe file id (vfl_...) or its public name, as in /pharmacy/harbor-compounding.
curl https://www.veritura.co/v1/pharmacies/vfl_sample_northgate/file \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response Shortened: the full file lists all 37 items of the catalogue; 26 apply to this pharmacy and are counted (completeness.applicable), and the rest carry applies: false
{
  "ok": true,
  "mode": "test",
  "file": {
    "id": "vfl_sample_northgate",
    "slug": "sample-northgate-outsourcing",
    "url": "",
    "side": "pharmacy",
    "kind": "outsourcing",
    "kindLabel": "503B outsourcing facility",
    "name": "Sample Northgate Outsourcing",
    "homeState": "FL",
    "npi": "",
    "publishedAt": "2026-08-07",
    "lastRefreshAt": "2026-10-20",
    "asOf": "2026-10-21",
    "publishedAtTime": "2026-08-07T16:00:00.000Z",
    "lastRefreshAtTime": "2026-10-20T06:00:00.000Z",
    "statement": "Veritura checks paperwork and records at their source and reads documents against the rule each must meet. This page is not an approval, a certification or a rating of the pharmacy, and it says nothing about any medicine. Veritura does not sell medicine, route orders or rank pharmacies.",
    "completeness": {
      "checked": 5,
      "confirmed": 5,
      "applicable": 26,
      "bySelf": 1,
      "selfRecorded": 1,
      "claimed": 0,
      "notChecked": 20,
      "notApplicable": 10,
      "catalogue": 37,
      "line": "5 of 26 items checked",
      "detail": "5 of 26 items checked · 1 recorded by the pharmacy itself, not checked · 20 not checked here",
      "appliesTo": "the items that apply to a 503B outsourcing facility",
      "uncounted": 1,
      "note": "The full file has 37 items: 26 counted here, 1 shown but not counted (adverse event signals, which never establish cause), and 10 that do not apply to a 503B outsourcing facility. An item is checked when a public source, someone independent of the pharmacy, the issuer or Veritura's own read answered it; a finding counts as checked information. 1 more was recorded by the pharmacy's own staff and is not counted as checked. This is a count of what is on file and how it was checked, never a rating."
    },
    "findings": [
      {
        "item": "inspections",
        "label": "FDA inspections: classification, citations, 483s",
        "from": "source",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "summary": "FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations.",
        "at": "2026-10-15",
        "severity": "medium",
        "by": {
          "kind": "source",
          "name": "FDA Data Dashboard: inspections",
          "note": "Run by Veritura's weekly refresh"
        },
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "receipt": {
          "id": "src_66cec57d618735d34938",
          "source": "FDA Data Dashboard: inspections",
          "url": "https://datadashboard.fda.gov/oii/cd/inspections.htm",
          "query": "\"Sample Northgate Outsourcing\"",
          "capturedAt": "2026-10-15",
          "sourceCurrentAs": "",
          "result": "FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations.",
          "by": "Veritura source worker",
          "limitation": "The capture establishes only the recorded public-source observation and date. It does not establish approval, compliance, authenticity, safety, or product quality.",
          "hash": "4df2b21e96e23947a94708e7f719fa679ba4492cf7c67427310aa5a329efcc6c"
        },
        "source": {
          "title": "FDA Data Dashboard: inspections, citations, compliance actions",
          "url": "https://datadashboard.fda.gov/oii/cd/inspections.htm"
        },
        "checks": [],
        "details": [
          {
            "date": "2026-08-07",
            "classification": "Voluntary Action Indicated",
            "citations": "2"
          }
        ],
        "retired": null
      }
    ],
    "pic": {
      "name": "",
      "nameFrom": "",
      "board": {
        "state": "missing",
        "stateWord": "Not checked here",
        "routeWord": "Not checked here",
        "at": "",
        "summary": "Nothing on record yet."
      },
      "oig": {
        "state": "verified",
        "stateWord": "No match in the list as loaded",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "summary": "Nothing on record for \"Sample Northgate Outsourcing\" in HHS OIG List of Excluded Individuals/Entities."
      }
    },
    "groups": [
      {
        "key": "identity",
        "label": "Who they are",
        "items": [
          "permit",
          "pic",
          "nonresident",
          "npi",
          "dea",
          "fda_registration",
          "entity"
        ]
      },
      {
        "key": "accreditation",
        "label": "Accreditation",
        "items": [
          "pcab",
          "lab_17025",
          "quality_agreement"
        ]
      }
    ],
    "items": [
      {
        "id": "fda_registration",
        "group": "identity",
        "label": "FDA registration",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "\"Sample Northgate Outsourcing\" is on the FDA's list of registered outsourcing facilities.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "FDA registered outsourcing facilities",
          "note": "Run by Veritura's weekly refresh"
        },
        "receipt": {
          "id": "src_9bac097f365005b33f2f",
          "source": "FDA registered outsourcing facilities",
          "url": "https://www.fda.gov/drugs/human-drug-compounding/registered-outsourcing-facilities",
          "query": "\"Sample Northgate Outsourcing\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "\"Sample Northgate Outsourcing\" is on the FDA's list of registered outsourcing facilities.",
          "by": "Veritura source worker",
          "limitation": "The capture establishes only the recorded public-source observation and date. It does not establish approval, compliance, authenticity, safety, or product quality.",
          "hash": "3a4ea307caee41de6d1a6ba90e4ddc992e21550042fd72729997918f56d5d621"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-11-19",
        "retired": null,
        "how": "An outsourcing facility is matched on the FDA's registered outsourcing facilities list; a maker or repackager in the FDA's establishment registration. Registration is not approval.",
        "source": {
          "title": "FDA drug establishments current registration site (DECRS)",
          "url": "https://www.fda.gov/drugs/drug-approvals-and-databases/drug-establishments-current-registration-site-decrs"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "inspections",
        "group": "fda",
        "label": "FDA inspections: classification, citations, 483s",
        "applies": true,
        "counted": true,
        "state": "finding",
        "stateWord": "Finding on record",
        "tone": "critical",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Finding on record",
        "howMark": "bad",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-15",
        "by": {
          "kind": "source",
          "name": "FDA Data Dashboard: inspections",
          "note": "Run by Veritura's weekly refresh"
        },
        "receipt": {
          "id": "src_66cec57d618735d34938",
          "source": "FDA Data Dashboard: inspections",
          "url": "https://datadashboard.fda.gov/oii/cd/inspections.htm",
          "query": "\"Sample Northgate Outsourcing\"",
          "capturedAt": "2026-10-15",
          "sourceCurrentAs": "",
          "result": "FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations.",
          "by": "Veritura source worker",
          "limitation": "The capture establishes only the recorded public-source observation and date. It does not establish approval, compliance, authenticity, safety, or product quality.",
          "hash": "4df2b21e96e23947a94708e7f719fa679ba4492cf7c67427310aa5a329efcc6c"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-11-14",
        "retired": null,
        "how": "The FDA's Data Dashboard: each inspection's classification (no action, voluntary action, official action indicated), its citations and any published 483. State inspections are not in the FDA's data.",
        "source": {
          "title": "FDA Data Dashboard: inspections, citations, compliance actions",
          "url": "https://datadashboard.fda.gov/oii/cd/inspections.htm"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "warning_letters",
        "group": "fda",
        "label": "FDA warning letters",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "Nothing on record for \"Sample Northgate Outsourcing\" in FDA warning letters.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "FDA warning letters",
          "note": "Run by Veritura's weekly refresh"
        },
        "receipt": {
          "id": "src_5a83ff6e764e191c106f",
          "source": "FDA warning letters",
          "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters",
          "query": "\"Sample Northgate Outsourcing\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "Nothing on record for \"Sample Northgate Outsourcing\" in FDA warning letters.",
          "by": "Veritura source worker",
          "limitation": "No match applies only to the recorded query, source coverage, and capture time. It is not a universal clearance.",
          "hash": "2f0561bdcbf6f12f5ed896dfbf022a1f20252b6b3d3ec31708478d85f0c4b1ef"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-11-03",
        "retired": null,
        "how": "The FDA's warning letter database, searched by the firm's name.",
        "source": {
          "title": "FDA warning letters",
          "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "permit",
        "group": "identity",
        "label": "State license, home state",
        "applies": true,
        "counted": true,
        "state": "stale",
        "stateWord": "Due for a re-check",
        "tone": "attention",
        "checkedHere": false,
        "onRecord": true,
        "howWord": "Recorded by the pharmacy itself",
        "howMark": "self",
        "checkedBy": "self",
        "checkedByWord": "Recorded by the pharmacy's own staff",
        "summary": "Active, name and number match (FL).",
        "route": "source_person",
        "routeWord": "Checked at source",
        "at": "2026-09-11",
        "by": {
          "kind": "person",
          "name": "Riley Chen, Sample Northgate Outsourcing",
          "note": ""
        },
        "receipt": {
          "id": "src_4586083273f7c0c1280c",
          "source": "Checked at the issuer's source by a person",
          "url": "https://nabp.pharmacy/about/boards-of-pharmacy/",
          "query": "Active, name and number match (FL).",
          "capturedAt": "2026-09-11",
          "sourceCurrentAs": "",
          "result": "Active, name and number match (FL).",
          "by": "[email withheld]",
          "limitation": "The capture establishes only the recorded public-source observation and date. It does not establish approval, compliance, authenticity, safety, or product quality.",
          "hash": "974c1c8b51111025a1466d7529fabad86276fe81f56cfeec511166557d317ed2"
        },
        "docName": "",
        "checks": [],
        "expires": "2026-11-10",
        "daysLeft": 20,
        "nextCheck": "2026-10-11",
        "retired": null,
        "how": "A person opens the board's own lookup and records status, class, expiry and any discipline. Most boards forbid automated queries; the lookup is captured and dated.",
        "source": {
          "title": "State board of pharmacy license lookup",
          "url": "https://nabp.pharmacy/about/boards-of-pharmacy/"
        },
        "history": [],
        "askable": "permit"
      },
      {
        "id": "wdd",
        "group": "identity",
        "label": "FDA wholesale distributor reporting",
        "applies": false
      }
    ],
    "licensedStates": [],
    "selfLicensedStates": [
      "FL"
    ],
    "notCheckedHere": [
      {
        "id": "pic",
        "label": "Pharmacist in charge",
        "why": "Nothing on record yet.",
        "how": "Named on the board record where the board shows it (Florida, Texas). Where it does not (California, Illinois), the board's permit record or letter is requested. The PIC's own license is checked too.",
        "askable": "pic"
      },
      {
        "id": "nonresident",
        "label": "Licensed in every state it ships to",
        "why": "Nothing on record yet.",
        "how": "Each state its units reach needs a nonresident permit, and California needs its separate sterile compounding license. A state it ships to with no permit on record is a gap.",
        "askable": "nonresident"
      }
    ],
    "notCheckedLine": "20 of 26 items not checked here: ask for all",
    "askAll": [
      "pic",
      "nonresident",
      "dea",
      "entity",
      "pcab",
      "lab_17025",
      "quality_agreement",
      "state_inspection",
      "sterility",
      "endotoxin",
      "potency",
      "bud",
      "stability",
      "cold_chain",
      "validation",
      "outsourcing_duties"
    ],
    "askAllUrl": "",
    "blocks": {
      "licences": [
        {
          "state": "FL",
          "kind": "Home state license",
          "home": true,
          "result": "ok",
          "resultWord": "Recorded as active",
          "howMark": "self",
          "current": true,
          "tone": "neutral",
          "routeWord": "",
          "at": "2026-09-11",
          "expires": "2026-11-10",
          "by": {
            "kind": "person",
            "name": "Riley Chen, Sample Northgate Outsourcing",
            "note": ""
          },
          "checkedBy": "self",
          "checkedByWord": "Recorded by the pharmacy's own staff"
        }
      ]
    },
    "options": {
      "upstream": {
        "on": false,
        "since": "",
        "withdrawnAt": "",
        "supplierNames": false
      },
      "permits": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "readiness": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "operations": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "copies": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      }
    },
    "asks": {
      "open": 0,
      "answered": 0,
      "buyers": 0,
      "medianAnswerDays": null,
      "window": "180 days",
      "line": "No buyer has asked this pharmacy for a document through Veritura yet."
    },
    "doors": null,
    "howToRead": [
      {
        "route": "Matched at source",
        "means": "A lookup ran against the issuer's own public source. The receipt records the query, the time and what the source returned."
      },
      {
        "route": "Answered by the issuer in writing",
        "means": "The issuer answered in writing. The reply is kept."
      }
    ],
    "whoChecked": [
      {
        "mark": "Public source lookup",
        "means": "Veritura ran a lookup at the source itself (the FDA, openFDA, NPPES, OIG) on the date shown. The receipt keeps the query and the answer."
      },
      {
        "mark": "Checked at the issuer by a named person",
        "means": "Someone independent of the pharmacy, such as a buyer's staff, opened the issuer's own record and recorded what it said, with their name, job title and company."
      },
      {
        "mark": "Recorded by the pharmacy's own staff",
        "means": "The pharmacy checked itself and recorded what the issuer's record said. Shown in grey with who recorded it, never as an independent confirmation."
      },
      {
        "mark": "Read by Veritura",
        "means": "Veritura read the document itself, line by line, against the rule it answers to."
      }
    ],
    "answer": {
      "facts": [
        "FDA and OIG: 1 finding (FDA inspection, 2026-10-15).",
        "Licenses: FL recorded by the pharmacy itself, not checked independently.",
        "Test reports: none read yet."
      ],
      "coverage": "5 of 26 items checked, 1 more recorded by the pharmacy itself; 20 not checked here. A count of what is on file, never a score.",
      "documentsRead": 0,
      "documentsOpen": 0,
      "documentsBad": 0,
      "supplierCertificatesRead": 0,
      "supplierCertificatesOwed": 0,
      "supplierCertificates": null,
      "line": "FDA and OIG: 1 finding (FDA inspection, 2026-10-15). Licenses: FL recorded by the pharmacy itself, not checked independently. Test reports: none read yet.",
      "boundary": "Facts from the file below, each with its source and date. Never a grade or a rank of the pharmacy."
    },
    "glance": [
      {
        "key": "license:FL",
        "label": "FL license",
        "word": "",
        "who": "recorded by the pharmacy",
        "at": "2026-09-11",
        "checkedBy": "self",
        "tone": "neutral",
        "line": "FL license · recorded by the pharmacy · 2026-09-11"
      },
      {
        "key": "fda_registration",
        "label": "FDA 503B list",
        "word": "",
        "who": "matched at the source",
        "at": "2026-10-20",
        "checkedBy": "public_source",
        "tone": "positive",
        "line": "FDA 503B list · matched at the source · 2026-10-20"
      },
      {
        "key": "fda",
        "label": "FDA and OIG records",
        "word": "1 finding",
        "who": "matched at the source",
        "at": "2026-10-20",
        "checkedBy": "public_source",
        "tone": "critical",
        "line": "FDA and OIG records · 1 finding · matched at the source · 2026-10-20"
      }
    ],
    "telehealth": {
      "website": "",
      "websiteLine": "No website on file",
      "legitscript": {
        "applies": false,
        "naWord": "No website on file",
        "line": "No website on file. LegitScript and NABP's digital pharmacy list cover the website a pharmacy sells through, and this file names none."
      },
      "nabpDigital": {
        "applies": false,
        "naWord": "No website on file"
      },
      "states": {
        "home": "FL",
        "list": [
          {
            "state": "FL",
            "kind": "home",
            "status": "home",
            "resultWord": "Recorded as active",
            "tone": "neutral",
            "current": true,
            "checkedBy": "self",
            "checkedByWord": "Recorded by the pharmacy's own staff",
            "at": "2026-09-11",
            "expires": "2026-11-10"
          }
        ],
        "licensed": [],
        "selfRecorded": [
          "FL"
        ],
        "negative": [],
        "map": [
          {
            "state": "AK",
            "x": 0,
            "y": 0,
            "status": "none",
            "word": ""
          },
          {
            "state": "ME",
            "x": 10,
            "y": 0,
            "status": "none",
            "word": ""
          },
          {
            "state": "VT",
            "x": 9,
            "y": 1,
            "status": "none",
            "word": ""
          },
          {
            "state": "NH",
            "x": 10,
            "y": 1,
            "status": "none",
            "word": ""
          },
          {
            "state": "WA",
            "x": 0,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "ID",
            "x": 1,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MT",
            "x": 2,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "ND",
            "x": 3,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MN",
            "x": 4,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "IL",
            "x": 5,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "WI",
            "x": 6,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MI",
            "x": 7,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "NY",
            "x": 8,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "RI",
            "x": 9,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MA",
            "x": 10,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "OR",
            "x": 0,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "NV",
            "x": 1,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "WY",
            "x": 2,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "SD",
            "x": 3,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "IA",
            "x": 4,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "IN",
            "x": 5,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "OH",
            "x": 6,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "PA",
            "x": 7,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "NJ",
            "x": 8,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "CT",
            "x": 9,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "CA",
            "x": 0,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "UT",
            "x": 1,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "CO",
            "x": 2,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "NE",
            "x": 3,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "MO",
            "x": 4,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "KY",
            "x": 5,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "WV",
            "x": 6,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "VA",
            "x": 7,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "MD",
            "x": 8,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "DE",
            "x": 9,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "AZ",
            "x": 1,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "NM",
            "x": 2,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "KS",
            "x": 3,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "AR",
            "x": 4,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "TN",
            "x": 5,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "NC",
            "x": 6,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "SC",
            "x": 7,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "DC",
            "x": 8,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "OK",
            "x": 3,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "LA",
            "x": 4,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "MS",
            "x": 5,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "AL",
            "x": 6,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "GA",
            "x": 7,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "HI",
            "x": 0,
            "y": 7,
            "status": "none",
            "word": ""
          },
          {
            "state": "TX",
            "x": 3,
            "y": 7,
            "status": "none",
            "word": ""
          },
          {
            "state": "FL",
            "x": 8,
            "y": 7,
            "status": "home",
            "word": "Recorded as active"
          }
        ],
        "source": "The licenses on file",
        "note": "The newest record of each state license and nonresident permit on this file, with who checked it."
      },
      "pic": {
        "name": "",
        "nameFrom": "",
        "board": {
          "state": "missing",
          "stateWord": "Not checked here",
          "routeWord": "Not checked here",
          "at": "",
          "summary": "Nothing on record yet."
        },
        "oig": {
          "state": "verified",
          "stateWord": "No match in the list as loaded",
          "routeWord": "Matched at source",
          "at": "2026-10-20",
          "summary": "Nothing on record for \"Sample Northgate Outsourcing\" in HHS OIG List of Excluded Individuals/Entities."
        }
      },
      "copies": {
        "item": {
          "applies": false,
          "naWord": "Does not apply"
        },
        "block": {
          "on": false,
          "withdrawnAt": ""
        }
      }
    },
    "exposure": {
      "asOf": "2026-10-21",
      "products": [],
      "pharmacy": [
        {
          "key": "warning_letters",
          "label": "The FDA's warning letters",
          "state": "nothing_on_record",
          "tone": "neutral",
          "at": "2026-10-20",
          "line": "Nothing on record for \"Sample Northgate Outsourcing\" in FDA warning letters.",
          "receipt": {
            "id": "src_5a83ff6e764e191c106f",
            "source": "FDA warning letters",
            "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters",
            "query": "\"Sample Northgate Outsourcing\"",
            "capturedAt": "2026-10-20",
            "sourceCurrentAs": "",
            "result": "Nothing on record for \"Sample Northgate Outsourcing\" in FDA warning letters.",
            "by": "Veritura source worker",
            "limitation": "No match applies only to the recorded query, source coverage, and capture time. It is not a universal clearance.",
            "hash": "2f0561bdcbf6f12f5ed896dfbf022a1f20252b6b3d3ec31708478d85f0c4b1ef"
          },
          "source": {
            "title": "FDA warning letters",
            "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters"
          }
        },
        {
          "key": "fda_actions",
          "label": "The FDA's compounding actions",
          "state": "not_run",
          "tone": "neutral",
          "at": "",
          "line": "Not checked here. Nothing on record yet.",
          "receipt": null,
          "source": {
            "title": "FDA compounding: inspections, recalls, and other actions",
            "url": "https://www.fda.gov/drugs/human-drug-compounding/compounding-inspections-recalls-and-other-actions"
          }
        },
        {
          "key": "inspections",
          "label": "FDA inspections",
          "state": "finding",
          "tone": "critical",
          "at": "2026-10-15",
          "line": "FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations.",
          "receipt": {
            "id": "src_66cec57d618735d34938",
            "source": "FDA Data Dashboard: inspections",
            "url": "https://datadashboard.fda.gov/oii/cd/inspections.htm",
            "query": "\"Sample Northgate Outsourcing\"",
            "capturedAt": "2026-10-15",
            "sourceCurrentAs": "",
            "result": "FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations.",
            "by": "Veritura source worker",
            "limitation": "The capture establishes only the recorded public-source observation and date. It does not establish approval, compliance, authenticity, safety, or product quality.",
            "hash": "4df2b21e96e23947a94708e7f719fa679ba4492cf7c67427310aa5a329efcc6c"
          },
          "source": {
            "title": "FDA Data Dashboard: inspections, citations, compliance actions",
            "url": "https://datadashboard.fda.gov/oii/cd/inspections.htm"
          }
        }
      ],
      "counts": {
        "products": 0,
        "substances": 0,
        "factsToRead": 0,
        "pharmacyFindings": 1
      },
      "note": "Where each substance stands on the FDA's public lists, with the source and the date of each list. Facts only: whether a preparation may be compounded is the pharmacy's and the prescriber's call, and no list settles it alone.",
      "sources": [
        {
          "label": "21 CFR 216.23 and the FDA's 503A categories",
          "url": "https://www.fda.gov/drugs/human-drug-compounding/bulk-drug-substances-used-compounding"
        },
        {
          "label": "21 CFR 216.23",
          "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.23"
        },
        {
          "label": "21 CFR 216.24",
          "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.24"
        },
        {
          "label": "The FDA's 503A category list, updated May 14, 2026",
          "url": "https://www.fda.gov/media/94155/download"
        },
        {
          "label": "The FDA's drug shortage database",
          "url": "https://dps.fda.gov/drugshortages"
        },
        {
          "label": "The FDA's NDC directory (openFDA)",
          "url": "https://open.fda.gov/apis/drug/ndc/"
        },
        {
          "label": "Section 503A(b)(1)(D) and (b)(2), and the FDA's 2018 guidance on essentially copies",
          "url": "https://www.fda.gov/media/98973/download"
        },
        {
          "label": "The FDA's establishment registry (DECRS)",
          "url": "https://www.accessdata.fda.gov/scripts/cder/drls/"
        }
      ]
    },
    "readAtTime": "2026-10-21T23:38:16.998Z",
    "profile": {
      "logoDataUrl": "",
      "headline": "",
      "location": "",
      "website": "",
      "specialties": [],
      "presentations": [],
      "authored": "The firm's own words. Veritura does not establish them."
    },
    "documents": [],
    "documentsLine": "",
    "sample": true,
    "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
  }
}

List published supplier files

GET/v1/suppliers

The same, for the bulk suppliers and makers that publish a file through their free supplier account. Paged with limit and cursor.

ParameterWhat it is
qPart of the name.
stateHome state, two letters.
limit1 to 500. Default 100.
cursornext_cursor from the page before.
offsetDeprecated: use cursor.
curl -G https://www.veritura.co/v1/suppliers \
  -d q=meridian \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response From a test key
{
  "ok": true,
  "mode": "test",
  "order": "alphabetical",
  "note": "Listed in alphabetical order. Nothing is ranked or graded.",
  "total": 1,
  "limit": 100,
  "next_cursor": null,
  "suppliers": [
    {
      "id": "vfl_sample_meridian",
      "slug": "sample-meridian-supply",
      "url": "",
      "name": "Sample Meridian Supply",
      "side": "supplier",
      "kind": "distributor",
      "profile": {
        "logoDataUrl": "",
        "headline": "",
        "location": "",
        "website": "",
        "specialties": [],
        "presentations": [],
        "authored": "The firm's own words. Veritura does not establish them."
      },
      "documents": [],
      "kindLabel": "Bulk distributor or repackager",
      "homeState": "NJ",
      "npi": "",
      "publishedAt": "2026-08-07",
      "lastRefreshAt": "2026-10-20",
      "facts": {
        "checked": 4,
        "applicable": 11,
        "notChecked": 6,
        "selfRecorded": 1,
        "coverage": "4 of 11 items checked",
        "lastLookedUp": "2026-10-20",
        "publicFindings": 0,
        "documentFindings": 0,
        "recordsFindings": 0,
        "findings": 0,
        "licensedStates": [],
        "selfLicensedStates": [],
        "certificatesRead": 0,
        "testReportsRead": 0,
        "supplierCertificatesRead": 0,
        "credentials": []
      },
      "fileUrl": "/v1/suppliers/vfl_sample_meridian/file",
      "sample": true,
      "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
    }
  ]
}

Read one published supplier file

GET/v1/suppliers/{id}/file

One supplier's published file, in the same shape as a pharmacy file.

ParameterWhat it is
idThe file id (vfl_...) or its public name.
curl https://www.veritura.co/v1/suppliers/vfl_sample_meridian/file \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response Shortened, from a test key
{
  "ok": true,
  "mode": "test",
  "file": {
    "id": "vfl_sample_meridian",
    "slug": "sample-meridian-supply",
    "url": "",
    "side": "supplier",
    "kind": "distributor",
    "kindLabel": "Bulk distributor or repackager",
    "name": "Sample Meridian Supply",
    "homeState": "NJ",
    "npi": "",
    "publishedAt": "2026-08-07",
    "lastRefreshAt": "2026-10-20",
    "asOf": "2026-10-21",
    "publishedAtTime": "2026-08-07T17:00:00.000Z",
    "lastRefreshAtTime": "2026-10-20T06:00:00.000Z",
    "statement": "Veritura checks paperwork and records at their source and reads documents against the rule each must meet. This page is not an approval, a certification or a rating of the supplier, and it says nothing about any ingredient. Veritura does not sell ingredients, route orders or rank suppliers.",
    "completeness": {
      "checked": 4,
      "confirmed": 4,
      "applicable": 11,
      "bySelf": 1,
      "selfRecorded": 1,
      "claimed": 0,
      "notChecked": 6,
      "notApplicable": 26,
      "catalogue": 37,
      "line": "4 of 11 items checked",
      "detail": "4 of 11 items checked · 1 recorded by the supplier itself, not checked · 6 not checked here",
      "appliesTo": "the items that apply to a bulk distributor or repackager",
      "uncounted": 0,
      "note": "The full file has 37 items: 11 counted here, and 26 that do not apply to a bulk distributor or repackager. An item is checked when a public source, someone independent of the supplier, the issuer or Veritura's own read answered it; a finding counts as checked information. 1 more was recorded by the supplier's own staff and is not counted as checked. This is a count of what is on file and how it was checked, never a rating."
    },
    "findings": [],
    "pic": null,
    "groups": [
      {
        "key": "identity",
        "label": "Who they are",
        "items": [
          "permit",
          "fda_registration",
          "wdd",
          "entity"
        ]
      },
      {
        "key": "accreditation",
        "label": "Accreditation",
        "items": [
          "lab_17025",
          "quality_agreement"
        ]
      }
    ],
    "items": [
      {
        "id": "fda_registration",
        "group": "identity",
        "label": "FDA registration",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "\"Sample Meridian Supply\" is listed in the FDA's establishment registration.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "FDA drug establishments current registration site (DECRS)",
          "note": "Run by Veritura's weekly refresh"
        },
        "receipt": {
          "id": "src_f831e7260ab61214bac1",
          "source": "FDA drug establishments current registration site (DECRS)",
          "url": "https://www.fda.gov/drugs/drug-approvals-and-databases/drug-establishments-current-registration-site-decrs",
          "query": "\"Sample Meridian Supply\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "\"Sample Meridian Supply\" is listed in the FDA's establishment registration.",
          "by": "Veritura source worker",
          "limitation": "The capture establishes only the recorded public-source observation and date. It does not establish approval, compliance, authenticity, safety, or product quality.",
          "hash": "d3592800b339ed975ca26c0033e42d3d27950b943c8ef0e3e150ef57b9a8eb4d"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-11-19",
        "retired": null,
        "how": "An outsourcing facility is matched on the FDA's registered outsourcing facilities list; a maker or repackager in the FDA's establishment registration. Registration is not approval.",
        "source": {
          "title": "FDA drug establishments current registration site (DECRS)",
          "url": "https://www.fda.gov/drugs/drug-approvals-and-databases/drug-establishments-current-registration-site-decrs"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "warning_letters",
        "group": "fda",
        "label": "FDA warning letters",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "Nothing on record for \"Sample Meridian Supply\" in FDA warning letters.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "FDA warning letters",
          "note": "Run by Veritura's weekly refresh"
        },
        "receipt": {
          "id": "src_455d6e713bc8485003c7",
          "source": "FDA warning letters",
          "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters",
          "query": "\"Sample Meridian Supply\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "Nothing on record for \"Sample Meridian Supply\" in FDA warning letters.",
          "by": "Veritura source worker",
          "limitation": "No match applies only to the recorded query, source coverage, and capture time. It is not a universal clearance.",
          "hash": "94d54d5d5677c568519f56ef18df854c80bef0d82481ba34f070dbbbb1689b25"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-11-03",
        "retired": null,
        "how": "The FDA's warning letter database, searched by the firm's name.",
        "source": {
          "title": "FDA warning letters",
          "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "recalls",
        "group": "fda",
        "label": "Recalls",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "Nothing on record for \"Sample Meridian Supply\" in openFDA drug enforcement reports.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "openFDA drug enforcement reports",
          "note": "Run by Veritura's weekly refresh"
        },
        "receipt": {
          "id": "src_0a096f6e8f240958d878",
          "source": "openFDA drug enforcement reports",
          "url": "https://api.fda.gov/drug/enforcement.json",
          "query": "\"Sample Meridian Supply\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "Nothing on record for \"Sample Meridian Supply\" in openFDA drug enforcement reports.",
          "by": "Veritura source worker",
          "limitation": "No match applies only to the recorded query, source coverage, and capture time. It is not a universal clearance.",
          "hash": "7e22b12b466efef66485c682a269fdd5c6afb6d977fd22515d9ddf347eba407b"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-10-27",
        "retired": null,
        "how": "openFDA enforcement reports, searched by recalling firm: class, reason, lots, distribution. There is no compounding flag, so the match is by name.",
        "source": {
          "title": "openFDA drug enforcement reports",
          "url": "https://open.fda.gov/apis/drug/enforcement/"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "permit",
        "group": "identity",
        "label": "State license, home state",
        "applies": true,
        "counted": true,
        "state": "self_recorded",
        "stateWord": "Recorded by the supplier",
        "tone": "neutral",
        "checkedHere": false,
        "onRecord": true,
        "howWord": "Recorded by the supplier itself",
        "howMark": "self",
        "checkedBy": "self",
        "checkedByWord": "Recorded by the supplier's own staff",
        "summary": "Recorded by the supplier's own staff, not checked independently: Active, name and number match (NJ).",
        "route": "source_person",
        "routeWord": "Recorded by the supplier's own staff",
        "at": "2026-10-09",
        "by": {
          "kind": "person",
          "name": "Morgan Diaz, Sample Meridian Supply",
          "note": ""
        },
        "receipt": {
          "id": "src_e505faed6187fbce9235",
          "source": "Recorded by the supplier's own staff from the issuer's record",
          "url": "https://nabp.pharmacy/about/boards-of-pharmacy/",
          "query": "Active, name and number match (NJ).",
          "capturedAt": "2026-10-09",
          "sourceCurrentAs": "",
          "result": "Active, name and number match (NJ).",
          "by": "The supplier's own staff",
          "limitation": "The capture establishes only the recorded public-source observation and date. It does not establish approval, compliance, authenticity, safety, or product quality.",
          "hash": "13c1f5c1ac288a7f7e617b4fbfd5f1ee0f2b5c461577f9fbdcd8c9348df0c4c2"
        },
        "docName": "",
        "checks": [],
        "expires": "2027-06-18",
        "daysLeft": 240,
        "nextCheck": "2026-11-08",
        "retired": null,
        "how": "A person opens the board's own lookup and records status, class, expiry and any discipline. Most boards forbid automated queries; the lookup is captured and dated.",
        "source": {
          "title": "State board of pharmacy license lookup",
          "url": "https://nabp.pharmacy/about/boards-of-pharmacy/"
        },
        "history": [],
        "askable": "permit"
      },
      {
        "id": "pic",
        "group": "identity",
        "label": "Pharmacist in charge",
        "applies": false
      }
    ],
    "licensedStates": [],
    "selfLicensedStates": [],
    "notCheckedHere": [
      {
        "id": "wdd",
        "label": "FDA wholesale distributor reporting",
        "why": "Nothing on record yet.",
        "how": "A person searches the FDA's wholesale distributor and 3PL database for the firm's annual report. The FDA says a report there is not a license.",
        "askable": ""
      },
      {
        "id": "entity",
        "label": "Business entity in good standing",
        "why": "Nothing on record yet.",
        "how": "A person checks the state's business entity search: active, and the registered name matches.",
        "askable": "entity"
      }
    ],
    "notCheckedLine": "6 of 11 items not checked here",
    "askAll": [],
    "askAllUrl": "",
    "blocks": {},
    "options": {
      "upstream": {
        "on": false,
        "since": "",
        "withdrawnAt": "",
        "supplierNames": false
      },
      "permits": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "readiness": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "operations": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "copies": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      }
    },
    "asks": null,
    "doors": {
      "pharmacies": 0,
      "answered": 0,
      "open": 0,
      "medianAnswerDays": null,
      "line": "No pharmacy's document request link is kept in this supplier's account yet."
    },
    "howToRead": [
      {
        "route": "Matched at source",
        "means": "A lookup ran against the issuer's own public source. The receipt records the query, the time and what the source returned."
      },
      {
        "route": "Answered by the issuer in writing",
        "means": "The issuer answered in writing. The reply is kept."
      }
    ],
    "whoChecked": [
      {
        "mark": "Public source lookup",
        "means": "Veritura ran a lookup at the source itself (the FDA, openFDA, NPPES, OIG) on the date shown. The receipt keeps the query and the answer."
      },
      {
        "mark": "Checked at the issuer by a named person",
        "means": "Someone independent of the supplier, such as a buyer's staff, opened the issuer's own record and recorded what it said, with their name, job title and company."
      },
      {
        "mark": "Recorded by the supplier's own staff",
        "means": "The supplier checked itself and recorded what the issuer's record said. Shown in grey with who recorded it, never as an independent confirmation."
      },
      {
        "mark": "Read by Veritura",
        "means": "Veritura read the document itself, line by line, against the rule it answers to."
      }
    ],
    "answer": {
      "facts": [
        "FDA and OIG: no finding in the lookups that ran.",
        "Test reports: none read yet."
      ],
      "coverage": "4 of 11 items checked, 1 more recorded by the supplier itself; 6 not checked here. A count of what is on file, never a score.",
      "documentsRead": 0,
      "documentsOpen": 0,
      "documentsBad": 0,
      "supplierCertificatesRead": 0,
      "supplierCertificatesOwed": 0,
      "supplierCertificates": null,
      "line": "FDA and OIG: no finding in the lookups that ran. Test reports: none read yet.",
      "boundary": "Facts from the file below, each with its source and date. Never a grade or a rank of the supplier."
    },
    "glance": [
      {
        "key": "fda_registration",
        "label": "FDA registration",
        "word": "",
        "who": "matched at the source",
        "at": "2026-10-20",
        "checkedBy": "public_source",
        "tone": "positive",
        "line": "FDA registration · matched at the source · 2026-10-20"
      },
      {
        "key": "fda",
        "label": "FDA and OIG records",
        "word": "no finding",
        "who": "matched at the source",
        "at": "2026-10-20",
        "checkedBy": "public_source",
        "tone": "positive",
        "line": "FDA and OIG records · no finding · matched at the source · 2026-10-20"
      }
    ],
    "telehealth": null,
    "exposure": null,
    "readAtTime": "2026-10-21T23:38:17.009Z",
    "profile": {
      "logoDataUrl": "",
      "headline": "",
      "location": "",
      "website": "",
      "specialties": [],
      "presentations": [],
      "authored": "The firm's own words. Veritura does not establish them."
    },
    "documents": [],
    "documentsLine": "",
    "sample": true,
    "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
  }
}

List your private lookups

GET/v1/lookups

The files your workspace keeps about pharmacies, including pharmacies that never published one. Private: only your workspace's keys see them, and another workspace gets 404 for their ids. Paged with limit and cursor.

ParameterWhat it is
limit1 to 500. Default 100.
cursornext_cursor from the page before.
curl https://www.veritura.co/v1/lookups \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response From a test key
{
  "ok": true,
  "mode": "test",
  "order": "alphabetical",
  "note": "Private to this workspace. Listed in alphabetical order; nothing is ranked or graded.",
  "total": 2,
  "limit": 100,
  "next_cursor": null,
  "lookups": [
    {
      "id": "vfl_sample_lk_harbor",
      "name": "Sample Harborline Pharmacy",
      "instant": false,
      "kind": "pharmacy",
      "kindLabel": "503A compounding pharmacy",
      "homeState": "CO",
      "createdAt": "2026-10-15",
      "lastRefreshAt": "2026-10-20",
      "publishedByPharmacy": false,
      "findings": 0,
      "completeness": "3 of 26 items checked",
      "lookupUrl": "/v1/lookups/vfl_sample_lk_harbor",
      "sample": true,
      "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
    },
    {
      "id": "vfl_sample_lk_river",
      "name": "Sample Riverside Pharmacy",
      "instant": false,
      "kind": "pharmacy",
      "kindLabel": "503A compounding pharmacy",
      "homeState": "AZ",
      "createdAt": "2026-10-09",
      "lastRefreshAt": "2026-10-20",
      "publishedByPharmacy": false,
      "findings": 0,
      "completeness": "5 of 26 items checked",
      "lookupUrl": "/v1/lookups/vfl_sample_lk_river",
      "sample": true,
      "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
    }
  ]
}

Run a lookup, or refresh one

POST/v1/lookups

Look up any pharmacy by name or NPI, the way the workspace does: NPPES, the FDA's compounding actions, warning letters and Data Dashboard, openFDA recalls and OIG, each answer with its receipt, kept private to your workspace. A lookup of the same pharmacy in the last day is returned as it is unless you send force; with watch: true it is watched too, so the weekly look-up tells you when its record changes. 10 lookups a minute per workspace. Send an Idempotency-Key so a retry never runs it twice. A test key never asks a public source: every source reads "Not checked here" and nothing is stored.

ParameterWhat it is
qThe pharmacy's name, or its 10-digit NPI.
stateOptional. Two letters, to narrow a name.
forceOptional. true asks the sources again now.
watchOptional. true watches the lookup.
Idempotency-KeyOptional header. A new random key per request; the same key on a retry.
curl -X POST https://www.veritura.co/v1/lookups \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01" \
  -H "Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -H "Content-Type: application/json" \
  -d '{"q":"Riverside Pharmacy","state":"AZ","watch":true}'
Example response Shortened, from a test key: nothing is stored
{
  "ok": true,
  "mode": "test",
  "lookup": {
    "id": "vfl_test_566059124b",
    "slug": "",
    "url": "",
    "side": "pharmacy",
    "kind": "pharmacy",
    "kindLabel": "503A compounding pharmacy",
    "name": "Riverside Pharmacy",
    "homeState": "AZ",
    "npi": "",
    "publishedAt": "",
    "lastRefreshAt": "",
    "asOf": "2026-10-21",
    "publishedAtTime": "",
    "lastRefreshAtTime": "",
    "statement": "Veritura checks paperwork and records at their source and reads documents against the rule each must meet. This page is not an approval, a certification or a rating of the pharmacy, and it says nothing about any medicine. Veritura does not sell medicine, route orders or rank pharmacies.",
    "completeness": {
      "checked": 0,
      "confirmed": 0,
      "applicable": 26,
      "bySelf": 0,
      "selfRecorded": 0,
      "claimed": 0,
      "notChecked": 26,
      "notApplicable": 10,
      "catalogue": 37,
      "line": "0 of 26 items checked",
      "detail": "0 of 26 items checked · 26 not checked here",
      "appliesTo": "the items that apply to a 503A pharmacy",
      "uncounted": 1,
      "note": "The full file has 37 items: 26 counted here, 1 shown but not counted (adverse event signals, which never establish cause), and 10 that do not apply to a 503A pharmacy. An item is checked when a public source, someone independent of the pharmacy, the issuer or Veritura's own read answered it; a finding counts as checked information. This is a count of what is on file and how it was checked, never a rating."
    },
    "findings": [],
    "pic": {
      "name": "",
      "nameFrom": "",
      "board": {
        "state": "missing",
        "stateWord": "Not checked here",
        "routeWord": "Not checked here",
        "at": "",
        "summary": "Nothing on record yet."
      },
      "oig": {
        "state": "not_run",
        "stateWord": "Not checked here",
        "routeWord": "Not checked here",
        "at": "",
        "summary": "OIG publishes a monthly file and no API; it runs once the file is loaded. Until then a person can check OIG's online search."
      }
    },
    "groups": [
      {
        "key": "identity",
        "label": "Who they are",
        "items": [
          "permit",
          "pic",
          "nonresident",
          "npi",
          "dea",
          "entity"
        ]
      },
      {
        "key": "accreditation",
        "label": "Accreditation",
        "items": [
          "pcab",
          "achc",
          "nabp_compounding",
          "lab_17025"
        ]
      }
    ],
    "items": [
      {
        "id": "permit",
        "group": "identity",
        "label": "State license, home state",
        "applies": true,
        "counted": true,
        "state": "missing",
        "stateWord": "Not checked here",
        "tone": "neutral",
        "checkedHere": false,
        "onRecord": false,
        "howWord": "Not checked here",
        "howMark": "missing",
        "checkedBy": "",
        "checkedByWord": "",
        "summary": "Nothing on record yet.",
        "route": "",
        "routeWord": "Not checked here",
        "at": "",
        "by": null,
        "receipt": null,
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "",
        "retired": null,
        "how": "A person opens the board's own lookup and records status, class, expiry and any discipline. Most boards forbid automated queries; the lookup is captured and dated.",
        "source": {
          "title": "State board of pharmacy license lookup",
          "url": "https://nabp.pharmacy/about/boards-of-pharmacy/"
        },
        "history": [],
        "askable": "permit"
      },
      {
        "id": "fda_registration",
        "group": "identity",
        "label": "FDA registration",
        "applies": false
      }
    ],
    "licensedStates": [],
    "selfLicensedStates": [],
    "notCheckedHere": [
      {
        "id": "permit",
        "label": "State license, home state",
        "why": "Nothing on record yet.",
        "how": "A person opens the board's own lookup and records status, class, expiry and any discipline. Most boards forbid automated queries; the lookup is captured and dated.",
        "askable": "permit"
      },
      {
        "id": "pic",
        "label": "Pharmacist in charge",
        "why": "Nothing on record yet.",
        "how": "Named on the board record where the board shows it (Florida, Texas). Where it does not (California, Illinois), the board's permit record or letter is requested. The PIC's own license is checked too.",
        "askable": "pic"
      }
    ],
    "notCheckedLine": "26 of 26 items not checked here: ask for all",
    "askAll": [
      "permit",
      "pic",
      "nonresident",
      "dea",
      "entity",
      "pcab",
      "achc",
      "nabp_compounding",
      "lab_17025",
      "state_inspection",
      "sterility",
      "endotoxin",
      "potency",
      "bud",
      "stability",
      "cold_chain",
      "validation",
      "copies"
    ],
    "askAllUrl": "",
    "blocks": {
      "licences": []
    },
    "options": {
      "upstream": {
        "on": false,
        "since": "",
        "withdrawnAt": "",
        "supplierNames": false
      },
      "permits": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "readiness": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "operations": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "copies": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      }
    },
    "asks": null,
    "doors": null,
    "howToRead": [
      {
        "route": "Matched at source",
        "means": "A lookup ran against the issuer's own public source. The receipt records the query, the time and what the source returned."
      },
      {
        "route": "Answered by the issuer in writing",
        "means": "The issuer answered in writing. The reply is kept."
      }
    ],
    "whoChecked": [
      {
        "mark": "Public source lookup",
        "means": "Veritura ran a lookup at the source itself (the FDA, openFDA, NPPES, OIG) on the date shown. The receipt keeps the query and the answer."
      },
      {
        "mark": "Checked at the issuer by a named person",
        "means": "Someone independent of the pharmacy, such as a buyer's staff, opened the issuer's own record and recorded what it said, with their name, job title and company."
      },
      {
        "mark": "Recorded by the pharmacy's own staff",
        "means": "The pharmacy checked itself and recorded what the issuer's record said. Shown in grey with who recorded it, never as an independent confirmation."
      },
      {
        "mark": "Read by Veritura",
        "means": "Veritura read the document itself, line by line, against the rule it answers to."
      }
    ],
    "answer": {
      "facts": [
        "FDA: not looked up yet. OIG's exclusion list: not looked up here.",
        "Licenses: none on file yet.",
        "Test reports: none read yet."
      ],
      "coverage": "0 of 26 items checked; 26 not checked here. A count of what is on file, never a score.",
      "documentsRead": 0,
      "documentsOpen": 0,
      "documentsBad": 0,
      "supplierCertificatesRead": 0,
      "supplierCertificatesOwed": 0,
      "supplierCertificates": null,
      "line": "FDA: not looked up yet. OIG's exclusion list: not looked up here. Licenses: none on file yet. Test reports: none read yet.",
      "boundary": "Facts from the file below, each with its source and date. Never a grade or a rank of the pharmacy."
    },
    "glance": [
      {
        "key": "oig",
        "label": "OIG exclusions",
        "word": "not looked up here",
        "who": "",
        "at": "",
        "checkedBy": "",
        "tone": "neutral",
        "line": "OIG exclusions · not looked up here"
      }
    ],
    "telehealth": {
      "website": "",
      "websiteLine": "No website on file",
      "legitscript": {
        "applies": false,
        "naWord": "No website on file",
        "line": "No website on file. LegitScript and NABP's digital pharmacy list cover the website a pharmacy sells through, and this file names none."
      },
      "nabpDigital": {
        "applies": false,
        "naWord": "No website on file"
      },
      "states": {
        "home": "AZ",
        "list": [],
        "licensed": [],
        "selfRecorded": [],
        "negative": [],
        "map": [
          {
            "state": "AK",
            "x": 0,
            "y": 0,
            "status": "none",
            "word": ""
          },
          {
            "state": "ME",
            "x": 10,
            "y": 0,
            "status": "none",
            "word": ""
          },
          {
            "state": "VT",
            "x": 9,
            "y": 1,
            "status": "none",
            "word": ""
          },
          {
            "state": "NH",
            "x": 10,
            "y": 1,
            "status": "none",
            "word": ""
          },
          {
            "state": "WA",
            "x": 0,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "ID",
            "x": 1,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MT",
            "x": 2,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "ND",
            "x": 3,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MN",
            "x": 4,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "IL",
            "x": 5,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "WI",
            "x": 6,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MI",
            "x": 7,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "NY",
            "x": 8,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "RI",
            "x": 9,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MA",
            "x": 10,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "OR",
            "x": 0,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "NV",
            "x": 1,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "WY",
            "x": 2,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "SD",
            "x": 3,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "IA",
            "x": 4,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "IN",
            "x": 5,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "OH",
            "x": 6,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "PA",
            "x": 7,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "NJ",
            "x": 8,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "CT",
            "x": 9,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "CA",
            "x": 0,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "UT",
            "x": 1,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "CO",
            "x": 2,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "NE",
            "x": 3,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "MO",
            "x": 4,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "KY",
            "x": 5,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "WV",
            "x": 6,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "VA",
            "x": 7,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "MD",
            "x": 8,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "DE",
            "x": 9,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "AZ",
            "x": 1,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "NM",
            "x": 2,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "KS",
            "x": 3,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "AR",
            "x": 4,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "TN",
            "x": 5,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "NC",
            "x": 6,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "SC",
            "x": 7,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "DC",
            "x": 8,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "OK",
            "x": 3,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "LA",
            "x": 4,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "MS",
            "x": 5,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "AL",
            "x": 6,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "GA",
            "x": 7,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "HI",
            "x": 0,
            "y": 7,
            "status": "none",
            "word": ""
          },
          {
            "state": "TX",
            "x": 3,
            "y": 7,
            "status": "none",
            "word": ""
          },
          {
            "state": "FL",
            "x": 8,
            "y": 7,
            "status": "none",
            "word": ""
          }
        ],
        "source": "The licenses on file",
        "note": "No state license is on file yet."
      },
      "pic": {
        "name": "",
        "nameFrom": "",
        "board": {
          "state": "missing",
          "stateWord": "Not checked here",
          "routeWord": "Not checked here",
          "at": "",
          "summary": "Nothing on record yet."
        },
        "oig": {
          "state": "not_run",
          "stateWord": "Not checked here",
          "routeWord": "Not checked here",
          "at": "",
          "summary": "OIG publishes a monthly file and no API; it runs once the file is loaded. Until then a person can check OIG's online search."
        }
      },
      "copies": {
        "item": {
          "applies": true,
          "state": "missing",
          "stateWord": "Not checked here",
          "howWord": "Not checked here",
          "howMark": "missing",
          "tone": "neutral",
          "checkedHere": false,
          "onRecord": false,
          "checkedBy": "",
          "checkedByWord": "",
          "at": "",
          "summary": "Nothing on record yet.",
          "askable": "copies",
          "receipt": null
        },
        "block": {
          "on": false,
          "withdrawnAt": ""
        }
      }
    },
    "exposure": {
      "asOf": "2026-10-21",
      "products": [],
      "pharmacy": [],
      "counts": {
        "products": 0,
        "substances": 0,
        "factsToRead": 0,
        "pharmacyFindings": 0
      },
      "note": "Where each substance stands on the FDA's public lists, with the source and the date of each list. Facts only: whether a preparation may be compounded is the pharmacy's and the prescriber's call, and no list settles it alone.",
      "sources": [
        {
          "label": "21 CFR 216.23 and the FDA's 503A categories",
          "url": "https://www.fda.gov/drugs/human-drug-compounding/bulk-drug-substances-used-compounding"
        },
        {
          "label": "21 CFR 216.23",
          "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.23"
        },
        {
          "label": "21 CFR 216.24",
          "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.24"
        },
        {
          "label": "The FDA's 503A category list, updated May 14, 2026",
          "url": "https://www.fda.gov/media/94155/download"
        },
        {
          "label": "The FDA's drug shortage database",
          "url": "https://dps.fda.gov/drugshortages"
        },
        {
          "label": "The FDA's NDC directory (openFDA)",
          "url": "https://open.fda.gov/apis/drug/ndc/"
        },
        {
          "label": "Section 503A(b)(1)(D) and (b)(2), and the FDA's 2018 guidance on essentially copies",
          "url": "https://www.fda.gov/media/98973/download"
        },
        {
          "label": "The FDA's establishment registry (DECRS)",
          "url": "https://www.accessdata.fda.gov/scripts/cder/drls/"
        }
      ]
    },
    "instant": true,
    "private": true,
    "publishedByPharmacy": false,
    "basis": "Not published by the pharmacy: public sources and your own workspace's checks only.",
    "createdAt": "",
    "lookedUpAt": "2026-10-21T23:38:17.002Z",
    "refreshedWeekly": true,
    "watching": false,
    "changes": [],
    "sample": true,
    "sampleNote": "A test key never asks a public source, so every source reads \"Not checked here\" and nothing is stored. A live key runs the lookup and keeps it private to your workspace."
  },
  "reused": false,
  "stored": false,
  "watch": null
}

Read one private lookup

GET/v1/lookups/{id}

One lookup, item by item, in the shape of a published file, with private, publishedByPharmacy and a basis line that says, in words, whether the pharmacy published. An instant lookup adds lookupSummary, the public sources asked; exposure covers the products you receive from that pharmacy.

ParameterWhat it is
idThe lookup id (vfl_...).
curl https://www.veritura.co/v1/lookups/vfl_sample_lk_harbor \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response Shortened, from a test key
{
  "ok": true,
  "mode": "test",
  "lookup": {
    "id": "vfl_sample_lk_harbor",
    "slug": "",
    "url": "",
    "side": "pharmacy",
    "kind": "pharmacy",
    "kindLabel": "503A compounding pharmacy",
    "name": "Sample Harborline Pharmacy",
    "homeState": "CO",
    "npi": "",
    "publishedAt": "",
    "lastRefreshAt": "2026-10-20",
    "asOf": "2026-10-21",
    "publishedAtTime": "",
    "lastRefreshAtTime": "2026-10-20T06:00:00.000Z",
    "statement": "Veritura checks paperwork and records at their source and reads documents against the rule each must meet. This page is not an approval, a certification or a rating of the pharmacy, and it says nothing about any medicine. Veritura does not sell medicine, route orders or rank pharmacies.",
    "completeness": {
      "checked": 3,
      "confirmed": 3,
      "applicable": 26,
      "bySelf": 0,
      "selfRecorded": 0,
      "claimed": 0,
      "notChecked": 23,
      "notApplicable": 10,
      "catalogue": 37,
      "line": "3 of 26 items checked",
      "detail": "3 of 26 items checked · 23 not checked here",
      "appliesTo": "the items that apply to a 503A pharmacy",
      "uncounted": 1,
      "note": "The full file has 37 items: 26 counted here, 1 shown but not counted (adverse event signals, which never establish cause), and 10 that do not apply to a 503A pharmacy. An item is checked when a public source, someone independent of the pharmacy, the issuer or Veritura's own read answered it; a finding counts as checked information. This is a count of what is on file and how it was checked, never a rating."
    },
    "findings": [],
    "pic": {
      "name": "",
      "nameFrom": "",
      "board": {
        "state": "missing",
        "stateWord": "Not checked here",
        "routeWord": "Not checked here",
        "at": "",
        "summary": "Nothing on record yet."
      },
      "oig": {
        "state": "verified",
        "stateWord": "No match in the list as loaded",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "summary": "Nothing on record for \"Sample Harborline Pharmacy\" in HHS OIG List of Excluded Individuals/Entities."
      }
    },
    "groups": [
      {
        "key": "identity",
        "label": "Who they are",
        "items": [
          "permit",
          "pic",
          "nonresident",
          "npi",
          "dea",
          "entity"
        ]
      },
      {
        "key": "accreditation",
        "label": "Accreditation",
        "items": [
          "pcab",
          "achc",
          "nabp_compounding",
          "lab_17025"
        ]
      }
    ],
    "items": [
      {
        "id": "warning_letters",
        "group": "fda",
        "label": "FDA warning letters",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "Nothing on record for \"Sample Harborline Pharmacy\" in FDA warning letters.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "FDA warning letters",
          "note": "Run by Veritura"
        },
        "receipt": {
          "id": "src_d90dcbbde79f9c1b417a",
          "source": "FDA warning letters",
          "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters",
          "query": "\"Sample Harborline Pharmacy\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "Nothing on record for \"Sample Harborline Pharmacy\" in FDA warning letters.",
          "by": "Veritura source worker",
          "limitation": "No match applies only to the recorded query, source coverage, and capture time. It is not a universal clearance.",
          "hash": "b101d38081e442d4f0c4664254c00905e563b509040af5019168f6fd34dbced3"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-11-03",
        "retired": null,
        "how": "The FDA's warning letter database, searched by the firm's name.",
        "source": {
          "title": "FDA warning letters",
          "url": "https://www.fda.gov/inspections-compliance-enforcement-and-criminal-investigations/compliance-actions-and-activities/warning-letters"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "recalls",
        "group": "fda",
        "label": "Recalls",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "Nothing on record for \"Sample Harborline Pharmacy\" in openFDA drug enforcement reports.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "openFDA drug enforcement reports",
          "note": "Run by Veritura"
        },
        "receipt": {
          "id": "src_37b31fcc3b54ba493da1",
          "source": "openFDA drug enforcement reports",
          "url": "https://api.fda.gov/drug/enforcement.json",
          "query": "\"Sample Harborline Pharmacy\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "Nothing on record for \"Sample Harborline Pharmacy\" in openFDA drug enforcement reports.",
          "by": "Veritura source worker",
          "limitation": "No match applies only to the recorded query, source coverage, and capture time. It is not a universal clearance.",
          "hash": "063b092af097b6eabbc9723ef696bff83161a087abbde2f787a0bc2c8c74e3ff"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-10-27",
        "retired": null,
        "how": "openFDA enforcement reports, searched by recalling firm: class, reason, lots, distribution. There is no compounding flag, so the match is by name.",
        "source": {
          "title": "openFDA drug enforcement reports",
          "url": "https://open.fda.gov/apis/drug/enforcement/"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "exclusions",
        "group": "fda",
        "label": "Not excluded (HHS OIG)",
        "applies": true,
        "counted": true,
        "state": "verified",
        "stateWord": "Checked at the source",
        "tone": "positive",
        "checkedHere": true,
        "onRecord": true,
        "howWord": "Checked at the source",
        "howMark": "source",
        "checkedBy": "public_source",
        "checkedByWord": "Public source lookup",
        "summary": "Nothing on record for \"Sample Harborline Pharmacy\" in HHS OIG List of Excluded Individuals/Entities.",
        "route": "source_auto",
        "routeWord": "Matched at source",
        "at": "2026-10-20",
        "by": {
          "kind": "source",
          "name": "HHS OIG List of Excluded Individuals/Entities",
          "note": "Run by Veritura"
        },
        "receipt": {
          "id": "src_dfb234578764c78bc93c",
          "source": "HHS OIG List of Excluded Individuals/Entities",
          "url": "https://oig.hhs.gov/exclusions/exclusions_list.asp",
          "query": "\"Sample Harborline Pharmacy\"",
          "capturedAt": "2026-10-20",
          "sourceCurrentAs": "",
          "result": "Nothing on record for \"Sample Harborline Pharmacy\" in HHS OIG List of Excluded Individuals/Entities.",
          "by": "Veritura source worker",
          "limitation": "No match applies only to the recorded query, source coverage, and capture time. It is not a universal clearance.",
          "hash": "a7007f1d8852ffb6417973ac33c725cb2587023da5e5ecf7adf881c29305578c"
        },
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "2026-11-19",
        "retired": null,
        "how": "The firm, its pharmacist in charge and its owners, screened against OIG's exclusion list. A name match is confirmed in OIG's online search before it is shown.",
        "source": {
          "title": "HHS OIG List of Excluded Individuals and Entities",
          "url": "https://exclusions.oig.hhs.gov/"
        },
        "history": [],
        "askable": ""
      },
      {
        "id": "permit",
        "group": "identity",
        "label": "State license, home state",
        "applies": true,
        "counted": true,
        "state": "missing",
        "stateWord": "Not checked here",
        "tone": "neutral",
        "checkedHere": false,
        "onRecord": false,
        "howWord": "Not checked here",
        "howMark": "missing",
        "checkedBy": "",
        "checkedByWord": "",
        "summary": "Nothing on record yet.",
        "route": "",
        "routeWord": "Not checked here",
        "at": "",
        "by": null,
        "receipt": null,
        "docName": "",
        "checks": [],
        "expires": "",
        "daysLeft": null,
        "nextCheck": "",
        "retired": null,
        "how": "A person opens the board's own lookup and records status, class, expiry and any discipline. Most boards forbid automated queries; the lookup is captured and dated.",
        "source": {
          "title": "State board of pharmacy license lookup",
          "url": "https://nabp.pharmacy/about/boards-of-pharmacy/"
        },
        "history": [],
        "askable": "permit"
      },
      {
        "id": "fda_registration",
        "group": "identity",
        "label": "FDA registration",
        "applies": false
      }
    ],
    "licensedStates": [],
    "selfLicensedStates": [],
    "notCheckedHere": [
      {
        "id": "permit",
        "label": "State license, home state",
        "why": "Nothing on record yet.",
        "how": "A person opens the board's own lookup and records status, class, expiry and any discipline. Most boards forbid automated queries; the lookup is captured and dated.",
        "askable": "permit"
      },
      {
        "id": "pic",
        "label": "Pharmacist in charge",
        "why": "Nothing on record yet.",
        "how": "Named on the board record where the board shows it (Florida, Texas). Where it does not (California, Illinois), the board's permit record or letter is requested. The PIC's own license is checked too.",
        "askable": "pic"
      }
    ],
    "notCheckedLine": "23 of 26 items not checked here: ask for all",
    "askAll": [
      "permit",
      "pic",
      "nonresident",
      "dea",
      "entity",
      "pcab",
      "achc",
      "nabp_compounding",
      "lab_17025",
      "state_inspection",
      "sterility",
      "endotoxin",
      "potency",
      "bud",
      "stability",
      "cold_chain",
      "validation",
      "copies"
    ],
    "askAllUrl": "",
    "blocks": {
      "licences": []
    },
    "options": {
      "upstream": {
        "on": false,
        "since": "",
        "withdrawnAt": "",
        "supplierNames": false
      },
      "permits": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "readiness": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "operations": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      },
      "copies": {
        "on": false,
        "since": "",
        "withdrawnAt": ""
      }
    },
    "asks": null,
    "doors": null,
    "howToRead": [
      {
        "route": "Matched at source",
        "means": "A lookup ran against the issuer's own public source. The receipt records the query, the time and what the source returned."
      },
      {
        "route": "Answered by the issuer in writing",
        "means": "The issuer answered in writing. The reply is kept."
      }
    ],
    "whoChecked": [
      {
        "mark": "Public source lookup",
        "means": "Veritura ran a lookup at the source itself (the FDA, openFDA, NPPES, OIG) on the date shown. The receipt keeps the query and the answer."
      },
      {
        "mark": "Checked at the issuer by a named person",
        "means": "Someone independent of the pharmacy, such as a buyer's staff, opened the issuer's own record and recorded what it said, with their name, job title and company."
      },
      {
        "mark": "Recorded by the pharmacy's own staff",
        "means": "The pharmacy checked itself and recorded what the issuer's record said. Shown in grey with who recorded it, never as an independent confirmation."
      },
      {
        "mark": "Read by Veritura",
        "means": "Veritura read the document itself, line by line, against the rule it answers to."
      }
    ],
    "answer": {
      "facts": [
        "FDA and OIG: no finding in the lookups that ran.",
        "Licenses: none on file yet.",
        "Test reports: none read yet."
      ],
      "coverage": "3 of 26 items checked; 23 not checked here. A count of what is on file, never a score.",
      "documentsRead": 0,
      "documentsOpen": 0,
      "documentsBad": 0,
      "supplierCertificatesRead": 0,
      "supplierCertificatesOwed": 0,
      "supplierCertificates": null,
      "line": "FDA and OIG: no finding in the lookups that ran. Licenses: none on file yet. Test reports: none read yet.",
      "boundary": "Facts from the file below, each with its source and date. Never a grade or a rank of the pharmacy."
    },
    "glance": [
      {
        "key": "fda",
        "label": "FDA and OIG records",
        "word": "no finding",
        "who": "matched at the source",
        "at": "2026-10-20",
        "checkedBy": "public_source",
        "tone": "positive",
        "line": "FDA and OIG records · no finding · matched at the source · 2026-10-20"
      }
    ],
    "telehealth": {
      "website": "",
      "websiteLine": "No website on file",
      "legitscript": {
        "applies": false,
        "naWord": "No website on file",
        "line": "No website on file. LegitScript and NABP's digital pharmacy list cover the website a pharmacy sells through, and this file names none."
      },
      "nabpDigital": {
        "applies": false,
        "naWord": "No website on file"
      },
      "states": {
        "home": "CO",
        "list": [],
        "licensed": [],
        "selfRecorded": [],
        "negative": [],
        "map": [
          {
            "state": "AK",
            "x": 0,
            "y": 0,
            "status": "none",
            "word": ""
          },
          {
            "state": "ME",
            "x": 10,
            "y": 0,
            "status": "none",
            "word": ""
          },
          {
            "state": "VT",
            "x": 9,
            "y": 1,
            "status": "none",
            "word": ""
          },
          {
            "state": "NH",
            "x": 10,
            "y": 1,
            "status": "none",
            "word": ""
          },
          {
            "state": "WA",
            "x": 0,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "ID",
            "x": 1,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MT",
            "x": 2,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "ND",
            "x": 3,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MN",
            "x": 4,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "IL",
            "x": 5,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "WI",
            "x": 6,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MI",
            "x": 7,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "NY",
            "x": 8,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "RI",
            "x": 9,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "MA",
            "x": 10,
            "y": 2,
            "status": "none",
            "word": ""
          },
          {
            "state": "OR",
            "x": 0,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "NV",
            "x": 1,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "WY",
            "x": 2,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "SD",
            "x": 3,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "IA",
            "x": 4,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "IN",
            "x": 5,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "OH",
            "x": 6,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "PA",
            "x": 7,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "NJ",
            "x": 8,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "CT",
            "x": 9,
            "y": 3,
            "status": "none",
            "word": ""
          },
          {
            "state": "CA",
            "x": 0,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "UT",
            "x": 1,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "CO",
            "x": 2,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "NE",
            "x": 3,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "MO",
            "x": 4,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "KY",
            "x": 5,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "WV",
            "x": 6,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "VA",
            "x": 7,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "MD",
            "x": 8,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "DE",
            "x": 9,
            "y": 4,
            "status": "none",
            "word": ""
          },
          {
            "state": "AZ",
            "x": 1,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "NM",
            "x": 2,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "KS",
            "x": 3,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "AR",
            "x": 4,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "TN",
            "x": 5,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "NC",
            "x": 6,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "SC",
            "x": 7,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "DC",
            "x": 8,
            "y": 5,
            "status": "none",
            "word": ""
          },
          {
            "state": "OK",
            "x": 3,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "LA",
            "x": 4,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "MS",
            "x": 5,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "AL",
            "x": 6,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "GA",
            "x": 7,
            "y": 6,
            "status": "none",
            "word": ""
          },
          {
            "state": "HI",
            "x": 0,
            "y": 7,
            "status": "none",
            "word": ""
          },
          {
            "state": "TX",
            "x": 3,
            "y": 7,
            "status": "none",
            "word": ""
          },
          {
            "state": "FL",
            "x": 8,
            "y": 7,
            "status": "none",
            "word": ""
          }
        ],
        "source": "The licenses on file",
        "note": "No state license is on file yet."
      },
      "pic": {
        "name": "",
        "nameFrom": "",
        "board": {
          "state": "missing",
          "stateWord": "Not checked here",
          "routeWord": "Not checked here",
          "at": "",
          "summary": "Nothing on record yet."
        },
        "oig": {
          "state": "verified",
          "stateWord": "No match in the list as loaded",
          "routeWord": "Matched at source",
          "at": "2026-10-20",
          "summary": "Nothing on record for \"Sample Harborline Pharmacy\" in HHS OIG List of Excluded Individuals/Entities."
        }
      },
      "copies": {
        "item": {
          "applies": true,
          "state": "missing",
          "stateWord": "Not checked here",
          "howWord": "Not checked here",
          "howMark": "missing",
          "tone": "neutral",
          "checkedHere": false,
          "onRecord": false,
          "checkedBy": "",
          "checkedByWord": "",
          "at": "",
          "summary": "Nothing on record yet.",
          "askable": "copies",
          "receipt": null
        },
        "block": {
          "on": false,
          "withdrawnAt": ""
        }
      }
    },
    "exposure": {
      "asOf": "2026-10-21",
      "products": [],
      "pharmacy": [],
      "counts": {
        "products": 0,
        "substances": 0,
        "factsToRead": 0,
        "pharmacyFindings": 0
      },
      "note": "Where each substance stands on the FDA's public lists, with the source and the date of each list. Facts only: whether a preparation may be compounded is the pharmacy's and the prescriber's call, and no list settles it alone.",
      "sources": [
        {
          "label": "21 CFR 216.23 and the FDA's 503A categories",
          "url": "https://www.fda.gov/drugs/human-drug-compounding/bulk-drug-substances-used-compounding"
        },
        {
          "label": "21 CFR 216.23",
          "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.23"
        },
        {
          "label": "21 CFR 216.24",
          "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.24"
        },
        {
          "label": "The FDA's 503A category list, updated May 14, 2026",
          "url": "https://www.fda.gov/media/94155/download"
        },
        {
          "label": "The FDA's drug shortage database",
          "url": "https://dps.fda.gov/drugshortages"
        },
        {
          "label": "The FDA's NDC directory (openFDA)",
          "url": "https://open.fda.gov/apis/drug/ndc/"
        },
        {
          "label": "Section 503A(b)(1)(D) and (b)(2), and the FDA's 2018 guidance on essentially copies",
          "url": "https://www.fda.gov/media/98973/download"
        },
        {
          "label": "The FDA's establishment registry (DECRS)",
          "url": "https://www.accessdata.fda.gov/scripts/cder/drls/"
        }
      ]
    },
    "instant": false,
    "private": true,
    "publishedByPharmacy": false,
    "basis": "Not published by the pharmacy: public sources and your own workspace's checks only.",
    "createdAt": "2026-10-15",
    "lookedUpAt": "",
    "refreshedWeekly": false,
    "watching": false,
    "changes": [],
    "sample": true,
    "sampleNote": "Sample data for test keys: invented firms, never a real pharmacy or supplier. A live key reads published files."
  }
}

Where your products stand on the FDA's lists

GET/v1/exposure

Name your products and read, product by product, where each substance stands on the FDA's public lists: the 503A bulks lists and categories, a component of a drug marketed under an FDA application, 21 CFR 216.24, the shortage list, and marketed products a compounded version would copy. Each fact carries its source and the date of the list. Add lookup or pharmacy to read what the FDA has said about that pharmacy too. products is paged with limit and cursor; counts covers every product named. Facts, never a verdict.

ParameterWhat it is
productA product as the label names it. Repeat for each, up to 24.
lookupOptional. One of your lookup ids.
pharmacyOptional. A published pharmacy file id or public name.
limitProducts a page, 1 to 24. Default 24.
cursornext_cursor from the page before.
curl -G https://www.veritura.co/v1/exposure \
  --data-urlencode "product=Semaglutide 2.5 mg/mL injection" \
  --data-urlencode "product=Naltrexone 4.5 mg capsules" \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response Shortened, from a test key
{
  "ok": true,
  "mode": "test",
  "pharmacy": null,
  "exposure": {
    "asOf": "2026-10-21",
    "products": [
      {
        "product": "Semaglutide 2.5 mg/mL injection",
        "from": "yours",
        "fromWord": "You added it",
        "lotNumber": "",
        "receivedAt": "",
        "basis": null,
        "substances": [
          {
            "name": "Semaglutide",
            "key": "semaglutide",
            "facts": [
              {
                "key": "bulks_503a",
                "label": "503A bulk drug substance lists",
                "asOf": "2026-09-21",
                "state": "application_component",
                "tone": "neutral",
                "source": {
                  "label": "The FDA's NDC directory (openFDA)",
                  "url": "https://open.fda.gov/apis/drug/ndc/"
                },
                "marketedAs": [
                  "Wegovy",
                  "Ozempic",
                  "Rybelsus"
                ],
                "line": "Semaglutide is not on the 503A bulks list (21 CFR 216.23(a)) or on the FDA's Category 1 or Category 2 lists (updated May 14, 2026), but it is the active ingredient of drugs marketed under an FDA application: Wegovy, Ozempic, Rybelsus (NDA), per the FDA's NDC directory as of Sep 21, 2026. Section 503A lets a bulk substance that is a component of a drug marketed under an FDA application be used in compounding; that covers the same active ingredient, and a different salt form is a different substance. A compounded drug that is essentially a copy of the marketed product needs a prescriber's determination (below)."
              },
              {
                "key": "withdrawn",
                "label": "Withdrawn or removed for safety or effectiveness (21 CFR 216.24)",
                "source": {
                  "label": "21 CFR 216.24",
                  "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.24"
                },
                "state": "not_on_list",
                "tone": "neutral",
                "asOf": "2026-10-19",
                "line": "Semaglutide does not appear in Veritura's capture of 21 CFR 216.24 as published Oct 19, 2026."
              },
              {
                "key": "shortage",
                "label": "The FDA's drug shortage list",
                "source": {
                  "label": "The FDA's drug shortage database",
                  "url": "https://dps.fda.gov/drugshortages"
                },
                "asOf": "2026-09-21",
                "state": "shortage_resolved",
                "tone": "attention",
                "line": "The FDA lists the Semaglutide shortage as resolved on Feb 21, 2025. The FDA has said its enforcement discretion for 503A compounding of Semaglutide injection products ended on Apr 24, 2025."
              },
              {
                "key": "copy",
                "label": "\"Essentially a copy\" of a marketed product",
                "source": {
                  "label": "The FDA's NDC directory (openFDA)",
                  "url": "https://open.fda.gov/apis/drug/ndc/"
                },
                "asOf": "2026-09-21",
                "state": "marketed",
                "tone": "attention",
                "guidance": {
                  "label": "Section 503A(b)(1)(D) and (b)(2), and the FDA's 2018 guidance on essentially copies",
                  "url": "https://www.fda.gov/media/98973/download"
                },
                "marketed": [
                  "Wegovy",
                  "Ozempic",
                  "Rybelsus"
                ],
                "line": "Marketed as Wegovy, Ozempic, Rybelsus (NDA), oral, subcutaneous, in 17 strengths, per the FDA's NDC directory as of Sep 21, 2026. A compounded drug that is essentially a copy of a marketed product needs, for each patient, a prescriber's determination of the change made and the significant difference it produces, on the prescription (section 503A(b)(2))."
              },
              {
                "key": "supplier_registration",
                "label": "The makers' FDA registration",
                "source": {
                  "label": "The pharmacy's published file",
                  "url": ""
                },
                "state": "not_published",
                "tone": "neutral",
                "asOf": "",
                "line": "The pharmacy has not published its supplier lots, so the FDA registration of the makers behind its Semaglutide is not shown here."
              }
            ]
          }
        ],
        "unread": ""
      }
    ],
    "pharmacy": [],
    "counts": {
      "products": 2,
      "substances": 2,
      "factsToRead": 3,
      "pharmacyFindings": 0
    },
    "note": "Where each substance stands on the FDA's public lists, with the source and the date of each list. Facts only: whether a preparation may be compounded is the pharmacy's and the prescriber's call, and no list settles it alone.",
    "sources": [
      {
        "label": "21 CFR 216.23 and the FDA's 503A categories",
        "url": "https://www.fda.gov/drugs/human-drug-compounding/bulk-drug-substances-used-compounding"
      },
      {
        "label": "21 CFR 216.23",
        "url": "https://www.ecfr.gov/current/title-21/chapter-I/subchapter-C/part-216/subpart-B/section-216.23"
      }
    ]
  },
  "total": 2,
  "limit": 24,
  "next_cursor": null,
  "sample": true,
  "sampleNote": "The FDA lists are public reference data, read the same for every key; the pharmacy, when named, is from the sample."
}

List your watches and what changed

GET/v1/watches

Your watches (oldest first) and the changes found (newest first), a page of each; one cursor pages both. The first page compares each watched file with what it showed before, at most once a minute for your workspace; Veritura also compares every six hours without being asked. A change is a sentence, never a score.

ParameterWhat it is
limit1 to 500 of each list. Default 100.
cursornext_cursor from the page before.
curl https://www.veritura.co/v1/watches \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response From a test key
{
  "ok": true,
  "mode": "test",
  "limit": 100,
  "next_cursor": null,
  "watches": [
    {
      "id": "fw_t_3f9a1c2b7d10",
      "kind": "pharmacy",
      "fileId": "vfl_sample_northgate",
      "name": "Sample Northgate Outsourcing",
      "url": "",
      "createdAt": "2026-10-21T23:38:17.001Z",
      "via": "api"
    }
  ],
  "alerts": [
    {
      "id": "fa_sample_3f9a1c2b7d10",
      "kind": "pharmacy",
      "fileId": "vfl_sample_northgate",
      "name": "Sample Northgate Outsourcing",
      "url": "",
      "at": "2026-10-21T23:38:17.001Z",
      "changes": [
        {
          "type": "new_finding",
          "item": "inspections",
          "line": "New finding: FDA inspections: classification, citations, 483s. FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations."
        },
        {
          "type": "expiring",
          "item": "permit",
          "line": "State license, home state expires within 30 days. Active, name and number match (FL)."
        }
      ],
      "read": false,
      "askId": "",
      "sample": true
    }
  ]
}

Watch a published file, or one of your lookups

POST/v1/watches

Send the kind and the id. A published file is watched by its file id or public name; a pharmacy that never published is watched through your own lookup of it (kind lookup), which the weekly look-up keeps current. Watching what you already watch returns the same watch. Free. To be told by webhook rather than by asking, register a file.changed webhook, which is on a paid plan. Send an Idempotency-Key so a retry never runs it twice.

ParameterWhat it is
kindpharmacy, supplier or lookup.
idThe file id or its public name, or your lookup id (vfl_...).
Idempotency-KeyOptional header. A new random key per request; the same key on a retry.
curl -X POST https://www.veritura.co/v1/watches \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01" \
  -H "Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
  -H "Content-Type: application/json" \
  -d '{"kind":"pharmacy","id":"vfl_sample_northgate"}'
Example response From a test key
{
  "ok": true,
  "mode": "test",
  "watch": {
    "id": "fw_t_3f9a1c2b7d10",
    "kind": "pharmacy",
    "fileId": "vfl_sample_northgate",
    "name": "Sample Northgate Outsourcing",
    "url": "",
    "createdAt": "2026-10-21T23:38:17.001Z",
    "via": "api"
  }
}

Stop watching a file

DELETE/v1/watches/{id}

The watch is gone; the changes you were told about stay in your list. No Idempotency-Key is needed: a second delete of the same watch answers 404 and changes nothing.

ParameterWhat it is
idThe watch id (fw_...).
curl -X DELETE https://www.veritura.co/v1/watches/fw_t_3f9a1c2b7d10 \
  -H "Authorization: Bearer vk_test_..." \
  -H "X-Veritura-Version: 2026-10-01"
Example response From a test key
{
  "ok": true,
  "mode": "test",
  "deleted": "fw_t_3f9a1c2b7d10"
}

Webhook: file.changed

Webhooks are on a paid plan. Reading, watching and asking GET /v1/watches for what changed are free.

With a paid plan, register an https endpoint for file.changed in Settings, Developer, and each change to a file or a lookup you watch is posted to it, signed. A lookup's change says "kind": "lookup".

HeaderWhat it holds
X-Veritura-Eventfile.changed
X-Veritura-Event-IdThe event id, the same on every redelivery.
X-Veritura-Signaturesha256= and the hex HMAC-SHA256 of the raw body, keyed with your endpoint's secret.
The body
{
  "id": "evt_5d1c0b9e7a2f4c3d8e6b1a90",
  "event": "file.changed",
  "created": "2026-10-21T23:38:17.001Z",
  "attempt": 1,
  "data": {
    "event": "file.changed",
    "file": {
      "id": "vfl_sample_northgate",
      "kind": "pharmacy",
      "name": "Sample Northgate Outsourcing",
      "url": "https://www.veritura.co/pharmacy/sample-northgate-outsourcing"
    },
    "changes": [
      {
        "type": "new_finding",
        "item": "inspections",
        "line": "New finding: FDA inspections: classification, citations, 483s. FDA inspection ending 2026-08-07: classified Voluntary Action Indicated, 2 citations."
      },
      {
        "type": "expiring",
        "item": "permit",
        "line": "State license, home state expires within 30 days. Active, name and number match (FL)."
      }
    ],
    "at": "2026-10-21T23:38:17.001Z"
  }
}

Check the signature first

Compute the HMAC over the raw bytes you received, before parsing them, and compare it in constant time. Answer 2xx within 5 seconds; anything else is tried again. Both clients do this for you and refuse a delivery older than 5 minutes.

import { constructFileChangedEvent } from "./veritura-buyer-api";

// rawBody: the request body exactly as received (a string or bytes)
const event = await constructFileChangedEvent(rawBody, req.headers["x-veritura-signature"], process.env.VERITURA_WEBHOOK_SECRET!);
for (const ch of event.data.changes) console.log(event.data.file.name, ch.line);

Errors

Every error is { "error": "...", "code": "..." }: a sentence for a person, a code for your program. Match on code; the sentence can change.

StatuscodeWhat happened
400version_unknownX-Veritura-Version names a version this API does not have; versions lists the ones it does.
400cursor_invalidThe cursor did not come from this list, these filters and this key's mode.
400idempotency_key_invalidIdempotency-Key is not 1 to 255 visible characters.
400bad_requestSomething is missing, for example the kind of file to watch, or cursor and offset were sent together.
400own_fileYour own file: you see every change to it in your workspace.
401key_missingNo Authorization header.
401key_malformedNot a Veritura key.
401key_invalidThe key is not recognised.
401key_revokedThe key was revoked.
401key_expiredThe key has expired.
401key_issuer_removedThe teammate who made it left the workspace.
403scope_missingThe key does not carry network:read.
403demoThe shared demo cannot be changed.
404not_foundNothing with that id: an unpublished file, another workspace's lookup or watch, or a typo.
405method_not_allowedThat method is not used here; the Allow header says which is.
409idempotency_key_reusedThe Idempotency-Key was used in the last 24 hours for a different request.
409idempotency_in_progressThe first request with this Idempotency-Key is still running. Wait Retry-After seconds.
429rate_limitedOver the limit. Wait Retry-After seconds.
502lookup_failedA lookup did not run. Try again with the same Idempotency-Key.

Retrying

These can be retried: a dropped connection or a timeout, 502, 503 and 504, 409 idempotency_in_progress, and 429 after Retry-After. Retry a write only with the same Idempotency-Key. Both clients retry the first four twice by default, with a short wait between, and leave a 429 to you.

Clients

Two clients, each one file with no dependencies, typed from the OpenAPI file. Both send the version header, page with cursors, put an Idempotency-Key on every write and reuse it when they retry, and check webhook signatures.

TypeScript

Node 18 or later, Deno, Bun and edge runtimes. Every answer is typed, errors throw VerituraApiError with status and code, and lastRateLimit, lastVersion and lastReplayed describe the last answer.

Get the client
curl -o veritura-buyer-api.ts https://www.veritura.co/buyer-api/client.ts
MethodCalls
listPharmacies(params?)GET /v1/pharmacies
pharmacyPages(params?)every page of GET /v1/pharmacies
getPharmacyFile(id)GET /v1/pharmacies/{id}/file
listSuppliers(params?), supplierPages(params?)GET /v1/suppliers
getSupplierFile(id)GET /v1/suppliers/{id}/file
listLookups(params?), lookupPages(params?)GET /v1/lookups
runLookup(request, options?)POST /v1/lookups
getLookup(id)GET /v1/lookups/{id}
getExposure(params), exposurePages(params)GET /v1/exposure
listWatches(params?), watchPages(params?)GET /v1/watches
watch({ kind, id }, options?)POST /v1/watches; kind is pharmacy, supplier or lookup
unwatch(watchId)DELETE /v1/watches/{id}
verifyWebhookSignature(body, header, secret)true when the signature holds
constructFileChangedEvent(body, header, secret)the typed event, or it throws

Python

Python 3.8 or later, standard library only (urllib). Answers are plain dicts in the shapes above, errors raise VerituraApiError with status and code, and last_rate_limit, last_version and last_replayed describe the last answer.

Get the client
curl -o veritura_buyer_api.py https://www.veritura.co/buyer-api/client.py
MethodCalls
list_pharmacies(...), pharmacy_pages(...)GET /v1/pharmacies
get_pharmacy_file(id)GET /v1/pharmacies/{id}/file
list_suppliers(...), supplier_pages(...)GET /v1/suppliers
get_supplier_file(id)GET /v1/suppliers/{id}/file
list_lookups(...), lookup_pages(...)GET /v1/lookups
run_lookup(q=..., ...)POST /v1/lookups
get_lookup(id)GET /v1/lookups/{id}
get_exposure(products, ...), exposure_pages(products, ...)GET /v1/exposure
list_watches(...), watch_pages(...)GET /v1/watches
watch(kind, id)POST /v1/watches
unwatch(watch_id)DELETE /v1/watches/{id}
verify_webhook_signature(body, header, secret)True when the signature holds
construct_file_changed_event(body, header, secret)the event as a dict, or it raises

What this is not

  • No ratings, no rankingNo score, grade, star or badge. Lists are alphabetical, and a count says what is on file and how it was checked.
  • Paperwork, not medicineVeritura checks records at their source and reads documents against their rule. A file says nothing about any medicine or ingredient.
  • Not an approvalA file is not an approval, a certification or an endorsement of a pharmacy or supplier.
  • No orders, no routingVeritura does not sell medicine, route orders or take a share of a sale.

Changelog

  1. Documents on a file, and who may open them

    • Each item with a document on file carries document: access (public, connected or private, as the firm chose), accessWord ("Open", "Ask for access", or empty when private), name, keptWord (how it is kept: the original file or a text copy), at (the date it was added) and url (the public address, set only when access is public).
    • A published file carries documents, every item's current document with the same fields plus label, kept, kind, size and a line in words, and documentsLine, the documents in one sentence. A directory row carries documents too.
    • A private document is still listed, without its name or address. The item, how it was established and any finding are shown whatever the firm chooses.
    • Two values route can now hold: attested, a document Veritura could not read, kept and attested by the person who added it while a Veritura reviewer reads it, and reviewed, a document a Veritura reviewer read and found to be what the item asks for. On a firm's own file an attested document reads as the firm's own record (checkedBy self); a reviewed one reads checkedBy document. No new checkedBy value.
    • Every item carries howWord and howMark: how it was established, in words and as a key. A verified item's stateWord now says the same words (for example "Read from its document, not checked at the issuer"), never a bare "Confirmed"; only a check at the source or by a named person is source or person.
  2. Docs: search, copy and Markdown

    • Search on this page filters the sections and endpoints as you type. Cmd-K or Ctrl-K (or /) focuses it; Esc clears it.
    • Copy on every code block and every example response.
    • The whole page as Markdown at /buyer-api.md, built from the same words as this page.
    • New sections for versioning, pagination and idempotency, the new error codes, and both clients. Every endpoint now has an example response.
  3. Python client

    • A Python client, one file, standard library only (urllib), for Python 3.8 or later: every endpoint, pages that follow next_cursor, the version header, an Idempotency-Key on every write, retries, and webhook signature checks. Get it at /buyer-api/client.py.
  4. TypeScript client 0.2.0

    • New methods: runLookup (POST /v1/lookups), getExposure (GET /v1/exposure), and watch({ kind: "lookup", id }) for one of your lookups.
    • Page iterators that follow next_cursor: pharmacyPages, supplierPages, lookupPages, watchPages and exposurePages.
    • Sends X-Veritura-Version on every request (the version option; lastVersion holds the version that answered) and an Idempotency-Key on every write, reused on its own retries (the idempotencyKey option; lastReplayed).
    • Retries a dropped connection, a timeout, 502, 503, 504 and idempotency_in_progress twice by default (maxRetries).

    Changed: watch(kind, id) still works; watch({ kind, id }) is the form to use.

  5. Idempotency keys on writes

    • POST /v1/lookups and POST /v1/watches take an Idempotency-Key header. For 24 hours the same key and body return the first successful answer again, with Idempotent-Replayed: true, and nothing runs twice.
    • The same key with a different body is a 409 idempotency_key_reused; a retry while the first request is still running is a 409 idempotency_in_progress with Retry-After. A key that is not 1 to 255 visible characters is a 400 idempotency_key_invalid.
  6. Cursor pagination on every list

    • GET /v1/pharmacies, /v1/suppliers, /v1/lookups, /v1/watches and /v1/exposure take limit and cursor and answer with next_cursor (null on the last page). A cursor marks a place, not a count, so rows published while you page never repeat or skip a row that was already there.
    • A cursor sent with another list, other filters or the other mode is a 400 cursor_invalid.

    Changed: offset on /v1/pharmacies and /v1/suppliers is deprecated and keeps working until at least Oct 1, 2027; an answer that used it carries Deprecation, Sunset and Link headers. GET /v1/watches pages the watches (oldest first) and every change found (newest first) with one cursor, instead of returning the latest 50 changes. GET /v1/lookups takes limit (default 100).

  7. Dated versions

    • Send X-Veritura-Version: 2026-10-01 to pin the version. Every answer carries X-Veritura-Version with the version it was answered under; with no header, the latest stable version answers.
    • An unknown version is a 400 version_unknown that lists the versions accepted.
    • A breaking change ships only under a new dated version, and the version it replaces keeps working for at least 12 months. It is announced here on the day it ships, and answers under the old version carry Deprecation and Sunset headers.
  8. Lookups you can run and watch, and exposure by product

    • New: POST /v1/lookups runs a lookup of any pharmacy, or refreshes one, privately to your workspace; watch: true watches it.
    • Watches take kind lookup, so a pharmacy that never published can be watched through your own lookup. Lookups are looked up again every week, and a change arrives in the same file.changed shape, with kind lookup.
    • New: GET /v1/exposure, where each product stands on the FDA's public lists, by product, with each list's source and date.
    • completeness.checked leads every summary; an item the firm recorded about itself reads state self_recorded and is never counted as checked or confirmed.

    Changed: completeness.line now reads "N of M items checked". completeness.confirmed no longer counts items the firm recorded about itself. A state a pharmacy shipped to with no permit on record reads state gap ("Not on record"), never a finding.

  9. Free to read

    • Read keys (scope network:read) are free for every workspace: clinics, telehealth platforms, and pharmacies reading other files. Make one in Settings, Developer.
    • Test keys read a fixed sample with invented names, the same everywhere. Live keys read published files, your watches and your private lookups.
    • New: GET /v1/lookups and GET /v1/lookups/{id}, the files your workspace keeps about pharmacies, private to your workspace.
    • Rate limit: 300 requests a minute per workspace, counted apart for test and live keys, with X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset on every answer and Retry-After on a 429.
    • Lists take limit and offset. Every answer carries mode (test or live). Errors carry a stable code.
    • An OpenAPI 3.1 file, an llms.txt and a TypeScript client.
    • Signed webhooks, file.changed among them, stay on a paid plan for now.

    Changed: A test key no longer reads real published files; use a live key for those.

  10. Published pharmacy and supplier files

    • GET /v1/pharmacies, GET /v1/pharmacies/{id}/file, GET /v1/suppliers and GET /v1/suppliers/{id}/file: every item with how it was checked, when, who checked it (checkedBy, checkedByWord) and its receipt; findings first.
    • POST /v1/watches, GET /v1/watches and DELETE /v1/watches/{id}, and the file.changed webhook.

Veritura checks paperwork and records at their source and reads documents against the rule each must meet. Nothing here says anything about any medicine.