Python and TypeScript
The calls above are the contract. Client libraries follow the same parameters. Docs live at https://docs.practicemcp.com.
Platform / API
Base URL https://api.practicemcp.com/v1. A bearer key. Search the market, fetch a location, or enrich a row you already have. Add expand=evidence when you need the quote.
https://api.practicemcp.com/v1
curl "https://api.practicemcp.com/v1/practices?state=TX&specialty=dental&ownership=independent&provider_count_gte=3&has_booking=false" \
-H "Authorization: Bearer $PRACTICEMCP_API_KEY" curl "https://api.practicemcp.com/v1/practices/pb_loc_8f3a21c0?expand=evidence" \
-H "Authorization: Bearer $PRACTICEMCP_API_KEY" curl -X POST "https://api.practicemcp.com/v1/enrich" \
-H "Authorization: Bearer $PRACTICEMCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Harbor & Pine Dental",
"city": "Austin",
"state": "TX",
"phone": "5550142281"
}' curl -X POST "https://api.practicemcp.com/v1/exports" \
-H "Authorization: Bearer $PRACTICEMCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"format": "parquet",
"filter": { "state": "TX", "specialty": "dental" }
}' curl -X POST "https://api.practicemcp.com/v1/webhooks" \
-H "Authorization: Bearer $PRACTICEMCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/practicemcp",
"events": ["provider_added", "phone_changed", "website_found"]
}' Endpoints
| Method | Path | What it returns |
|---|---|---|
| GET | /practices | Search locations by state, specialty, ownership, size, tech, and change. |
| GET | /practices/{id} | Fetch one location. Add expand=evidence to open every field. |
| POST | /enrich | Match a name, address, phone, NPI, or domain to a location. |
| GET | /practices/{id}/providers | Clinicians resolved to that location. |
| GET | /practices/{id}/evidence | Source, quote, status, and observed time for one record. |
| GET | /changes | Events since a cursor: providers, phones, sites, group size. |
| POST | /exports | Bulk CSV or Parquet for a filter. Scale and National plans. |
| POST | /webhooks | Subscribe a URL to change events. Build plan and above. |
Filters
Pagination uses limit and a cursor. The response includes the next cursor when there is another page. Rate limits scale with the plan. If you need a backfill burst, talk to us. Responses include the remaining allowance.
| Parameter | Use |
|---|---|
| state | Two-letter USPS code, or a comma-separated list. |
| city | City name, paired with state when you have it. |
| specialty | A specialty slug, such as dental or primary-care. |
| ownership | independent, group, dso, health_system, or unknown. |
| provider_count_gte | Minimum clinicians resolved to the location. |
| has_website | true or false. True means the site passed the identity check. |
| has_booking | true or false. A booking URL the practice published. |
| ehr, scheduling, patient_portal | Technology fingerprints read off the matched site. |
| changed_since | ISO timestamp. Locations with an event after that time. |
| expand | evidence. Returns value, status, source_url, quote, observed_at. |
The calls above are the contract. Client libraries follow the same parameters. Docs live at https://docs.practicemcp.com.
A machine-readable spec is published with the docs, next to llms.txt on this site, so an agent can read the surface without a screenshot.
expand=evidence returns value, status, source_url, quote, and observed_at. It does not spend another credit.
Get a key, read a record, and widen the query when the shape is right.