Add verification gates, reusable proof, and agent permissions to your app.
Bring the agent you already run. Proofable gives it an ID tied to you and a list of what it may do.
Requires Node.js 20 or later.
1. Connect and sign in
npx -y @proofable/sdk setup
npx -y @proofable/sdk auth --oauthsetup connects Proofable to the AI tools on this machine.
auth --oauth signs this terminal in through your browser.
2. Import your agent
npx -y @proofable/sdk import owner/name --apply claudePoint it at a GitHub repository (owner/name or its URL) or a folder.
It creates the agent on your profile and writes it into this project.
Name the tool with --apply. It takes cursor, claude, codex, hermes, openclaw or opencode, and VS Code uses cursor.
3. Use it
import prints what the agent may do, the files it wrote and the agent's page.
Open this project in that tool. The agent's instructions and permissions are in those files.
Its permissions never expire unless you pass --expires-at <date>.
Or let your coding agent do it
Paste this into Claude Code, Cursor or Codex.
Set up Proofable for this project. Run `npx -y @proofable/sdk setup`. Then run `npx -y @proofable/sdk auth --oauth` and wait for me to sign in through the browser. Then run `npx -y @proofable/sdk import . --apply <host>`, replacing <host> with claude, cursor or codex to match the tool you run in. Show me what the agent may do and its page link.
Verify someone once, then reuse that proof on every later check.
npm install @proofable/sdkSend a person to verify
import { getHostedCheckoutUrl } from '@proofable/sdk';
window.location.assign(getHostedCheckoutUrl({
verifiers: ['proof-of-human'],
returnUrl: 'https://app.example.com/auth/callback',
}));The person verifies on Proofable and returns to returnUrl with a proof ID (qHash). Store it; later decisions read that proof.
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
Define a gate when the decision needs several checks.
import { ProofableClient, defineGate } from '@proofable/sdk';
const proofable = new ProofableClient();
const gate = defineGate([
{ verifierId: 'proof-of-human' },
{ verifierId: 'ownership-dns-txt', match: [{ path: 'domain', value: 'acme.com' }] },
]);
const result = await proofable.gateCheck({ gate, subject });A published gateId is optional; use one when you need 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 from PROOFABLE_ACCESS_KEY as a Bearer token.
npx -y @proofable/sdk setup --access-key $PROOFABLE_ACCESS_KEY
npx -y @proofable/sdk import <github-url|owner/name|folder> --dry-run
npx -y @proofable/sdk mount <agentId> --apply <host>
npx -y @proofable/sdk doctor --liveimport also reads an MCP server URL or an A2A agent card.
--dry-run shows what it would create. --no-mount creates the agent without writing it into the project.
A terminal that is not signed in gets a browser link instead.
mount writes an agent you already have into this project for another tool. 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 to complete |
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
});apiKey (npk_*) is server-side only. appId is optional public attribution for server flows; published gate checkout and gateCheck({ gateId }) work without it.
Issues: github.com/proofable/sdk/issues. Security: SECURITY.md. Contributing: CONTRIBUTING.md.
Apache-2.0. Published by NEUS Network, Inc.