HLA-Verify

Every HLA allele name your pipeline sees, checked against the source. Deterministically.

HLA-Verify is a deterministic API that checks HLA allele names, typing reports, and donor-recipient match claims against a pinned IPD-IMGT/HLA release — no LLM anywhere in the loop. Built for lab directors qualifying a new check, LIMS and software product managers wiring it into ingest, and AI platform teams gating model output before it reaches a clinician.

What it checks

Four endpoints, JSON in and out, pinned to IPD-IMGT/HLA 3.65.0 (46,652 named alleles), served from Cloudflare's edge.

POST/v1/verify

Classifies every allele-shaped token in free text as valid, group (G/P), deleted (with successor), fabricated_group, or hallucinated. clean is true only when nothing is fabricated, deleted, or a made-up group.

curl -s https://api.hlaverify.com/v1/verify -H 'content-type: application/json' \ -d '{"text": "Patient typing: A*0101, B*15:504:01, DRB1*14:06. Assistant suggested DQB1*05:03:26:99."}'

POST/v1/normalize

Any era in, current release out: current_name, comparable 2-field name, G group (NONE / AMBIGUOUS), flags (deprecated_name, null_allele, nonexistent_allele). Up to 5,000 typings per call.

curl -s https://api.hlaverify.com/v1/normalize -H 'content-type: application/json' \ -d '{"typings": ["A*0101", "A*01:34N", "DRB1*1406", "A*24:09N", "B*9999"]}'

GET/v1/allele/{name}

Returns assigned (G/P group, first release, confirmed status, WMDA serology, null flag), valid_prefix (member count and sample), or deleted (successor). 404 for anything not in the release.

curl -s 'https://api.hlaverify.com/v1/allele/A*24:09N'

POST/v1/match

Two reported alleles per locus, any era. Frameworks 6/6, 8/8, 10/10, 12/12, antigen. Counts per chromosome, not per locus; GvH/HvG reported separately; a locus too coarse to call is potential with resolution_insufficient; a null allele hiding inside a serologic match raises null_allele_mismatch. Rules R1–R6 are published for lab audit.

curl -s https://api.hlaverify.com/v1/match -H 'content-type: application/json' -d '{ "framework": "8/8", "recipient": {"A": ["A*02:01","A*24:02"], "B": ["B*07:02","B*44:02"]}, "donor": {"A": ["A*02:01","A*24:09N"], "B": ["B*07:02","B*44:02"]}}'

Where it plugs in

Four insertion points, straight from the integration brief — drop a call in, gate on the result.

1

Typing report ingest

LIMS, HistoTrac/TIMS exports, PDF-to-text. Call /v1/normalize per reported allele; reject on nonexistent_allele, rewrite to current_name and log on deprecated_name.

2

LLM or agent output

Any assistant reply that mentions HLA. Call /v1/verify on the text; block or annotate before display when clean == false.

3

Search / match reports

Call /v1/match per pair; compare against the lab's own count, and route any potential or null_allele* flag to human review.

4

Registry / data-warehouse QC

Call /v1/normalize in batches of up to 5,000; diff reported against current_name on every release.

Plans

Every tier hits the same deterministic API. Starter and Pro keys are self-serve through Stripe; Enterprise and the pilot are by request.

FreeStarterProEnterprise
$0 $49/mo $199/mo Custom
60 req/min per IP, no key required 600 req/min per key 6,000 req/min per key Uncapped, custom SLA
Demo, API docs, evaluation use Per-key usage reporting, release-change notices Per-key usage reporting, release-change notices Volume licensing, SLA on request
Start calling Buy Starter Buy Pro Contact us

Pilot — $12,000, six weeks

Your reports or model outputs, verified against a pinned release with a full audit trail, a verdict diff across releases, and a signed findings letter. Fee credited in full to a first-year licence signed within 90 days. hello@hlaverify.com

Annual licence — from $15,000/yr

Commercial licence for the verification service on your own infrastructure, or self-hosted under PolyForm Noncommercial 1.0.0 for research and evaluation; model-evaluation licences and custom environment families for AI labs. hello@hlaverify.com

For AI agents

A remote MCP server at https://api.hlaverify.com/mcp exposes the same deterministic lookups as tools: verify_text, normalize_allele, allele_info, match_score, about. Streamable HTTP, JSON-RPC 2.0, stateless — nothing to install. Results are byte-identical to the matching /v1/… REST response.

{"mcpServers": {"hla-verify": {"url": "https://api.hlaverify.com/mcp"}}}

Anonymous calls share the free tier's 60 req/min; add a key for a higher tier: "headers": {"Authorization": "Bearer YOUR_KEY"}. Works in Claude Desktop, claude.ai connectors, Cursor, and any other MCP-capable client. Full machine-readable overview for agents: /llms.txt.

Why trust it

Deterministic

No language model anywhere in the loop. Same input plus same release gives the same JSON every time — no per-request variance to explain to a lab director.

Release-pinned

Pinned to an exact IPD-IMGT/HLA release — 46,652 named alleles in 3.65.0. /healthz reports the live release so a pipeline can assert on it; keyed customers get a verdict diff before the pin moves each quarter.

Nothing stored

Requests are processed in memory and discarded. Metering records counts per key, never content.

Open rules

Nomenclature normalization and matching rules R1–R6 are published in the repository for lab audit — not a black box.

Open benchmark

HLA-Bench-A (550 nomenclature tasks) and HLA-Bench-C (205 matching pairs) are public, executable-oracle suites with confidence intervals — the same failure modes this API catches at runtime.

Golden-tested and cross-checked

A golden test proves the Cloudflare Worker's output is byte-identical to the Python reference service on thousands of generated inputs. Against NMDP's py-ard reduction library, our 2-field names match on 1986/2000 alleles (99.30%) of a deterministic sample; the rest are documented semantic differences, not bugs (docs/pyard-concordance.md).

FAQ

Is this a medical device?
No. HLA-Verify is a research-and-evaluation tool; its output supports, and does not replace, clinical judgment.
What happens when IPD-IMGT/HLA publishes a new release?
The pin moves quarterly. Keyed customers receive a diff of every changed verdict before the pin moves, and can hold an older release on request. /healthz always reports the live release.
Can we self-host?
Yes. The same engine that computed the benchmark tables runs without HTTP (pip install the package, or run the FastAPI service locally). The service code is licensed under PolyForm Noncommercial 1.0.0 — free for research and evaluation, with a commercial licence required for production use.
How is our data handled?
Requests are processed in memory and discarded; nothing sent to the API is stored. Metering records request counts per key, never content. Reference data are fetched from the official IPD-IMGT/HLA source under CC-BY-ND and never redistributed. Send de-identified data only.