Public data API · v1 · live

Federal health data behind one base URL.

No key, no signup, no PHI. Provider records, device clearances, recalls, adverse events, drug labeling, clinical trials and hospital data — normalized, and every response carries the exact upstream URL it came from plus the moment it was fetched. You can re-derive any fact here from the government source without trusting us.

base https://solvinghealth.com/api/v1auth nonemethods GETPHI never

Ask it in plain English

Type a question. It looks up the federal records above and answers only from what comes back, with the sources listed. If nothing comes back, it says so instead of guessing.

Don't enter names or anything about a patient. Public federal records only; not medical, coding, billing or legal advice. Programs: POST /api/ask {"question": "…"}

Start in one line

Copy any of these. They return live data right now.

# What's recruiting for knee osteoarthritis?
curl "https://solvinghealth.com/api/v1/trials/search?condition=knee%20osteoarthritis&status=RECRUITING&limit=3"

# Orthopaedic surgeons in Colorado, from the CMS NPI registry
curl "https://solvinghealth.com/api/v1/providers/search?state=CO&taxonomy=Orthopaedic%20Surgery&limit=5"

# Has anything like this device been cleared, and by whom?
curl "https://solvinghealth.com/api/v1/clearances/search?q=knee&limit=5"

# Every endpoint, whether it is live, and which dataset it reads
curl "https://solvinghealth.com/api/v1"

Endpoints

Ten routes. Nine are live; one is deliberately not, and says so in its response.

RouteReturnsUpstreamState
GET /Service index: every endpoint and its datasetlive
GET /healthLiveness plus an upstream reachability probelive
GET /providers/searchClinicians and organizations, with taxonomies and state licenses.
NPPES will not search a whole state alone — pair state with taxonomy, city or a name.
NPPES NPI Registry (CMS)live
GET /providers/{npi}One provider by 10-digit NPINPPES NPI Registry (CMS)live
GET /clearances/search510(k) clearances: K-number, applicant, decision, dateopenFDA device/510klive
GET /devices/recallsRecall records with reason and recalling firmopenFDA device/recalllive
GET /devices/eventsAdverse event reports and product problemsopenFDA device/event (MAUDE)live
GET /labels/searchIndications and boxed warnings from structured labelingopenFDA drug/labellive
GET /trials/searchStudies with status, phase, enrollment and sponsorClinicalTrials.gov API v2live
GET /hospitals/searchOwnership, type, emergency services, star ratingCMS Provider Data Cataloglive
GET /exclusions/searchReturns 501 and points at the official screening toolOIG LEIEnot built
Why one endpoint returns 501.

The OIG exclusion list ships as a bulk CSV, not a queryable API, and that download is not reachable from this runtime. Serving a stale or reconstructed copy of an exclusion list is worse than serving nothing — a false clear is a compliance failure. So the endpoint returns 501 with the reason and sends you to the official OIG search. When there is a defensible way to mirror it with a freshness guarantee, it will go live and this row will change.

Every answer shows its work

Successful responses share one envelope. The two fields that matter are source_url and retrieved_at — paste the URL into a browser and you get the same records straight from the government.

{
  "ok": true,
  "api_version": "1.0.0",
  "source": "openFDA — device/510k",
  "source_url": "https://api.fda.gov/device/510k.json?search=device_name%3A%22knee%22&limit=1",
  "retrieved_at": "2026-09-07T04:28:02.666Z",
  "count": 1,
  "upstream_total": 1119,
  "results": [ { "k_number": "K191996", "device_name": "BC Reflex Uni Knee System", ... } ],
  "disclaimer": "Public federal data ... verify against the source_url before relying on it."
}

Errors

Failures return ok: false with a stable machine code: invalid_npi, not_found, invalid_query, upstream_unavailable, not_implemented, unknown_endpoint. Upstream failures surface as 502 rather than an empty result set, so you can tell "nothing matched" from "the government did not answer."

SDKs

Zero dependencies in every language. Nothing to install but the file itself.

JavaScript · ESMsolvinghealth.mjsBrowser, Node 18+, Deno and workers. Namespaced helpers, retries, typed errors. Python 3.8+solvinghealth.pyStandard library only. Also a CLI. Falls back to certifi when a Mac has no CA bundle wired. MCP · stdiomcp-server.mjsEleven tools for Claude Code, Claude Desktop or your own agent: nine over this API, two for ClinicalSwipe's family caregiver navigator. No npm install. OpenAPI 3.1openapi.yamlGenerate a client in any language, or hand it to a tool-using model.

JavaScript

import { SolvingHealth } from 'https://solvinghealth.com/sdk/solvinghealth.mjs';

const sh = new SolvingHealth();
const { results } = await sh.providers.search({ state: 'CO', taxonomy: 'Orthopaedic Surgery' });
const trials  = await sh.trials.search({ condition: 'knee osteoarthritis', status: 'RECRUITING' });

Python

curl -O https://solvinghealth.com/sdk/solvinghealth.py

from solvinghealth import SolvingHealth
sh = SolvingHealth()
for p in sh.providers.search(state="CO", taxonomy="Orthopaedic Surgery")["results"]:
    print(p["npi"], p["name"])

# or straight from the shell
python3 solvinghealth.py trials/search condition='knee osteoarthritis' limit=3

Agents (MCP)

Gives a model live lookup instead of recall. The nine tools over this API are read-only; two more call ClinicalSwipe's family caregiver navigator. No key.

curl -O https://solvinghealth.com/sdk/mcp-server.mjs
claude mcp add solvinghealth -- node ./mcp-server.mjs

# tools: find_providers, get_provider, search_clearances, search_device_recalls,
#        search_adverse_events, search_drug_labels, search_trials,
#        search_hospitals, list_endpoints,
#        caregiver_questionnaire, caregiver_plan

Open endpoints for agents

What an agent can call today with no key. An endpoint goes on this list only after it has been seen answering; these were last checked on 2026-09-11. Each one is linked where it runs. Nothing here proxies another site's endpoint or keeps a copy of its rules.

EndpointReturnsServed byFormat
GET /api/v1Public federal health data, with its source and retrieval time on every response. The routes are in the table above.solvinghealth.comJSON
GET /api/caregiver/questionnaireThe family caregiver navigator's questions. Add ?format=json for plain questions and the full resource catalog, each resource with its official source and the date it was checked.clinicalswipe.comFHIR R4 Questionnaire
POST /api/caregiver/planA plan built from a caregiver's answers: public programs first, then what to ask the family doctor, then neighbor help. A step that needs a clinician says who, what and why; signs: true marks only the steps a program requires a clinician to sign.clinicalswipe.comJSON, or FHIR R4 CarePlan
# The navigator's questions, as a FHIR R4 Questionnaire
curl "https://clinicalswipe.com/api/caregiver/questionnaire"

# A plan from plain answers, using the codes the questionnaire lists
curl -X POST "https://clinicalswipe.com/api/caregiver/plan" \
  -H "Content-Type: application/json" \
  -d '{"coverage":"medicare","doctor":"yes","state":"CO","situation":["memory"]}'

# The same plan as a FHIR R4 CarePlan
curl -X POST "https://clinicalswipe.com/api/caregiver/plan?format=fhir" \
  -H "Content-Type: application/json" \
  -d '{"coverage":"medicare","doctor":"yes","state":"CO","situation":["memory"]}'
What the caregiver plan is, and what it is not.

General information from official program pages — Medicare.gov, CMS, the VA, SSA, the IRS, and Colorado's HCPF and FAMLI among them — with the source and the date it was checked on every step. It is not medical, legal or financial advice, and each program decides its own eligibility. Answers are never stored or logged, and no question asks for a name, so send none. The rules live in one place, at ClinicalSwipe: its llms.txt has the full contract, and clinicalswipe.com/survey is the same plan for a person.

Where an agent finds them

The honest edges

What this is for

This API is the public-data floor under the rest of what SolvingHealth builds: AI does the work, a named physician signs it, and a receipt proves it.

the whole loopWatch one patient get attestedEvery step drafted by AI, checked by something that is not the model, signed by a named physician. verifiableThe public proof ledgerReceipts anchored on a registry whose root is countersigned into Bitcoin daily. free, no loginWonder BillPaste one de-identified note and see what it already supports but was never billed. talk to a personBuilding on this?Tell us what you need. You get a reference code and a reply.
Open the service index →