> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.usebridge.com/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 Check](../hard-check) guide for result statuses, error handling, and lifecycle.

See the [Demo Project](https://github.com/use-bridge/sdk-typescript/blob/main/examples/react-demo/src/app/hard-eligibility/page.tsx) for a working example.

For advanced use cases, see [Advanced](../advanced/optimistic-soft-check).

> **Note**
>
> See [Existing Patients](../existing-patients) for patients who already have a
> Policy

### Create a Session

Obtain `createHardEligibilitySession` through `useBridgeSdk`.
On first load, create a session and pass it into `HardEligibilityProvider`.

```typescript
export const SessionContainer = ({ children }) => {
  const { createHardEligibilitySession } = useBridgeSdk();
  const session = useMemo(() => {
    return createHardEligibilitySession({ serviceTypeIds: ["svt_xxx"] });
  }, [createHardEligibilitySession]);

  return (
    <HardEligibilityProvider session={session}>
      {children}
    </HardEligibilityProvider>
  );
};
```

### Form Input

All [Eligibility Fields](../eligibility-fields) may be required depending on the session.
Implement each field with `useEligibilityInputField`. See [Building Forms](./building-forms).

Drive your submit button with `useHardEligibilitySubmit`.

```typescript
export const HardEligibilityForm = () => {
  const firstName = useEligibilityInputField("firstName");
  const lastName = useEligibilityInputField("lastName");
  const dateOfBirth = useEligibilityInputField("dateOfBirth");
  const state = useEligibilityInputField("state");
  const { isDisabled, submit } = useHardEligibilitySubmit();

  return (
    <div>
      {/* Render fields, payer autocomplete, optional memberId */}
      <button disabled={isDisabled} onClick={() => submit()}>
        Submit
      </button>
    </div>
  );
};
```

### Handling the result

Use `useHardEligibilityState` to monitor progress and outcome.
Bridge re-enables the form and updates Member ID requirements based on the response.

When you reach `INELIGIBLE` or `ELIGIBLE`, redirect the patient to the next step.

If eligible, the patient responsibility estimate is at `patientResponsibility.estimate`.
Use `providers` to filter your scheduling UX.

If `INELIGIBLE`, display `ineligibilityReason.message` to the patient.

---

#### [Existing Patients](../existing-patients)

Hard check when the patient already has a Policy