API Quickstart
Two ways to get started: Browser-first (no code) or API-first (curl).
Flow A — Browser-First (No Code)
- Go to the Pilot page and start a 48h pilot preview.
- Preview access is instant.
- To run live submissions, unlock submit access with email verification and a refundable $1 card hold or manual approval.
- Once submit access is unlocked, open the Pilot Console.
- Drag & drop your ZIP, click Submit, and watch the status poll live.
- On PASS: download buttons appear for kit.zip, manifest, receipt, and offline verifier.
- On FAIL: download fail_report.json with a machine-readable resubmit checklist.
Flow B — API-First (curl)
Every command below is copy-pastable. Pipe responses through jq to capture IDs automatically.
Step 1 — Get a Submit Token
Start at the Pilot page. Preview access is instant. To run live API submissions, first unlock submit access with email verification and a refundable $1 card hold or manual approval.
Once submit access is approved, use your 48-hour submit token in the API calls below.
# Use your approved 48-hour submit token
PILOT_TOKEN=$(curl -s -X POST https://api.attestlayer.com/v1/pilot/tokens \
-H "Content-Type: application/json" \
-d '{"email":"pilot@demo.attestlayer.com","company":"Demo Corp"}' \
| jq -r '.pilot_token')
echo "Token: $PILOT_TOKEN"If you have an MMC subscription, use your X-API-Key header instead.
Step 2 — Create a Job
JOB_ID=$(curl -s -X POST https://api.attestlayer.com/v1/intake/jobs \
-H "X-Pilot-Token: $PILOT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"lane": "KIT-ZIP"}' \
| jq -r '.job_id')
echo "Job: $JOB_ID"Step 3 — Upload ZIP
curl -X POST https://api.attestlayer.com/v1/intake/jobs/$JOB_ID/upload \ -H "X-Pilot-Token: $PILOT_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @evidence.zip
Accepted formats inside ZIP: PDF, DOCX, XLSX, PNG, JPG, CSV, JSON. Max upload: 500 MB (pilot), plan-dependent for MMC.
Step 4 — Poll Status
curl -s https://api.attestlayer.com/v1/intake/jobs/$JOB_ID \ -H "X-Pilot-Token: $PILOT_TOKEN" | jq .
Status values: PENDING → UPLOADING → RUNNING → PASS | FAIL
Also returns: verify_status, sla_deadline_at (on PASS), delivered_at, diff_status.
Step 5 — Download Deliverables
curl -s https://api.attestlayer.com/v1/intake/jobs/$JOB_ID/artifacts \ -H "X-Pilot-Token: $PILOT_TOKEN" | jq .
On PASS:
- kit.zip (client-forwardable evidence kit)
- normalized_tree.zip, mapping.json, classification_report.json
- diff.json (if diff enabled)
On FAIL:
- fail_report.json (reason codes + resubmit checklist)
- normalized_tree.zip, mapping.json, classification_report.json
