---
title: "Check a Gate Policy or published gate (structured POST)"
method: POST
path: "/api/v1/proofs/check"
tags: ["Proofs", "Gates"]
---

# Check a Gate Policy or published gate (structured POST)

`POST /api/v1/proofs/check`

## Request

- Base URL: `https://api.proofable.me`
- URL: `https://api.proofable.me/api/v1/proofs/check`
- Auth: none required

Same evaluator as GET /proofs/check. Send a Gate Policy as requirements or a published gateId, not both. Subject uses the existing account identifier. Read-only by default.

## Query parameters

- `address` string
- `qHash` string
- `gateId` string
- `verifierIds` string
- `verifierId` string
- `requireAll` boolean
- `minCount` integer
- `sinceDays` integer
- `since` integer
- `limit` integer
- `referenceType` string
- `referenceId` string
- `tag` string
- `tags` string
- `contentType` string
- `content` string
- `contentHash` string
- `contractAddress` string
- `tokenId` string
- `chainId` integer: EVM chain ID of the asset being checked (e.g. 1 for Ethereum Mainnet, 8453 for Base). Required for asset verifiers (nft-ownership, token-holding, contract-ownership). Not a hub or proof-storage filter.
- `domain` string
- `minBalance` string
- `provider` string
- `handle` string
- `namespace` string
- `traitPath` string
- `traitGte` number
- `select` string
- `ownerAddress` string
- `riskLevel` string
- `sanctioned` boolean
- `poisoned` boolean
- `primaryWalletAddress` string
- `secondaryWalletAddress` string
- `controllerWallet` string
- `agentWallet` string
- `delegationScope` string
- `agentId` string
- `verificationMethod` string
- `neusPersonhoodId` string
- `ageMin` integer
- `sanctionsPassed` boolean
- `subject` 'me'
- `includePrivate` boolean

## Headers

- `x-wallet-address` string
- `x-signature` string
- `x-signed-timestamp` string
- `x-chain` string: CAIP-2 chain reference for non-EVM signature verification (e.g. solana:mainnet)
- `x-signature-method` string: Signature method hint for non-EVM signatures (e.g. ed25519)

## Request body

- object

## Response `200`

OK

- GateCheckResponse
  - `success` true, required
  - `data` GateCheckData, required: Gate eligibility result. The gate block is the readiness contract. allRequiredSatisfied is the only signal that authorizes submit/fulfill.
    - `gate` object: Gate evaluation against the caller's proof inventory.
      - `allRequiredSatisfied` boolean: True when every gate requirement row is satisfied by an existing or reused proof. This is the only signal that authorizes submit/fulfill.
      - `satisfiedVerifierIds` string[]: Verifier IDs whose requirement rows are satisfied.
      - `missingVerifierIds` string[]: Verifier IDs that still need a proof to satisfy the gate.
      - `reusedVerifierProofs` object: Map of verifierId to qHash (or qHash array) of existing proofs that can be reused instead of re-running a check.
      - `matchedQHashes` string[]: qHashes of proofs that matched gate requirements.
      - `rows` object[]: Per-requirement row evaluation results.
        - `verifierId` string
        - `satisfied` boolean
        - `qHash` string, nullable
        - `reused` boolean
  - `timestamp` union
    - string, date-time
    - number

## Other responses

- `400`: Invalid request
- `401`: Authentication required for subject=me
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited
- `500`: Server error
- `503`: Service unavailable

---

[API](https://skmtc.dev/proofable/apis/proofable-api.md) · [All operations](https://skmtc.dev/proofable/apis/proofable-api/llms.txt) · [OpenAPI document](https://skmtc.dev/proofable/apis/proofable-api/revisions/ab03d40cb38f?raw)
