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.
| Route | Returns | Upstream | State |
|---|---|---|---|
| GET / | Service index: every endpoint and its dataset | — | live |
| GET /health | Liveness plus an upstream reachability probe | — | live |
| GET /providers/search | Clinicians 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 NPI | NPPES NPI Registry (CMS) | live |
| GET /clearances/search | 510(k) clearances: K-number, applicant, decision, date | openFDA device/510k | live |
| GET /devices/recalls | Recall records with reason and recalling firm | openFDA device/recall | live |
| GET /devices/events | Adverse event reports and product problems | openFDA device/event (MAUDE) | live |
| GET /labels/search | Indications and boxed warnings from structured labeling | openFDA drug/label | live |
| GET /trials/search | Studies with status, phase, enrollment and sponsor | ClinicalTrials.gov API v2 | live |
| GET /hospitals/search | Ownership, type, emergency services, star rating | CMS Provider Data Catalog | live |
| GET /exclusions/search | Returns 501 and points at the official screening tool | OIG LEIE | not built |
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
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.
| Endpoint | Returns | Served by | Format |
|---|---|---|---|
| GET /api/v1 | Public federal health data, with its source and retrieval time on every response. The routes are in the table above. | solvinghealth.com | JSON |
| GET /api/caregiver/questionnaire | The 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.com | FHIR R4 Questionnaire |
| POST /api/caregiver/plan | A 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.com | JSON, 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"]}'
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
- →/llms.txt — the plain-text map of this company, with the same list under “Open endpoints for agents”.
- →/.well-known/agent.json — the action manifest:
public_data_api,caregiver_questionnaire,caregiver_plan. - →/.well-known/openapi.yaml — OpenAPI 3.1 for
/api/v1only. The navigator's contract is documented where it runs. - →/sdk/mcp-server.mjs — its
caregiver_questionnaireandcaregiver_plantools call ClinicalSwipe directly.
The honest edges
- →This is a gateway, not a database. Requests go to the government in real time and are cached briefly at the edge. If an upstream is slow or down, you get a 502 saying so rather than a stale guess.
- →No uptime guarantee and no support contract. It runs on the same infrastructure as the rest of this company's sites. If you need it to be dependable for something that matters, say so and we will talk about what that takes.
- →Field selection is opinionated. Responses are trimmed to the fields most callers need. The full upstream record is always one click away at
source_url. - →Nothing here is clinical, coding, billing or legal advice. Public data pointed at faster is still public data. Verify before you rely on it.
- →No PHI, ever. The API takes no patient data, stores no request bodies, and has no write path. Do not send identifiers.
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.