Eligibility checks verify coverage with a specific payer. If you don’t know
the payer, you can perform an insurance discovery
check instead to find a patient’s coverage
using their demographic data.
Transaction enrollment
Some payers require transaction enrollment before you can start sending them eligibility checks. The Payer Network specifies which payers require enrollment.Testing
The best way to test real-time eligibility checks is through mock requests.Mock requests
When you submit specific mock requests, Stedi returns mock benefits data from the specified payer. You can submit mock requests through the:- JSON endpoint: Visit Eligibility mock requests for a complete list.
- Stedi portal: Visit Test mode to learn how to enable Test mode in your account and manually submit mock requests.
Don’t send fake data
Some payers, particularly CMS (HETS), prohibit sending test eligibility checks for fake patients or providers to their production systems. Payers may block your access if you send these types of test transactions. You can send as many mock requests to Stedi as you need, but if you need to send test data to payers in production, you must contact Stedi support to coordinate with the payer and obtain approval. For example, some payers require that you use specific test credentials.Manual submission
Manual eligibility checks can be useful for testing and for situations when you need to do a one-time eligibility check. Go to the Create manual eligibility check page in the Stedi portal to submit manual eligibility checks and review the full JSON response. You can also sort and filter a more user-friendly response organized by coverage type and level.API submission
Call one of the following endpoints to send real-time 270/271 eligibility checks to payers:- Eligibility Check to send requests in JSON
- Eligibility Check Raw X12 to send requests in X12 EDI
Headers
You must include the following Stedi-specific headers in your API request:Authorization: Generate an API key to use for authentication.Content-Type: Set toapplication/json.
Body - JSON
The information you provide to the payer in an eligibility check can vary, depending on the circumstances. We recommend starting with a basic eligibility request.Basic eligibility request
Each eligibility check must include at least the following information in the request body:| Information | Description |
|---|---|
controlNumber |
|
tradingPartnerServiceId |
|
provider object, name and identifier |
|
subscriber and/or dependents objects |
|
encounter object, service dates |
|
encounter object, service or procedure codes |
|
dateOfService is not specified, the payer will use the current date in their timezone (default) to retrieve benefits information.
Conditional requirements
Note that objects marked as required are required for all requests, while others are conditionally required depending on the circumstances. When you include a conditionally required object, you must include all of its required properties. For example, you must always include theprovider object in your request, but you only need to include the dependents object when you need to request benefits information for a dependent on the subscriber’s insurance plan.
Body - X12 EDI
When sending real-time eligibility checks through the raw X12 endpoint you must send a payload in 270 X12 EDI format. The information you send can vary, depending on the circumstances. We recommend starting with a basic eligibility request.Basic eligibility request
In addition to the required fields in the header and trailer, each eligibility check must include at least the following information:| Information | Description |
|---|---|
BHT03 (Submitter Transaction Identifier) |
|
Loop 2100A (Information Source) |
|
Loop 2000B (Information Receiver) |
|
Loop 2000C (Subscriber) and Loop 2000D (Dependent) |
|
Loop 2110C or Loop 2100D DTP (Eligibility/Benefit Date) |
|
Loop 2110C or Loop 2100D EQ (Eligibility or Benefit Inquiry) |
|
BHT03
TheBHT03 (Submitter Transaction Identifier) element is required when submitting real-time eligibility checks in X12 EDI. The identifier you choose must be:
- An alphanumeric string from 1-50 characters long.
- Different from the value you choose for
ST02(Transaction Set Control Number).
BHT03 element of the 271 eligibility response, and Stedi returns it in the meta.traceId JSON property.
If you don’t include BHT03 in the request, Stedi returns a 200 with the status property set to ERROR and the implementationTransactionSetSyntaxError property set to 5. The response also includes a negative 999 Implementation Acknowledgment in the x12 property.
Example error response due to missing BHT03
Example error response due to missing BHT03
Character restrictions
Only use the X12 Basic and Extended character sets in request data. Using characters outside these sets may cause validation and HTTP400 errors.
Basic character set
Basic character set
The X12 Basic character set includes uppercase letters, digits, space, and some special characters. Lowercase letters and special language characters like 
ñ are not included.The following special characters are included:
Extended character set
Extended character set
The Extended character set includes the characters listed in Basic, plus lowercase letters and additional special characters, such as 
@.The following additional special characters are included:

~, *, :, and ^. X12 doesn’t support using escape sequences to represent delimiters or special characters. Stedi returns a 400 error if you use these restricted characters improperly.
- JSON endpoint: Don’t include delimiter characters anywhere in your request data.
- Raw X12 endpoint: You can use these characters as delimiters, but not in the body of the request data.
Autocorrection for backticks
Stedi automatically replaces backticks (`), also known as backquotes or grave accents, with an apostrophe (') in subscriber and dependents first and last names. These corrections prevent errors when submitting your request. Stedi returns a message in the response’s warnings array when it makes this replacement.
Sample request and response
The following request and response examples show a basic eligibility check for a patient named Jane Doe. The request uses theMH service type code to check for mental health benefits.
The response shape is the same for requests made through both the JSON and X12 EDI endpoints, and it contains the patient’s benefits information. Visit Determine patient benefits for detailed explanations of how to determine the patient’s active coverage, financial responsibility, whether referrals and authorizations are required, and more.
Retries
Implementing the right retry strategy for eligibility check failures saves a lot of time and money. At a minimum, we strongly recommend automatically retrying every request that fails due to payer connectivity issues. Automatic retries resolve a significant portion of these types of failures without manual intervention. Visit Retry strategy for details.Timeout
Insurance payers may take up to 60 seconds to respond to a request, but Stedi holds real-time eligibility check requests open for up to 120 seconds before timing out. During this period, Stedi attempts multiple retries to payers in an effort to complete your request. Canceling and retrying requests before Stedi’s automatic retry period ends may create multiple ongoing requests to payers and increase your concurrency usage.Request hedging
When eligibility responses are taking too long, you can use request hedging to try to get results faster. To implement request hedging, send a second request at some internal duration cutoff (for example, 30 seconds) without cancelling the first request. Then, you can use whichever result comes back first. If one of the requests fails, you can wait for the second request to see if it’s successful.Concurrency limit
Our real-time eligibility check endpoint has rate limiting on a per-account basis. This limit is based on concurrent requests, not requests per second. The default rate limit is 5 concurrent requests; if you need a higher limit, reach out to Support. Your transactions per second (and thus your concurrency limit) will vary based on the payer response time. If you reach the maximum concurrency limit, Stedi rejects additional requests with a429 HTTP code until one of your previous requests is completed. Rejected requests have the following error message:
Avoid payer throttling
Payers expect to receive requests at a “human scale”, such as a member entering insurance information into a website or presenting their insurance card at a doctor’s office. They may throttle high volumes of requests for the same provider (NPI ID) at once. This throttling can occur even when you are within Stedi’s concurrency limit. Real-time requests during normal operations are unlikely to experience throttling. However, we recommend spacing out requests during testing and periodic “refresh” checks, such as verifying active insurance. Avoid hitting payers with the same NPI ID more than 1-2 times every 15 seconds. You can also use Stedi’s Batch Eligibility Check API to submit up to 500 eligibility checks in a single request. Stedi processes these eligibility checks asynchronously, implementing best practices to avoid payer throttling.Recommended API clients
You may want to use an API client to make testing and debugging easier. We don’t recommend using Postman for requests containing Protected Health Information (PHI) because Postman defaults to storing request history - including full request payloads - on its cloud servers. You can’t turn this feature off without impractical workarounds. Visit API clients for a list of recommended clients you can use instead.Patient information
All payers are required to be able to search for patients using the following “bare minimum” subsets of information. They will return benefits information as long as they can find a unique match for the patient within their system. For a subscriber:- Member ID, first name, last name, date of birth
- Member ID, last name, date of birth
- Member ID, first name, last name
- Subscriber member ID (in the
subscriberobject), first name, last name, date of birth - Subscriber member ID, last name, date of birth
- Subscriber member ID, first name, last name
Dependents
The patient qualifies as a dependent for eligibility checks when:- The patient is listed as a dependent on the subscriber’s insurance plan.
- The payer cannot uniquely identify the patient through information outside the subscriber’s policy.
Patient names
Note the following information and best practices when entering patient names:- Enter the name exactly as written on the patient’s insurance ID card (if available), including any special or punctuation characters such as apostrophes, hyphens (dashes), or spaces. If the patient’s insurance ID card isn’t available, enter the name exactly as written on a government-issued ID card. If a government ID card isn’t available, enter the name exactly as given by the patient.
- Don’t include a name prefix, title, rank, honorific, or academic degree in any property. These include Mrs., Dr., Hon., and PhD.
- Don’t include a suffix or generation such as Jr. or III in the
firstNameorlastNameproperty. Put it in the separatesuffixproperty instead. Payers are supposed to automatically parse suffixes out of the last name, but Stedi can’t guarantee that all payers will do this correctly. - You can populate a middle name (or names) or initial in the
middleNameproperty, but most payers ignore it when searching for the patient. - Case doesn’t matter. For example, JANE is equivalent to Jane.
- Compound last and first names separated by spaces or hyphens such as Jean‐Claude or Smith Jones
- Apostrophized or elided names such as O’Connor or D’Amore
- Numbers like 3, however this typically indicates a data entry error
MBI for CMS checks
A Medicare Beneficiary Identifier (MBI) is a unique, randomly-generated identifier assigned to individuals enrolled in Medicare. You must include the patient’s MBI in every eligibility check to the Centers for Medicare and Medicaid Services (payer ID: CMS). Some payers return the patient’s MBI in one of the following properties of the standard eligibility response: If the value in either of these properties matches the format specified in the Medicare Beneficiary Identifier documentation, the number is likely an MBI, and we recommend sending a follow-up eligibility check to CMS for additional benefits data. You’re most likely to receive an MBI in eligibility check responses from commercial Medicare Advantage plans, but they can also be present in responses from Medicaid plans for dual-eligible patients. When you don’t know a patient’s MBI, you can use Stedi’s eligibility check APIs to perform an MBI lookup using their Social Security Number instead. Stedi returns a complete benefits response from CMS with the patient’s MBI in thesubscriber object for future reference. Visit Medicare Beneficiary Identifier (MBI) lookup
for complete details.
Don’t submit eligibility checks for Medicare Advantage plans to CMS (HETS) - you should submit them to the actual Medicare Advantage plan payer instead.
Checking eligibility for specific services
You may need to determine whether a patient’s insurance covers particular medical or dental services, such as chiropractic or hospice care. You can request specific types of benefits information from the payer by including either aprocedureCode and productOrServiceIDQualifier or a serviceTypeCodes value in the encounter object. In practice:
- Most medical payers don’t support procedure codes (CPT/HCPCS/CDT), so you will almost always need to submit a service type code (STC) in your eligibility check.
- Many (but not all) dental payers support procedure codes. To check general dental eligibility, we recommend always using STC
35instead of a CDT code. To check eligibility for specific services, try the relevant CDT code first. If the payer’s response doesn’t include it, try a more general inquiry for the STC mapped to that CDT code.
Mapping procedure codes
It can be hard to map procedure codes to the right STC. For example, if a provider offers medical nutrition therapy and bills using CPT code 97802, should they use service type code1 - Medical Care, 3 - Consultation, MH - Mental Health, or another option?
Unfortunately, there’s no standardized mapping between procedure codes and STCs. In fact, payers themselves often don’t have an explicit mapping for their own health plans. Their eligibility check systems aren’t necessarily directly integrated with their claims processing systems, so when you ask them which STC to use, they may not always be able to provide a good answer.
Figuring out the best service type codes to use requires some trial and error, and you’ll need to maintain an internal document that contains the mappings for the health plans you most frequently bill. Here’s our recommended approach:
- Review the payers’ documentation for eligibility checks. Some payers provide a list of STCs they support and their mappings to procedure codes.
- If you can’t find the information in the payer’s documentation, contact the payer directly or reach out to Stedi support, and we’ll contact the payer for you.
- For dental payers that don’t support specific CDT codes, you can use either of these sources to map CDT codes to service type codes: the NDEDIC’s Companion to ASC X12 270/271 or Table 6 in the American Dental Association’s Technical Report No. 1102. You can either purchase a copy of these documents or contact Stedi support for recommendations about specific mappings.
- If none of the above methods work, you can ask a medical coder with AAPC certification for guidance. Their familiarity with billable codes will help them make good recommendations about service type code mappings.
Common mappings
We recommend testing the following procedure code to STC mappings with your payers: Medical| Procedure | Description | STCs to try |
|---|---|---|
90867 | Transcranial magnetic stimulation | MH, A4 |
96130 | Psychological testing evaluation | MH, A4 |
96375 | IV push | 92 |
96493 | Chemotherapy, IV push | 82, 92 |
96494 | Chemotherapy, additional infusion | 82, 92 |
97802 | Medical nutrition therapy | 1, 98, MH |
97803 | Medical nutrition follow-up | 1, 98, MH |
99214 | Psychiatry visits | MH, A4 |
E1399 | Durable medical equipment, miscellaneous | 11, 12, 18 |
| Procedure | Description | STCs to try |
|---|---|---|
D4210 | Gingivectomy or gingivoplasty | 25 |
D4381 | Local delivery of antimicrobial agent | 25 |
D5110 | Complete maxillary (upper) denture | 39 |
Service Type Codes
You can include the following service type codes in theencounter object to request specific benefits information from the payer. Not all payers support all service type codes, however all payers are required to return benefits information for 30(Plan coverage and general benefits).
The word physician in service type codes refers to any healthcare provider, including physician assistants, nurse practitioners, and other types of healthcare professionals.
This list is specific to X12 version 005010, the mandated version for eligibility checks. It differs from the current X12 Service Type Codes list, which applies to X12 versions later than 005010. Payers shouldn’t accept or send service type codes not explicitly listed in version 005010.
Service Type Codes
Service Type Codes
1Medical Care2Surgical3Consultation4Diagnostic X-Ray5Diagnostic Lab6Radiation Therapy7Anesthesia8Surgical Assistance9Other Medical10Blood Charges11Used Durable Medical Equipment12Durable Medical Equipment Purchase13Ambulatory Service Center Facility14Renal Supplies in the Home15Alternate Method Dialysis16Chronic Renal Disease (CRD) Equipment17Pre-Admission Testing18Durable Medical Equipment Rental19Pneumonia Vaccine20Second Surgical Opinion21Third Surgical Opinion22Social Work23Diagnostic Dental24Periodontics25Restorative26Endodontics27Maxillofacial Prosthetics28Adjunctive Dental Services30Health Benefit Plan Coverage - supported by all payers32Plan Waiting Period33Chiropractic34Chiropractic Office Visits35Dental Care36Dental Crowns37Dental Accident38Orthodontics39Prosthodontics40Oral Surgery41Routine (Preventive) Dental42Home Health Care43Home Health Prescriptions44Home Health Visits45Hospice46Respite Care47Hospital48Hospital - Inpatient49Hospital - Room and Board50Hospital - Outpatient51Hospital - Emergency Accident52Hospital - Emergency Medical53Hospital - Ambulatory Surgical54Long Term Care55Major Medical56Medically Related Transportation57Air Transportation58Cabulance59Licensed Ambulance60General Benefits61In-vitro Fertilization62MRI/CAT Scan63Donor Procedures64Acupuncture65Newborn Care66Pathology67Smoking Cessation68Well Baby Care69Maternity70Transplants71Audiology Exam72Inhalation Therapy73Diagnostic Medical74Private Duty Nursing75Prosthetic Device76Dialysis77Otological Exam78Chemotherapy79Allergy Testing80Immunizations81Routine Physical82Family Planning83Infertility84Abortion85AIDS86Emergency Services87Cancer88Pharmacy89Free Standing Prescription Drug90Mail Order Prescription Drug91Brand Name Prescription Drug92Generic Prescription Drug93Podiatry94Podiatry - Office Visits95Podiatry - Nursing Home Visits96Professional (Physician)97Anesthesiologist98Professional (Physician) Visit - Office99Professional (Physician) Visit - InpatientA0Professional (Physician) Visit - OutpatientA1Professional (Physician) Visit - Nursing HomeA2Professional (Physician) Visit - Skilled Nursing FacilityA3Professional (Physician) Visit - HomeA4Psychiatric -A5Psychiatric - Room and BoardA6PsychotherapyA7Psychiatric - InpatientA8Psychiatric - OutpatientA9RehabilitationAARehabilitation - Room and BoardABRehabilitation - InpatientACRehabilitation - OutpatientADOccupational TherapyAEPhysical MedicineAFSpeech TherapyAGSkilled Nursing CareAHSkilled Nursing Care - Room and BoardAISubstance AbuseAJAlcoholismAKDrug AddictionALVision (Optometry)AMFramesANRoutine Exam - Use for Routine Vision Exam onlyAOLensesAQNonmedically Necessary PhysicalARExperimental Drug TherapyB1Burn CareB2Brand Name Prescription Drug - FormularyB3Brand Name Prescription Drug - Non-FormularyBAIndependent Medical EvaluationBBPartial Hospitalization (Psychiatric)BCDay Care (Psychiatric)BDCognitive TherapyBEMassage TherapyBFPulmonary RehabilitationBGCardiac RehabilitationBHPediatricBINurseryBJSkinBKOrthopedicBLCardiacBMLymphaticBNGastrointestinalBPEndocrineBQNeurologyBREyeBSInvasive ProceduresBTGynecologicalBUObstetricalBVObstetrical/GynecologicalBWMail Order Prescription Drug - Brand NameBXMail Order Prescription Drug - GenericBYPhysician Visit - Office: SickBZPhysician Visit - Office: WellC1Coronary CareCAPrivate Duty Nursing - InpatientCBPrivate Duty Nursing - HomeCCSurgical Benefits - Professional (Physician)CDSurgical Benefits - FacilityCEMental Health Provider - InpatientCFMental Health Provider - OutpatientCGMental Health Facility - InpatientCHMental Health Facility - OutpatientCISubstance Abuse Facility - InpatientCJSubstance Abuse Facility - OutpatientCKScreening X-rayCLScreening LaboratoryCMMammogram, High Risk PatientCNMammogram, Low Risk PatientCOFlu VaccinationCPEyewear and Eyewear AccessoriesCQCase ManagementDGDermatologyDMDurable Medical EquipmentDSDiabetic SuppliesGFGeneric Prescription Drug - FormularyGNGeneric Prescription Drug - Non-FormularyGYAllergyICIntensive CareMHMental HealthNINeonatal Intensive CareONOncologyPTPhysical TherapyPUPulmonaryRNRenalRTResidential Psychiatric TreatmentTCTransitional CareTNTransitional Nursery CareUCUrgent Care
Choosing STCs
STC support varies by payer:- Some only respond to the first STC.
- Some ignore the STCs and always return a default response for STC
30(Health Benefit Plan Coverage). - Some don’t support multiple STCs in a single request.
- Some support multiple STCs, but only a limited number per request.
- Send a request with just STC
30for general medical benefits or35for general dental benefits. - Submit a test request with the specific STC that best matches the benefit type you want to check. For example, to check fertility benefits, you might send an initial request with STC
83(Infertility). - Send a request with multiple STCs.
- Compare the responses. If they change based on the STC or the number of STCs, the payer likely supports them. If not, they may be ignoring or only partially supporting STCs.