Quickstart
The API follows a three-step asynchronous pattern: submit a search, poll for completion, then download results. This page is the shortest possible walkthrough — for a full working client in four languages, see Code Examples.
- Create Search —
POST /v1/searches - Poll Status —
GET /v1/searches/:id - Download CSV —
GET download_url
Set KEEPER_API_KEY in your environment before running the snippets below.
Full workflow
# Step 1 — Submit a search
curl -X POST https://api.keeperhealth.com/v1/searches \
-H "Authorization: Bearer $KEEPER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"npis": [1144218512],
"billing_codes": ["99213", "99214"],
"fee_schedules": [{"payer": "Cigna", "plan": "PPO"}]
}'
# Step 2 — Poll until status is "completed"
curl -H "Authorization: Bearer $KEEPER_API_KEY" \
https://api.keeperhealth.com/v1/searches/{job_id}
# Step 3 — Download the results (no auth required, pre-signed URL)
curl -o results.csv.gz "<download_url from step 2>"
gunzip results.csv.gzOnce you've downloaded the CSV, you can load it into any analytics tool or pipeline. See the CSV Output Schema for column definitions.
See also
- Create Search — full request body, headers, and
Idempotency-Keysupport - Get Search Status — job state machine and terminal states
- Code Examples — complete polling loops with error handling in cURL, Python, JavaScript/TypeScript, and Go
- Rate Limits — recommended polling cadence (15–30 seconds)
- Errors — how to read error responses and what's retry-safe