> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.usebridge.com/documentation/getting-started/eligibility-sdk/hard-check/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.usebridge.com/_mcp/server. *Refer to the [Hard Eligibility](/documentation/eligibility/hard-eligibility) page for a detailed explanation of what's happening during this process.* Running a successful eligibility request for a new patient is the most complex integration touch point. Bridge manages the lifecycle of the hard eligibility check and implements best-practice recommendations around failures, retries, and conversion optimization. For advanced use cases ([optimistic soft check](./advanced/optimistic-soft-check), [multiple provider types](./advanced/multiple-provider-types), [conditional patient responsibility](./advanced/conditional-patient-responsibility)), see *Advanced*. > **Note** > > See [Existing Patients](./existing-patients) for patients who already have a > Policy, scheduling follow-up visits ## Result ```typescript interface HardEligibilitySessionState { status: HardEligibilitySessionStatus; args?: HardEligibilitySubmissionArgs; nextAction?: HardEligibilitySessionAction; error?: HardEligibilityError; policy?: Policy; serviceEligibility?: Record; patientResponsibility?: HardEligibilityPatientResponsibility; providers?: Provider[]; ineligibilityReason?: IneligibilityReason; } ``` | Status | Description/Action | | --------------------------------- | ------------------------------------------------------------------------------------------- | | `PENDING` | Initial form input, nothing has been submitted | | `SERVER_ERROR` | Unknown server error, may be retried | | `TIMEOUT` | Payer took too long to respond with the Policy, may be retried | | `WAITING_FOR_POLICY` | First step of the flow, resolving the Policy, is in progress | | `POLICY_ERROR` | Policy was unable to be resolved, there's an error reason included | | `WAITING_FOR_SERVICE_ELIGIBILITY` | Policy was resolved, second step is in progress | | `INELIGIBLE` | Either the patient's Policy does not cover this service, or there are no providers eligible | | `ELIGIBLE` | The patient's Policy covers this, *and* there are Provider's available | ```mermaid flowchart LR PENDING --> WAITING_FOR_POLICY WAITING_FOR_POLICY --> WAITING_FOR_SERVICE_ELIGIBILITY & POLICY_ERROR & SERVER_ERROR & TIMEOUT POLICY_ERROR --> WAITING_FOR_POLICY SERVER_ERROR --> WAITING_FOR_POLICY TIMEOUT --> WAITING_FOR_POLICY WAITING_FOR_SERVICE_ELIGIBILITY --> ELIGIBLE & INELIGIBLE & SERVER_ERROR ``` When the session is in an error state, expect `error` to be defined: ```typescript interface HardEligibilityError { code: HardEligibilityErrorCode; message: string; retryable: boolean; forceMemberId?: boolean; } ``` Display `message` to the patient. When you reach `INELIGIBLE` or `ELIGIBLE`, redirect the patient to the next step. --- #### [React](./react/hard-check) Session, form, and submit hooks #### [TypeScript](./typescript/hard-check) Single-call hard eligibility