How to handle duplicate benefits in 271 eligibility responses

Sep 14, 2025

Guide

Big takeaway: Duplicate benefits often aren’t duplicates. They cover different scenarios, like in-network vs. out-of-network care.

Imagine you run an eligibility check. A second or two later, you get back the response. It lists three different co-pays – $15, $30, and $0 – each for a physician office visit.

Which one is right?

They all are. Each co-pay applies to a different situation:

  • $15 for in-network providers – providers who have a contract with the patient’s payer for their health plan.

  • $30 for out-of-network providers – providers without a contract.

  • $0 for specific services, like preventive care or maternity visits, with in-network providers.

If you don't know which fields to check in the response, it’s hard to tell them apart. This guide shows you what to look for with real-life examples.

Where to find benefits

If you’re using Stedi’s JSON eligibility APIs, most of a patient’s benefit information is in the response’s benefitsInformation object array.

Each benefitsInformation object – or benefit entry – tells you about one aspect of the patient’s coverage. One entry indicates active coverage. Another contains a co-pay.

For tips on reading the objects, see How to read a 271 eligibility response in plain English.

{
  ...
  "benefitsInformation": [
    {
      "serviceTypeCodes": ["30"],         // General medical
      "code": "1",                        // Active coverage
      "timeQualifierCode": "23",          // Calendar year
      "inPlanNetworkIndicatorCode": "Y",  // Applies to in-network providers
      "additionalInformation": [
        {
          "description": "Preauthorization required for imaging services."
        }
      ]
    },
    {
      "serviceTypeCodes": ["30"],         // General medical
      "code": "C",                        // Deductible
      "benefitAmount": "1000",            // $1000 annual deductible
      "timeQualifierCode": "23",          // Calendar year
      "inPlanNetworkIndicatorCode": "N"   // Applies to out-of-network providers
    },
    {
      "serviceTypeCodes": ["30"],
      "code": "D",                        // Benefit Description
      "additionalInformation": [
        {
          "description": "EXCLUSIONS: COSMETIC SURGERY, EXPERIMENTAL TREATMENTS"
        }
      ]
    },
    {
      "serviceTypeCodes": ["88"],         // Pharmacy
      "code": "B",                        // Co-pay
      "benefitAmount": "10",              // $10 co-pay
      "inPlanNetworkIndicatorCode": "Y"   // Applies to in-network providers
    },
  ],
  ...
}

Fields to check

Benefit entries often look identical except for one or two fields. Check these fields first to spot the difference:

  • serviceTypeCodes
    The Service Type Code (STC) indicates what type of service the benefit applies to. If two benefitsInformation objects have different serviceTypeCodes values, they apply to different services – like pharmacy and mental health services.

    You’ll often see the same serviceTypeCodes in more than one benefitsInformation object. That’s expected. To get the full picture for a service, look at all entries that include the same STC.


  • coverageLevelCode
    Whether the benefit applies to the plan’s subscriber, their family, etc. A $20 individual deductible and $50 family deductible aren't duplicates. They're separate buckets that apply to different members of the patient’s plan.


    If coverageLevelCode is missing, assume the benefit entry applies to individual coverage.

  • inPlanNetworkIndicatorCode
    Whether the benefit applies to in-network providers, out-of-network providers, or both. This often explains the biggest price differences in what the patient pays.

  • timeQualifierCode
    The time period for the benefits, such as calendar year, remaining year, or visit. A $500 calendar year maximum is different from a $500 per-visit limit.

  • additionalInformation.description
    Free-text notes – these act as fine print. Payers often use these to include specific procedure codes, exclusions, carve outs, or special rules. As a rule of thumb, more specific descriptions override less specific ones.

    In many cases, these descriptions will be in a separate entry for the STC. These entries typically have a code of 1 (Active Coverage) or  D (Benefit Description).

  • eligibilityAdditionalInformation.industryCode
    When eligibilityAdditionalInformation.codeListQualifierCode is set to ZZ (Mutually Defined), this field contains a code for where the service takes place. Some payers offer reduced co-pays or coinsurance for telehealth visits.


    See Place of Service Code Set on CMS.gov for a list of these codes and their descriptions.

Other fields

The above list isn’t exhaustive. If you’ve checked these fields and still can’t spot differences between similar benefit entries, try diffing the entries in a code editor or a similar tool.

Examples

Here are a few examples of near-identical benefit entries we’ve helped customers interpret.

Multiple co-pays for the same service
The following benefits cover mental health outpatient visits (STC CF).

The difference is in the additionalInformation.description field. Primary care providers (PCPs) have a $25 co-pay. Specialists and other providers have a $75 co-pay.

// PCP co-pay
{
  "serviceTypeCodes": ["CF"],              // Mental health outpatient
  "code": "B",                             // Co-pay
  "coverageLevelCode": "IND",              // Individual coverage
  "inPlanNetworkIndicatorCode": "Y",       // In-network
  ...
  "benefitAmount": "25",                   // $25 co-pay
  "additionalInformation": [
    {
      "description": "Provider Role PCP"    // Primary care provider only
    }
  ]
}

// Specialist co-pay
{
  "serviceTypeCodes": ["CF"],
  "code": "B",
  "coverageLevelCode": "IND",
  "inPlanNetworkIndicatorCode": "Y",
  ...
  "benefitAmount": "75",                   // $75 co-pay
  "additionalInformation": [
    {
      "description": "Provider Role OTHER"  // All other providers
    }
  ]
}

Different provider network status, different deductibles
The benefits below both cover general medical care (STC 30). Both have an annual deductible.

The only difference is the provider’s network status. In-network providers have a $1000 deductible. Out-of-network providers have a $2500 deductible.

// In-network deductible
{
  "serviceTypeCodes": ["30"],              // General medical
  "code": "C",                             // Deductible
  "coverageLevelCode": "IND",              // Individual coverage
  "timeQualifierCode": "23",               // Calendar year
  ...
  "benefitAmount": "1000",                 // **$1000 deductible**
  "inPlanNetworkIndicatorCode": "Y",       // **In-network only**
}


// Out-of-network deductible
{
  "serviceTypeCodes": ["30"],
  "code": "C",
  "coverageLevelCode": "IND",
  "timeQualifierCode": "23",
  ...
  "benefitAmount": "2500",                 // **$2500 deductible**
  "inPlanNetworkIndicatorCode": "N",       // **Out-of-network only**
}

Co-insurance for different procedures
These dental benefits all cover adjunctive dental services (STC 28). The coinsurance percentage depends on which procedure codes are billed.

In this case, the procedure codes are CDT (Current Dental Terminology) codes, which are used for dental services.

The codes for each coinsurance are listed in the additionalInformation.description field.

// Fully covered procedures
{
  "serviceTypeCodes": ["28"],              // Adjunctive dental services
  "code": "A",                             // Co-insurance
  "coverageLevelCode": "IND",              // Individual coverage
  "inPlanNetworkIndicatorCode": "W",       // Not applicable
  "benefitPercent": "0",                   // Patient pays 0% (fully covered)
  "additionalInformation": [
    {
	// CDT codes for palliative treatment
      "description": "D9110 D9912"
    }
  ]
}

// 20% coinsurance procedures
{
  "serviceTypeCodes": ["28"],
  "code": "A",
  "coverageLevelCode": "IND",
  "inPlanNetworkIndicatorCode": "W",
  "benefitPercent": "0.2",                 // Patient pays 20%
  "additionalInformation": [
    {
	// CDT codes for consultation and diagnostic procedures
      "description": "D9910 D9911 D9930 D9942 D9943 D9950 D9951 D9952"
    }
  ]
}

// 50% coinsurance procedures
{
  "serviceTypeCodes": ["28"],
  "code": "A",
  "coverageLevelCode": "IND",
  "inPlanNetworkIndicatorCode": "W",
  "benefitPercent": "0.5",                 // Patient pays 50%
  "additionalInformation": [
    {
	// CDT codes for hospital/facility services and anesthesia
      "description": "D9938 D9939 D9940 D9944 D9945 D9946 D9947 D9948 D9949 D9954 D9955 D9956 D9957 D9959"
    }
  ]
}

Get help from eligibility experts

Sometimes, payers do return conflicting benefit entries. We've seen it. In other cases, descriptions aren’t clear about when a benefit applies.

If you need help, reach out. We offer real-time support and answer questions in minutes. Our experts have helped hundreds of teams interpret confusing eligibility responses.

Share

Twitter
LinkedIn

Get started with Stedi

Get started with Stedi

Automate healthcare transactions with developer-friendly APIs that support thousands of payers. Contact us to learn more and speak to the team.

Get updates on what’s new at Stedi

Get updates on what’s new at Stedi

Get updates on what’s new at Stedi

Get updates on what’s new at Stedi

Backed by

Stedi is a registered trademark of Stedi, Inc. All names, logos, and brands of third parties listed on our site are trademarks of their respective owners (including “X12”, which is a trademark of X12 Incorporated). Stedi, Inc. and its products and services are not endorsed by, sponsored by, or affiliated with these third parties. Our use of these names, logos, and brands is for identification purposes only, and does not imply any such endorsement, sponsorship, or affiliation.

Get updates on what’s new at Stedi

Backed by

Stedi is a registered trademark of Stedi, Inc. All names, logos, and brands of third parties listed on our site are trademarks of their respective owners (including “X12”, which is a trademark of X12 Incorporated). Stedi, Inc. and its products and services are not endorsed by, sponsored by, or affiliated with these third parties. Our use of these names, logos, and brands is for identification purposes only, and does not imply any such endorsement, sponsorship, or affiliation.

Get updates on what’s new at Stedi

Backed by

Stedi is a registered trademark of Stedi, Inc. All names, logos, and brands of third parties listed on our site are trademarks of their respective owners (including “X12”, which is a trademark of X12 Incorporated). Stedi, Inc. and its products and services are not endorsed by, sponsored by, or affiliated with these third parties. Our use of these names, logos, and brands is for identification purposes only, and does not imply any such endorsement, sponsorship, or affiliation.