Add verification gates, reusable proof, and agent permissions to your app.
Verify someone once. Check that proof forever after.
Any MCP client
https://mcp.proofable.me/mcp
Install
npm install @proofable/sdkVerify a person in three lines
import { getHostedCheckoutUrl } from '@proofable/sdk';
window.location.assign(getHostedCheckoutUrl({
verifiers: ['proof-of-human'],
returnUrl: 'https://app.example.com/auth/callback',
}));They verify on Proofable, return with a proof ID (qHash), and every future decision reads that proof. No UI to build. No gate to define.
Check the proof on your server
import { ProofableClient } from '@proofable/sdk';
const result = await new ProofableClient().gateCheck({
gate: [{ verifierId: 'proof-of-human' }],
subject: { accountId: user.accountAddress },
});
if (result.satisfied) {
// Allow the action.
}Docs
SDK | CLI | MCP | API | Examples | Docs
Requires Node.js 20 or later. Full CLI setup: npx -y @proofable/sdk setup.
One check is not a gate. Reach for a gate when the decision needs several checks, a price, or a schedule.
import { ProofableClient, defineGate } from '@proofable/sdk';
const proofable = new ProofableClient();
const gate = defineGate([
{ verifierId: 'proof-of-human' },
{ verifierId: 'ownership-dns-txt', match: { domain: 'acme.com' } },
]);
const result = await proofable.gateCheck({ gate, subject });A published gateId is optional and only for a persisted listing, price, or schedule. Never ship access keys in browser code.
import { VerifyGate } from '@proofable/sdk/widgets';
<VerifyGate gate={[{ verifierId: 'proof-of-human' }]} onVerified={grantAccess} />;Interactive clients add https://mcp.proofable.me/mcp, click Connect, and sign in. Servers and CI send a server key as a Bearer token from PROOFABLE_ACCESS_KEY.
npx -y @proofable/sdk setup
npx -y @proofable/sdk setup --access-key $PROOFABLE_ACCESS_KEY
npx -y @proofable/sdk mount <agentId> --apply <host>
npx -y @proofable/sdk doctor --live--apply accepts cursor, claude, codex, hermes, openclaw, or opencode. VS Code uses --apply cursor. Setup steps: docs.proofable.me/mcp/setup.
| Method | Use it for |
|---|---|
getHostedCheckoutUrl() |
Send a user to Hosted Verify |
client.verify() |
Create a proof (in-app signing) |
client.verifyFromApp() |
Create a proof for an approved user (server; needs appId + origin) |
client.getProof() |
Fetch a public proof by its proof ID (qHash) |
client.getPrivateProof() |
Fetch a private proof (wallet-bound) |
client.pollProofStatus() |
Wait for async verification completion |
client.getProofsByWallet() |
List a wallet's public proofs |
client.getPrivateProofsByWallet() |
List a wallet's private proofs |
client.gateCheck() |
Server-side eligibility check before access |
client.checkGate() |
Local preview against already-loaded proofs |
client.getGate() |
Read a published gate's requirements and charge |
client.fulfillGate() |
Deliver a post-verify reward for hosted checkout |
client.createGatePrivateAuth() |
Signed proof for private gate access |
client.revokeOwnProof() |
Revoke a proof you own |
client.createWalletLinkData() |
Wallet-link payloads |
client.getVerifiers() |
List live verifier ids |
client.getVerifierCatalog() |
Full verifier catalog with access levels |
client.isHealthy() |
Ping the API health endpoint |
import { ProofableClient } from '@proofable/sdk';
const client = new ProofableClient({
apiUrl: 'https://api.proofable.me',
timeout: 30000
});appId is optional public attribution for advanced server flows. Published gate checkout and gateCheck({ gateId }) do not require it. apiKey (npk_*) is server-side only.
Issues: github.com/proofable/sdk/issues. Security: SECURITY.md. Contributing: CONTRIBUTING.md.
Apache-2.0. Published by NEUS Network, Inc.