> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.taigabilling.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.taigabilling.com/_mcp/server.

# Upload a fee schedule (a collection of rates)

POST https://api.taigabilling.com/api/fee-schedules/v3
Content-Type: application/json

Uploads a new fee schedule.

Each rate may either be totally new as qualified by its dimensions or a new version for an existing rate.

If adding a new version to an existing rate, the rate must be posted with the next version number (previous version + 1) or a EntityConflictError will
be returned.

Use the dry run flag to discover already existing rates and to run validations.  If validations for any rate fail, no rates will
be saved to the system.

Reference: https://docs.taigabilling.com/api-reference/fee-schedules-v-3/fee-schedules-v-3-upload-fee-schedule

## Authentication

- `Authorization` header (bearer token, required) — Send your Taiga API key as a Bearer token. Create and manage keys in the Taiga developer portal.

## Servers

- `https://api.taigabilling.com` (Production, default)
- `https://api-staging.taigabilling.com` (Staging)

## Request

### Body (application/json)

This endpoint expects an object.

- `dry_run` (boolean, required)
- `rates` (list of fee-schedulesv3RateUpload, required)

## Response

### 200

- `list of fee-schedulesv3Rate`

## Errors

### 422 Unprocessable Entity Error

- `FeeSchedules_v3_upload_fee_scheduleRequestUnprocessableEntityError`
  - FeeSchedulesV3UploadFeeScheduleRequestUnprocessableEntityError0

## Types

### fee-schedulesv3RateUpload

- FeeSchedulesv3RateUpload0
- FeeSchedulesv3RateUpload1

### fee-schedulesv3Rate

A comprehensive rate including the current rate value and all values for historic time ranges. The time ranges specified by each RateEntry are disjoint. A rate must always have at least one entry.

- `rate_id` (string, required)
- `dimensions` (fee-schedulesv3Dimensions, required) — The dimension values that distinguish this rate from others.
- `version` (integer, required) — The version of this rate in the system.
- `updated_at` (date, required)
- `updated_by` (string, required)
- `entries` (list of fee-schedulesv3RateEntry, required)

### FeeSchedulesV3UploadFeeScheduleRequestUnprocessableEntityError0

- `errorName` (enum, optional)
  - Allowed values: `FeeScheduleValidationHttpError`
- `content` (list of fee-schedulesv3RateUploadWithPossibleErrors, optional)

### FeeSchedulesv3RateUpload0

- `dimensions` (fee-schedulesv3Dimensions, required) — Dimension values that qualify a rate. For the optional dimensions, a null value signifies "all apply". For set-type dimensions, an empty set signifies "all apply". Only one of, but not both, of `network_types` and `payer_plan_group_id` may be populated.
- `entries` (list of fee-schedulesv3RateEntry, required)
- `type` (enum, required)
  - Allowed values: `new_rate`

### FeeSchedulesv3RateUpload1

- `entries` (list of fee-schedulesv3RateEntry, required)
- `previous_version` (integer, required) — New versions of rates must indicate the exact version they modify. When the system attempts to save this new version, if the latest version in the system does not equal this previous_version, the request will be rejected with a EntityConflictError.
- `rate_id` (string, required)
- `type` (enum, required)
  - Allowed values: `new_version`

### fee-schedulesv3Dimensions

Dimension values that qualify a rate. For the optional dimensions, a null value signifies "all apply". For set-type dimensions, an empty set signifies "all apply". Only one of, but not both, of `network_types` and `payer_plan_group_id` may be populated.

- `payer_uuid` (string, required)
- `organization_billing_provider_id` (string, required)
- `states` (list of enum, required)
  - Allowed values: `AA`, `AE`, `AP`, `AL`, `AK`, `AS`, `AZ`, `AR`, `CA`, `CO`, `CT`, `DC`, `DE`, `FL`, `FM`, `GA`, `GU`, `HI`, `ID`, `IL`, `IN`, `IA`, `KS`, `KY`, `LA`, `ME`, `MD`, `MA`, `MH`, `MI`, `MN`, `MP`, `MS`, `MO`, `MT`, `NE`, `NV`, `NH`, `NJ`, `NM`, `NY`, `NC`, `ND`, `OH`, `OK`, `OR`, `PA`, `PR`, `PW`, `RI`, `SC`, `SD`, `TN`, `TX`, `UT`, `VI`, `VT`, `VA`, `WA`, `WV`, `WI`, `WY`, `FC`
- `zip_codes` (list of string, required)
- `license_types` (list of enum, required)
  - Allowed values: `MD`, `NP`, `PA`, `LMFT`, `LCPC`, `LCSW`, `PMHNP`, `FNP`, `LPCC`, `DO`, `RD`, `SLP`, `APRN`, `LPC`, `PHD`, `PSYD`, `LMSW`, `LMHC`, `OTHER_MASTERS`, `BCBA`, `UNKNOWN`, `RPH`, `PHT`, `LAC`, `LMT`, `DC`, `ND`, `MA`, `PT`, `IBCLC`, `RN`, `DPT`, `LCMHC`, `CNM`, `RNFA`, `ACSW`, `APC`, `BCABA`, `BHA`, `OD`, `DPM`, `DA`, `DDS`, `DEH`, `DMD`, `PTA`, `LCADC`, `LCAT`, `LCMHCS`, `LCMHCA`, `LCSWA`, `LICSW`, `LISW`, `LMFTS`, `LMFTA`, `LPCI`, `LSCSW`, `MHCA`, `MHT`, `RBT`, `RCSWI`, `RHMCI`, `LPN`, `OTD`, `OMS`, `MFTA`, `APCC`, `DNP`, `AGNPBC`, `ANP`, `FNPPP`, `LCSWR`, `ALC`, `RMFTI`, `LAMFT`, `LPCA`, `LSWI`, `CSW`, `CPC`, `LGMFT`, `LLPC`, `PLPC`, `PLMFT`, `LMHCA`, `CIT`, `CT`, `MFT`, `LSW`, `PLMHP`, `PCMSW`, `LMHP`, `OTR/L`, `RPA`, `COTA`, `CRNP`, `SLP-CF`, `NP-C`, `PA-C`, `AMFT`, `CDN`, `CGC`, `CNS`, `MDPHD`, `AuD`, `ATC`, `LAT`, `OTA`, `LSSP`, `SLPA`, `EdD`, `SWT`, `IMFT`
- `facility_type_codes` (list of enum, required)
  - Allowed values: `01`, `02`, `03`, `04`, `05`, `06`, `07`, `08`, `09`, `10`, `11`, `12`, `13`, `14`, `15`, `16`, `17`, `18`, `19`, `20`, `21`, `22`, `23`, `24`, `25`, `26`, `31`, `32`, `33`, `34`, `41`, `42`, `49`, `50`, `51`, `52`, `53`, `54`, `55`, `56`, `57`, `58`, `60`, `61`, `62`, `65`, `71`, `72`, `81`, `99`
- `network_types` (list of enum, required)
  - Allowed values: `12`, `13`, `14`, `15`, `16`, `17`, `AM`, `CH`, `DS`, `HM`, `LM`, `MA`, `MB`, `MC`, `OF`, `TV`, `VA`, `WC`, `ZZ`, `CI`, `BL`
- `payer_plan_group_ids` (list of string, required)
- `cpt_code` (string, required)
- `modifiers` (list of enum, required)
  - Allowed values: `AV`, `AU`, `AW`, `AY`, `07`, `08`, `09`, `10`, `11`, `12`, `13`, `14`, `15`, `16`, `22`, `23`, `24`, `25`, `26`, `27`, `28`, `32`, `33`, `47`, `50`, `51`, `52`, `53`, `54`, `55`, `56`, `57`, `58`, `59`, `62`, `63`, `66`, `73`, `74`, `76`, `77`, `78`, `79`, `80`, `81`, `82`, `90`, `91`, `92`, `93`, `95`, `96`, `97`, `99`, `A1`, `A2`, `A3`, `A4`, `A5`, `A6`, `A7`, `A8`, `A9`, `AA`, `AB`, `AD`, `AE`, `AF`, `AG`, `AH`, `AI`, `AJ`, `AK`, `AM`, `AO`, `AP`, `AQ`, `AR`, `AS`, `AT`, `AZ`, `BA`, `BL`, `BO`, `BP`, `BR`, `BU`, `CA`, `CB`, `CC`, `CD`, `CE`, `CF`, `CG`, `CH`, `CI`, `CJ`, `CK`, `CL`, `CM`, `CN`, `CR`, `CS`, `CT`, `CO`, `CQ`, `DA`, `E1`, `E2`, `E3`, `E4`, `EA`, `EB`, `EC`, `ED`, `EE`, `EJ`, `EM`, `EP`, `ER`, `ET`, `EV`, `EX`, `EY`, `F1`, `F2`, `F3`, `F4`, `F5`, `F6`, `F7`, `F8`, `F9`, `FA`, `FB`, `FC`, `FP`, `FQ`, `FR`, `FS`, `FT`, `FX`, `FY`, `G0`, `G1`, `G2`, `G3`, `G4`, `G5`, `G6`, `G7`, `G8`, `G9`, `GA`, `GB`, `GC`, `GE`, `GF`, `GG`, `GH`, `GJ`, `GK`, `GL`, `GM`, `GN`, `GO`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GV`, `GW`, `GX`, `GY`, `GZ`, `HA`, `HB`, `HC`, `HD`, `HE`, `HF`, `HG`, `HH`, `HI`, `HJ`, `HK`, `HL`, `HM`, `HN`, `HO`, `HP`, `HQ`, `HR`, `HS`, `HT`, `HU`, `HV`, `HW`, `HX`, `HY`, `HZ`, `J1`, `J2`, `J3`, `J4`, `J5`, `JA`, `JB`, `JC`, `JD`, `JE`, `JG`, `JW`, `JZ`, `K0`, `K1`, `K2`, `K3`, `K4`, `KA`, `KB`, `KC`, `KD`, `KE`, `KF`, `KG`, `KH`, `KI`, `KJ`, `KK`, `KL`, `KM`, `KN`, `KO`, `KP`, `KQ`, `KR`, `KS`, `KT`, `KU`, `KV`, `KW`, `KX`, `KY`, `KZ`, `LC`, `LD`, `LL`, `LM`, `LR`, `LS`, `LT`, `LU`, `M2`, `MA`, `MB`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MS`, `N1`, `N2`, `N3`, `NB`, `NR`, `NU`, `P1`, `P2`, `P3`, `P4`, `P5`, `P6`, `PA`, `PB`, `PC`, `PD`, `PI`, `PL`, `PM`, `PN`, `PO`, `PS`, `PT`, `Q0`, `Q1`, `Q2`, `Q3`, `Q4`, `Q5`, `Q6`, `Q7`, `Q8`, `Q9`, `QA`, `QB`, `QC`, `QD`, `QE`, `QF`, `QG`, `QH`, `QJ`, `QK`, `QL`, `QM`, `QN`, `QP`, `QQ`, `QR`, `QS`, `QT`, `QW`, `QX`, `QY`, `QZ`, `RA`, `RB`, `RC`, `RD`, `RE`, `RI`, `RR`, `RT`, `SA`, `SB`, `SC`, `SD`, `SE`, `SF`, `SG`, `SH`, `SJ`, `SL`, `SM`, `SN`, `SQ`, `SS`, `ST`, `SU`, `SV`, `SW`, `SY`, `T1`, `T2`, `T3`, `T4`, `T5`, `T6`, `T7`, `T8`, `T9`, `TA`, `TB`, `TC`, `TD`, `TE`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TP`, `TQ`, `TR`, `TS`, `TT`, `TU`, `TV`, `TW`, `U1`, `U2`, `U3`, `U4`, `U5`, `U6`, `U7`, `U8`, `U9`, `UA`, `UB`, `UC`, `UD`, `UE`, `UF`, `UG`, `UH`, `UJ`, `UK`, `UN`, `UP`, `UQ`, `UR`, `US`, `V1`, `V2`, `V3`, `W1`, `W2`, `W3`, `WC`, `WH`, `X4`, `XE`, `XP`, `XS`, `XU`, `XY`, `ZZ`

### fee-schedulesv3RateEntry

A rate value in cents for a specific time range. Rate entries can be deactivated, which is set by using the delete_rate endpoint. Deactivated rate entries are not considered when matching against service lines.

- `start_date` (date, required)
- `rate_cents` (integer, required)
- `is_deactivated` (boolean, required)
- `end_date` (date, optional, nullable)

### fee-schedulesv3RateUploadWithPossibleErrors

- `rate_upload` (fee-schedulesv3RateUpload, required)
- `possible_errors` (list of fee-schedulesv3ValidationError, required)
- `existing_rate` (fee-schedulesv3Rate, optional, nullable) — A comprehensive rate including the current rate value and all values for historic time ranges. The time ranges specified by each RateEntry are disjoint. A rate must always have at least one entry.

### fee-schedulesv3ValidationError

- FeeSchedulesv3ValidationError0
- FeeSchedulesv3ValidationError1
- FeeSchedulesv3ValidationError2
- FeeSchedulesv3ValidationError3
- FeeSchedulesv3ValidationError4
- FeeSchedulesv3ValidationError5
- FeeSchedulesv3ValidationError6
- FeeSchedulesv3ValidationError7

### FeeSchedulesv3ValidationError0

- `message` (string, required)
- `rate_a` (fee-schedulesv3RateEntry, required) — A rate value in cents for a specific time range. Rate entries can be deactivated, which is set by using the delete_rate endpoint. Deactivated rate entries are not considered when matching against service lines.
- `rate_b` (fee-schedulesv3RateEntry, required) — A rate value in cents for a specific time range. Rate entries can be deactivated, which is set by using the delete_rate endpoint. Deactivated rate entries are not considered when matching against service lines.
- `type` (enum, required)
  - Allowed values: `overlapping_rate_entries`

### FeeSchedulesv3ValidationError1

- `entity_name` (string, required)
- `type` (enum, required)
  - Allowed values: `version_conflict`

### FeeSchedulesv3ValidationError2

- `id` (string, required)
- `type` (enum, required)
  - Allowed values: `organization_provider_not_found`

### FeeSchedulesv3ValidationError3

- `type` (enum, required)
  - Allowed values: `duplicate_rate`

### FeeSchedulesv3ValidationError4

- `type` (enum, required)
  - Allowed values: `empty_entries`

### FeeSchedulesv3ValidationError5

- `id` (string, required)
- `type` (enum, required)
  - Allowed values: `payer_plan_group_not_found`

### FeeSchedulesv3ValidationError6

- `payer_plan_group_payer_uuid` (string, required)
- `rate_payer_uuid` (string, required)
- `type` (enum, required)
  - Allowed values: `payer_plan_group_does_not_match_rate_payer`

### FeeSchedulesv3ValidationError7

- `entity_name` (string, required)
- `type` (enum, required)
  - Allowed values: `payer_plan_group_network_type_mutual_exclusion`

## Examples

**Request**

```json
{
  "dry_run": true,
  "rates": [
    {
      "dimensions": {
        "cpt_code": "string",
        "facility_type_codes": [
          "01"
        ],
        "license_types": [
          "MD"
        ],
        "modifiers": [
          "AV"
        ],
        "network_types": [
          "12"
        ],
        "organization_billing_provider_id": "string",
        "payer_plan_group_ids": [
          "string"
        ],
        "payer_uuid": "string",
        "states": [
          "AA"
        ],
        "zip_codes": [
          "string"
        ]
      },
      "entries": [
        {
          "is_deactivated": false,
          "rate_cents": 33000,
          "start_date": "2024-04-11"
        }
      ],
      "type": "new_rate"
    }
  ]
}
```

**Response**

```json
[
  {
    "rate_id": "string",
    "dimensions": {
      "payer_uuid": "string",
      "organization_billing_provider_id": "string",
      "states": [
        "AA"
      ],
      "zip_codes": [
        "string"
      ],
      "license_types": [
        "MD"
      ],
      "facility_type_codes": [
        "01"
      ],
      "network_types": [
        "12"
      ],
      "payer_plan_group_ids": [
        "string"
      ],
      "cpt_code": "string",
      "modifiers": [
        "AV"
      ]
    },
    "version": 1,
    "updated_at": "2023-01-15",
    "updated_by": "string",
    "entries": [
      {
        "start_date": "2024-04-11",
        "rate_cents": 33000,
        "is_deactivated": false,
        "end_date": "2023-01-15"
      }
    ]
  }
]
```

**SDK Code**

```python
import requests

url = "https://api.taigabilling.com/api/fee-schedules/v3"

payload = {
    "dry_run": True,
    "rates": [
        {
            "dimensions": {
                "cpt_code": "string",
                "facility_type_codes": ["01"],
                "license_types": ["MD"],
                "modifiers": ["AV"],
                "network_types": ["12"],
                "organization_billing_provider_id": "string",
                "payer_plan_group_ids": ["string"],
                "payer_uuid": "string",
                "states": ["AA"],
                "zip_codes": ["string"]
            },
            "entries": [
                {
                    "is_deactivated": False,
                    "rate_cents": 33000,
                    "start_date": "2024-04-11"
                }
            ],
            "type": "new_rate"
        }
    ]
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```