Proof Holdings

holdings.proof/mcp-server · v1.6.0 · communication

Proof Holdings is healthy: it completed an MCP handshake in 3074 ms and exposes 171 tools.

One API, all things verified — control, delegation, human approval, anti-impersonation.

Endpoint: https://api.proof.holdings/mcp (streamable-http)

Repository · Website · JSON · Add to my inventory

Facts

Users (last 30 days)0
HandshakeHealthy
Auth neededNone
Tool count171
Latency3074 ms
Last checked (UTC)2026-10-15T00:06:02.147Z

Health history

Checked (UTC)StatusLatencyError
2026-10-15T00:06:02.147ZHealthy3074

Tools (100)

create_verificationCreate a new identity verification. Initiates a verification flow for an asset identifier (phone number, email, domain, social handle, wallet address, account, or Telegram bot). Agent usage: pass the asset `type`, the delivery `channel`, and the `identifier` (e.g. type "phone", channel "sms", ident
get_verificationGet a verification by ID. Returns the full verification object including status, channel, and proof token if verified. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check thei
list_verificationsList verifications with optional filters. Returns paginated results. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
trigger_verificationTrigger a DNS/HTTP verification check for a pending domain verification. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
submit_verification_codeSubmit an OTP/challenge code for a pending verification. Accepted ONLY where we delivered the code out-of-band to the party being verified: type "email", and type "domain" with channel "email". Any other pair answers 400 unsupported_for_type and completes elsewhere — use trigger_verification (POST /
resend_verificationResend a verification message (email channel only). Generates and sends a new code. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
test_verifyAuto-complete a verification in test mode (pk_test_* API keys only). Useful for testing flows without real OTP delivery. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
list_verified_usersList verified users grouped by external_user_id. Shows all verifications per user. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_verified_userGet a single verified user and their verifications by external user ID. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
start_domain_verificationStart a B2B domain verification. Creates a verification record and returns DNS/HTTP instructions for the customer to complete. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
check_domain_verificationCheck the status of a pending domain verification. Triggers a DNS/HTTP check and returns the updated status. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
delete_domain_verificationDelete a domain verification attempt that is not verified (pending, verifying or failed) — nothing is revoked. A verified domain, or one that needs re-verification, is refused with domain_verified: removing it revokes its proofs and every delegation issued from it, which is delete_domain in a start_
wait_for_verificationPoll a verification until it reaches a terminal state (verified, failed, expired, revoked, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter. A multi-channel verification that lost the race is "cancelled" and one whose proof was withdrawn is "revoked"; both are final,
create_multi_channel_verificationCreate a multi-channel phone verification: one phone number challenged over several channels at once (OR / first-wins). The first channel the user completes wins, yields a single proof token, and cancels the losing siblings. Exactly one proof is billed, at the winning channel's completion — not one
get_multi_channel_verification_statusGet the status of a multi-channel verification group by its group_id. Returns the aggregate status (pending/verified/expired), the winning_channel once one completes, per-channel statuses, and the proof token (with expires_at) when the group is verified. Before calling this for a challenge you crea
create_verification_requestCreate a multi-asset verification request. Allows verifying multiple assets (phone, email, domain, social, wallet, account, telegram_bot) in a single flow. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT ope
get_verification_requestGet a verification request by ID. Returns the request with all its asset verification statuses. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_request_proofsGet proof tokens for verified assets in a verification request. Returns proof tokens that can be used for offline verification. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
list_verification_requestsList verification requests with optional filters. Returns paginated results. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_request_by_referenceGet a verification request by its reference ID (your unique identifier). ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
cancel_verification_requestCancel a pending verification request. Only pending requests can be cancelled. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
wait_for_requestPoll a verification request until it reaches a terminal state (completed, expired, or cancelled). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does
validate_proofValidate a proof token online. Checks the token signature, expiry, and revocation status against the server, and optionally that the proof is about the identifier you expect. Public endpoint — no API key required.
get_proof_statusGet the status of a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID. Returns whether the proof is active, suspended, expired, or revoked — a live proof reads "active". ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this to
revoke_proofRevoke a proof by its public handle (ph_ctl_* / ph_dlg_*) or a verification ID — the same addresses get_proof_status takes. The proof token will no longer validate anywhere: the status endpoint, the public validator, the revocation list and the Token Status List all report it revoked. A domain CONTR
list_revoked_proofsGet the revocation list for offline proof validation. Returns a signed list of all revoked proof IDs. Reuse a fetched list for up to 5 minutes (its cache lifetime), then fetch it again to see new revocations; if you cannot, its signature stays verifiable offline for 1 hour.
create_sessionCreate a new phone verification session. Returns deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Sessions provide a hosted verification flow with callbacks. Agent usage: After creating a session, pass the response's `deep_link` to render_auth_link so the user can
get_sessionGet a session by ID. Returns the session status, verification details, and proof token if verified. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
wait_for_sessionPoll a session until it reaches a terminal state (verified, failed, or expired). Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and num
list_assetsList all verified assets for the authenticated user. Assets are verified identities (phones, emails, domains). ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_assetGet a single verified asset by ID. Returns details including type, value, status, and verification timestamps. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
revoke_assetRevoke the proofs of one of your assets (a phone, email or domain) — the asset stays on the account. Owner only: sign in with start_login (a connection with only an API key is refused user_session_required — a key revokes a proof with revoke_proof instead), then one code: start_2fa_for_action with a
get_current_userGet the signed-in user's account details, plan and settings. Needs a login session: call start_login, then wait_for_login until it reports success. An API key alone cannot read this — for the key's own account use get_self_api_key or get_settings. ACCESS: needs a Proof account. Authenticate this cl
list_auth_sessionsList all active authentication sessions for the current user. Shows session details including channel, user agent, and expiry. When called via API key, no session is marked as is_current. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool
revoke_auth_sessionRevoke a specific authentication session by ID. When called via JWT, cannot revoke the current session. When called via API key, any session can be revoked. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT op
get_usageGet usage metrics for the authenticated account. Shows verification counts, API calls, and quota usage. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_platform_summaryGet a one-call account snapshot: quota with end-of-month projection, request health (pending/completed/expired counts + success rate), per-channel completion rates, HITL counts, and active API key count. The same data the dashboard home renders. The hitl_channels sub-object requires the hitl:read sc
get_settingsGet account settings: branding (business name, logo, colors, support email, email theme), the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. The webhook signing secret is NOT returned to an API key — the response reports webhook.secret_set instead, and the va
update_settingsUpdate account settings: branding, the outbound webhook endpoint with its event subscriptions, and the default proof lifetime. Setting the first webhook endpoint creates the signing secret and returns it in this response; the value is returned only when this call created or rotated it, so record it
export_dataExport a complete copy of your account's data (GDPR Articles 15 and 20), or check on one. Owner only: sign in with start_login first (a connection with only an API key is refused user_session_required). The first call starts the export; it is prepared in the background, and the account owner is told
searchPrefix-anchored global account search across six resource buckets (verification_requests, verifications, hitl, confirmations, authorizations, api_keys). Case-sensitive prefix match over indexed plaintext fields only; recipient identifiers are masked. Results are scoped to the authenticated account.
get_self_api_keyGet the calling API key's own redacted metadata (id, name, key_prefix, environment, scopes, last_used_at, revoked_at, created_at) for agent self-inspection. Never returns the key hash or full secret. Requires API-key auth — a JWT session has no single-key context (returns 400 api_key_required). ACC
get_api_key_usageGet per-API-key usage for a given key id: verification counts by type/channel/status, plus verification-request/confirmation/authorization totals, and attribution context (attribution_cutoff_at, attributed_fraction). The counts cover the key and every key it replaced (api_key.replaced_key_ids). Coun
list_templatesList all custom message templates for the authenticated account. Returns templates organized by channel and message type. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_default_templatesGet all default message templates. These are the built-in templates used when no custom template is set. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_templateGet a specific template by channel and message type. Returns the custom template if set, otherwise the default. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
update_templateCreate or update a custom template for a specific channel and message type. Replaces the default template. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
delete_templateDelete a custom template, reverting to the default template for that channel and message type. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
preview_templatePreview a template with sample data before saving. Shows how the message will look with placeholder variables filled in. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
render_templateRender a template with provided variables. Returns the fully rendered message content. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_webhook_statsGet webhook delivery statistics including total deliveries, success/failure counts, and recent activity. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
list_webhook_deliveriesList webhook delivery attempts with pagination and filtering. Shows delivery status, response codes, and timestamps. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_webhook_deliveryGet details of a single webhook delivery attempt including request/response payloads and retry history. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
retry_webhook_deliveryRetry a failed webhook delivery. Creates a new delivery attempt with the same payload to the configured endpoint. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_subscriptionGet the current subscription details including plan, status, billing period, and usage limits. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
list_profilesList all profiles for the authenticated account. Returns all profiles including primary and secondary. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
create_profileCreate a new profile with optional display name, bio, avatar, business info, and theme settings. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_profileGet a specific profile by ID. Returns full profile details including theme, custom links, and verification display settings. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
update_profileUpdate a profile by ID. Supports changing display info, theme, custom links, and verification display settings. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
delete_profileDelete a project (profile). Revokes its API keys, archives the HITL setups and declines the pending requests created with its own keys, keeps its history but unlinks it, deletes its message templates, and retires its username for good. The last project cannot be deleted; deleting the primary project
set_primary_profileSet a profile as the primary profile. The previous primary profile becomes secondary. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
list_profile_templatesList all templates for a profile. Returns templates organized by channel and message type, merged with defaults. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
update_profile_templateCreate or update a custom template for a specific profile, channel, and message type. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
delete_profile_templateDelete a custom profile template, reverting to the default template for that channel and message type. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
preview_profile_templatePreview a profile template with sample data before saving. Shows how the message will look with placeholder variables filled in. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
update_profile_proofsUpdate which verified assets (proofs) are displayed on a specific profile. Controls visibility, privacy masking, ordering, and labels. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_my_profileGet the current user's primary profile. Returns profile details, theme, custom links, and public proof display settings. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
update_my_profileUpdate the current user's primary profile. Supports display name, bio, avatar, theme, custom links, and verification display settings. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
get_profile_assetsGet available verified assets that can be displayed on the user's profile. Returns assets eligible for public proof display. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), then call this tool again. start_login does NOT open this tool.
list_emailsList all email addresses associated with the authenticated account. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
remove_emailRemove an email address from the account. Always requires one code: start_2fa_for_action with action_type email_remove and targets [this email id]. Revokes every proof of the address and your own consents naming it, declines pending confirmations waiting on it, moves Lookalike Watch alerts to your r
set_primary_emailSet an email address as the primary email for the account. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
start_add_emailStart adding a new email address. Sends an OTP code to the email. Returns a session ID to verify with. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
get_add_email_statusCheck the status of an in-progress email addition by session ID. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
verify_email_otpSubmit the OTP code to verify an email addition. Completes the add-email flow if the code is correct. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
resend_email_otpResend the OTP code for an in-progress email addition. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
list_phonesList all phone numbers associated with the authenticated account. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
remove_phoneRemove a phone number from the account. Always requires one code: start_2fa_for_action with action_type phone_remove and targets [this phone id]. Revokes every proof of the number and your own consents naming it, declines pending confirmations waiting on it, flags approval setups left with no approv
set_primary_phoneSet a phone number as the primary phone for the account. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
start_add_phoneStart adding a new phone number by reverse OTP: the user starts the exchange themselves and nothing is sent before they do; the response's `instructions` field says what they do (on telegram the bot then asks them to tap a button that shares their number). Returns a session ID; on telegram/whatsapp
get_add_phone_statusCheck the status of an in-progress phone addition by session ID. Poll until terminal state. Before calling this for a challenge you created, make sure your reply text already shows the user what to act on — the link itself, the SMS text and number, or a note to check their inbox; a link that appear
list_api_keysList all API keys for the authenticated account. Returns key metadata (not the secret key values). ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
create_api_keyCreate a new API key. The secret key value is returned ONLY in this response — store it securely. Note: the secret will be visible in the AI conversation context. Optionally bind the key to a sub-account (project) via profile_id — outbound messages sent with the key are then branded as that project.
revoke_api_keyRevoke an API key by ID. The key will immediately stop working. This action cannot be undone. Agent usage: This operation requires 2FA. Before calling, complete the 2FA flow: (1) call start_2fa with action_type "api_key_revoke", (2) wait for user to verify the code, (3) poll get_2fa_status until "v
regenerate_api_keyRegenerate an API key: issues a new key (a new id and secret) with the same name, environment, scopes and project. The old key stops working immediately; use the id in this response from now on. The new key lists the old one in replaced_key_ids, so its requests and usage stay with it. The new secret
start_2faStart a two-factor authentication challenge for a sensitive operation. Sends a verification code via the chosen channel. Returns a session ID, and for messaging channels: deep_link, qr_code (base64 PNG), and qr_text (UTF-8 text QR for terminal display). Agent usage — full 2FA flow: (1) Call start_2
get_2fa_statusCheck the status of a 2FA session by session ID. Returns whether the challenge has been completed, is pending, or has expired. Agent usage: Poll this after calling start_2fa. Check every few seconds. Terminal states: "verified" (proceed with protected operation), "expired" (restart with start_2fa).
verify_2faSubmit a verification code to complete a 2FA challenge. Rate limited to 10 attempts per minute. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
verify_2fa_magic_linkComplete a 2FA challenge using a magic link token (received via email). No code submission needed — the token itself is the proof. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this too
wait_for_2faPoll a 2FA session until the user completes the challenge. Uses exponential backoff (2s initial, 1.5x, 30s max) with jitter. Agent usage: Call this after start_2fa with the returned session_id. Terminal states: "verified" (challenge completed — proceed with the protected operation), "expired" (offe
list_domainsList all domains for the authenticated account. Returns domain metadata including verification status. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
add_domainAdd a new domain to verify ownership. Optionally specify email sending intent and verification method. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
get_domainGet details of a specific domain by ID, including verification status, DNS records, and provider connections. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
delete_domainRemove a domain from the account. Revokes every proof of the domain and every delegation issued from it (for good — re-adding the domain does not bring them back), deletes the domain and its records, and removes our _proof TXT record and the Resend sending domain where we can; the response lists wha
verify_domainTrigger domain verification. Checks DNS records or other verification method to confirm domain ownership. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.
connect_cloudflareConnect a Cloudflare API token to a domain for automated DNS record management. Note: the API token will be visible in the AI conversation context. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — t
connect_godaddyConnect GoDaddy API credentials to a domain for automated DNS record management. Note: the API key and secret will be visible in the AI conversation context. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens thi
connect_dns_providerConnect a generic DNS provider to a domain using provider-specific credentials. Note: credentials will be visible in the AI conversation context. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — the
add_verification_providerAdd an additional DNS provider for verification to an already-verified domain. Note: credentials will be visible in the AI conversation context. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then
get_dns_providersGet metadata for all supported DNS providers, including required credential fields and documentation links. ACCESS: needs a Proof account. Authenticate this client (Claude Code: /mcp → Authenticate), or sign in with start_login — a session opens this tool — then call this tool again.