API

Free evaluation tier: 4 endpoints, no auth

Public endpoints for evaluating data quality before integrating ProviderSignal into a paid workflow: NPI lookup, provider search, territory summary, and Medicaid dental rates. No API key, no signup, no commitment.

Endpoints

No authentication header required on any of these. Each is rate-limited by source IP, not by API key. Pass requests the same way an unsigned cURL would. The same four surfaces are reachable through the MCP server without a key.

GET /api/v1/free/lookup?npi=1234567890100/day per IP

One provider record: name, primary practice address, taxonomy, enumeration date.

Bearer only: License status, DSO affiliation, disciplinary history, exclusion flag, confidence scoring.

GET /api/v1/free/search?state=TX&city=Austin10/day per IP

Paginated directory results (10 rows/page): identity, credential, specialty, location, plus a total count. Filters: state, city, zip, specialty.

Bearer only: Phone, license fields, DSO fields, disciplinary and CMS-biller flags, name search, license-status filter, full pagination.

GET /api/v1/free/territory?state=TX10/day per IP

State-level headline: total and active provider counts, top-3 specialty mix, DSO share of active providers.

Bearer only: ZIP, city, and county granularity, top-DSO brand rows, retirement-risk distribution, market positioning bands.

GET /api/v1/free/medicaid-rates?state=MI25/day per IP

The state's Medicaid dental fee schedule summary: 6-code common-procedure basket, schedule size, effective year, national basket rank.

Bearer only: Per-CDT-code rate lookup (any of the state's published codes).

What you get

Every successful response carries the same citation envelope as the paid API. The table below documents the lookup endpoint's record shape; search returns a trimmed subset of these fields per row, and territory and medicaid-rates return aggregate objects described above. All fields are documented in the field glossary.

FieldDescription
npi10-digit National Provider Identifier.
first_name / last_nameProvider name (null for organizations).
organization_nameEntity name when entity_type_code = 2.
specialtyPrimary NUCC taxonomy specialty.
practice_address / city / state / zipPrimary practice location.
enumeration_dateWhen the NPI was first issued.
entity_type_code1 (individual) or 2 (organization).
meta.envelope_versionCitation envelope schema version.
meta.source_attributionNPPES freshness + license metadata.
meta.requestRequest id, endpoint, billing method.

What's excluded

The free tier intentionally excludes ProviderSignal's value-add fields. These require a paid plan or per-query billing:

  • DSO affiliation flag and brand label
  • License events feed (status changes, disciplinary actions, expiration alerts)
  • License status, expiration date, disciplinary history
  • Provider phone numbers
  • HRSA HPSA shortage area cross-reference
  • NPDB cross-reference
  • CMS Medicare Part B billing aggregates
  • Confidence and acquisition-readiness scoring
  • Co-located providers / practice-entity grouping
  • Per-CDT-code Medicaid rate lookup (the basket summary is free)
  • ZIP, city, and county territory granularity (state grain is free)

Rate Limits

Daily quotas are per endpoint, per source IP, on a rolling 24h window: lookup 100/day, medicaid-rates 25/day, search and territory 10/day each. One burst budget covers all four.

Daily

per endpoint

100 / 25 / 10 / 10 per source IP

Burst

10 req/min

shared across all free endpoints

Exhaustion

Hard 429

no bypass, Retry-After in seconds

Response Headers

X-RateLimit-Limit: 100 # Max requests per window X-RateLimit-Remaining: 87 # Requests remaining X-RateLimit-Reset: 1712000000 # Window reset timestamp (ms)

Example Responses

200 OK

json
{ "data": { "npi": "1234567890", "first_name": "Jane", "last_name": "Doe", "organization_name": null, "specialty": "General Dentist", "practice_address": "123 MAIN ST", "city": "AUSTIN", "state": "TX", "zip": "78701", "enumeration_date": "2008-04-12", "entity_type_code": 1 }, "error": null, "meta": { "envelope_version": "1.0", "source_attribution": [ { "table": "npi", "last_refresh": "2026-04-29T03:14:22Z", "schema_version": "v2", "license": "public-domain" } ], "request": { "id": "req_...", "endpoint": "/api/v1/free/lookup", "billed_credits": 0, "billing_method": "free" } } }

404 Not Found

json
{ "data": null, "error": "NPI not found in dental cohort" }

429 Too Many Requests

json
{ "data": null, "error": "rate_limit_exceeded", "scope": "free_tier_daily", "documentation": "https://providersignal.com/docs/free-tier", "upgrade_paths": [ { "method": "subscription", "url": "https://providersignal.com/pricing" }, { "method": "per_query", "url": "https://providersignal.com/docs/agent-payments" } ] }

Health check

http
GET /api/v1/free/health

No rate limit on the health endpoint. Use it to validate connectivity before testing the lookup endpoint.

Upgrade paths

When you've verified the data quality and want to integrate for production:

Subscription

Rep $149/mo, Team $499/mo, Enterprise $1,999/mo. Includes the dashboard plus higher API rate limits.

See pricing →

Per-query billing

Pay only for what you call. x402 stablecoin micropayments are live now on Base, settled in USDC. Fiat payment rails for agents are on the roadmap.

Agent payments →