> ## Documentation Index
> Fetch the complete documentation index at: https://docs.proofable.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Gate anything

> Require proof before a page, checkout, API call, or agent action. Visitors reuse proof they already hold and verify only what is missing.

Decide what must already be true, then enforce it where the action happens. One check does not need a gate: [Verify once, read the proof](/verification). Publish a listing for a saved `gateId`, price, or schedule. Field reference: [Gates](/gates).

## Choose what to protect

| Protect | Use |
| - | - |
| A page, feature, or download | `VerifyGate` in your app and `gateCheck` on your server |
| Paid access or a digital product | A paid listing with hosted checkout |
| An API | [Pay per call](/gates/pay-per-call) with a proof check |
| An agent action | The agent's permission check. [Control agent actions](/use-cases/control-agent-actions) |

## Define a gate

<Steps>
  <Step title="Write the policy in your app">
    ```js theme={"system"}
    import { defineGate } from '@proofable/sdk';

    const gate = defineGate([{ verifierId: 'proof-of-human' }]);
    ```

    You do not need a dashboard visit or a published listing to start.
  </Step>

  <Step title="Add it to your app">
    ```jsx theme={"system"}
    import { VerifyGate } from '@proofable/sdk/widgets';

    <VerifyGate gate={gate} onVerified={grantAccess}>
      <ProtectedContent />
    </VerifyGate>;
    ```

    Not using React? Send people to Hosted Verify with `getHostedCheckoutUrl`, then confirm on your server.
  </Step>

  <Step title="Confirm on your server">
    ```js theme={"system"}
    const result = await client.gateCheck({
      gate,
      subject: { accountId: user.accountAddress },
    });

    if (result.satisfied !== true) {
      // Send the visitor back to verify
    }
    ```
  </Step>
</Steps>

## Who pays

Sponsored usage, visitor checkout, or pay per call. Details: [Pricing](/pricing)

## What people receive

After they pass, and pay when the gate has a price, Proofable delivers what you attached: access, a redirect, a download, or a revealed value. The value stays hidden until then. Their proofs stay with them for the next gate.

## Next

<CardGroup cols={2}>
  <Card title="Sell access with one gate" icon="rocket" href="/gates/sell-access">
    Publish, embed, and confirm in three steps.
  </Card>

  <Card title="Gate checkout" icon="door-open" href="/gates/checkout">
    The full checkout contract behind a gate.
  </Card>

  <Card title="NFT and token gating" icon="image" href="/gates/nft-gating">
    Require a holder or a minimum balance.
  </Card>

  <Card title="Gates" icon="door-closed" href="/gates">
    Everything a gate can hold and enforce.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.