> 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/react/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 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 (
{children}
);
};
```
### 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 (
);
};
```
### 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