Proof End-to-End Example

This example walks through the full document proofing flow: upload, proof job creation, polling, chunk inspection, receipt retrieval, and proofpack verification. All commands use curl and assume the three required environment variables are set.

Setup

export VAULTCRUX_API_URL="https://api.vaultcrux.com"
export VAULTCRUX_API_KEY="vcrx_your-api-key"
export VAULTCRUX_TENANT_ID="your-tenant-id"

Step 1: Upload the document

curl -sS -X POST "$VAULTCRUX_API_URL/v1/ingest" \
  -H "content-type: application/json" \
  -H "x-tenant-id: $VAULTCRUX_TENANT_ID" \
  -H "x-api-key: $VAULTCRUX_API_KEY" \
  -d '{
    "doc_id": "contract-2026-003",
    "content": "This agreement governs the use of services between Acme Corp and VaultCrux...",
    "mime_type": "text/plain",
    "metadata": {"type": "contract", "version": "1.0"}
  }'

Expected response:

{"job_id": "ingest_abc123", "status": "queued", "doc_id": "contract-2026-003"}

Wait a few seconds for ingestion to complete, then proceed.

Step 2: Trigger a proof job

curl -sS -X POST "$VAULTCRUX_API_URL/v1/proof/jobs" \
  -H "content-type: application/json" \
  -H "x-tenant-id: $VAULTCRUX_TENANT_ID" \
  -H "x-api-key: $VAULTCRUX_API_KEY" \
  -d '{"doc_id": "contract-2026-003"}'

Expected response:

{"proof_job_id": "pjob_xyz789", "status": "queued", "doc_id": "contract-2026-003"}

Save proof_job_id:

export PROOF_JOB_ID="pjob_xyz789"

Step 3: Poll for completion

curl -sS "$VAULTCRUX_API_URL/v1/proof/jobs/$PROOF_JOB_ID" \
  -H "x-tenant-id: $VAULTCRUX_TENANT_ID" \
  -H "x-api-key: $VAULTCRUX_API_KEY"

Poll until status is completed. Typical transition: queuedprocessingcompleted. On completion the response includes a receipt_id.

{
  "proof_job_id": "pjob_xyz789",
  "status": "completed",
  "doc_id": "contract-2026-003",
  "receipt_id": "rcpt_def456",
  "completed_at": "2026-03-29T10:14:32Z"
}

Save receipt_id:

export RECEIPT_ID="rcpt_def456"

Step 4: Inspect proof chunks

curl -sS "$VAULTCRUX_API_URL/v1/proof/jobs/$PROOF_JOB_ID/chunks" \
  -H "x-tenant-id: $VAULTCRUX_TENANT_ID" \
  -H "x-api-key: $VAULTCRUX_API_KEY"

Returns the chunk lineage: each chunk's ID, content hash, byte range, and evidence provenance. Use this to verify that the right sections of the document contributed to the proof.

Step 5: Retrieve the receipt and proofpack

curl -sS "$VAULTCRUX_API_URL/v1/proof/receipts/$RECEIPT_ID/proofpack" \
  -H "x-tenant-id: $VAULTCRUX_TENANT_ID" \
  -H "x-api-key: $VAULTCRUX_API_KEY"

The proofpack is a signed payload containing:

  • Tenant and request identity
  • Chunk lineage with content hashes
  • Service version context
  • Signature over the full payload body

Step 6: Verify the proofpack

Validate the signature field against the payload body using the published verification key. If the payload has been altered since issuance, signature verification will fail. Archive the proofpack alongside your audit log with an immutable timestamp.

For verification controls and failure states, see Receipt Verification.