Proof Docs

Jobs

Start a QA Job, review its evidence and Findings, or follow its progress stream.

Create a Job

POST /api/jobs

bash
curl "$PROOF_URL/api/jobs" \
  --request POST \
  --header "Authorization: Bearer $PROOF_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
  "projectId": "repo_storefront",
  "naturalLanguageTask": "Complete checkout with a declined card and confirm no order is created",
  "baseUrl": "https://storefront.example.com",
  "networkAllowlist": ["api.stripe.com"],
  "trigger": "cli",
  "channelContext": {}
}'

A request returns 202 Accepted and a Job ID. A runnable request also returns the Workflow ID and the resolved Check ID.

json
{
  "jobId": "job_abc123",
  "workflowIdentity": "wrun_xyz789",
  "testId": "check_declined_card"
}
json
{
  "jobId": "job_needs_context",
  "status": "review_required",
  "resolution": {
    "kind": "needs_clarification",
    "assumptions": [],
    "questions": ["May Proof place a test order, and what spending limit applies?"],
    "ambiguities": ["Completing checkout might place a real order."]
  }
}

Request body

The API key determines the organization. Provide exactly one of testId or naturalLanguageTask.

FieldTypePresenceDescription
projectIdstringRequiredConnected repository to inspect or replay.
testIdstringConditionalExisting check to replay.
naturalLanguageTaskstringConditionalCustomer task for semantic interpretation.
commitShastringOptionalRepository revision, at least seven characters.
baseUrlURLRequiredBrowser target for the product.
networkAllowliststring[]OptionalAdditional hosts the browser and deterministic test may contact.
triggerenumRequiredweb, github, slack, cli, schedule, or system.
channelContextobjectOptionalOpaque delivery context returned to the originating channel.

Answer clarification

POST /api/jobs/:jobId/clarifications

Send one answer for each question on a review_required Job. Proof keeps the original Job and creates a linked Job that includes your answers.

bash
curl "$PROOF_URL/api/jobs/job_needs_context/clarifications" \
  --request POST \
  --header "Authorization: Bearer $PROOF_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{"answers":["Use test mode only; do not place a real order."]}'

The CLI command is proof answer job_needs_context --answer "Use test mode only; do not place a real order.". Repeat --answer in question order when the Job has more than one question.

Get a Job

GET /api/jobs/:jobId

Returns the Job record, event history, safe artifact details, and Findings. It does not include private storage URLs.

bash
curl "$PROOF_URL/api/jobs/job_abc123" --header "Authorization: Bearer $PROOF_API_KEY"

Follow progress

GET /api/jobs/:jobId/events

Returns newline-delimited JSON from the Workflow progress stream. Use content type application/x-ndjson. Pass ?after=12 to continue from a known event.

bash
curl --no-buffer "$PROOF_URL/api/jobs/job_abc123/events?after=0" --header "Authorization: Bearer $PROOF_API_KEY"

Errors

StatusWhen returned
400Request validation fails.
401Machine authentication fails.
404Job or Workflow stream is unavailable.
503Live execution or required AI execution is paused.