Skip to main content

Full Contract Lookup

Overview

The Full Contract Lookup endpoint retrieves detailed contract information including pricing, network tier, effective dates, and bundle configurations. This endpoint should only be called after a successful Blind Contract Lookup match to retrieve the contract_id. It returns all negotiated rates, Medicare multipliers, and bundle type classifications needed for claims processing and financial verification.

info

Full Lookup requires the contract_id from a prior Blind Lookup call. It returns complete pricing and terms information.

Endpoint

POST /v1/contract-lookup/full/

Authentication Required: Yes (X-API-Key header) Content-Type: application/json Rate Limit: 500 requests per minute


Request

Schema

FieldTypeRequiredDescription
contract_idstringYesOpaque contract ID returned from Blind Lookup
npistringYesNational Provider Identifier for verification
group_idstringYesTPA network identifier
cpt_codestringYesSpecific CPT code for rate lookup
admit_typestringNoAdmission type (INPATIENT, OUTPATIENT, EMERGENCY). Defaults to OUTPATIENT

Request Example

{
"contract_id": "ct_1a2b3c4d5e6f7g8h",
"npi": "1234567890",
"group_id": "SHARP_HEALTHCARE_NW",
"cpt_code": "45378",
"admit_type": "OUTPATIENT"
}

Response

Success Response (200 OK)

FieldTypeDescription
contract_idstringOpaque contract identifier
contract_numberstringHuman-readable contract reference
effective_datestringISO 8601 date contract becomes active
termination_datestringISO 8601 date contract ends (null if active indefinitely)
network_tierstringNetwork classification (TIER_1, TIER_2, PREFERRED, etc.)
rate_typestringPricing model (PERCENT_OF_CHARGES, FLAT_RATE, CASE_RATE, BUNDLE)
negotiated_ratenumberNegotiated rate for the specified CPT code (if rate_type is fixed)
medicare_multipliernumberMultiplier of Medicare fee schedule (if rate_type is percentage)
bundle_typestringBundle classification (SINGLE, DOUBLE_HEADER, PACKAGE, null if unbundled)
anesthesia_includedbooleanWhether anesthesia is bundled in the rate
{
"contract_id": "ct_1a2b3c4d5e6f7g8h",
"contract_number": "SHP-2024-001",
"effective_date": "2024-01-01",
"termination_date": null,
"network_tier": "TIER_1",
"rate_type": "CASE_RATE",
"negotiated_rate": 2500.00,
"medicare_multiplier": null,
"bundle_type": "DOUBLE_HEADER",
"anesthesia_included": true
}

Not Found Response (404 Not Found)

{
"error": "Contract not found or has expired",
"contract_id": "ct_1a2b3c4d5e6f7g8h"
}

Invalid Contract ID (400 Bad Request)

{
"errors": [
{
"field": "contract_id",
"message": "Invalid or expired contract identifier"
}
]
}

Examples

cURL

curl -X POST https://api.turquoise.health/tpa-api/v1/contract-lookup/full/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contract_id": "ct_1a2b3c4d5e6f7g8h",
"npi": "1234567890",
"group_id": "SHARP_HEALTHCARE_NW",
"cpt_code": "45378",
"admit_type": "OUTPATIENT"
}'

Python

import requests
from datetime import datetime

api_key = "YOUR_API_KEY"
headers = {
"X-API-Key": api_key,
"Content-Type": "application/json"
}

# Assume contract_id came from blind lookup
contract_id = "ct_1a2b3c4d5e6f7g8h"

payload = {
"contract_id": contract_id,
"npi": "1234567890",
"group_id": "SHARP_HEALTHCARE_NW",
"cpt_code": "45378",
"admit_type": "OUTPATIENT"
}

response = requests.post(
"https://api.turquoise.health/tpa-api/v1/contract-lookup/full/",
json=payload,
headers=headers
)

if response.status_code == 200:
contract = response.json()
print(f"Contract: {contract['contract_number']}")
print(f"Rate Type: {contract['rate_type']}")

if contract["rate_type"] == "CASE_RATE":
rate = contract["negotiated_rate"]
print(f"Negotiated Rate: ${rate:.2f}")
elif contract["rate_type"] == "PERCENT_OF_CHARGES":
mult = contract["medicare_multiplier"]
print(f"Medicare Multiplier: {mult}x")
else:
print(f"Error: {response.status_code}")
print(response.json())

Rate Type Interpretation

tip

Use the rate_type field to determine how to calculate expected reimbursement:

  • FLAT_RATE / CASE_RATE: Use negotiated_rate directly
  • PERCENT_OF_CHARGES: Multiply submitted charges by medicare_multiplier
  • BUNDLE: Multiple service lines rolled into single case rate

Bundle Types

The bundle_type field indicates how multiple procedures are priced:

  • SINGLE — Individual procedure pricing
  • DOUBLE_HEADER — Two primary procedures (e.g., colonoscopy + EGD) at bundled rate
  • PACKAGE — Multi-day or multi-procedure package with per-diem or inclusive rate
  • null — Not bundled

For bundles, the negotiated_rate applies to the entire bundle, not per-procedure.