PrimaryCheck

Accounts and team

An account owns API keys, verifications and billing. People join an account as members with a role. The dashboard signs people in with a magic link; API keys never expire and belong to the account, not to a person.

Sign up

curl -X POST https://api.primarycheck.com/v1/signup \
  -H "Authorization: Bearer pc_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "amy@mercystaffing.com",
    "name": "Amy Rivera",
    "company": "Mercy Staffing"
  }'

Creates the account, its first owner and a default pc_test_ key, and mails a sign-in link. 409 email_in_use when the address already has an account. Outside production the response also carries loginUrl so local development needs no mailbox.

Magic-link sessions

StepCallResult
1POST /v1/sessions { email }Always 202 { sent: true }; a link is mailed only when the address is known. Never reveals whether an email exists.
2The person opens the link (valid 15 minutes, single use)The dashboard receives ?token=
3POST /v1/sessions/exchange { token }{ sessionToken: "pcs_…", user, account, role, expiresAt }; the session lasts 30 days.
4DELETE /v1/sessions/currentSign out (204).

A session token is sent exactly like an API key (Authorization: Bearer pcs_…). Orders placed under a session are recorded as dashboard channel in usage. Some calls require a session rather than a key: creating or revoking API keys, changing the account, managing members.

Roles

RoleCan
ownerEverything, including granting the owner role and removing owners. An account always keeps at least one owner.
adminCreate live and test keys, manage members and invites (not owners), update the account, order and read everything.
memberOrder verifications, create test keys, read everything.
viewerRead only. Any non-GET request returns 403 read_only_role.
opsPrimaryCheck staff only, on staff accounts.

API keys

curl -X POST https://api.primarycheck.com/v1/api_keys \
  -H "Authorization: Bearer pc_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ATS production",
    "mode": "live"
  }'
{ "id": "key_…", "name": "ATS production", "mode": "live", "prefix": "pc_live_3kd9",
  "createdAt": "2026-11-03T14:05:09Z", "lastUsedAt": null, "revokedAt": null,
  "key": "pc_live_3kd9…"            ← shown once }
  • GET /v1/api_keys lists keys with prefix, creation, last use and revocation; never the secret.
  • DELETE /v1/api_keys/{id} revokes immediately (owner or admin). Requests with a revoked key return 401 invalid_api_key.
  • mode is live or test; test keys work only against the sandbox host. Live keys are issued once the account's FCRA vetting is approved.
  • Each key has its own per-second limit and the account a per-minute limit; see Rate limits.

Team members and invites

CallWhoNotes
GET /v1/account/membersany memberid, userId, email, name, role, createdAt
POST /v1/account/members/invites { email, role }owner, adminMails an invite valid 7 days. 409 already_member if the address is on the account.
POST /v1/invites/{token}/accept { name? }the invitee (no auth)Joins the account and returns a session.
PATCH /v1/account/members/{id} { role }owner, adminOnly an owner touches owners. 409 last_owner protects the final owner.
DELETE /v1/account/members/{id}owner, admin204.
PATCH /v1/account { name }owner, adminRename the account.

Audit

Every sign-in, key creation, invite, role change, order and report download is written to the account audit log with the actor (user:… or key:…), IP and timestamp, and can be exported with GET /v1/account/audit.