Quickstart
Three steps: get a sandbox key, create a verification, read the verdict per claim. Sandbox requests hit deterministic fake sources that use the same source codes as production.
1. Get a sandbox API key
Open the dashboard, create an account and copy a pc_test_… key. Sandbox base URL: https://sandbox.primarycheck.com/v1. Live keys (pc_live_…) are issued after customer vetting; see Authentication.
2. Create a verification
curl https://api.primarycheck.com/v1/verifications \
-H "Authorization: Bearer pc_live_…" \
-H "Idempotency-Key: 6f1c0b5e-…" \
-H "Content-Type: application/json" \
-d '{
"person": { "firstName": "Amy", "middleName": "E", "lastName": "Kowalski", "dob": "1976-02-14" },
"claims": [
{ "type": "license", "state": "PA", "profession": "rn", "number": "RN353077L", "claimId": "c1" },
{ "type": "npi", "number": "1003000126" },
{ "type": "exclusion_screen", "npi": "1003000126" }
],
"purpose": "employment",
"consent": { "consentId": "cons_8f1…" },
"reference": "ATS-48213"
}'3. Read the verdict for each claim
The response is 201 with status: pending or complete. Poll GET /v1/verifications/{id}?wait=25 or subscribe to verification.completed webhooks.
{
"id": "ver_7c1e0b1f2a9d4e8f0b3c",
"object": "verification",
"status": "complete",
"purpose": "employment",
"reference": "ATS-48213",
"claims": [
{
"index": 0, "claimId": "c1", "type": "license", "verdict": "verified", "reason": null,
"summary": { "status": "Active - Multistate", "expires": "2028-04-30", "multistate": true, "flags": [] },
"results": [
{
"source": "PA-PALS", "role": "primary", "status": "ok", "verdict": "verified",
"checkedAt": "2026-11-03T14:05:09Z",
"fieldChecks": [
{ "field": "license_number", "claimed": "RN353077L", "found": "RN353077L", "match": true },
{ "field": "name", "claimed": "Amy Kowalski", "found": "Amy E Kowalski", "match": true },
{ "field": "license_type", "claimed": "rn", "found": "Registered Nurse", "match": true },
{ "field": "status", "claimed": "active", "found": "Active - Multistate", "match": true },
{ "field": "expires", "claimed": ">= 2026-11-03", "found": "2028-04-30", "match": true }
],
"evidence": ["evd_a1…", "evd_b2…"]
}
]
},
{ "index": 1, "type": "npi", "verdict": "verified", "results": [ { "source": "US-NPPES", "verdict": "verified" } ] },
{ "index": 2, "type": "exclusion_screen", "verdict": "verified",
"results": [ { "source": "US-OIG-LEIE", "verdict": "verified", "dataAsOf": "2026-10-30T00:00:00Z" } ] }
],
"createdAt": "2026-11-03T14:05:04Z",
"completedAt": "2026-11-03T14:05:11Z",
"fcra": { "controlsVersion": "fcra-controls-2026-11-03.0" }
}Sandbox magic names
In the sandbox, person.lastName drives the outcome: Verified, Discrepancy, Notfound, Ambiguous, Pending (completes after 60 s), Slow (5 min). Anything else verifies. Details in Sandbox.