Proof CLI (unofficial)

io.github.tsarleweyv0.3.1Updated Sep 30, 2026

Notarize, e-sign, and verify identity with the Proof API. Unofficial; not affiliated with Proof.

VerifiedSTDIODesktop onlyDeveloper ToolsSecurity & Monitoring

Installation

In SourceWeft

  1. Open Proof CLI (unofficial) in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Proof CLI

An unofficial command-line interface for interacting with the Proof API. The Proof CLI provides access to Business, Real Estate, and SCIM APIs through a unified interface.

This is an alpha product and should be treated as such. It is not an official product from Proof.

Installation

Prebuilt binary

bash
# macOS / Linux: downloads the latest release for your OS and CPU into the current directorycurl -sL "https://github.com/tsarlewey/proof-cli/releases/latest/download/proof_$(uname -s | tr A-Z a-z)_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz proof./proof version

Windows zips and checksums are on the Releases page.

Install via Go

bash
go install github.com/tsarlewey/proof-cli@latest

From Source

bash
git clone https://github.com/tsarlewey/proof-cli.gitcd proof-cligo build -o proof./proof --help

Use with AI agents

Claude Code plugin (bundles a usage skill and the MCP server; needs proof on your PATH):

/plugin marketplace add tsarlewey/proof-cli/plugin install proof@proof

MCP server for any MCP client. proof mcp exposes every API command as a tool over stdio, annotated read-only or destructive:

bash
claude mcp add proof -- proof mcp               # Claude Codeclaude mcp add proof -- proof mcp --read-only   # only tools that don't change anything

For other clients, run the command proof mcp. It reads credentials the same way as the CLI (PROOF_API_KEY or proof config).

Docker, with nothing installed locally. The image runs proof mcp and is listed in the MCP Registry as io.github.tsarlewey/proof-cli:

bash
docker run -i --rm -e PROOF_API_KEY -e PROOF_API_ENDPOINT=https://api.fairfax.proof.com ghcr.io/tsarlewey/proof-cli

Arguments after the image name go to proof mcp, e.g. --read-only. PROOF_API_ENDPOINT overrides the configured endpoint in any mode; leave it unset for production.

Agents using the shell can follow skills/proof/SKILL.md. Output is JSON (--pretty=false for compact), and API errors exit 1 with the response body on stderr. Point at the sandbox while testing: proof config set-endpoint https://api.fairfax.proof.com.

Getting Started

1. Configuration

Before using the CLI, you need to configure your API key:

bash
# Set your API keyproof config set-api-key YOUR_API_KEY
# Or set via environment variableexport PROOF_API_KEY=YOUR_API_KEY
# Verify your configurationproof config get

In order to get an API Key, you'll need an account with API Usage. You can get that here - https://www.proof.com/pricing#business

After your account is created and upgrade use https://dev.proof.com/docs/api-keys to setup your key.

OAuth 2.0 Authentication

The CLI supports OAuth 2.0 client credentials flow for secure API authentication:

bash
# Configure OAuth credentialsproof config set-oauth <client-id> <client-secret> [--scope="read write"]
# Test OAuth authenticationproof config test-oauth
# Disable OAuth (fallback to API key)proof config disable-oauth

OAuth tokens are automatically refreshed before expiration (5-minute buffer).

2. Basic Usage

The CLI is organized into three main API groups:

  • business - Business API operations (transactions, documents, webhooks, notaries, etc.)
  • real-estate - Real Estate/Mortgage API operations
  • scim - SCIM API operations for user management
bash
# Get help for any commandproof --helpproof business --helpproof real-estate --helpproof scim --help

API Reference

Business API

The Business API provides comprehensive transaction and document management capabilities.

Transactions
bash
# List all transactionsproof business transactions list
# List with filteringproof business transactions list --limit 10 --status completed
# Get a specific transactionproof business transactions get <transaction-id>
# Create a new transactionproof business transactions create \  --email "[email protected]" \  --first-name "John" \  --last-name "Doe" \  --document "/path/to/document.pdf" \  --name "Contract Signing" \  --draft
# Multiple documents, scheduled notary meeting, and a redirectproof business transactions create \  --email "[email protected]" \  --document "/path/to/deed.pdf" \  --document "/path/to/rider.pdf" \  --notary-meeting-time "2026-09-02T15:30:00Z" \  --allowed-notary-states "CA,NY" \  --notary-note "Verify the property address" \  --payer sender \  --idv-use-case ACCOUNT_RECOVERY \  --recipient-details-config "name=locked" \  --redirect-url "https://example.com/done"
# Multiple signers, from a JSON file holding an array of signer objects# (max 10, each needs at least an email). --email stays the primary signer.proof business transactions create \  --email "[email protected]" \  --document "/path/to/document.pdf" \  --signers-file ./signers.json
# Replace a draft transaction (PUT) -- anything you omit reverts to defaultproof business transactions update <transaction-id> \  --name "Contract Signing (revised)" \  --expiry "2026-09-08T10:00:00Z"
# Change individual fields and leave the rest alone (PATCH)proof business transactions patch <transaction-id> --expiry "2026-09-15T10:00:00Z"
# Reorder documents already attached to a draftproof business transactions patch <transaction-id> \  --document-order "doc_abc123=1" \  --document-order "doc_def456=2"
# See the full parameter setproof business transactions create --help
# Activate a draft transactionproof business transactions activate <transaction-id>
# Delete a transactionproof business transactions delete <transaction-id>
# Cancel a transactionproof business transactions cancel <transaction-id>
Documents
bash
# Add a document to a transactionproof business documents add <transaction-id> /path/to/document.pdf \  --filename "Contract.pdf" \  --requirement "esign" \  --esign-required
# Apply a specific template instead of automatic matchingproof business documents add <transaction-id> /path/to/document.pdf --template-id <template-id>
# Get a documentproof business documents get <transaction-id> <document-id>
# Get document as hosted URL (after completion)proof business documents get <transaction-id> <document-id> --encoding uri
# Delete a documentproof business documents delete <document-id>
Webhooks
bash
# List webhooks (v2)proof business webhooks list
# Get webhook detailsproof business webhooks get-v2 <webhook-id>
# Create a webhookproof business webhooks create \  --url "https://example.com/webhook" \  --name "Transaction Updates" \  --events "transaction.created,transaction.completed"
# Update a webhookproof business webhooks update <webhook-id> \  --url "https://new-url.com/webhook"
# Delete a webhookproof business webhooks delete <webhook-id>
# Get webhook eventsproof business webhooks events <webhook-id>
# List available event subscriptionsproof business webhooks subscriptions
Notaries
bash
# List notariesproof business notaries list
# List notaries by stateproof business notaries list --state CA
# Get notary detailsproof business notaries get <notary-id>
# Create a notaryproof business notaries create \  --email "[email protected]" \  --first-name "Jane" \  --last-name "Smith" \  --state "CA"
# Delete a notaryproof business notaries delete <notary-id>
Templates
bash
# List document templatesproof business templates list
# List with paginationproof business templates list --limit 50 --offset 100
Referrals
bash
# Create a referral campaignproof business referrals create \  --name "Partner Referrals" \  --cover-payment \  --redirect-url "https://example.com/signup"
# Generate a referral codeproof business referrals generate-code <campaign-id> \  --expires-at "2024-12-31T23:59:59Z"
Integrations
bash
# Create an Adobe integrationproof business integrations create \  --name "ADOBE" \  --org-id "your-org-id" \  --account-id "adobe-account-id" \  --environment "production"
# Create a DocuTech integrationproof business integrations create \  --name "DOCUTECH" \  --org-id "your-org-id"

Real Estate API

The Real Estate API specializes in mortgage and real estate transaction management.

Transactions
bash
# List real estate transactionsproof real-estate transactions list
# List with filteringproof real-estate transactions list --status "in_progress" --limit 20
# Get transaction detailsproof real-estate transactions get <transaction-id>
# Create a transactionproof real-estate transactions create \  --type "purchase" \  --file-number "RE-2024-001" \  --loan-number "LN-2024-001"
# Place an order for a transactionproof real-estate transactions place-order <transaction-id>
# Cancel a transactionproof real-estate transactions cancel <transaction-id>
Templates
bash
# List templatesproof real-estate templates list
Documents
bash
# List documentsproof real-estate documents list <transaction-id>
# Get document detailsproof real-estate documents get <document-id>
# Upload a documentproof real-estate documents upload <transaction-id> /path/to/document.pdf \  --type "purchase_agreement" \  --external-id "PA-001"
Webhooks
bash
# List real estate webhooksproof real-estate webhooks list
# Create a webhookproof real-estate webhooks create "https://example.com/re-webhook" \  --subscriptions "transaction.created,document.uploaded"
Address Verification
bash
# Verify an addressproof real-estate verify-address \  --line1 "123 Main St" \  --city "San Francisco" \  --state "CA" \  --postal-code "94102"

SCIM API

The SCIM API provides standardized user management capabilities.

Users
bash
# List users in an organizationproof scim users list <organization-id>
# List with paginationproof scim users list <organization-id> --start-index 1 --count 25
# Get user detailsproof scim users get <organization-id> <user-id>
# Create a userproof scim users create <organization-id> \  --username "[email protected]" \  --given-name "John" \  --family-name "Doe" \  --email "[email protected]" \  --active
# Update a user (full replacement)proof scim users update <organization-id> <user-id> \  --username "[email protected]" \  --given-name "Jane"
# Patch a user (partial update); --operation is repeatable, format op:path[:value]proof scim users patch <organization-id> <user-id> \  --operation 'replace:active:false'
# Delete a userproof scim users delete <organization-id> <user-id>
Schemas
bash
# Get user schemaproof scim schemas user <organization-id>
# Get service provider configurationproof scim schemas service-provider-config <organization-id>
# Get resource typesproof scim schemas resource-types <organization-id>

Security Events API

Read the organization's OCSF-formatted security event log.

bash
# List recent security eventsproof logs list
# Page through resultsproof logs list --limit 100proof logs list --cursor <next_cursor-from-previous-response>
# Filterproof logs list --since 2026-01-01T00:00:00Zproof logs list --class-uid 1001 --severity-id 3

Certificates API

Issue, use, and revoke organization certificates.

bash
# List certificatesproof certificates list --limit 25 --offset 0
# Get one certificateproof certificates get <certificate-id>
# Issue a certificate with a Proof-generated keyproof certificates create \  --common-name "Acme Signing Authority" \  --profile organization_authenticity_al2
# Issue a certificate from your own CSRproof certificates create-from-csr --csr "$(cat request.pem)"
# Sign base64-encoded SHA256 digests (--digest is repeatable, max 25)proof certificates sign <certificate-id> --digest "BOGQnhPlcpXqM7fAH6tvFPI4QOXsIyXMiBKtFpblmjU="
# Revokeproof certificates revoke <certificate-id> --reason "key compromise"

Verifiable Credentials API

Requests a Verifiable Credential presentation from an End-User. This endpoint is a browser redirect, not a server-to-server call — the CLI prints the URL for you to send the End-User to, and does not follow it.

bash
# Fragment mode: the vp_token comes back on your redirect URIproof credentials authorize-url \  --client-id <oauth-client-id> \  --response-mode fragment \  --redirect-uri https://app.example.com/callback \  --scope "openid" \  --login-hint [email protected] \  --nonce "$(openssl rand -hex 16)" \  --state "$(openssl rand -hex 8)"
# direct_post mode: Proof POSTs the vp_token to your response URIproof credentials authorize-url \  --client-id <oauth-client-id> \  --response-mode direct_post \  --response-uri https://app.example.com/vp \  --scope "openid" \  --login-hint [email protected] \  --nonce "$(openssl rand -hex 16)"

--redirect-uri is required in fragment mode and rejected in direct_post mode; --response-uri is the reverse. Both URIs must be registered on your OAuth Application.

Examples

The CLI includes example commands that demonstrate common workflows:

bash
# List all available examplesproof example --help
# Business API examplesproof example business-transactions     # List business transactionsproof example business-notary          # Create a notary
# Real Estate API examplesproof example real-estate-transactions  # List real estate transactionsproof example verify-address           # Verify an address
# SCIM API examplesproof example scim-users <org-id>       # List SCIM usersproof example scim-schema <org-id>      # Get SCIM user schema

Configuration

The CLI stores configuration in ~/.proof-cli/:

  • config.json - Main configuration file
  • api_key - API key (permissions 0600)

Configuration options:

  • endpoint - API endpoint URL
  • timeout - Request timeout in seconds
bash
# View current configurationproof config get
# Set API endpointproof config set-endpoint "https://api.proof.com"
# Set request timeoutproof config set-timeout 30
# Set API keyproof config set-api-key "your-api-key"

Global Flags

All commands support these global flags:

  • --pretty - Pretty print JSON output (default: true)
  • --verbose - Show additional debug output
  • --help - Show help information

Environment Variables

  • PROOF_API_KEY - API key for authentication
  • PROOF_ENDPOINT - Override default API endpoint
  • PROOF_TIMEOUT - Request timeout in seconds

Error Handling

The CLI provides detailed error messages and uses standard exit codes:

  • 0 - Success
  • 1 - General error (API error, invalid arguments, etc.)

Development

Building from Source

bash
git clone https://github.com/tsarlewey/proof-cli.gitcd proof-cligo mod downloadgo build -o proof

Makefile Targets

The project provides a Makefile for common development tasks:

bash
make build          # Build the ./proof binarymake install        # Install the CLI via go installmake fmt            # Run go fmtmake vet            # Run go vetmake test           # Run all testsmake test-race      # Run all tests with -racemake coverage       # Run tests with coverage profilemake check          # fmt + vet + build + test-racemake clean          # Remove the built binarymake smoke          # Run shell smoke tests against live APImake smoke-go       # Run Go smoke tests (build-tag smoke)make smoke-write    # Run shell write smoke tests (PROOF_SMOKE_WRITE=1)make smoke-write-go # Run Go write smoke tests (build-tag smoke_write)

SDK Source

The generated Go SDK clients now live in their own repo: github.com/tsarlewey/proof-sdk-go. This CLI imports them as a regular Go module dependency. If you need to regenerate the clients after an upstream OpenAPI spec change, work inside the SDK repo — the generation toolchain (OpenAPI specs, oapi-codegen configs, preprocessing scripts, make regenerate) moved there.

To pick up a new SDK release in this CLI:

bash
go get github.com/tsarlewey/proof-sdk-go@<new-version>go mod tidymake check

Adding or Updating Commands

CLI commands live in cmd/ (one file per API surface) and are built with Cobra. Each command's Run closure calls a method on the generated SDK client via the factory helpers in cmd/root.go (getBusinessClient, getRealEstateClient, getSCIMClient). The factories wrap the SDK client with common.AuthenticatedDoer (from the SDK repo), which injects OAuth bearer tokens or the API key on every request.

Shared helpers in cmd/root.go:

  • initializeForAPICall — lazy client setup, used as PreRun on every API-calling command.
  • PrintResponse / PrintVerbose — response output with optional pretty-printing and colorization.
  • parseDateFlag — parses optional date-flag values, exits with a clear message on parse failure.
  • isSuccess — 2xx status-code check.
  • checkAPIStatus — after every SDK call, exits 1 with the body on stderr if the API returned a non-2xx response.

Errors from SDK calls are funneled through utils.HandleError(err, "action phrase") for transport errors and checkAPIStatus(resp.StatusCode(), resp.Body, "action phrase") for application-level HTTP errors. Both exit 1.

Support

For issues and feature requests, please visit the GitHub repository.

License

Source: README.md at commit c7aa383

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v0.3.1LatestSep 30, 2026