Developer Reference
API Documentation
RESTful JSON API for programmatic access to dental provider data, market intelligence, license monitoring, and acquisition scoring. 272,000+ providers across all 50 states.
Authentication
Include your API key in the Authorization header of every request.
API keys are generated in Settings → API Keys in your dashboard. Keys start with ps_live_. The full key is shown only once at creation — store it securely.
Dashboard users can also access the API via session cookies (automatic when logged in). API key authentication is required for programmatic access.
Rate Limits
Rate limits are applied per API key using a sliding window algorithm. Exceeding the limit returns HTTP 429 with rate limit headers.
API Starter
60 req/min
$99/mo
API Pro
500 req/min
$299/mo
Growth (Dashboard)
200 req/min
$499/mo
Response Headers
API Scopes
API keys are issued with specific scopes that control which endpoints they can access. Attempting to access an endpoint without the required scope returns HTTP 403.
Search providers, retrieve profiles, alerts, market intelligence data. Included in all API keys.
Endpoints: All GET endpoints except exports
Bulk data export (CSV and JSON). Required for /api/providers/export and /api/scoring/export.
Endpoints: Export endpoints
Create/update saved searches, profile, preferences. Required for POST/PATCH/DELETE on user data.
Endpoints: Saved searches, profile, preferences, onboarding
Plan tier gating (separate from scopes)
A small number of endpoints require a specific plan tier beyond the scope check. These are flagged with a Growth+ badge in the endpoint list below. Pro plan keys receive a 403 when hitting these endpoints with an explanatory error message. The Growth+ tier covers Growth, Enterprise, and any API plan that bundles Growth-level data access.
403 Error Example
Pagination
Two pagination strategies are available:
Offset Pagination
Best for: browsing, UI tables, known page numbers.
Supports custom sort/order. Max per_page: 100 (dashboard), 1000 (API keys).
Cursor Pagination
Best for: bulk export, iterating all results, data pipelines.
Stable iteration — no skipped/duplicate rows. Forces order by NPI. Returns next_cursor in meta.
Cursor Iteration Pattern
Endpoints
Providers
/api/providersreadSearch and filter dental providers. Supports full-text search, specialty filters, geography, license status, DSO affiliation, Medicare billing history, practice size, and pagination (offset or cursor-based).
Returns { data, error, meta: { total, page, per_page, total_pages, next_cursor? } }
/api/providers/:npireadRetrieve a complete provider profile by NPI number. Includes co-located providers at the same address and any resolved practice-level entities.
Returns { data: { ...provider, co_located: [...], practice_entities: [...] }, error }
/api/providers/mapreadMap-rendering endpoint: returns geocoded provider points within a bounding box, with enough fields to render clusters and popups. Capped at 30,000 results per request.
Returns { data: [{ npi, last_name, first_name, specialty, latitude, longitude, ... }], error }
Export
/api/providers/exportexportBulk export provider data as CSV or JSON. Supports all provider search filters. JSON format supports cursor-based pagination for iterating through large datasets.
Trial behavior: Trial users are capped at 25 rows per export. Paid tiers get up to 5,000 rows (10,000 for API keys).
CSV: file download. JSON: { data, error, meta: { total, count, per_page, next_cursor } }
/api/scoring/exportexportExport acquisition target scores as CSV or JSON. Includes 6-factor scoring algorithm results. Supports all scoring filters.
Trial behavior: Trial users are capped at 25 rows per export.
CSV: file download. JSON: { data: [{ ...provider, score }], error, meta: { total, count } }
Scoring
/api/scoringreadAcquisition target scoring. Returns individual providers ranked by a six-factor algorithm: solo status (25%), retirement risk (20%), practice vintage (15%), practice size (15%), license health (15%), and clean record (10%). Each response row also includes a confidence score and (when applicable) Medicare Part B aggregates.
Returns { data: [{ ...provider, score, score_factors, confidence, cms_medicare? }], error, meta }
Market Intelligence
/api/whitespacereadMarket whitespace analysis. Returns geographic areas scored by population-to-provider ratio, HPSA designation, and demographic factors. Supports state-wide or geo-scoped (ZIP+radius, city) queries.
/api/reimbursementreadMedicaid fee schedule rates by CDT code and geography.
/api/demographicsreadZIP-level demographics from Census ACS data. Supports state-wide or geo-scoped queries.
/api/npdbreadAggregate NPDB malpractice payment and adverse action trends by state and year. Anonymized — no individual provider data.
/api/reports/marketreadMarket summary report: total providers, specialty breakdown, license status distribution, top organizations, DSO share, practice-size distribution, retirement-age count, HPSA designations. Supports state-wide and geo-scoped (city, ZIP+radius) queries.
Trial behavior: Trial users are capped at 1 downloaded PDF brief per trial. Previews (page loads without for_brief=1) are unlimited.
/api/hpsa/mapreadHRSA Health Professional Shortage Area designations for dental care, deduplicated by county and enriched with county centroid coordinates for map overlays.
Returns { data: [{ hpsa_id, designation_type, hpsa_score, county_name, county_fips, latitude, longitude }], error }
/api/cms/mapreadGrowth+Dental providers with CMS Medicare Part B billing history, geocoded for map overlay rendering. Returns lifetime billing aggregates per NPI (~3,000 providers nationally).
Plan requirement: Growth tier or higher. Pro plan receives 403.
Returns { data: [{ npi, first_name, last_name, specialty, latitude, longitude, total_paid_lifetime, total_paid_latest_year, latest_year, years_active }], error }
Alerts
/api/alerts/eventsreadLicense change events: expirations, status changes, new registrations, NPI deactivations, and disciplinary actions. Paginated.
Returns { data, error, meta: { total, page, per_page, total_pages } }
/api/alerts/grantsreadDental-relevant federal grant opportunities from Grants.gov and SAM.gov. Paginated.
/api/alerts/ratesreadGrowth+Medicaid/Medicare reimbursement rate change events detected by the quarterly diff pipeline. Surfaces CPT/CDT codes whose rates moved significantly.
Plan requirement: Growth tier or higher. Pro plan receives 403.
/api/alerts/npdbreadGrowth+NPDB malpractice trend anomaly events by state — surfaces states whose latest-year adverse action count exceeds the 3-year rolling average by >20%.
Plan requirement: Growth tier or higher. Pro plan receives 403.
Account
/api/profilereadRetrieve the authenticated user's profile (role, territory, company).
/api/profilewriteUpdate profile fields: role, display_name, company_name, territory_states, territory_zips, territory_metros.
/api/saved-searchesreadList the authenticated user's saved searches.
/api/saved-searcheswriteCreate a saved search. Body: { name, filters, notify_email }. Plan limits apply (Pro: 10, Growth: unlimited).
/api/saved-searches/:idwriteDelete a saved search by ID. Ownership is verified.
/api/preferencesreadRead digest email frequency preference.
/api/preferenceswriteUpdate digest frequency. Body: { digest_frequency: 'off' | 'weekly' | 'daily' }.
Plan requirement: digest_frequency='daily' requires Growth tier or higher. 'off' and 'weekly' are available on all plans.
System
/api/healthnoneHealth check. Returns database connectivity status and latency. No authentication required.
/api/statsnonePublic statistics: provider counts, expiring licenses, DSO-flagged, solo practitioners, retirement-age providers, disciplinary actions, HPSA designations, active grants, enriched state counts. Cached 5 minutes. No authentication required.
/api/data-statusreadData source freshness status for all pipeline sources.
Error Codes
All error responses follow a consistent format:
Code Examples
cURL
Python
JavaScript
Example Response
GET /api/providers?state=TX&sole_prop=true&per_page=1
Get API access
API keys are available on all paid plans. Subscribe to generate your first key.
Start Free Trial