Developers
Put radiology intelligence inside your software.
One versioned REST API. Deterministic criteria verdicts with provenance, callable by your application or your agent.
- 1
See the response
Below: a real request and the engine's real answer.
Jump to example - 2
Read the API
Interactive OpenAPI reference. No account needed.
API reference - 3
Get a key
Passkeys, Google, GitHub or email. Keys are shown once and stored hashed.
Developer portal - 4
Build
A free monthly allowance of decisions, then metered per decision.
Pricing
Example
POST /v1/inference/evaluate
curl https://api.radvector.ai/v1/inference/evaluate \
-H "Authorization: Bearer $RADVECTOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"study": {
"modality": "ct",
"region": "thorax",
"age_years": 64,
"sex": "M",
"attributes": {
"risk": "high"
}
},
"findings": [
{
"label": "nodule",
"region": "thorax",
"laterality": "right",
"composition": "solid",
"measurement": {
"value_mm": 7
},
"attributes": {
"multiplicity": "single"
}
}
]
}'import os, requests
resp = requests.post(
"https://api.radvector.ai/v1/inference/evaluate",
headers={"Authorization": f"Bearer {os.environ['RADVECTOR_API_KEY']}"},
json={
"study": {
"modality": "ct",
"region": "thorax",
"age_years": 64,
"sex": "M",
"attributes": {
"risk": "high"
}
},
"findings": [
{
"label": "nodule",
"region": "thorax",
"laterality": "right",
"composition": "solid",
"measurement": {
"value_mm": 7
},
"attributes": {
"multiplicity": "single"
}
}
]
},
)
best = resp.json()["outcomes"][0]["best"]
print(best["impression_category"], best["provenance"]["pack_version"])const resp = await fetch("https://api.radvector.ai/v1/inference/evaluate", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RADVECTOR_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"study": {
"modality": "ct",
"region": "thorax",
"age_years": 64,
"sex": "M",
"attributes": {
"risk": "high"
}
},
"findings": [
{
"label": "nodule",
"region": "thorax",
"laterality": "right",
"composition": "solid",
"measurement": {
"value_mm": 7
},
"attributes": {
"multiplicity": "single"
}
}
]
}),
});
const { outcomes } = await resp.json();
console.log(outcomes[0].best.recommendation);{
"trace_id": "site-example-1",
"api_version": "v1",
"outcomes": [
{
"best": {
"schema_version": "1.0",
"system": "Fleischner",
"category_id": "FLE-SOLID-SINGLE-6TO8-HIGH",
"impression_category": "Solid single nodule 6-8 mm, high risk",
"canonical_language": "Single solid pulmonary nodule measuring 6 to 8 mm in a high-risk patient.",
"recommendation": "CT at 6-12 months, then CT at 18-24 months.",
"confidence": 0.85,
"authoritative": true,
"usable_for_output": true,
"is_deferral": false,
"provenance": {
"system": "Fleischner",
"pack_version": "fleischner-2017-r2",
"validation_status": "validated",
"validated_by": "Owner-directed (founding radiologist); size/risk table audited vs Fleischner 2017 (Radiology 2017;284:228-243)",
"validation_date": "2026-08-18",
"knowledge_release_id": "",
"engine": "rc_algorithmic",
"trace_id": "site-example-1",
"citations": [],
"is_clinically_validated": true
},
"evidence": {
"type": "solid",
"multiplicity": "single",
"size_mm": 7,
"risk": "high"
},
"notes": ""
},
"systems_considered": [
"Fleischner"
],
"engine_input": "CT of the chest. 64-year-old male. Patient is high-risk. Single solid pulmonary nodule on the right measuring 7 mm.",
"engine": "rc_algorithmic"
}
]
}Captured from the RadVector API engine. verdicts[] and authoritative repeat this verdict and are omitted here. The contract has no field for a name, MRN or date of birth.
Reference
The /v1 surface.
Base URL https://api.radvector.ai. Authenticate with Authorization: Bearer rvk_… or X-API-Key.
| Route | What it does | Engine |
|---|---|---|
POST /v1/inference/evaluate | The central call. Structured findings (or text) plus study in; every applicable standard's verdict with provenance, the best and the authoritative verdict out. | Deterministic |
POST /v1/inference/evaluate/batch | One to 25 evaluate requests answered in order, each with its own result or error and each metered as if sent alone. | Deterministic |
POST /v1/results/normalize | Another imaging AI system's output as FHIR R4 Observations or a DICOM SR TID 1500 measurement report in; findings graded by the same engine, each verdict naming its AI source. | Deterministic |
POST /v1/context/prepare | The pre-read: current order plus prior report texts in; comparable priors ranked, prior measurements, applicable standards, open recommendations and missing information out. | Deterministic |
POST /v1/findings/normalize | De-identified report text in; canonical findings with honest confidence out. | Deterministic |
POST /v1/compare | The same finding on two studies; direction (grown, shrunk, stable, indeterminate), deltas and interval. | Deterministic |
POST /v1/qa/report | Deterministic cross-check advisories on report text, such as laterality conflicts and recommendation concordance. | Deterministic |
POST /v1/references | Published guidance and emerging evidence as two separate citation streams, with source, version and dates. | Deterministic |
POST /v1/best-practices | Published best-practice entries for an imaging question, each citing the guideline version it rests on. | Deterministic |
POST /v1/impression | The one language-model route: an IMPRESSION and RECOMMENDATIONS drafted around the verdicts, mechanically checked to stay inside them. | Deterministic + constrained LLM |
GET /v1/guidelines | The criteria-pack catalogue: edition, source, validation status, rule version. | Deterministic |
GET /v1/guidelines/{system} | One criteria pack in full: categories, canonical language, recommendations, applicability. | Deterministic |
Integration
FHIR out, DICOM SR and FHIR in, a sandbox to start.
FHIR R4 output (DiagnosticReport Bundle)
Available via API: Callable today through RadVector API.Any evaluate answer as a FHIR R4 Bundle: a preliminary DiagnosticReport, an Observation per finding and per verdict, deferrals kept visible.
AI-vendor results in (FHIR R4 Observations or DICOM SR TID 1500)
Available via API: Callable today through RadVector API.Another AI system's FHIR Observations or DICOM SR TID 1500 measurements, graded by the same engine; each verdict names its AI source.
Verified RadElement finding codes
Available via API: Callable today through RadVector API.RadElement codes copied from the published Open Imaging Finding Models, re-verified at build; no code is sent rather than a wrong one.
Pre-read context from prior reports
Available via API: Callable today through RadVector API.Priors ranked same-type first, prior measurements, applicable standards, open recommendations and missing information, before the read.
Sandbox keys and synthetic fixtures
Available via API: Callable today through RadVector API.Same engine answers, never billed, with a published file of synthetic requests for every route.
Criteria-pack version pinning
Available via API: Callable today through RadVector API.Pin a pack version; a stale pin answers 409 instead of silently changing recommendations.
Closed-set deferral codes
Available via API: Callable today through RadVector API.Every verdict carries a code from a closed set, so integrations branch on a value, never on prose.
Batch evaluation and idempotent retries
Available via API: Callable today through RadVector API.Up to 25 evaluations in one call; an Idempotency-Key replays the stored answer without re-running or re-billing.
Read the full developer guide on radvector.ai
Standards the engine applies: Lung-RADS, BI-RADS, TI-RADS, LI-RADS, O-RADS, PI-RADS, Bosniak, Fleischner, DEXA.