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

# Test Match

GET https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/{service_line_id}/match/{rate_id}

Tests a service line against a rate to see if it matches.

Reference: https://docs.joincandidhealth.com/api-reference/fee-schedules/v-3/test-match

## Authentication

- OAuth2 — send the obtained token as `Authorization: Bearer <token>`

## Servers

- `https://api.joincandidhealth.com` (Production, default)
- `https://api-staging.joincandidhealth.com` (Staging)
- `https://sandbox-api.joincandidhealth.com` (CandidSandbox)
- `https://staging-api.joincandidhealth.com` (CandidStaging)
- `http://localhost:5050` (Local)

## Request

### Path parameters

- `service_line_id` (UUID, required)
- `rate_id` (UUID, required)

## Response

### 200

- `dimensions` (DimensionMatch, required) — Dimension matching for a service line
- `threshold` (ThresholdMatch, required) — Threshold and dollar amount matching for a service line

## Errors

### 404 Entity Not Found Error

- `errorName` ("EntityNotFoundError", required)
- `content` (EntityNotFoundErrorMessage, required)

### 422 Failed to Build Service Line Dimensions

- `errorName` ("FailedToBuildServiceLineDimensions", required)
- `content` (string, required)

## Types

### DimensionMatch

Dimension matching for a service line

- `payer` (MatchPayer, required) — Match information for a payer
- `geography` (MatchGeo, required) — Match information for state or zip code
- `organization_billing_provider` (MatchProvider, required) — Match information for a billing provider
- `date_of_service` (MatchDate, required) — Match information for date of service
- `cpt_code` (MatchCptCode, required) — Match information for a CPT code
- `modifiers` (MatchModifiers, required) — Match information for procedure modifiers
- `license_type` (MatchLicenseType, required) — Match information for rendering provider license type
- `facility_type_code` (MatchFacilityTypeCode, required) — Match information for facility type code
- `network_types` (MatchNetworkTypes, required) — Match information for network types
- `payer_plan_groups` (MatchPayerPlanGroups, required) — Match information for a payer plan

### ThresholdMatch

Threshold and dollar amount matching for a service line

- `threshold` (PayerThreshold, required) — Rate thresholds that determine fee schedule rate matching behavior. When a service line is adjudicated by a payer Candid determines if the payer's allowed amount "matches" the rate value. If the allowed amount doesn't equal the rate value, Candid moves the claim to a PAID_INCORRECTLY state. These optional thresholds allow a user to set wiggle room to avoid claims moving to PAID_INCORRECTLY and instead have them move directly to FINALIZED_PAID when the payer's allowed amount is greater than [rate_cents - lower_threshold_cents] and less than [rate_cents + upper_threshold_cents]. Additionally, a client can set disable_paid_incorrectly to avoid the PAID_INCORRECTLY claim status entirely.
- `rate_cents` (integer, required)
- `match` (boolean, required)
- `explanation` (string, required)

### EntityNotFoundErrorMessage

- `id` (string, required)

### MatchPayer

Match information for a payer

- `value` (UUID, required)
- `match` (boolean, required)
- `explanation` (string, required)

### MatchGeo

Match information for state or zip code

- `match` (boolean, required)
- `explanation` (string, required)
- `zip_code` (string, optional)
- `state` (enum, optional)
  - 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`

### MatchProvider

Match information for a billing provider

- `match` (boolean, required)
- `explanation` (string, required)
- `value` (UUID, optional)

### MatchDate

Match information for date of service

- `match` (boolean, required)
- `explanation` (string, required)
- `value` (date, optional)

### MatchCptCode

Match information for a CPT code

- `value` (string, required)
- `match` (boolean, required)
- `explanation` (string, required)

### MatchModifiers

Match information for procedure modifiers

- `value` (set 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`
- `match` (boolean, required)
- `explanation` (string, required)

### MatchLicenseType

Match information for rendering provider license type

- `match` (boolean, required)
- `explanation` (string, required)
- `value` (enum, optional)
  - 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`

### MatchFacilityTypeCode

Match information for facility type code

- `match` (boolean, required)
- `explanation` (string, required)
- `value` (enum, optional) — Box 24B on the CMS-1500 claim form. Line-level place of service is not currently supported. 02 for telemedicine, 11 for in-person. Full list here: https://www.cms.gov/Medicare/Coding/place-of-service-codes/Place_of_Service_Code_Set
  - 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`

### MatchNetworkTypes

Match information for network types

- `value` (set 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`
- `match` (boolean, required)
- `explanation` (string, required)

### MatchPayerPlanGroups

Match information for a payer plan

- `value` (set of UUID, required)
- `match` (boolean, required)
- `explanation` (string, required)

### PayerThreshold

Rate thresholds that determine fee schedule rate matching behavior. When a service line is adjudicated by a payer Candid determines if the payer's allowed amount "matches" the rate value. If the allowed amount doesn't equal the rate value, Candid moves the claim to a PAID_INCORRECTLY state. These optional thresholds allow a user to set wiggle room to avoid claims moving to PAID_INCORRECTLY and instead have them move directly to FINALIZED_PAID when the payer's allowed amount is greater than [rate_cents - lower_threshold_cents] and less than [rate_cents + upper_threshold_cents]. Additionally, a client can set disable_paid_incorrectly to avoid the PAID_INCORRECTLY claim status entirely.

- `disable_paid_incorrectly` (boolean, required)
- `upper_threshold_cents` (integer, optional)
- `lower_threshold_cents` (integer, optional)

## Examples

**Response**

```json
{
  "dimensions": {
    "payer": {
      "value": "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32",
      "match": true,
      "explanation": "explanation"
    },
    "geography": {
      "match": true,
      "explanation": "explanation",
      "zip_code": "zip_code",
      "state": "AA"
    },
    "organization_billing_provider": {
      "match": true,
      "explanation": "explanation",
      "value": "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32"
    },
    "date_of_service": {
      "match": true,
      "explanation": "explanation",
      "value": "2023-01-15"
    },
    "cpt_code": {
      "value": "value",
      "match": true,
      "explanation": "explanation"
    },
    "modifiers": {
      "value": [
        "AV"
      ],
      "match": true,
      "explanation": "explanation"
    },
    "license_type": {
      "match": true,
      "explanation": "explanation",
      "value": "MD"
    },
    "facility_type_code": {
      "match": true,
      "explanation": "explanation",
      "value": "01"
    },
    "network_types": {
      "value": [
        "12"
      ],
      "match": true,
      "explanation": "explanation"
    },
    "payer_plan_groups": {
      "value": [
        "d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32"
      ],
      "match": true,
      "explanation": "explanation"
    }
  },
  "threshold": {
    "threshold": {
      "disable_paid_incorrectly": true,
      "upper_threshold_cents": 1,
      "lower_threshold_cents": 1
    },
    "rate_cents": 1,
    "match": true,
    "explanation": "explanation"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32"

headers = {"Authorization": "<token>."}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32';
const options = {method: 'GET', headers: {Authorization: '<token>.'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "<token>.")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = '<token>.'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32")
  .header("Authorization", "<token>.")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32', [
  'headers' => [
    'Authorization' => '<token>.',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "<token>.");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "<token>."]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.joincandidhealth.com/api/fee-schedules/v3/service-line/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32/match/d5e9c84f-c2b2-4bf4-b4b0-7ffd7a9ffc32")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```