Home / Tools / Commercial payer rates
lookup_rates_for_npi
Lookup Rates For NPI
What it answers
Look up the negotiated rates a payer pays a specific provider (NPI), resolved at query time through the canonical graph: NPI → provider groups → pg_sets → rates (no precomputed edge table). Returns matching rates with evidence_type (provider_specific vs broad applicability) and Medicare-PUF corroboration (presence ⇒ real; absence ⇒ unverified, NOT ghost). Optional code filter. Covers all built payers. PAGED: `limit` (default 25, max 500) and `offset` bound both `matching_rates` and `provider_groups`; `rate_count` / `provider_group_count` are the full totals and `paging` names what was cut plus the call that returns the next page. `value` is a COUNT, never a price: it is the TOTAL number of matching rates, `unit` says so, and `headline` spells it out in fields (kind=count, is_a_price=false). The prices themselves are one per row in `matching_rates`.
Inputs
npipayerstatecodelimitoffsetversionCall it
From an agent: connect the Vlada MCP once (one click for Claude, ChatGPT, Cursor, VS Code) and ask in plain English; the agent selects lookup_rates_for_npi when the question fits. From code: the same tool over REST with an API key. The schema endpoint needs no key.
curl -X POST https://api.vladahealth.com/v1/tools/lookup_rates_for_npi \
-H "Authorization: Bearer $VLADA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"npi":"<npi>","payer":"<payer>","state":"<state>"}'curl https://api.vladahealth.com/v1/tools/lookup_rates_for_npi/schema # the JSON schema, no auth # MCP endpoint (Streamable HTTP): https://mcp.vladahealth.com/mcp
What comes back
Typed rows plus provenance on every answer: the public source file, its vintage, the methodology, and a response_hash you can replay. Prove and replay tools turn any number into a re-runnable receipt. A number the data cannot support comes back as “not in the data”, never as zero.
Output schema
{
"$defs": {
"Quality": {
"description": "Row-level quality signal. All flags precomputed at build time\n(stored on the gold mart) and passed through here.",
"properties": {
"is_outlier": {
"default": false,
"title": "Is Outlier",
"type": "boolean"
},
"is_ghost_candidate": {
"default": false,
"title": "Is Ghost Candidate",
"type": "boolean"
},
"n_similar_rates": {
"default": 0,
"title": "N Similar Rates",
"type": "integer"
},
"confidence": {
"default": 1,
"title": "Confidence",
"type": "number"
}
},
"title": "Quality",
"type": "object"
},
"Source": {
"description": "Cell-level provenance. Every served value traces back here.\n\n`snapshot_id` is the Iceberg snapshot the tool read from. Two calls\nat the same snapshot MUST produce byte-identical responses —\nthat's the content-addressed caching guarantee.",
"properties": {
"table": {
"title": "Table",
"type": "string"
},
"rate_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rate Id"
},
"source_files": {
"items": {
"type": "string"
},
"title": "Source Files",
"type": "array"
},
"snapshot_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Snapshot Id"
}
},
"required": [
"table"
],
"title": "Source",
"type": "object"
}
},
"properties": {
"value": {
"default": null,
"title": "Value"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Unit"
},
"vintage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Vintage"
},
"source": {
"$ref": "#/$defs/Source"
},
"methodology": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Methodology"
},
"quality": {
"$ref": "#/$defs/Quality"
},
"invariants_applied": {
"items": {
"type": "string"
},
"title": "Invariants Applied",
"type": "array"
},
"caveats": {
"items": {
"type": "string"
},
"title": "Caveats",
"type": "array"
},
"response_hash": {
"default": "",
"title": "Response Hash",
"type": "string"
},
"semantic_version": {
"default": 1,
"title": "Semantic Version",
"type": "integer"
},
"tool_version": {
"default": "unknown",
"title": "Tool Version",
"type": "string"
},
"explanation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Explanation"
},
"status": {
"default": "complete",
"title": "Status",
"type": "string"
},
"refusal": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Refusal"
},
"failure": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Failure"
},
"as_of": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "As Of"
},
"freshness_state": {
"default": "unknown",
"title": "Freshness State",
"type": "string"
},
"payer": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Payer"
},
"npi": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Npi"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"code": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Code"
},
"version": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Version"
},
"npi_found": {
"default": false,
"title": "Npi Found",
"type": "boolean"
},
"headline": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Headline"
},
"provider_groups": {
"items": {},
"title": "Provider Groups",
"type": "array"
},
"matching_rates": {
"items": {},
"title": "Matching Rates",
"type": "array"
},
"rate_count": {
"default": 0,
"title": "Rate Count",
"type": "integer"
},
"returned_rate_count": {
"default": 0,
"title": "Returned Rate Count",
"type": "integer"
},
"provider_group_count": {
"default": 0,
"title": "Provider Group Count",
"type": "integer"
},
"returned_provider_group_count": {
"default": 0,
"title": "Returned Provider Group Count",
"type": "integer"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
},
"paging": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Paging"
},
"provider_specific_count": {
"default": 0,
"title": "Provider Specific Count",
"type": "integer"
},
"broad_applicability_count": {
"default": 0,
"title": "Broad Applicability Count",
"type": "integer"
},
"medicare_corroborated_count": {
"default": 0,
"title": "Medicare Corroborated Count",
"type": "integer"
},
"medicare_unverified_count": {
"default": 0,
"title": "Medicare Unverified Count",
"type": "integer"
},
"elapsed_seconds": {
"default": 0,
"title": "Elapsed Seconds",
"type": "number"
}
},
"title": "NpiRatesResponse",
"type": "object"
}Sources behind it
- vlada_curated.fact_rate
- vlada_curated.idx_rate_lookup
tables: vlada_curated.fact_rate · vlada_curated.idx_npi_provider_group · vlada_curated.idx_rate_lookup
Known limits
- medical_mutual not yet indexed
As of the 2026-09-19 build of the served surface · machine-readable catalog · the live server may run a different version; the schema endpoint above is authoritative for what is deployed.