Loading documentation

Access required

Your account doesn't have access to the documentation. Contact your administrator.

Sign out
Skip to main content

Fee Schedule Get

Status: stable Category: lookup Added: 2026-10-14 Last reviewed: 2026-10-14

Summary​

Returns the maximum a workers' compensation jurisdiction allows for one professional service line: one code, at one place of service, in one setting, on one date. The response carries the amount, the components it was computed from, the fee schedule version in force, and its legal citation.

Every jurisdiction takes the same parameters and returns the same keys, so one client works everywhere. A parameter a jurisdiction does not price on is accepted and reported as not applied — never rejected — and every key is present on every response, null where it does not apply.

max_allowable_usd is a reference maximum, not a pricing or payment determination. It is a per-unit, single-line cap, before any reduction that depends on other lines of the bill (multiple procedure, bilateral) and before the lesser-of-billed-charge rule. Every response says so in amount_basis.

Amounts are computed from the published CMS Physician Fee Schedule relative values and geographic adjustments, and each jurisdiction's adopted conversion factors and rules — or read from a state's own published table. The version and citation used are returned with every answer.

Coverage​

JurisdictionAnswer
medicarePriced for 2026-01-01 through 2026-12-31, on the CMS 2026 quarterly releases (each quarter's date range uses its own release).
CAPriced for 2026-03-01 through 2026-12-31. Earlier dates answer not_covered_by_engine.
TXPriced for 2026-01-01 through 2026-12-31.
PAPriced for 2026-01-01 through 2026-12-31, from Pennsylvania's published table.
IN, IA, MO, NH, NJ, WIno_fee_schedule — the state publishes no professional fee schedule.
Every other state, DC, owcpRecognized; answers not_covered_by_engine.

Dates before 2026-01-01 answer not_covered_by_engine everywhere. The newest version of each priced jurisdiction is in force through its version.effective_to (2026-12-31 today); a later date answers not_covered_by_engine until the engine publishes the next period's schedule, so a future date is never priced on figures that may not apply to it. /api/lookup/fee_schedule/tree is the live list of what is covered, with each jurisdiction's version history.

Endpoint​

FieldValue
MethodGET
Path/api/lookup/fee_schedule/get
Full URLhttps://engine.tripod-health.com/api/lookup/fee_schedule/get
AuthenticationAPI key (required)
Request bodynone
Response bodyapplication/json
IdempotentYes
Rate-limitedYes

Authentication​

Send a valid API key in the apikey header. See authentication.md.

Request​

Headers​

HeaderRequiredDescription
apikeyYesConsumer API key.

The engine assigns its own request id to every request and returns it in the response body's request_id. An X-Request-ID sent by the caller is ignored. The X-Request-ID response header is the gateway's trace ID for the same request and does not match request_id.

Path parameters​

None.

Query parameters​

ParameterTypeRequiredDefaultDescription
jurisdictionstringYes—A USPS state code (CA, TX), DC, medicare, or owcp. Case-insensitive. An unrecognized value is a 400.
codestringYes—A five-character CPT, HCPCS Level II, or state-defined code (99213, G2212, WC002). Case-insensitive. A modifier suffix (99213-25) is a 400: send modifiers in modifiers.
settingstringYes—facility or non_facility. Required, not defaulted: most codes have different maximums in each, and a silent default would be a wrong number.
zipstringOne of zip / locality—The place of service — where the provider performed the service — not the patient's address. A 5-digit ZIP, or a 9-digit ZIP+4 (750192016 or 75019-2016). A ZIP that spans more than one locality must be sent as its ZIP+4.
localitystringOne of zip / locality—A locality or region key from tree, such as CA:18 or PA:001. Use it to avoid sending a ZIP at all. Sending both zip and locality is a 400.
modifiersstringNo—Comma-separated list of up to 4 two-character modifiers (26, TC, AQ). Each one comes back in either modifiers_applied or modifiers_not_applied.
provider_typestringNophysicianOne of physician, physician_assistant, nurse_practitioner, clinical_nurse_specialist, clinical_social_worker, physical_therapist, chiropractor. Each jurisdiction maps it to its own percentage.
unitsintNo1Units of service, 1–999. Multiplies the per-unit maximum into amount_for_units_usd.
as_ofstringNotoday (UTC)The date of service whose schedule applies, YYYY-MM-DD.

A location (zip or locality) is required when the jurisdiction is covered. For a no_fee_schedule or not_covered_by_engine jurisdiction the answer does not depend on location, and location is returned as null.

Body​

None.

Response​

Success — 200 OK​

Request: GET /api/lookup/fee_schedule/get?jurisdiction=CA&code=99213&setting=non_facility&zip=90071

{
"jurisdiction": "CA",
"code": "99213",
"label": "Office or other outpatient visit for the evaluation and management of an established patient, which requires a medically appropriate history and/or examination and low level of medical decision making. When using total time on the date of the encounter for code selection, 20 minutes must be met or exceeded",
"status": "priced",
"max_allowable_usd": 162.06,
"units": 1,
"amount_for_units_usd": 162.06,
"amount_basis": "per_unit_single_line_before_multi_line_reductions_and_before_lesser_of_billed_charge",
"method": "state_cf_rbrvs",
"setting": "non_facility",
"provider_type": {
"requested": "physician",
"adjustment": 1
},
"modifiers_applied": [],
"modifiers_not_applied": [],
"location": {
"locality": "CA:18",
"name": "LOS ANGELES-LONG BEACH-ANAHEIM (LOS ANGELES/ORANGE CNTY)",
"resolved_from": "zip",
"basis": "place_of_service"
},
"components": {
"rvu": {
"work": 1.3,
"practice_expense": 1.46,
"malpractice": 0.09
},
"gpci": {
"work": 1.041,
"practice_expense": 1.183,
"malpractice": 0.664
},
"conversion_factor": 51.6091,
"conversion_factor_basis": "CA other services (8 CCR 9789.19(m))",
"multiplier": null,
"medicare_release": "2026D",
"cap_applied": null,
"published_amount": null
},
"version": {
"label": "CA 2026-10-01",
"effective_from": "2026-10-01",
"effective_to": "2026-12-31"
},
"citation": "8 CCR 9789.12.2, 9789.19(m); DWC Administrative Director Order of 9/29/2026, services on or after 10/1/2026, adopting RVU26D",
"as_of": "2026-10-14",
"notes": [
{
"code": "lesser_of_actual_charge",
"text": "California pays the lesser of the actual charge or this maximum (8 CCR 9789.12.2(f))."
},
{
"code": "hpsa_bonus",
"text": "A 10% bonus applies in a Health Professional Shortage Area (8 CCR 9789.12.6). Send modifier AQ to apply it; the engine does not apply it from the ZIP alone."
}
],
"request_id": "286750cc-4e06-45c9-8fff-d5f34f52cd27",
"timestamp": "2026-10-14T00:34:51.112Z"
}

Response fields​

Every field below is present on every 200 response.

FieldTypeAlways presentDescription
jurisdictionstringYesThe normalized jurisdiction: uppercase state code, or medicare / owcp.
codestringYesThe normalized code.
labelstring | nullYesThe code's descriptor, or the state's own name for a state-defined code. null when no descriptor is held for the code.
statusstringYesWhy there is or is not a number. See Status values.
max_allowable_usdnumber | nullYesThe per-unit maximum for this one line, in US dollars. null unless status is priced.
unitsintegerYesEchoes units.
amount_for_units_usdnumber | nullYesmax_allowable_usd × units. null when there is no maximum.
amount_basisstringYesAlways per_unit_single_line_before_multi_line_reductions_and_before_lesser_of_billed_charge: the figure is a per-unit cap for one line, before multi-line reductions and before the lesser-of-billed-charge rule.
methodstring | nullYesHow the maximum was produced: medicare_rbrvs, state_cf_rbrvs (Medicare relative values with the state's conversion factor), state_table (the state's published amount), fixed_fee (a fixed amount the jurisdiction sets for this code), or no_fee_schedule. null when not covered. Informational; you do not need to branch on it to read the amount.
settingstringYesEchoes setting.
provider_type.requestedstringYesEchoes provider_type, or physician when omitted.
provider_type.adjustmentnumber | nullYesThe factor the jurisdiction applied for that provider type (0.85 = 85%). null where the jurisdiction does not adjust by provider type, or there is no amount.
modifiers_appliedarrayYesModifiers that changed the amount.
modifiers_not_appliedarrayYesModifiers the jurisdiction does not price on for this code. They were accepted and ignored for the amount.
locationobject | nullYesWhere the amount was priced. null when the jurisdiction is not covered or has no schedule.
location.localitystringYes, when location is setThe locality or region key, e.g. CA:18, PA:001.
location.namestringYes, when location is setThe locality or region name.
location.resolved_fromstringYes, when location is setzip, zip+4, or locality — which input decided the location.
location.basisstringYes, when location is setAlways place_of_service: the answer assumes the location you sent is where the service was performed.
componentsobjectYesThe inputs the amount was computed from. Every key is present; each is null where it does not apply.
components.rvuobject | nullYes{ work, practice_expense, malpractice } relative value units for this code and setting.
components.gpciobject | nullYes{ work, practice_expense, malpractice } geographic practice cost indices for the locality.
components.conversion_factornumber | nullYesThe dollar conversion factor applied.
components.conversion_factor_basisstring | nullYesWhich of the jurisdiction's conversion factors was used, with its citation.
components.multipliernumber | nullYesThe product of modifier and area adjustments applied (for example 1.1 for California's AQ). null when none applied.
components.medicare_releasestring | nullYesThe CMS release whose relative values were used, e.g. 2026D.
components.cap_appliedobject | nullYes{ kind, amount_usd } when a cap lowered the amount (kind: "opps", the outpatient-payment cap on certain imaging and procedure codes). null otherwise.
components.published_amountnumber | nullYesThe amount read from the jurisdiction's own table or fixed-fee list, before any adjustment. null when the amount was computed.
versionobject | nullYesThe fee schedule version in force on as_of: { label, effective_from, effective_to }. effective_to is the last date the version applies to; for a priced jurisdiction's newest version it is the last date the engine holds figures for, and it is null only for a jurisdiction with no fee schedule. null when not covered.
citationstring | nullYesThe legal citation for the version.
as_ofstringYesThe date whose schedule was applied, YYYY-MM-DD.
notesarrayYesRules the caller still owes, and explanations of non-priced statuses. See Notes.
request_idstringYesCorrelation ID. Quote in support tickets.
timestampstring (ISO 8601 UTC)YesServer time when the response was emitted.

Status values​

status is one enum across every jurisdiction. Anything other than priced comes with max_allowable_usd: null and a note saying why.

ValueMeaning
pricedThe jurisdiction sets a maximum, returned in max_allowable_usd.
no_published_capThe jurisdiction sets no number for this code — for example a contractor-priced code, or one left to usual-and-customary or "fair and reasonable" pricing.
not_payableThe jurisdiction does not pay this code: barred, excluded, or not covered.
bundledPayment is included in another service; the code has no separate payment.
no_fee_scheduleThe jurisdiction publishes no professional fee schedule.
not_covered_by_engineThe engine holds no fee schedule for the jurisdiction on as_of (including a date after the newest version's effective_to), or the code is an anesthesia service, which the engine does not price.

A code that no source for the jurisdiction holds is a 404, not a status.

Notes​

Each note is an object with code and text, sometimes with extra detail keys (for example priced_as or medicare_status). Key your logic on code; display text. Jurisdictions add their own codes for rules that still apply after the maximum — lesser_of_actual_charge in California, least_of in Texas. Codes the engine emits anywhere:

CodeMeaning
not_covered_by_engineNo fee schedule is held for the jurisdiction on as_of: a date before its first version, a date after its newest version's effective_to, or a jurisdiction the engine does not cover.
medicare_statusExplains a non-priced status; medicare_status carries the CMS status indicator.
priced_asThis code-and-modifier pair is paid at another code's maximum, named in priced_as.
setting_not_appliedThe amount does not vary by setting; setting was accepted and ignored.
setting_atypicalCMS marks the service as not typically furnished in this setting; the amount is still its published formula.
unitThe amount is per a unit other than one service (for example per hour); send units in that unit.
zip_plus4_not_listedNo locality is listed for the ZIP+4 sent; the ZIP's own locality was used.
location_outside_jurisdictionThe place of service lies outside the jurisdiction; the amount uses the locality it lies in.
underserved_area_incentiveAn area incentive for the place-of-service ZIP was added to the amount.
zip_incentive_not_evaluatedAn area incentive may apply, but it is evaluated only from zip; it was not evaluated for a locality.

Status codes​

CodeMeaningWhen
200OKThe line was resolved. Check status — a 200 is not always a price.
400ValidationErrorA required parameter is missing; jurisdiction is unrecognized; code is malformed or carries a modifier suffix; setting, provider_type, units, as_of or modifiers is invalid; both zip and locality were sent, or neither for a covered jurisdiction; the ZIP spans localities and was sent without its +4; the ZIP or locality is not in the jurisdiction's map; or a parameter was repeated. field names the offender.
401UnauthenticatedMissing or invalid API key.
404NotFoundNo source the jurisdiction uses holds the code.
429RateLimitedPer-consumer rate limit exceeded.
500InternalErrorUnexpected failure. Quote request_id in the ticket.

Examples​

curl​

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=CA&code=99213&setting=non_facility&zip=90071" \
-H "apikey: $ENGINE_API_KEY"

Provider type and modifier, by locality​

A nurse practitioner in a California shortage area (AQ), located by locality instead of a ZIP. The 85% provider adjustment and the 1.10 AQ multiplier are both applied, and both are visible in the response.

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=CA&code=99213&setting=non_facility&locality=CA:18&provider_type=nurse_practitioner&modifiers=AQ" \
-H "apikey: $ENGINE_API_KEY"
{
"jurisdiction": "CA",
"code": "99213",
"label": "Office or other outpatient visit for the evaluation and management of an established patient, which requires a medically appropriate history and/or examination and low level of medical decision making. When using total time on the date of the encounter for code selection, 20 minutes must be met or exceeded",
"status": "priced",
"max_allowable_usd": 151.53,
"units": 1,
"amount_for_units_usd": 151.53,
"amount_basis": "per_unit_single_line_before_multi_line_reductions_and_before_lesser_of_billed_charge",
"method": "state_cf_rbrvs",
"setting": "non_facility",
"provider_type": {
"requested": "nurse_practitioner",
"adjustment": 0.85
},
"modifiers_applied": [
"AQ"
],
"modifiers_not_applied": [],
"location": {
"locality": "CA:18",
"name": "LOS ANGELES-LONG BEACH-ANAHEIM (LOS ANGELES/ORANGE CNTY)",
"resolved_from": "locality",
"basis": "place_of_service"
},
"components": {
"rvu": { "work": 1.3, "practice_expense": 1.46, "malpractice": 0.09 },
"gpci": { "work": 1.041, "practice_expense": 1.183, "malpractice": 0.664 },
"conversion_factor": 51.6091,
"conversion_factor_basis": "CA other services (8 CCR 9789.19(m))",
"multiplier": 1.1,
"medicare_release": "2026D",
"cap_applied": null,
"published_amount": null
},
"version": {
"label": "CA 2026-10-01",
"effective_from": "2026-10-01",
"effective_to": "2026-12-31"
},
"citation": "8 CCR 9789.12.2, 9789.19(m); DWC Administrative Director Order of 9/29/2026, services on or after 10/1/2026, adopting RVU26D",
"as_of": "2026-10-14",
"notes": [
{ "code": "lesser_of_actual_charge", "text": "California pays the lesser of the actual charge or this maximum (8 CCR 9789.12.2(f))." },
{ "code": "hpsa_bonus", "text": "A 10% bonus applies in a Health Professional Shortage Area (8 CCR 9789.12.6). Send modifier AQ to apply it; the engine does not apply it from the ZIP alone." }
],
"request_id": "91bfa711-4b18-4ee1-a976-704558cc87b6",
"timestamp": "2026-10-14T00:34:51.590Z"
}

A modifier the jurisdiction does not price on​

Texas does not change the maximum for GP (a physical therapy plan of care), so it is accepted and returned in modifiers_not_applied.

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=TX&code=97750&modifiers=GP&setting=non_facility&zip=77002" \
-H "apikey: $ENGINE_API_KEY"
{
"jurisdiction": "TX",
"code": "97750",
"label": "Physical performance test or measurement (e.g., musculoskeletal, functional capacity), with written report, each 15 minutes",
"status": "priced",
"max_allowable_usd": 73.04,
"units": 1,
"amount_for_units_usd": 73.04,
"amount_basis": "per_unit_single_line_before_multi_line_reductions_and_before_lesser_of_billed_charge",
"method": "state_cf_rbrvs",
"setting": "non_facility",
"provider_type": {
"requested": "physician",
"adjustment": 1
},
"modifiers_applied": [],
"modifiers_not_applied": [
"GP"
],
"location": {
"locality": "TX:18",
"name": "HOUSTON",
"resolved_from": "zip",
"basis": "place_of_service"
},
"components": {
"rvu": { "work": 0.45, "practice_expense": 0.55, "malpractice": 0.01 },
"gpci": { "work": 1.008, "practice_expense": 0.993, "malpractice": 1.376 },
"conversion_factor": 72.07,
"conversion_factor_basis": "TX 2026 professional services",
"multiplier": null,
"medicare_release": "2026D",
"cap_applied": null,
"published_amount": null
},
"version": {
"label": "TX 2026",
"effective_from": "2026-01-01",
"effective_to": "2026-12-31"
},
"citation": "28 TAC 134.203; TDI-DWC 2026 conversion factors ($72.07, $90.48); 28 TAC 134.2, 134.220, 134.230, 134.235-134.260, 129.5",
"as_of": "2026-10-14",
"notes": [
{ "code": "least_of", "text": "Texas pays the least of this maximum, the provider's usual and customary charge, or a fair and reasonable amount, unless a network contract applies (28 TAC 134.203(h))." },
{ "code": "medicare_payment_policies", "text": "Medicare payment policies apply on top of this per-line maximum, including the multiple procedure reductions that depend on other lines of the bill (28 TAC 134.203(b)(1))." },
{ "code": "surgery_cf_reading", "text": "The facility surgery conversion factor is applied to the CPT Surgery section (10004-69990); 28 TAC 134.203 names Surgery without listing codes." }
],
"request_id": "ff4d92e2-d906-4c45-90bf-f567199b5e63",
"timestamp": "2026-10-14T00:34:52.143Z"
}

Texas computes its maximum as the Medicare amount scaled by the ratio of the Texas and Medicare conversion factors, rounded once, so re-running the relative-value formula from components with $72.07 can differ from max_allowable_usd by a cent. Use max_allowable_usd.

A state with no professional fee schedule​

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=IN&code=99213&setting=non_facility&zip=46204" \
-H "apikey: $ENGINE_API_KEY"
{
"jurisdiction": "IN",
"code": "99213",
"label": "Office or other outpatient visit for the evaluation and management of an established patient, which requires a medically appropriate history and/or examination and low level of medical decision making. When using total time on the date of the encounter for code selection, 20 minutes must be met or exceeded",
"status": "no_fee_schedule",
"max_allowable_usd": null,
"units": 1,
"amount_for_units_usd": null,
"amount_basis": "per_unit_single_line_before_multi_line_reductions_and_before_lesser_of_billed_charge",
"method": "no_fee_schedule",
"setting": "non_facility",
"provider_type": {
"requested": "physician",
"adjustment": null
},
"modifiers_applied": [],
"modifiers_not_applied": [],
"location": null,
"components": {
"rvu": null,
"gpci": null,
"conversion_factor": null,
"conversion_factor_basis": null,
"multiplier": null,
"medicare_release": null,
"cap_applied": null,
"published_amount": null
},
"version": {
"label": "IN no fee schedule",
"effective_from": "2026-01-01",
"effective_to": null
},
"citation": "WCRI, Designing Workers' Compensation Medical Fee Schedules, 2025",
"as_of": "2026-10-14",
"notes": [
{ "code": "no_professional_schedule", "text": "Indiana has no professional fee schedule. It caps facility payments only, at 200% of Medicare." }
],
"request_id": "1f1687c4-4f18-4d96-86c2-eccd0505a930",
"timestamp": "2026-10-14T00:34:52.474Z"
}

A date after the newest version​

Texas's newest version is in force through 2026-12-31 (its version.effective_to). A later date of service is not priced on 2026 figures: it answers not_covered_by_engine until the engine publishes the next period's schedule. As for any date the engine does not cover, location and version are null.

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=TX&code=99213&setting=non_facility&zip=77002&as_of=2027-01-15" \
-H "apikey: $ENGINE_API_KEY"
{
"jurisdiction": "TX",
"code": "99213",
"label": "Office or other outpatient visit for the evaluation and management of an established patient, which requires a medically appropriate history and/or examination and low level of medical decision making. When using total time on the date of the encounter for code selection, 20 minutes must be met or exceeded",
"status": "not_covered_by_engine",
"max_allowable_usd": null,
"units": 1,
"amount_for_units_usd": null,
"amount_basis": "per_unit_single_line_before_multi_line_reductions_and_before_lesser_of_billed_charge",
"method": null,
"setting": "non_facility",
"provider_type": {
"requested": "physician",
"adjustment": null
},
"modifiers_applied": [],
"modifiers_not_applied": [],
"location": null,
"components": {
"rvu": null,
"gpci": null,
"conversion_factor": null,
"conversion_factor_basis": null,
"multiplier": null,
"medicare_release": null,
"cap_applied": null,
"published_amount": null
},
"version": null,
"citation": null,
"as_of": "2027-01-15",
"notes": [
{ "code": "not_covered_by_engine", "text": "The engine holds no Texas fee schedule in force on the as_of date. tree lists what it covers." }
],
"request_id": "20f6f3e5-d098-49a5-8d93-a33b5eee0b65",
"timestamp": "2026-10-14T00:34:52.826Z"
}

Python (requests)​

# Uses the call() helper from quickstart.md.
from urllib.parse import urlencode

params = {
"jurisdiction": "CA",
"code": "99213",
"setting": "non_facility",
"zip": "90071",
"modifiers": "AQ",
}
line = call("GET", f"/api/lookup/fee_schedule/get?{urlencode(params)}")
if line["status"] == "priced":
print(f"{line['code']} max ${line['max_allowable_usd']:.2f} per unit ({line['version']['label']})")
else:
print(line["status"], "-", "; ".join(n["text"] for n in line["notes"]))
print("not applied:", line["modifiers_not_applied"])

Node.js (native fetch)​

// Uses the call() helper from quickstart.md.
const params = new URLSearchParams({
jurisdiction: "TX",
code: "97750",
setting: "non_facility",
zip: "77002",
units: "4",
});
const line = await call("GET", `/api/lookup/fee_schedule/get?${params}`);
console.log(line.status, line.max_allowable_usd, line.amount_for_units_usd, line.citation);

TypeScript​

type FeeStatus =
| "priced" | "no_published_cap" | "not_payable"
| "bundled" | "no_fee_schedule" | "not_covered_by_engine";

interface RvuTriple {
work: number;
practice_expense: number;
malpractice: number;
}

interface FeeNote {
code: string;
text: string;
[detail: string]: unknown;
}

interface FeeLocation {
locality: string;
name: string;
resolved_from: "zip" | "zip+4" | "locality";
basis: "place_of_service";
}

interface FeeVersion {
label: string;
effective_from: string;
effective_to: string | null;
}

interface FeeScheduleLine {
jurisdiction: string;
code: string;
label: string | null;
status: FeeStatus;
max_allowable_usd: number | null;
units: number;
amount_for_units_usd: number | null;
amount_basis: string;
method: string | null;
setting: "facility" | "non_facility";
provider_type: { requested: string; adjustment: number | null };
modifiers_applied: string[];
modifiers_not_applied: string[];
location: FeeLocation | null;
components: {
rvu: RvuTriple | null;
gpci: RvuTriple | null;
conversion_factor: number | null;
conversion_factor_basis: string | null;
multiplier: number | null;
medicare_release: string | null;
cap_applied: { kind: string; amount_usd: number } | null;
published_amount: number | null;
};
version: FeeVersion | null;
citation: string | null;
as_of: string;
notes: FeeNote[];
request_id: string;
timestamp: string;
}

const line = await call<FeeScheduleLine>(
"GET",
"/api/lookup/fee_schedule/get?jurisdiction=CA&code=99213&setting=non_facility&locality=CA:18",
);

Error scenarios​

Missing setting​

Send:

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=CA&code=99213&zip=90071" \
-H "apikey: $ENGINE_API_KEY" \
-w "\nHTTP %{http_code}\n"

Receive (400):

{
"timestamp": "2026-10-14T00:34:52.929Z",
"error": "ValidationError",
"message": "Query parameter 'setting' is required",
"field": "setting",
"request_id": "5dce2146-427e-4908-b644-151c676a808b"
}

Modifier suffix on the code​

Send:

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=CA&code=99213-25&setting=non_facility&zip=90071" \
-H "apikey: $ENGINE_API_KEY" \
-w "\nHTTP %{http_code}\n"

Receive (400):

{
"timestamp": "2026-10-14T00:34:53.034Z",
"error": "ValidationError",
"message": "Query parameter 'code' must not carry a modifier suffix; send '99213' with modifiers=25",
"field": "code",
"request_id": "5a073010-5283-416c-9a57-33c3ccceecd7"
}

Unknown jurisdiction​

Send:

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=XX&code=99213&setting=non_facility&zip=90071" \
-H "apikey: $ENGINE_API_KEY" \
-w "\nHTTP %{http_code}\n"

Receive (400):

{
"timestamp": "2026-10-14T00:34:53.223Z",
"error": "ValidationError",
"message": "Unknown jurisdiction 'XX'. Use a USPS state code, DC, medicare or owcp; tree lists them",
"field": "jurisdiction",
"request_id": "97062227-8659-4e8d-9021-52a876eb23c9"
}

ZIP that spans localities, sent without its +4​

ZIP 75019 lies in two Texas localities, so the 5-digit form cannot decide the amount.

Send:

curl -sS "https://engine.tripod-health.com/api/lookup/fee_schedule/get?jurisdiction=TX&code=99213&setting=non_facility&zip=75019" \
-H "apikey: $ENGINE_API_KEY" \
-w "\nHTTP %{http_code}\n"

Receive (400):

{
"timestamp": "2026-10-14T00:34:53.619Z",
"error": "ValidationError",
"message": "The zip spans more than one Medicare locality; send the place of service's 9-digit ZIP+4, or a locality from tree",
"field": "zip",
"request_id": "30b62580-fe84-47e1-a902-87db133f04a1"
}

Resend with the place of service's ZIP+4 (zip=75019-2016), and location.resolved_from comes back zip+4; or send a locality from tree.

Intended use​

  • Bill review — compare a billed line against the jurisdiction's maximum, then apply the rules in notes (lesser-of, least-of) and any multi-line reductions yourself.
  • Estimating cost before a service — price a planned visit or evaluation at the place of service and date it will happen.
  • Explaining a number — components, version and citation show exactly which values and which order produced the maximum.
  • One integration for every state — the same parameters and keys everywhere; read status instead of writing per-state code.

Mistaken use​

  • Do not treat max_allowable_usd as the payment. It is a per-unit, single-line cap before multi-line reductions and before the lesser-of-billed-charge rule. Apply those yourself; the notes name the jurisdiction's rules.
  • Do not send the patient's home ZIP. zip is where the provider performed the service. For a telehealth visit, decide the place of service under the jurisdiction's rules and send that.
  • Do not price a whole bill by summing lines. This endpoint is line-level. Sum amount_for_units_usd only after applying the reductions that depend on the other lines.
  • Do not fetch a rate sheet one line at a time. Use /api/lookup/fee_schedule/search, which prices many codes in one call.
  • Do not guess locality keys or which states are covered. Read them from /api/lookup/fee_schedule/tree.
  • Do not treat a 200 as a price. Check status; only priced carries a number.

Debugging​

  1. Capture request_id from the response body (or, if the response has no body from the engine, the X-Request-ID response header).
  2. 400 with field: "zip" and a message that the ZIP spans more than one locality. Send the 9-digit ZIP+4 of the place of service, or a locality from tree.
  3. 400 with field: "zip" and a message asking for zip or locality. The jurisdiction is covered, so a location is required.
  4. status: "not_covered_by_engine" for medicare, CA, TX or PA. Check as_of: dates before each jurisdiction's first version (for California, 2026-03-01) and after its newest version's effective_to (read it from tree) are not covered.
  5. A modifier did not change the amount. It is in modifiers_not_applied: the jurisdiction does not price on it for this code.
  6. 404 NotFound. No source the jurisdiction uses holds the code. Check the code, and look for it with /api/lookup/fee_schedule/search by prefix.
  7. A note with code location_outside_jurisdiction. The place of service you sent is in another state; the amount uses that location's locality.

Rate limits​

See rate-limits.md for the current per-consumer limits.

Change history​

DateChange
2026-10-14Initial publication.
2026-10-14The X-Request-ID response header is the gateway's trace ID for the request and does not match request_id; quote request_id to support.