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: queued → processing → completed. 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.

