Transaction enrollment
Some payers require transaction enrollment before you can start sending them eligibility checks. The Payer Network specifies which payers require enrollment.Manual submission
To upload a CSV file with batch eligibility checks, go to the Eligibility check batches page in the Stedi portal and click + New CSV batch.CSV upload
You can download a template CSV file with all of the supported properties.- Each row in the file corresponds to one batch eligibility check. You can submit up to 1,000 checks per CSV file.
- CSV batch checks support a subset of the properties available in the API. The available properties cover the vast majority of use cases. Contact Stedi support if you need to include additional properties.
Batch status
The batch status changes to In progress while Stedi is processing the batch. The status changes to Completed when Stedi has sent all checks in the batch to payers and received responses. A completed batch may contain both successful and failed eligibility checks. You can retrieve the results of each check in the batch through the Stedi portal or API.API submission
You can use Stedi’s Batch Eligibility Check API to submit up to 1,000 eligibility checks in a single request. Stedi processes these eligibility checks asynchronously, implementing best practices to avoid payer throttling. Asynchronous batch checks don’t count toward your Stedi account concurrency budget. This allows you to stage thousands of batch checks while continuing to send real-time eligibility checks simultaneously.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
.
Request data
The information you provide to the payer in an eligibility check can vary, depending on the circumstances. However, each batch eligibility check must include at least the following information:Information | Description |
---|---|
controlNumber |
|
tradingPartnerServiceId |
|
submitterTransactionIdentifier |
|
provider object, name and identifier |
|
subscriber and/or dependents objects |
|
encounter object, service dates |
|
encounter object, service or procedure codes |
|
Patient information
Batch checks should follow the same best practices as real-time eligibility checks when entering patient information. Visit Real-time eligibility checks for guidance on:- Which patient identifiers to use for best results
- How to know if a patient qualifies as a dependent
- How to enter patient names for best results
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.
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.
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 ^
. They are reserved for delimiters in the resulting X12 EDI transaction, and X12 doesn’t support using escape sequences to represent delimiters or special characters. Stedi returns a 400
error if you include these restricted characters in your request.
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 example demonstrates how to submit a batch of eligibility checks in theitems
array, where each item represents an individual eligibility check. Stedi returns a batchId
that you can use to retrieve the results of these checks later.
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.
Automatic retries
Stedi retries checks that fail due to payer connectivity issues for up to 8 hours. Therefore, it can take up to 8 hours for all checks in a batch to return results.Retrieve batch results
After you’ve submitted a batch of eligibility checks, you can review and retrieve the results through the Stedi portal or API.Stedi portal
You can review the progress of batch eligibility checks submitted manually through CSV files and programmatically through the API on the Eligibility check batches page. Click the batch name to view its details, including the status of each check in the batch. You can also download the original CSV input, if the batch was submitted as a CSV file. On the batch details page, you can click any eligibility check to review it in Eligibility Manager, including the full request and response payload. You’ll also be able to edit the request details for failed eligibility checks and resubmit them to the payer.Polling endpoint
You can use the Poll Batch Eligibility Checks endpoint to retrieve the results from batch checks submitted through both the Stedi portal and API.Polling strategy
The response only includes completed checks, so a single polling attempt may not retrieve responses for all checks within the batch, especially if you poll soon after initial submission. It can take up to 8 hours for all checks in a batch to return results. We recommend beginning to poll after 2 minutes, using an exponential backoff with jitter. For example, you might use something similar to the following formula:120
: Initial wait time (2 minutes)attempt
: Current retry attempt number (0-based)max_wait
: Maximum wait time cap (8 hours)random(0, 30s)
: Random jitter between 0-30s
Track completed checks
The polling endpoint only returns completed checks, and Stedi retries checks that fail due to payer connectivity issues for up to 8 hours. You’ll need to track the status of pending checks in your own system to determine when to stop polling. We recommend doing this by either:- Comparing the total number of checks you sent in the batch with the number of completed checks returned by the polling endpoint.
- Matching the
submitterTransactionIdentifier
of each request to thesubmitterTransactionIdentifier
in each response to ensure every check has been processed.
Filter results
You can filter the polling results using the following query parameters:batchId
: Retrieve results for a specific batch of eligibility checks. You can find this value in the synchronous response from the Batch Eligibility Check endpoint.startDateTime
: Retrieve results for checks submitted after a specific date and time (in ISO 8601 format).
2025-12-31T00:00:00Z
:
Costs
The costs for running a batch eligibility check – manually or using the API – are the same as running the equivalent number of real-time eligibility checks. For example, if you run a batch with 500 checks, it will cost the same as running 500 real-time eligibility checks.Minimize waste
We recommend the following to optimize batch eligibility checks:- Periodically purge or archive records for inactive patients. It’s a waste to perform eligibility checks on patients who have died or who haven’t scheduled an encounter for several years.
- Remove or deactivate patients that are no longer eligible. The payer indicates ineligibility by setting
benefitsInformation.code = “6”
(Inactive) in the response.
Monitor for potential coverage loss
When you receive the results of your batch eligibility checks, look for patients who have coverage that may be at risk. Check forbenefitsInformation.code = “5”
, which stands for Active - Pending investigation, or a response containing a benefitsDateInformation.premiumPaidToDateEnd
before the current date. Some payers may still show active coverage while the subscriber is behind on premium payments.
You may want to conduct additional checks on these patients because they have an elevated risk of losing coverage soon.