Provider: check coverage eligibility
Provider asks the payer, via NHCX, whether a beneficiary's policy is in force, what it covers and which documents a preauth will need.
Business purpose
Coverage eligibility is the pre-check a hospital desk runs before committing a patient to a cashless pathway. It confirms three things the desk needs: that the policy is active, what benefits and wallet balance are available, and whether a specific procedure needs authorisation at all. A rejection that would otherwise surface days later at preauth or claim adjudication surfaces in seconds while the patient is still at the counter, which benefits the hospital (less rework), the payer (fewer malformed preauths) and the patient (earlier certainty).
When to use
- Call it at registration or admission, before you submit a pre-authorisation on
/v1/preauth/submit. - Set
purposeto say what you want back. It takes one or more values: discoveryfinds the beneficiary's policies. Use it only when/participant/get/policiesgives no policy code.validationsays whether the policy is in force, with the used amount, available balance and wallet liability.benefitssays whether a package is covered for this beneficiary.auth-requirementssays whether a chosen procedure is covered at this hospital, and returns the STG questionnaires andMANDdocument codes the pre-authorisation must carry.- Send
x-hcx-statusrequest.initiated. - No workflow code is specific to eligibility. The sample exchange uses
x-hcx-workflow_ID11(PATIENT_ADMITTED). - Under PMJAY, run an
auth-requirementscheck even for an unspecified procedure.
Preconditions
- You have a valid access token and the payer's certificate.
x-hcx-recipient_codeis the processing ID from the policy lookup, not the payer ID.x-hcx-correlation_IDis a new UUID for this check.- The bundle names the patient, the coverage, the hospital and the insurer, encrypted for the payer.
Postconditions
- NHCX answers
202at once. That only means the message was accepted. - The payer's answer arrives later on
/v1/coverageeligibility/on_check.
Common mistakes
- Treating the
202as the eligibility answer. - Using the payer ID as the recipient code instead of the processing ID.
- Reusing a correlation ID from an earlier check.
- Sending a status other than
request.initiated.
Best practices
- Persist the correlation ID against the patient episode before posting; it is the only key for matching the callback.
- Refresh the token automatically before the 1200-second expiry and treat a 401 as refresh-and-retry-once.
- Run discovery first only when get/policies gives no policy code, then validation, then auth-requirements for the chosen package; store the returned MAND codes and STG questionnaire references and attach them to the preauth.
- "Match response items to your request by
productOrServicecode: the payer answers in the package codes you sent, for exampleMG004A, as NHA's published PMJAY bundles show. The numbers in the handbook's response table (100005, 100478, 100063, 100012) are not item codes; in the published bundles they are questionnaire, document-requirement and question identifiers." - Use IST timestamps with the +05:30 offset in the protected header.
- Log the 202 body (protocol_status, API_call_ID) so a missing callback can be traced with /v1/status.
Related scenario
A patient arrives at a district hospital with a PMJAY card. The desk calls /participant/get/policies and receives a processingID for the state health agency. Because the treating doctor wants a corneal grafting package, the desk builds a CoverageEligibilityRequest with purpose validation and auth-requirements, encrypts it for the payer and posts it to /v1/coverageeligibility/check, receiving a 202 with protocol_status request.queued. Minutes later the payer's answer lands on /v1/coverageeligibility/on_check with inforce true, authorizationRequired true and MAND0409 and MAND0104 listed as supporting documents. The desk collects those documents and proceeds to /v1/preauth/submit under workflow 12.
Specification
Chapter Coverage eligibility request of the NHCX integration specification. Every NHCX call carries the access token from the session call in a header named Example These fields go in the JWE protected header of Key management algorithm. Always Example Content encryption algorithm. Always Example Your participant code. Mandatory on the envelope. Example The recipient's. For a provider, the processor code from the policy lookup. Mandatory on the envelope. Example Fresh on every message, including responses. Mandatory on the envelope. Example One per originating request. The Open Protocol page marks it Mandatory; the Technical Specifications page marks it Optional. Optional on the envelope. Send it anyway, as a fresh UUID per originating request: it is cheap and satisfies both readings until NHA rules. Example The thread that ties a request to its answers. The correlation ID rule says when to reuse it. Mandatory on the envelope. Example Which step, or which case. The workflow code explains both readings. Optional on the envelope. Example The time the message was made. Timestamp gives the format. Mandatory on the envelope. Example Where this message stands. Status words lists the values. Mandatory on the envelope. Example The beneficiary's ABHA number. Optional: send it when the beneficiary has an ABHA number. Optional on the envelope. Example NHCX replies synchronously with HTTP 202 Accepted and a StatusSuccessResponse acknowledgement (timestamp, api_call_id, correlation_id, result with sender_code, recipient_code, entity_type coverageeligibility and protocol_status such as request.queued or request.dispatched, plus an empty error object).Authorizations
bearer_authapiKeyRequiredbearer_auth, as the word Bearer, a space and the token. NHCX reads bearer_auth, not Authorization.Bearer <access token>Protected header
payload, not as HTTP headers. Building and sending a JWE shows how to prepare and encrypt the payload, and Receiving a callback how to decrypt one.algstringRequiredRSA-OAEP-256: the content key is wrapped with the recipient's RSA public key.RSA-OAEP-256encstringRequiredA256GCM.A256GCMx-hcx-sender_codestringRequired<provider participant code>x-hcx-recipient_codestringRequired<payer participant code>x-hcx-api_call_idstringRequired<uuid>x-hcx-request_idstring<uuid>x-hcx-correlation_idstringRequired<uuid>x-hcx-workflow_idstring11x-hcx-timestampstringRequired<iso timestamp>x-hcx-statusstringRequiredrequest.initiatedx-hcx-ben-abha-idstring<14-digit ABHA number>Body
payloadstringResponses
202timestampstringapi_call_idstringcorrelation_idstringresultobjectresult.sender_codestringresult.recipient_codestringresult.entity_typestringresult.protocol_statusstringerrorobjecterror.codestringerror.messagestring
Callbacks
- NHCX delivers this call to the payer, on the payer's own
/v1/coverageeligibility/check, not back to you. Payer receives a coverage eligibility check. - The payer's answer comes back to you on
/v1/coverageeligibility/on_check, the callback you host.