Background Check API Overview
The Background Check API creates verification orders, runs employment and education searches asynchronously, and notifies your systems via webhooks. Every request is scoped by the tenant claim in your JWT.Base URLs
| Environment | Base URL |
|---|---|
| Sandbox | https://sandbox.theary.com |
| Production | https://api.theary.ai |
POST https://sandbox.theary.com/background-check/v1/orders).
Quick start checklist
- Contact SNH AI for sandbox access (you receive a Bearer JWT with
tenantclaim). Authentication. - Verify connectivity:
GET https://sandbox.theary.com/health(no auth). - Test auth:
GET https://sandbox.theary.com/background-check/v1/orderswith Authorization. - Create a test order with the JSON body in Create order or Quickstart.
- Poll
GET …/orders/{id}/searchesor handle webhooks for progress and completion. - Validate
X-Webhook-Signaturebefore processing webhook events. - When satisfied, contact SNH AI for production credentials (
https://api.theary.ai).
Authentication
Send a Bearer JWT on every request except unauthenticated health (if your deployment exposesGET /health without auth—confirm with your environment). Typical pattern:
Integration path (recommended)
- Obtain a JWT and verify connectivity with
GET /health(see Quickstart). - Optionally attach a signed release PDF in
applicant.signedReleaseFileUrl— HTTPS URL,gs://URI from Generate upload URL, or inline base64 (max 10MB). See Signed release file. - Create an order with
POST /background-check/v1/ordersusing VerificationRequest (requiresapplicant,businessContext,searchTypes; addhistory,webhookConfig,defaultSearchConfigas needed). - Track work with webhooks first (Webhook overview); poll Get order, List searches, or Get search as a supplement.
- Handle errors with retries for transient failures (Error handling).
Stable consumer endpoints
| Area | Method & path | Purpose |
|---|---|---|
| Health | GET /health | Liveness (response shape may vary by deployment). |
| Orders | POST /background-check/v1/orders | Create one order (returns verificationOrderId, searchIds). |
| Orders | GET /background-check/v1/orders | Paginated list of orders. |
| Orders | GET /background-check/v1/orders/{id} | Order with related data. |
| Orders | DELETE /background-check/v1/orders/{id} | Cancel order and associated searches (best-effort). |
| Searches | GET /background-check/v1/orders/{id}/searches | All searches for an order. |
| Searches | GET /background-check/v1/orders/{id}/searches/{searchId} | One search including activity when present. |
| Files | GET /files/release-form/generate-upload-url | Presigned upload + fileUri for release PDFs. |
| Inbound | POST /background-check/v1/inbound/notifications | Submit inbound verification payloads (contact-submitted material). |
| Batches | POST /background-check/v1/batches | Submit many orders in one request (see limitations below). |
Search types
ConfiguresearchTypes on each order. Supported values: EMPLOYMENT and EDUCATION only. See SearchType and the Create order field reference.
Use Search config at order level (defaultSearchConfig) or per search (searchTypes[i].searchConfig) for research, outbound, channel, inbound, notification, and third-party vendor-ban overrides.
Async lifecycle and webhooks
Orders and searches move through backend workflow phases asynchronously. Do not assume a search is finished when the create-order response returns. ConfigurewebhookConfig on the order (or rely on tenant defaults) so you receive:
verification.completed— terminal verification outcome.verification.action_required— manual follow-up or escalation.verification.notification— progress-style updates when enabled for your routing.
closeoutEndpoints and fallbackEndpoint (string URL, single object, or array). Verify HMAC-SHA256 signatures using your shared secret. Details: Webhook overview, Events, Integration.
Endpoints with limited or placeholder behavior
Treat the following as not suitable for production batch orchestration until behavior is expanded:GET /background-check/v1/batches— Returns an emptybatcheslist and a message that batch tracking is not implemented.GET /background-check/v1/batches/{id}— Placeholder; no persisted batch entity.DELETE /background-check/v1/batches/{id}— Placeholder; does not delete orders. Cancel orders withDELETE /background-check/v1/orders/{id}.GET /background-check/v1/orders/{id}/events— Stub; returns an emptyeventsarray. Prefer webhooks and searchactivityfrom Get search.
POST /background-check/v1/batches runs createOrder for each entry in Promise.all: if one order fails validation, the whole request fails; if the server fails mid-flight, some orders may already exist—record returned verificationOrderId values per order and reconcile. There is no durable batch id tied to storage today (response batchId is synthetic).
OpenAPI note
The repo’s generatedopenapi.json may list internal or non-nav routes (research, Microsoft Graph hooks, voice, etc.). This Mintlify site’s sidebar is curated for external consumers; if a route is not documented here, assume it is not a supported public integration surface unless SNH AI enables it for you.
Errors
The API uses conventional HTTP status codes and JSON bodies (often Nest-stylestatusCode, message, error). See Error handling.
Next steps
Quickstart
Token, health, optional upload, create order, poll searches
Sandbox reference
Sandbox limits before production
Order lifecycle
Create, inspect, complete
Third-party ban
Suppress routing to specific third-party vendors
Create order
Full request reference
Webhooks
Events, routing, and signatures
Schemas
Request and webhook field reference
Authentication
Sandbox JWT and tenant claims