Claims Lifecycle AI v2

Summary API Attachments FAQ CHANGE LOG   
awss
  

Overview

Using artificial intelligence, the Claims Lifecycle AI API proactively identifies claims at risk for denial.

Using professional claim information, this service returns a score indicating a claim’s likelihood for denial, lists the top three likely reasons for denial, and insights based on the denial category. Rejection criteria also display a probability score. When you finish editing a claim, you can submit it to the payer using our Professional Claims API.

The Claims Lifecycle AI API works with Professional Claims drafts and with the Legacy Change Healthcare Claims and ERAs in the Change Healthcare Payer List. It accepts Payer IDs that are listed within that clearinghouse. (See http://support.changehealthcare.com/customer-resources/payer-lists, and select Change Healthcare Payer List). Future updates to the Claims Lifecycle AI API will enable the API to be compatible with all clearinghouses in the Change Healthcare system.

API Onboarding

Most of our APIs are private and require credentials to gain access. Begin by obtaining your client_id and client_secret for our sandbox test environment. (Contact your Change Healthcare representative if you do not have this information.)

You can test the APIs from within our interactive documentation, use an application such as Postman, or use your own development platform. You use a separate Change Healthcare-issued secret pair for your production API work.

Add your Client Id and Client Secret values to the Security Authorization Access Token Body in the Claims Lifecycle AI collection.

Try our Postman Collection! Run in Postman

Links to Claims Lifecycle AI API topics

You'll find the following topics on this page:

Accessing the Claims Lifecycle AI APIs

How do I access the Production APIs?

What are the endpoints for getting authorization tokens?

What information needs to go in the API request header?

Using the Sandbox environment

Do you have a sandbox that I can test before signing a contract?

How do I access the Sandbox environment?

Sandbox predefined fields and values

Using the Claims Lifecycle AI APIs

How does this API improve chances of claim acceptance?

What does a typical Claims Lifecycle AI API request look like?

What does the typical Claims Lifecycle AI API response look like?

What can I expect the response to tell me?

Understanding the API features

What is the precision threshold?

What claims data does the model check to make predictions?

Can I use the Claims Lifecycle AI API to check my Professional Claims and Institutional Claims from the other APIs?

What types of claims does this API work with?

Can I submit claims in batch?

What is a tradingPartnerServiceId?

My PayerID doesn't work with the Claims Lifecycle API!

What does an OOV_VALUE error mean?

What are some typical denial reasons?

Accessing the Claims Lifecycle AI APIs

What are the endpoints for getting authorization tokens?

The Production endpoint URL for authorization tokens is as follows:

https://apis.changehealthcare.com/apip/auth/v2/token/

In Production APIs, the token lifetime is two hours (7200 seconds).

What authorization information needs to go in the request header?

The Claims Lifecycle AI API request header requires the authorization token. You can get the token by making an API call to:

curl -X POST \
  'https://sandbox.apis.changehealthcare.com/apip/auth/v2/token' \
  -H 'Content-Type: application/json' \
  -d '{
  "client_id": "<Your-ClientId>",
  "client_secret": "<Your-ClientSecret>",
  "grant_type": "client_credentials"
}'

Of course, you'll need your Change Healthcare Client ID, Client Secret and Credential to obtain the security token and access the APIs.

The Claims Lifecycle AI API request will have the following headers:

Content-Type: application/json
Authorization: Bearer <Your-Access-Token>

Find out more about our security protocols in the Security -> Authorization section of this portal.

How do I access the Production APIs?

When you're ready for production, use the following URLs for Production:

https://apis.changehealthcare.com/medicalnetwork/v2/prediction

Use the Submission endpoint to submit the actual transaction to the payer.

https://apis.changehealthcare.com/medicalnetwork/v2/validation

We recommend using the Validation endpoint to check and validate your upcoming submission. Your transaction will not be sent to the payer. Unlike the Claims Lifecycle AI API, the validation API does not examine the actual contents of your claim. It checks for the correct well-formed syntax and format of the submission and some basic sanity checking for values such as the NPI.

Both APIs use the same request model.

Using the Sandbox environment

Do you have a sandbox that I can test before signing a contract?

We do! You can use our Sandbox environment even before signing a contract. It requires a separate set of secure credentials which you can obtain from your Change Healthcare representative. After receiving your client_id and client_secret for our Sandbox environment, you can test the API in our interactive documentation, use an application such as Postman, or test APIs using your own development console.

Try our Postman Collection! Run in Postman

How do I access the Sandbox environment?

The Sandbox endpoint URL for authorization tokens is as follows:

https://sandbox.apis.changehealthcare.com/apip/auth/v2/token/

Authorization tokens have a lifespan of 3600 seconds (1 hour) in the Sandbox environment.

The Sandbox URLs for this API set are as follows:

https://sandbox.apis.changehealthcare.com/medicalnetwork/v2/prediction

https://sandbox.apis.changehealthcare.com/medicalnetwork/v2/validation

Sandbox predefined fields and values

For APIs used in the Change Healthcare Sandbox environment, the following data fields must use predefined values as listed below. These values only apply to Sandbox usage:

Field Values
memberId "0000000000", "0000000001", "0000000002", "1234567890", "0000000004", "0000000005", "0000000006","0000000007", "123456789"
firstName "johnone", "johntwo", "janeone", "janetwo"
lastName "doeone", "doetwo"
middleName "middleone", "middletwo"
gender "m", "u", "f"
dateOfBirth "18800102", "18800101", "18160421", "19800101", "19800102", "20000101", "20000102"
ssn "000000000", "555443333", "1111111111", "000000001", "891234567", "123456789"
groupNumber "0000000000", "1111111111","1234567891","0000000001", "0000000002", "0000000003", "0000000004", "0000000005"
address1 "123 address1", "000 address1"
address2 "apt 123", "apt 000", "123", "000"
city "city1", "city2"
state "wa", "tn"
postalCode "981010000", "372030000"
employerId "00000", "12345","00001","00002","000000000", "123456789","123456"
propertyCasualtyClaimNumber "00000", "12345","00001","00002"
patientControlNumber "00000", "12345","00001","00002"
priorAuthorizationNumber "00000", "12345","00001","00002"
referralNumber "00000", "12345","00001","00002"
repricedClaimNumber "00000", "12345","00001","00002"
investigationalDeviceExemptionNumber "00000", "12345","00001","00002"
claimNumber "00000", "12345","00001","00002"
name "johnone doeone", "johntwo doetwo", "janeone doeone", "janetwo doetwo", "submitter contact info"
phoneNumber "0000000000", "123456789", "0000000001", "0000000002"
faxNumber "0000000000", "123456789", "0000000001", "0000000002"
email "email@email.com", "email@email.net"
stateLicenseNumber "0000000", "0000001", "123456"
contractVersionIdentifier "111111", "222222", "123456"
patientControlNumber "00000", "12345","00001","00002"
priorAuthorizationNumber "00000", "12345","00001","00002"
referralNumber "00000", "12345","00001","00002"
claimControlNumber "00000", "12345","00001","00002"
cliaNumber "12D4567890", "00D0000001"
repricedClaimNumber "00000", "12345","00001","00002"
mammographyCertificationNumber "00000", "12345","00001","00002"
medicalRecordNumber "00000", "12345","00001","00002"
demoProjectIdentifier "00000", "12345","00001","00002"
carePlanOversightNumber "00000", "12345","00001","00002"
policyNumber "00000", "12345","00001","00002"
npi "1760854442", "1942788757"
organizationName "happy doctors group", "happy doctors grouppractice","extra healthy insurance", "regional ppo network"

Using the Claims Lifecycle AI APIs

How does this API improve chances of claim acceptance?

We design the Claims Lifecycle AI API to effectively predict denials at the pre-adjudication phase and to work in conjunction with existing edits. It goes beyond what the conventional Validation endpoint does, which is essentially a syntax and format checker. It provides line-by-line analysis of what is likely to be approved and what is NOT likely to be approved, and points out mistakes if values are entered incorrectly.

What does a typical Claims Lifecycle AI API call look like?

This API uses a POST HTTPS call. You provide the input as JSON in the body of the request. The request consists of a professional claim.

Submit an HTTPS POST request to the below URL:

POST /ai/claims-lifecycle/medical-network/v2/prediction
Host: sandbox.apis.changehealthcare.com
Authorization: Bearer <Your-Access-Token>
Content-Type: application/json
{
  "precisionThreshold": 0.85, 
  "controlNumber": "000000001",
  "tradingPartnerServiceId": "60054",
  "submitter": {
    "organizationName": "REGIONAL PPO NETWORK",
    "contactInformation": {
      "name": "SUBMITTER CONTACT INFO",
      "phoneNumber": "123456789"
    }
  },
  "receiver": {
    "organizationName": "EXTRA HEALTHY INSURANCE"
  },
  "subscriber": {
    "memberId": "0000000001",
    "paymentResponsibilityLevelCode": "P",
    "firstName": "johnone",
    "lastName": "doeOne",
    "gender": "M",
    "dateOfBirth": "19800102",
    "policyNumber": "00001",
    "address": {
      "address1": "123 address1",
      "city": "city1",
      "state": "wa",
      "postalCode": "981010000"
    }
  },
  "dependent": {
    "memberId": "0000000002",
    "paymentResponsibilityLevelCode": "P",
    "firstName": "janeone",
    "lastName": "doeOne",
    "gender": "F",
    "dateOfBirth": "19800102",
    "policyNumber": "00002",
    "relationshipToSubscriberCode": "01",
    "address": {
      "address1": "123 address1",
      "city": "city1",
      "state": "wa",
      "postalCode": "981010000"
    }
  },

  "providers": [{
    "providerType": "BillingProvider",
    "npi": "1760854442",
    "employerId": "123456789",
    "organizationName": "HAPPY DOCTORS GROUPPRACTICE",
    "address": {
      "address1": "000 address1",
      "city": "city2",
      "state": "tn",
      "postalCode": "372030000"
    },
    "contactInformation": {
      "name": "janetwo doetwo",
      "phoneNumber": "0000000001"
    }
  },{
    "providerType": "ReferringProvider",
    "npi": "1942788757",
    "firstName": "johntwo",
    "lastName": "doetwo",
    "employerId" : "123456"
  },{
    "providerType": "RenderingProvider",
    "npi": "1942788757",
    "firstName": "janetwo",
    "lastName": "doetwo",
    "middleName": "middletwo",
    "ssn" : "000000000"
  }],
  "claimInformation": {
    "claimFilingCode": "CI",
    "patientControlNumber": "12345",
    "claimChargeAmount": "28.75",
    "placeOfServiceCode": "11",
    "claimFrequencyCode": "1",
    "signatureIndicator": "Y",
    "planParticipationCode": "A",
    "benefitsAssignmentCertificationIndicator": "Y",
    "releaseInformationCode": "Y",
    "claimSupplementalInformation": {
      "repricedClaimNumber": "00001",
      "claimNumber": "12345"
    },
    "healthCareCodeInformation": [{
      "diagnosisTypeCode": "BK",
      "diagnosisCode": "496"
    },{
      "diagnosisTypeCode": "BF",
      "diagnosisCode": "25000"
    }],
    "serviceFacilityLocation": {
      "organizationName": "HAPPY DOCTORS GROUP",
      "address": {
        "address1": "000 address1",
        "city": "city2",
        "state": "tn",
        "postalCode": "372030000"
      }
      },
    "serviceLines":[ {
      "serviceDate": "20050514",
      "professionalService": {
        "procedureIdentifier": "HC",
        "lineItemChargeAmount": "25",
        "procedureCode": "E0570",
        "measurementUnit": "UN",
        "serviceUnitCount": "1",
        "compositeDiagnosisCodePointers": {
          "diagnosisCodePointers": ["1","2"]
        }
      }
      },
      {
        "serviceDate": "20050514",
        "professionalService": {
          "procedureIdentifier": "HC",
          "lineItemChargeAmount": "3.75",
          "procedureCode": "A7003",
          "measurementUnit": "UN",
          "serviceUnitCount": "1",
          "compositeDiagnosisCodePointers": {
            "diagnosisCodePointers": ["1" ]
          }
        }
        }
    ]
  }
}

What does the typical Claims Lifecycle AI API response look like?

The response is an object containing the version of the API model that scored the claims in the request, with an array of claims and lines along with predictions. It contains advice about the subcategories of denials per line with suggested ERA response codes. Probabilities are numbers between 0 and 1 (from least likely to most likely).

{
    "requestId": "2ce32a10-79c3-11ea-a2b4-9d34940a98ff",
    "modelVersion": "0.14.7",
    "claims": [
        {
            "claimId": "000000001",
            "claimDenied": false,
            "drg": false,
            "lines": [
                {
                    "lineId": "1",
                    "lineDenied": false,     
                },            
                {
                    "lineId": "2",
                    "lineDenied": false,
                },
                {
                    "lineId": "3",
                    "lineDenied": false,
                },
                {
                    "lineId": "4",
                    "lineDenied": true,
                    "denialReasons": [
                        {
                            "reason": "Registration/Eligibility",
                            "probability": 0.644,
                            "eraCarcCodes": [
                                {
                                    "code": "CO97",
                                    "probability": 0.662
                                },
                                {
                                    "code": "OA94",
                                    "probability": 0.316
                                },
                                {
                                    "code": "PI97",
                                    "probability": 0.01
                                }
                            ]
                        },
                        {
                            "reason": "Payer Re-Coded Service Line",
                            "probability": 0.359,
                            "eraCarcCodes": []
                        },
                        {
                            "reason": "Service not covered",
                            "probability": 0.219,
                            "eraCarcCodes": [
                                {
                                    "code": "CO96",
                                    "probability": 0.612
                                },
                                {
                                    "code": "PI96",
                                    "probability": 0.251
                                },
                                {
                                    "code": "CO256",
                                    "probability": 0.12
                                }
                            ]
                        }
                    ]
                }
            }
        }
    ]
}

What is the response telling me?

Here is what you can expect to see in the response:

  • The API supplies predictions on two levels: the likelihood to deny at the claim level and at the line level in the claim.
  • It lists the top three reasons for denial, each with a confidence score. ("Confidence" is likelihood of denial.)
  • It lists the top three ERA CARC codes, each with a confidence score.

For example, consider the following snippet:

            "lines": [
                {
                    "lineId": "1",
                    "lineDenied": false,
                },
                {
                    "lineId": "2",
                    "lineDenied": false,
                },
                {
                    "lineId": "3",
                    "lineDenied": false,
                },
                {
                    "lineId": "4",
                    "lineDenied": true,
                    "denialReasons": [ ...

Each line of text in the claim gets examined by the API, and its status as a possible Accepted or Denied item appears. Above, line 1 ("lineId": "1") shows its "lineDenied" value as false meaning that this line item is likely to be approved by the payer. Conversely, line 4 ("lineId": "4") shows a "lineDenied" value as true, meaning that this line item for the claim is likely to be Denied by the payer.

To dig deeper into the same example:

                    "lineId": "4",
                    "lineDenied": true,
                    "denialReasons": [
                        {
                            "reason": "Registration/Eligibility",
                            "probability": 0.644,
                            "eraCarcCodes": [
                                {
                                    "code": "CO97",
                                    "probability": 0.662
                                },
                                {
                                    "code": "OA94",
                                    "probability": 0.316
                                },
                                {
                                    "code": "PI97",
                                    "probability": 0.01
                                }
                            ]
                        },

Whenever a line item gets a "lineDenied" value of true, the API gives the specific "reason" for the potential denial, the current likelihood for denial ("probability"), and an eraCarcCode that offers different updates you can make to the claim to improve the chances that the line item will be approved by the payer. The codes (such as "code": "CO97") are based specifically on the X12 EDI Claim Adjustment Reason Codes (CARC).

Understanding the API features

What is the precision threshold?

The precision threshold represents the tolerance for false positives. For example, a 95% precision threshold allows for 5% of false positive results. We define a false positive as reporting a scenario as TRUE when in fact, it’s not. The precision threshold is included in the request as a decimal. The system defaults to 0.95.

What claims data does the model check to make predictions?

These JSON attributes have the greatest impact on an accurate prediction if their data is missing or incorrect in the request:

  • Trading Partner Service ID (also known as Payer ID)
  • Claim Filing Code
  • Patient State
  • Facility Code
  • Claim Frequency Code
  • Benefits Assignment Certification Indicator
  • Procedure Code
  • Procedure Code Qualifier

These attributes may change based on future versions of the Claims Lifecycle AI. You can see examples of these values below in What does a typical Claims Lifecycle API call look like?.

Can I use the Claims Lifecycle AI API to check my Professional Claims and Institutional Claims from the other APIs?

For the current release, the Claims Lifecycle AI API uses a different payer list from the Change Healthcare Professional Claims and Institutional Claims APIs. Claims Lifecycle AI currently applies only to Payer entities in the Legacy Change Healthcare clearinghouse (see http://support.changehealthcare.com/customer-resources/payer-lists, and select Change Healthcare Payer List). Future updates to the Claims Lifecycle AI API will enable the API to be compatible with all clearinghouses in the Change Healthcare system.

Since medical organizations are often members of multiple clearinghouses, it is likely that your payer is verifiable through this API, so long as you use the value from the correct Payer List.

What type of claims does this API work with?

You can use the Claims Lifecycle AI API with Professional claims. You can develop your Professional claim and submit it to Claims Lifecycle AI API for analysis before submitting the claim through the Professional Claims API. Bear in mind that since Claims Lifecycle AI API uses a different payer list from other Medical Network APIs, you will need to ensure that the Professional claim uses the correct 5-digit PayerID value for the tradingPartnerServiceID value in the claim.

Can I submit claims in batch?

The rule is always one claim per request. You can submit multiple claims in a batch, but each must be in their own API request. You can't forward multiple claims in a single request to the Claims Lifecycle AI cloud service. Use a utility such as Cron to automate the sequential submission of a number of claims.

What are the typical claim denial reasons?

The Claims Lifecycle AI API gives the user real-world advice on how to avoid rejected claims. The denial reason may apply to either a professional claim or an institutional claim. Some of the reasons given are simple goofs that should be easily remedied before a submission, such as making sure that medical documentation is provided with the claim.

  • Authorization / Pre-Certification - Required Authorization or Pre-Certification was not obtained, or was not correctly listed on claim. The provider does not have a current authorization to submit claims to the payer.
  • Avoidable Care - Service provided due to quality lapse of initial treatment.
  • Duplicate Claim/Service - The claim was previously filed, or the same service was listed more than once on the claim.
  • Medical Coding - Issue with CPT, ICD, DRG or modifier code(s).
  • Medical Documentation Requested - The payer is requesting medical documentation to support the claim.
  • Medical Necessity - The payer states that the procedure, service, or level of care was not medically necessary. Payer may observe that an alternative treatment exists for the conditions described in the claim, which provides the same efficacy as the claim's described treatment, typically at a reduced cost to the payer or to the subscriber.
  • Missing or Invalid Claim Data - Required claim data is not present, invalid, or there is an inconsistency in dates or claim submitted for partial service.
  • Provider eligibility - The provider is not credentialed or eligible to perform the type of service, at the type of location or treat the type of condition.
  • Registration/Eligibility - There was an error in the patient’s registration information or the patient was not eligible for the payer or service.
  • Service not covered - The payer has determined that treatment for the condition is not covered due to pre-existing condition, or the timing or location of the service is determined to not be covered.
  • Untimely Filing - The claim was not submitted within the required time limit.
  • Other - Adjustment types that do not fit into one of the categories above.
  • Unknown - Unknown or invalid adjustments codes.

What is a tradingPartnerServiceId?

This value is also known as the payer ID. For the Claims Lifecycle AI API, this will always be an alphanumeric five-digit value such as "aetna", or "87226" for United Healthcare, for example.

My PayerID doesn't work with the Claims Lifecycle API!

The Claims Lifecycle AI API uses a different Payer List than most of the other Medical Network APIs.

You can reference the Change Healthcare Payer List for a list of values. Note that this value currently applies only to Payer entities in the Legacy Change Healthcare clearinghouse (see http://support.changehealthcare.com/customer-resources/payer-lists, and select Change Healthcare Payer List).

Note: the Claims Lifecycle AI API is not compatible with the Payer ID values listed in the Revenue Performance Advisor or ConnectCenter Payer List clearinghouses. The Claims Lifecycle AI API is currently modeled after the Legacy Change Healthcare Claims and ERAs in the Change Healthcare Payer List. It accepts Payer IDs that are listed within that clearinghouse.

Support for Change Healthcare's other clearinghouses is forthcoming in a future release.

You can apply those Payer ID values as the tradingPartnerServiceID value.

What does an OOV_VALUE error mean?

You are encountering this message because the AI model does not recognize the tradingPartnerServiceId, or payer ID. It's possible that the Payer ID isn't part of the Change Healthcare payer list, or there may be a missing or extra digit or an incorrect digit in the Payer ID that's been submitted. Here is an example:

{
    "requestId": "47e45430-197b-11eb-9556-7dd84cdaa761",
    "modelVersion": "0.14.7",
    "claims": [
        {
            "claimId": "000000001",
            "errors": [
                {
                    "code": "OOV_VALUE",
                    "detail": "payerId"
                }
            ]
        }
    ]
}

You'll receive this error whenever you have an incorrect Payer ID/tradingPartnerServiceId.

It may also indicate that the Claims Lifecycle AI model is not trained on that Payer ID, and does not support the specified medical service for that payer ID. The API does not maintain a historical list of Payer IDs and thus occasionally may not recognize a specific Payer ID.

Change Log

API Name API Version Date Introduced Available Until
Claims Lifecycle AI v2 11/01/19 TBD

Release Notes:

v2

  • Initial offering of the Claims Lifecycle AI API.
  • New Claims Lifecycle AI API Validation endpoint.
  • Supports the Change Healthcare Payer List. See the Summary and FAQ tabs for details.
  • Sandbox updates to support this API.
  • This service/endpoint version supports claim denial predictions for Professional claims.