Fee Schedule Get
Status:
stableCategory:lookupAdded:2026-10-14Last 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
| Jurisdiction | Answer |
|---|---|
medicare | Priced for 2026-01-01 through 2026-12-31, on the CMS 2026 quarterly releases (each quarter's date range uses its own release). |
CA | Priced for 2026-03-01 through 2026-12-31. Earlier dates answer not_covered_by_engine. |
TX | Priced for 2026-01-01 through 2026-12-31. |
PA | Priced for 2026-01-01 through 2026-12-31, from Pennsylvania's published table. |
IN, IA, MO, NH, NJ, WI | no_fee_schedule — the state publishes no professional fee schedule. |
Every other state, DC, owcp | Recognized; 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
| Field | Value |
|---|---|
| Method | GET |
| Path | /api/lookup/fee_schedule/get |
| Full URL | https://engine.tripod-health.com/api/lookup/fee_schedule/get |
| Authentication | API key (required) |
| Request body | none |
| Response body | application/json |
| Idempotent | Yes |
| Rate-limited | Yes |
Authentication
Send a valid API key in the apikey header. See
authentication.md.
Request
Headers
| Header | Required | Description |
|---|---|---|
apikey | Yes | Consumer 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
jurisdiction | string | Yes | — | A USPS state code (CA, TX), DC, medicare, or owcp. Case-insensitive. An unrecognized value is a 400. |
code | string | Yes | — | 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. |
setting | string | Yes | — | facility or non_facility. Required, not defaulted: most codes have different maximums in each, and a silent default would be a wrong number. |
zip | string | One 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. |
locality | string | One 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. |
modifiers | string | No | — | 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_type | string | No | physician | One of physician, physician_assistant, nurse_practitioner, clinical_nurse_specialist, clinical_social_worker, physical_therapist, chiropractor. Each jurisdiction maps it to its own percentage. |
units | int | No | 1 | Units of service, 1–999. Multiplies the per-unit maximum into amount_for_units_usd. |
as_of | string | No | today (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.
| Field | Type | Always present | Description |
|---|---|---|---|
jurisdiction | string | Yes | The normalized jurisdiction: uppercase state code, or medicare / owcp. |
code | string | Yes | The normalized code. |
label | string | null | Yes | The code's descriptor, or the state's own name for a state-defined code. null when no descriptor is held for the code. |
status | string | Yes | Why there is or is not a number. See Status values. |
max_allowable_usd | number | null | Yes | The per-unit maximum for this one line, in US dollars. null unless status is priced. |
units | integer | Yes | Echoes units. |
amount_for_units_usd | number | null | Yes | max_allowable_usd × units. null when there is no maximum. |
amount_basis | string | Yes | Always 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. |
method | string | null | Yes | How 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. |
setting | string | Yes | Echoes setting. |
provider_type.requested | string | Yes | Echoes provider_type, or physician when omitted. |
provider_type.adjustment | number | null | Yes | The 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_applied | array | Yes | Modifiers that changed the amount. |
modifiers_not_applied | array | Yes | Modifiers the jurisdiction does not price on for this code. They were accepted and ignored for the amount. |
location | object | null | Yes | Where the amount was priced. null when the jurisdiction is not covered or has no schedule. |
location.locality | string | Yes, when location is set | The locality or region key, e.g. CA:18, PA:001. |
location.name | string | Yes, when location is set | The locality or region name. |
location.resolved_from | string | Yes, when location is set | zip, zip+4, or locality — which input decided the location. |
location.basis | string | Yes, when location is set | Always place_of_service: the answer assumes the location you sent is where the service was performed. |
components | object | Yes | The inputs the amount was computed from. Every key is present; each is null where it does not apply. |
components.rvu | object | null | Yes | { work, practice_expense, malpractice } relative value units for this code and setting. |
components.gpci | object | null | Yes | { work, practice_expense, malpractice } geographic practice cost indices for the locality. |
components.conversion_factor | number | null | Yes | The dollar conversion factor applied. |
components.conversion_factor_basis | string | null | Yes | Which of the jurisdiction's conversion factors was used, with its citation. |
components.multiplier | number | null | Yes | The product of modifier and area adjustments applied (for example 1.1 for California's AQ). null when none applied. |
components.medicare_release | string | null | Yes | The CMS release whose relative values were used, e.g. 2026D. |
components.cap_applied | object | null | Yes | { 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_amount | number | null | Yes | The amount read from the jurisdiction's own table or fixed-fee list, before any adjustment. null when the amount was computed. |
version | object | null | Yes | The 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. |
citation | string | null | Yes | The legal citation for the version. |
as_of | string | Yes | The date whose schedule was applied, YYYY-MM-DD. |
notes | array | Yes | Rules the caller still owes, and explanations of non-priced statuses. See Notes. |
request_id | string | Yes | Correlation ID. Quote in support tickets. |
timestamp | string (ISO 8601 UTC) | Yes | Server 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.
| Value | Meaning |
|---|---|
priced | The jurisdiction sets a maximum, returned in max_allowable_usd. |
no_published_cap | The 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_payable | The jurisdiction does not pay this code: barred, excluded, or not covered. |
bundled | Payment is included in another service; the code has no separate payment. |
no_fee_schedule | The jurisdiction publishes no professional fee schedule. |
not_covered_by_engine | The 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:
| Code | Meaning |
|---|---|
not_covered_by_engine | No 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_status | Explains a non-priced status; medicare_status carries the CMS status indicator. |
priced_as | This code-and-modifier pair is paid at another code's maximum, named in priced_as. |
setting_not_applied | The amount does not vary by setting; setting was accepted and ignored. |
setting_atypical | CMS marks the service as not typically furnished in this setting; the amount is still its published formula. |
unit | The amount is per a unit other than one service (for example per hour); send units in that unit. |
zip_plus4_not_listed | No locality is listed for the ZIP+4 sent; the ZIP's own locality was used. |
location_outside_jurisdiction | The place of service lies outside the jurisdiction; the amount uses the locality it lies in. |
underserved_area_incentive | An area incentive for the place-of-service ZIP was added to the amount. |
zip_incentive_not_evaluated | An area incentive may apply, but it is evaluated only from zip; it was not evaluated for a locality. |
Status codes
| Code | Meaning | When |
|---|---|---|
200 | OK | The line was resolved. Check status — a 200 is not always a price. |
400 | ValidationError | A 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. |
401 | Unauthenticated | Missing or invalid API key. |
404 | NotFound | No source the jurisdiction uses holds the code. |
429 | RateLimited | Per-consumer rate limit exceeded. |
500 | InternalError | Unexpected 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,versionandcitationshow exactly which values and which order produced the maximum. - One integration for every state — the same parameters and keys
everywhere; read
statusinstead of writing per-state code.
Mistaken use
- Do not treat
max_allowable_usdas 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; thenotesname the jurisdiction's rules. - Do not send the patient's home ZIP.
zipis 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_usdonly 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
200as a price. Checkstatus; onlypricedcarries a number.
Debugging
- Capture
request_idfrom the response body (or, if the response has no body from the engine, theX-Request-IDresponse header). 400withfield: "zip"and a message that the ZIP spans more than one locality. Send the 9-digit ZIP+4 of the place of service, or alocalityfrom tree.400withfield: "zip"and a message asking forziporlocality. The jurisdiction is covered, so a location is required.status: "not_covered_by_engine"formedicare, CA, TX or PA. Checkas_of: dates before each jurisdiction's first version (for California,2026-03-01) and after its newest version'seffective_to(read it from tree) are not covered.- A modifier did not change the amount. It is in
modifiers_not_applied: the jurisdiction does not price on it for this code. 404 NotFound. No source the jurisdiction uses holds the code. Check the code, and look for it with/api/lookup/fee_schedule/searchby prefix.- 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.
Related
- lookup-fee_schedule-search.md — price many codes for one jurisdiction and location in one call.
- lookup-fee_schedule-tree.md —
covered jurisdictions, version history, and valid
localitykeys. - lookup-cpt-get.md, lookup-cpt-search.md — find and describe the procedure code before pricing it.
- authentication.md, errors.md, rate-limits.md, conventions.md — cross-cutting contract rules.
Change history
| Date | Change |
|---|---|
| 2026-10-14 | Initial publication. |
| 2026-10-14 | The 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. |