# Real-Time Eligibility Check SOAP
Source: https://www.stedi.com/docs/healthcare/api-reference/post-healthcare-eligibility-soap
Submit real-time eligibility checks over SOAP using the CAQH CORE vC2.2.0 XML Schema
***

openapi: soap post /protocols/caqh-core
title: Real-Time Eligibility Check SOAP
description: "Submit real-time eligibility checks over SOAP using the CAQH CORE vC2.2.0 XML Schema"
apiNodes:
authNode: false
parameterNode: false
bodyNode: false
responseNode: false
callbacksNode: false
--------------------

Real-time eligibility checks are ideal for in-person patient visits, telehealth appointments, and other scenarios where you need immediate information about a patient’s coverage. This endpoint is ideal when you must meet CAQH Core Connectivity Safe Harbor requirements or integrate with systems requiring CAQH CORE-compliant SOAP connectivity.

1. Call this endpoint with a request in XML format. The XML must conform to the [CAQH CORE vC2.2.0 XML Schema](https://www.caqh.org/core/connectivity). The `Payload` element must contain a valid eligibility check in [270 X12 EDI format](https://portal.stedi.com/app/guides/view/hipaa/health-care-eligibility-benefit-inquiry-x279a1/01GRYB6GTDJ4MEP5Z16CGMQWT6). We recommend reviewing the requirements for a [basic eligibility request](/healthcare/send-eligibility-checks#body---x12-edi).
2. Stedi validates your eligibility check and sends it to the payer.
3. The endpoint returns a synchronous SOAP response in [XML format](#response). It contains the full [271 X12 EDI](https://portal.stedi.com/app/guides/view/hipaa/health-care-eligibility-benefit-response-x279a1/01GS66YHZPB37ABF34DBPSR213) response from the payer containing the patient's eligibility and benefits information.

<Note>
  Visit [Real-time eligibility checks](/healthcare/send-eligibility-checks) for
  a full how-to guide and
  [Troubleshooting](/healthcare/eligibility-troubleshooting#soap-requests) for
  SOAP-specific errors and resolutions.
</Note>

## Headers

| Name              | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ----------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Content-Type`    | Yes      | Set to `application/soap+xml`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `X-Forwarded-For` | No       | **(CMS requests only):** Starting November 8, 2025, the Centers for Medicare & Medicaid Services (CMS) requires submitters to include network IP addresses from an eligibility request's point of origin through receipt by the HETS system.<ul><li>To comply with this requirement, you may need to include the `X-Forwarded-For` header in requests to CMS.</li> <li>When present, this header should contain a comma-separated list of upstream IP addresses, starting with the originating system and continuing through every intermediary. You can exclude your IP address from the list. Visit [CMS traceability requirements](/healthcare/send-eligibility-checks#cms-traceability-requirements) for details and examples.</li></ul> |

## Request

The request payload must be XML that conforms to the [CAQH CORE vC2.2.0 XML Schema](https://www.caqh.org/core/connectivity). It consists of three main parts: the envelope, the header, and the body.

```xml
<soapenv:Envelope>
  <soapenv:Header>
    ...
  </soapenv:Header>
  <soapenv:Body>
      ...
  </soapenv:Body>
</soapenv:Envelope>
```

### Envelope

The SOAP `Envelope` element wraps both the header and body. It defines the message structure according to the SOAP specification.

```xml
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:cor="http://www.caqh.org/SOAP/WSDL/CORERule2.2.0.xsd">
```

`Envelope` must declare the following namespaces:

{/* prettier-ignore-start */}

| Namespace declaration | Required | Description                                                                                                       |
| --------------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| `xmlns:soapenv`       | Yes      | Declares the XML namespace for the SOAP envelope. Must be set to `http://www.w3.org/2003/05/soap-envelope`.       |
| `xmlns:cor`           | Yes      | Declares the XML namespace for CAQH CORE rules. Must be set to `http://www.caqh.org/SOAP/WSDL/CORERule2.2.0.xsd`. |

{/* prettier-ignore-end */}

### Header

The `Header` element specifies the WS-Security namespace (`wsse`) and contains the required credentials for authentication.

```xml
<soapenv:Header>
  <wsse:Security soapenv:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
    <wsse:UsernameToken>
      <wsse:Username>STEDI-ACCOUNT-ID</wsse:Username>
      <wsse:Password>STEDI-API-KEY</wsse:Password>
    </wsse:UsernameToken>
  </wsse:Security>
</soapenv:Header>
```

`Header` must include the following elements:

{/* prettier-ignore-start */}

| Element         | Required | Description                                                                                                                                                                                                                                                                                                                                                                                                              |
| --------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `wsse:Security` | Yes      | The parent container for the security token. It includes: <ul><li>The `soapenv:mustUnderstand` attribute, set to `true`.</li><li>The `xmlns:wsse` namespace declaration, set to `http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd`</li><li>The `xmlns:wsu` namespace declaration, set to `http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd`</li></ul> |
| `wsse:Username` | Yes      | Set this to your **Stedi Account ID**. You can find your account ID at the end of any Stedi portal URL. For example, in `https://portal.stedi.com/app/healthcare/eligibility?account=1111-33333-55555`, the account ID is `1111-33333-55555`.                                                                                                                                                                            |
| `wsse:Password` | Yes      | Set this to your **API Key**. You can create and manage API keys from the [API Keys page](https://portal.stedi.com/app/settings/api-keys) in the Stedi portal.                                                                                                                                                                                                                                                           |

{/* prettier-ignore-end */}

### Body

The `Body` element contains the request details, and it must conform to the [CAQH CORE XML Schema vC2.2.0](https://www.caqh.org/core/connectivity).

```xml
<soapenv:Body>
  <cor:COREEnvelopeRealTimeRequest>
    <PayloadType>X12_270_Request_005010X279A1</PayloadType>
    <ProcessingMode>RealTime</ProcessingMode>
    <PayloadID>YOUR-PAYLOAD-ID</PayloadID>
    <TimeStamp>2007-08-30T10:20:34.000Z</TimeStamp>
    <SenderID>SENDER-ID</SenderID>
    <ReceiverID>RECEIVER-ID</ReceiverID>
    <CORERuleVersion>2.2.0</CORERuleVersion>
    <Payload><![CDATA[ISA*00*          *00*          *ZZ*SENDER         *ZZ*RECEIVER       *231106*1406*^*00501*000000001*0*T*>~GS*HS*SENDERGS*RECEIVERGS*20231106*140631*000000001*X*005010X279A1~ST*270*1234*005010X279A1~BHT*0022*13*10001234*20240321*1319~HL*1**20*1~NM1*PR*2*ABCDE*****PI*11122~HL*2*1*21*1~NM1*1P*2*ACME HEALTH SERVICES*****SV*1999999984~HL*3*2*22*0~TRN*1*11122-12345*1234567890~NM1*IL*1*JANE*DOE****MI*123456789~DMG*D8*19000101~DTP*291*D8*20240108~EQ*MH~SE*13*1234~GE*1*000000001~IEA*1*000000001~]]></Payload>
  </cor:COREEnvelopeRealTimeRequest>
</soapenv:Body>
```

`Body` must include the following elements:

{/* prettier-ignore-start */}

| Element           | Required | Description                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PayloadType`     | Yes      | The type of transaction. Must be set to `X12_270_Request_005010X279A1`.                                                                                                                                                                                                                                                                                                                   |
| `ProcessingMode`  | Yes      | The processing mode. Must be set to `RealTime`.                                                                                                                                                                                                                                                                                                                                           |
| `PayloadID`       | Yes      | A unique identifier for the request. Must be a valid UUID.                                                                                                                                                                                                                                                                                                                                |
| `TimeStamp`       | Yes      | UTC time in ISO 8601 format, such as `2024-07-28T12:00:00Z`.                                                                                                                                                                                                                                                                                                                              |
| `SenderID`        | Yes      | An identifier for the transaction sender.<ul><li>Can be up to 50 characters.</li><li>Set this to the value you plan to use in the eligibility check's `ISA06` (Interchange Sender ID) element.</li></ul>                                                                                                                                                                                  |
| `ReceiverID`      | Yes      | An identifier for the transaction receiver. <ul><li>Can be up to 50 characters.</li><li> Set this to the value you plan to use in the eligibility check's `ISA08` (Interchange Receiver ID) element.</li></ul>                                                                                                                                                                            |
| `CORERuleVersion` | Yes      | The CAQH CORE rule version. Must be set to `2.2.0`.                                                                                                                                                                                                                                                                                                                                       |
| `Payload`         | Yes      | The X12 EDI 270 eligibility check wrapped in `<![CDATA[ ... ]]>`.<ul><li>Must conform to [270 X12 EDI format](https://portal.stedi.com/app/guides/view/hipaa/health-care-eligibility-benefit-inquiry-x279a1/01GRYB6GTDJ4MEP5Z16CGMQWT6).</li><li>We recommend reviewing the requirements for a [basic eligibility request](/healthcare/send-eligibility-checks#body---x12-edi).</li></ul> |

{/* prettier-ignore-end */}

## Response

The HTTP response must include the following additional headers:

| Header                        | Description                                                                                                                                                                                                     | Example                                   |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| `stedi-id`                    | A Stedi-assigned unique identifier for the eligibility check, formatted as `ec_<UUID>`. You can use this ID to track the eligibility check and deep link to its results in the Stedi portal.                    | `ec_f81d4fae-7dec-11d0-a765-00a0c91e6b12` |
| `stedi-eligibility-search-id` | A Stedi-assigned identifier that allows Stedi to group eligibility checks for the same patient into a unified record in the Stedi portal called an [eligibility search](/healthcare/eligibility-searches-view). | `01997873-bebb-7b33-81ef-f408866dfb2cb`   |

The response body is a SOAP message, and its structure is similar to the request. The `Payload` element typically contains the payer's X12 EDI 271 response. However, if you send a request that fails X12 EDI validation, it will contain a 999 Implementation Acknowledgment indicating the errors.

```xml
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"
               xmlns:cor="http://www.caqh.org/SOAP/WSDL/CORERule2.2.0.xsd">
  <soapenv:Header/>
  <soapenv:Body>
    <cor:COREEnvelopeRealTimeResponse>
      <PayloadType>X12_271_Response_005010X279A1</PayloadType>
      <ProcessingMode>RealTime</ProcessingMode>
      <PayloadID>f81d4fae-7dec-11d0-a765-00a0c91e6b12</PayloadID>
      <TimeStamp>2025-08-06T22:23:50Z</TimeStamp>
      <SenderID>RECEIVER_ID</SenderID>
      <ReceiverID>STEDI</ReceiverID>
      <CORERuleVersion>2.2.0</CORERuleVersion>
      <Payload><![CDATA[ISA*00*          *00*          *ZZ*STEDI          *01*117151744      *111111*1234*^*00501*123456782*0*P*>~GS*HB*STEDI*117151744*20240326*111000*1*X*005010X279A1~ST*271*1001*005010X279A1~BHT*0022*11*01J2VZA127GH93JT74HJU*20240326*1514~HL*1**20*1~NM1*PR*2*ABCDE*****FI*111000123~PER*IC**TE*123456789*UR*website.company.com~HL*2*1*21*1~NM1*1P*2*ACME HEALTH SERVICES*****XX*1999999984~HL*3*2*22*0~NM1*IL*1*DOE*JANE*A***MI*123456789~REF*6P*123456789*ABCDE~REF*Q4*123456789~N3*1234 FIRST ST~N4*NEW YORK*WV*123451111~DMG*D8*19000101*F~INS*Y*18*001*25~DTP*356*D8*20220102~DTP*346*D8*20240101~DTP*347*D8*20241231~EB*1**30**Open Access Plus~MSG*Complete Care Management~EB*G*FAM*30***23*6000.00*****Y~MSG*Includes services provided by Client Specific Network~MSG*Coinsurance does apply to member's out-of-pocket maximum~MSG*Copay does apply to member's out-of-pocket maximum~MSG*Deductible does apply to member's out-of-pocket maximum~EB*C*FAM*30***23*500.00*****Y~MSG*Includes services provided by Client Specific Network~EB*G*IND*30***23*3000.00*****Y~MSG*Includes services provided by Client Specific Network~MSG*Copay does apply to member's out-of-pocket maximum~MSG*Coinsurance does apply to member's out-of-pocket maximum~MSG*Deductible does apply to member's out-of-pocket maximum~EB*C*IND*30***23*250.00*****Y~MSG*Includes services provided by Client Specific Network~EB*C*FAM*30***23*15000.00*****N~EB*G*FAM*30***23*30000.00*****N~MSG*Coinsurance does apply to member's out-of-pocket maximum~MSG*Deductible does apply to member's out-of-pocket maximum~EB*A*IND*30*****.10****Y~EB*C*IND*30***23*7500.00*****N~EB*G*IND*30***23*15000.00*****N~MSG*Deductible does apply to member's out-of-pocket maximum~MSG*Coinsurance does apply to member's out-of-pocket maximum~EB*A*IND*30*****.50****N~EB*1**A7^BC^A8^A4^A5^A6^7^4^BB^22*********W~EB*C*IND*BC^A4^A6^4^22****0.00****N*Y~MSG*Includes services provided by Client Specific Network~III*ZZ*22~EB*C*IND*A8****0.00****N*Y~MSG*Includes services provided by Client Specific Network~EB*C*IND*A4^A6^4^22****0.00****N*Y~MSG*Includes services provided by Client Specific Network~III*ZZ*11~EB*C*IND*A4^A6^22****0.00****N*Y~MSG*Includes services provided by Client Specific Network~III*ZZ*02~EB*B*IND*A4^A6^22***27*20.00****N*Y~III*ZZ*11~EB*A*IND*A4^A6^4^22*****.00***N*Y~III*ZZ*11~EB*B*IND*A4^A6^22***27*20.00****N*Y~MSG*Included For Specific Services~III*ZZ*02~EB*A*IND*A4^A6^22*****.00***N*Y~MSG*Included For Specific Services~III*ZZ*02~EB*A*IND*A4^A6^22*****.00***N*Y~MSG*Services rendered thru Client Specific Network~III*ZZ*02~EB*A*IND*A4^A6^4^22*****.00***N*Y~MSG*Services rendered thru Client Specific Network~III*ZZ*11~EB*B*IND*A4^A6^22***27*20.00****N*Y~MSG*Services rendered thru Client Specific Network~III*ZZ*02~EB*B*IND*A4^A6^22***27*20.00****N*Y~MSG*Services rendered thru Client Specific Network~III*ZZ*11~EB*A*IND*7*****.00***Y*Y~MSG*Services rendered thru Client Specific Network~III*ZZ*11~EB*CB**7^BB********Y*Y~EB*C*IND*7****0.00****Y*Y~MSG*Includes services provided by Client Specific Network~III*ZZ*11~EB*A*IND*7*****.00***Y*Y~III*ZZ*11~EB*A*IND*4*****.00***N*Y~III*ZZ*22~EB*A*IND*4*****.00***N*Y~MSG*Services rendered thru Client Specific Network~III*ZZ*22~EB*C*IND*BB****0.00****Y*Y~MSG*Includes services provided by Client Specific Network~EB*1**MH~MSG* Provider is out of network based on NPI ID provided in request.~EB*G*FAM*30***29*5760.00*****Y~MSG*Includes services provided by Client Specific Network~MSG*Coinsurance does apply to member's out-of-pocket maximum~MSG*Copay does apply to member's out-of-pocket maximum~MSG*Deductible does apply to member's out-of-pocket maximum~EB*C*FAM*30***29*500.00*****Y~MSG*Includes services provided by Client Specific Network~EB*G*IND*30***29*2760.00*****Y~MSG*Includes services provided by Client Specific Network~MSG*Copay does apply to member's out-of-pocket maximum~MSG*Coinsurance does apply to member's out-of-pocket maximum~MSG*Deductible does apply to member's out-of-pocket maximum~EB*C*IND*30***29*250.00*****Y~MSG*Includes services provided by Client Specific Network~EB*C*FAM*30***29*15000.00*****N~EB*G*FAM*30***29*30000.00*****N~MSG*Coinsurance does apply to member's out-of-pocket maximum~MSG*Deductible does apply to member's out-of-pocket maximum~EB*C*IND*30***29*7500.00*****N~EB*G*IND*30***29*15000.00*****N~MSG*Deductible does apply to member's out-of-pocket maximum~MSG*Coinsurance does apply to member's out-of-pocket maximum~SE*119*1001~GE*1*1~IEA*1*123456782~]]></Payload>
      <ErrorCode>Success</ErrorCode>
      <ErrorMessage></ErrorMessage>
    </cor:COREEnvelopeRealTimeResponse>
  </soapenv:Body>
</soapenv:Envelope>
```

The response body includes the following elements:

{/* prettier-ignore-start */}

| Element           | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `PayloadType`     | The type of the payload returned in the response.<ul><li>`X12_271_Response_005010X279A1` for requests that pass X12 EDI validation. A 271 can contain benefits information for the patient or [`AAA` errors](/healthcare/eligibility-troubleshooting#payer-aaa-errors).</li><li>`X12_999_Response_005010X231A1` for requests that fail [X12 EDI validation](/healthcare/eligibility-troubleshooting#x12-edi-validation-errors).</li><li>`CoreEnvelopeError` when there's a [Core-compliant error](/healthcare/eligibility-troubleshooting#core-compliant-errors) or Stedi couldn't parse the X12 EDI envelope.</li></ul> |
| `ProcessingMode`  | The processing mode used for the request. This is always `RealTime`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `PayloadID`       | A unique identifier Stedi generated for the transaction. This won't be the same value you submitted as the `PayloadID` in the request.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `TimeStamp`       | The timestamp when the response was generated in ISO 8601 format.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `SenderID`        | The ID of the sender of the response. This is always the same as the `ReceiverID` in the request.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `ReceiverID`      | The ID of the receiver of the response. This is always the same as the `SenderID` in the request.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `CORERuleVersion` | The CAQH CORE rule version. This is always `2.2.0`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `Payload`         | The X12 EDI response.<ul><li>271 Eligibility Benefit Response for requests that pass X12 EDI validation. A 271 can contain benefits information for the patient or [`AAA` errors](/healthcare/eligibility-troubleshooting#payer-aaa-errors).</li><li>999 Implementation Acknowledgment when the request fails [X12 EDI validation](/healthcare/eligibility-troubleshooting#x12-edi-validation-errors).</li><li>Empty when the request fails due to a [CORE-compliant error](/healthcare/eligibility-troubleshooting#core-compliant-errors) or because Stedi couldn't parse the X12 EDI envelope.</li></ul>               |
| `ErrorCode`       | The error code, if any, associated with the response. These errors typically indicate issues with the request body, such as missing or invalid elements. They can also indicate authentication issues and other processing errors. [Learn more](/healthcare/eligibility-troubleshooting#core-compliant-errors).                                                                                                                                                                                                                                                                                                          |
| `ErrorMessage`    | A description of the error, if any.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `Fault`           | Only included when there is a [SOAP fault](/healthcare/eligibility-troubleshooting#soap-faults). It includes a `Code` and `Reason` element that describe the error.                                                                                                                                                                                                                                                                                                                                                                                                                                                      |

{/* prettier-ignore-end */}

## HTTP status codes

Most errors return SOAP, but some return JSON containing the HTTP status code and a brief message describing the error.

{/* prettier-ignore-start */}

| Status Code                 | Response | Description                                                                                                                                                                                                                                                                                                                                                                               |
| --------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `200 OK`                    | SOAP     | Indicates a successful request. Note that Stedi returns a `200` even when the payer returns [`AAA` errors](/healthcare/eligibility-troubleshooting#payer-aaa-errors) in the 271 response.                                                                                                                                                                                                 |
| `400 Bad Request`           | SOAP     | Indicates a [SOAP fault](/healthcare/eligibility-troubleshooting#soap-faults), an error with the [SOAP request body](/healthcare/eligibility-troubleshooting#core-compliant-errors), or an [X12 EDI validation error](/healthcare/eligibility-troubleshooting#x12-edi-validation-errors).                                                                                                 |
| `401 Unauthorized`          | SOAP     | Indicates issues with the Stedi account ID or API key you provided. [Example](/healthcare/eligibility-troubleshooting#authentication-errors)                                                                                                                                                                                                                                              |
| `404 Not Found`             | JSON     | Indicates that the specified endpoint doesn't exist. Verify that you are using the correct URL for this endpoint: `https://healthcare.us.stedi.com/2025-06-01/protocols/caqh-core`.                                                                                                                                                                                                       |
| `429 Too Many Requests`     | SOAP     | Indicates that you have exceeded your [concurrency limit](/healthcare/api-reference#concurrency-limits) for this endpoint. The X12 response will contain an `AAA` error with code `42`. Stedi will continue rejecting additional requests with a `429` status code until one of your previous requests is completed. [Example](/healthcare/eligibility-troubleshooting#too-many-requests) |
| `500 Internal Server Error` | JSON     | Indicates an unexpected error on Stedi's side. If you encounter this error, please contact [Stedi Support](https://stedi.com/support) for assistance.                                                                                                                                                                                                                                     |

{/* prettier-ignore-end */}