Skip to main content
POST
/
background-check
/
v1
/
orders
Create Order
curl --request POST \
  --url https://sandbox.theary.com/background-check/v1/orders

Create Order

Creates one background check order. Use sandbox to validate request shape and move the same contract to production with production credentials. Supported searchType values: EMPLOYMENT and EDUCATION only. CRIMINAL, REFERENCE, criminalCheck, and history.criminal are not accepted.

Request body field reference

Top-level body

FieldRequiredTypeNotes
applicantYesobjectSee Applicant.
businessContextYesobjectProposed job / worksite (not applicant home address). See BusinessContext.
searchTypesYesarrayAt least one search recommended. Values: EMPLOYMENT or EDUCATION only.
historyNoobjectEmployment and/or education records to verify.
webhookConfigNoobjectPer-order webhook overrides.
defaultSearchConfigNoobjectOrder-level policy defaults, including channel, outbound, timing, and third-party ban overrides. Replaced per-search when searchTypes[].searchConfig is set.

applicant

FieldRequiredTypeNotes
firstNameYesstring
lastNameYesstring
ssnYesstringXXX-XX-XXXX format.
birthdayNostringYYYY-MM-DD
phoneNostring
emailNostringValid email if provided.
signedReleaseFileUrlNostringHTTPS URL, gs:// URI, or base64-encoded PDF (max 10MB). See Signed release file.
addressesNoarrayOptional. Omit or send [] for no home address.
applicantAliasNoarrayAlternate names.

applicant.addresses[] (when non-empty)

FieldRequiredTypeNotes
addressTypeYesstringConvention: "home".
addressLine1Yesstring
addressLine2Nostring
addressCityYesstring
addressStateYesstring2-letter US state code.
addressZipCodeYesstring1–10 characters.
addressCountryNostring2-letter code; defaults to US.
startDateYesstringYYYY-MM-DD
endDateNostringnull or omitted = current address. Exactly one entry must be current when the array is non-empty.

businessContext

FieldRequiredTypeNotes
entityNameYesstringEmployer the candidate applies to.
appliedJobTitleYesstring
worksiteCityYesstringProposed job location (not applicant home).
worksiteStateYesstring2-letter state code.
proposedSalaryYesnumber
positionLevelNostringe.g. EXECUTIVE, STANDARD, SENSITIVE
securityClearanceRequiredNoboolean
industrySectorNostring

searchTypes[]

FieldRequiredTypeNotes
searchTypeYesenumEMPLOYMENT or EDUCATION
externalSearchIdNostringClient correlation ID.
questionnaireUrlNostring
questionnaireAccessCodeNostring
searchConfigNoobjectPer-search policy overrides. Replaces defaultSearchConfig for this search when present (even {}).

Search policy fields

Use defaultSearchConfig for order-wide defaults, or searchTypes[].searchConfig for one search. See SearchConfigDto for the full nested table.
FieldTypeNotes
thirdPartyBanstring[]Canonical vendor codes to suppress for this search, such as TALX_WORK_NUMBER or NSCH. Max 50; UNKNOWN is rejected. See Third-party ban.
channelsobjectChannel enablement, preferred channel, allowed destinations, and blocked destinations.
timingobjectSLA, outbound window, and business-hours overrides.
outboundobjectAttempt caps, third-party deferral, terminal-inbound outbound cancel, and contactHints.
researchobjectResearch controls such as skipResearch.
inboundobjectManual-review and auto-complete behavior for inbound responses.
escalationobjectAuto-escalation, escalation webhook URL, and broad third-party event suppression.
notificationsobjectNotification suppression, raw inbound inclusion, and webhook override routing.

history

FieldRequiredTypeNotes
employmentNoarraySee employment history table.
educationNoarraySee education history table.

history.employment[]

FieldRequiredTypeNotes
employerNameYesstring
positionYesstring
employerLocationNostring
employerEmailNostring
employerPhoneNostring
employerFaxNostring
startDateNostringYYYY-MM-DD
endDateNostringOmit/null for current job.

history.education[]

FieldRequiredTypeNotes
institutionNameYesstring
qualificationYesstring
fieldOfStudyYesstring
institutionLocationNostring
startDateNostring
endDateNostring
graduationDateNostring
institutionContactEmailNostring
institutionContactPhoneNostring

Conditional requirements

  • applicant.addresses is optional. Employment and education verification use businessContext.worksite* and history locations, not home address.
  • If addresses is non-empty: exactly one current address (endDate: null or omitted); startDate must be before endDate on historical rows.
  • Do not send addresses: [{}] — omit the field instead of sending partial address objects.
  • criminalCheck and history.criminal return 400 if present in the request body.

Minimal example (no home address)

{
  "searchTypes": [{ "searchType": "EMPLOYMENT" }],
  "applicant": {
    "firstName": "John",
    "lastName": "Smith",
    "ssn": "123-45-6789"
  },
  "businessContext": {
    "entityName": "Apple",
    "appliedJobTitle": "Senior Software Engineer",
    "worksiteCity": "San Francisco",
    "worksiteState": "CA",
    "proposedSalary": 100000
  },
  "history": {
    "employment": [
      {
        "employerName": "Tech Corp",
        "position": "Software Engineer",
        "employerLocation": "San Francisco, CA",
        "startDate": "2020-01-15",
        "endDate": "2023-06-30"
      }
    ]
  }
}

Full example (with home address)

Use this JSON body to create a single employment verification order with optional applicant home address.
{
  "searchTypes": [
    {
      "searchType": "EMPLOYMENT",
      "externalSearchId": "client-emp-001"
    }
  ],
  "applicant": {
    "firstName": "John",
    "lastName": "Smith",
    "ssn": "123-45-6789",
    "birthday": "1990-05-15",
    "phone": "+1-555-123-4567",
    "email": "john.smith@example.com",
    "signedReleaseFileUrl": "https://example.com/signed-release.pdf",
    "addresses": [
      {
        "addressType": "home",
        "addressLine1": "456 Oak Avenue",
        "addressCity": "Los Angeles",
        "addressState": "CA",
        "addressZipCode": "90210",
        "addressCountry": "US",
        "startDate": "2021-01-01",
        "endDate": null
      }
    ]
  },
  "businessContext": {
    "entityName": "Apple",
    "appliedJobTitle": "Senior Software Engineer",
    "worksiteCity": "San Francisco",
    "worksiteState": "CA",
    "proposedSalary": 100000,
    "positionLevel": "STANDARD",
    "securityClearanceRequired": false,
    "industrySector": "TECHNOLOGY"
  },
  "history": {
    "employment": [
      {
        "employerName": "Tech Corp",
        "position": "Software Engineer",
        "employerLocation": "San Francisco, CA",
        "employerEmail": "hr@techcorp.com",
        "employerPhone": "+1-555-123-4567",
        "startDate": "2020-01-15",
        "endDate": "2023-06-30"
      }
    ]
  },
  "webhookConfig": {
    "enabled": true,
    "secret": "webhook-secret-for-hmac-validation",
    "retryAttempts": 3,
    "fallbackEndpoint": "https://your-app.com/webhooks/verification"
  }
}

cURL

Save the JSON above as order.json, then:
curl -X POST "https://sandbox.theary.com/background-check/v1/orders" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  --data @order.json

Optional search policy override

Use defaultSearchConfig for order-wide defaults. Add searchConfig inside a searchTypes[] entry only when that search needs different behavior; per-search config replaces the order default for that search.
{
  "defaultSearchConfig": {
    "thirdPartyBan": ["TALX_WORK_NUMBER"],
    "channels": {
      "email": true,
      "voice": true,
      "fax": false,
      "preferredChannel": "EMAIL"
    },
    "outbound": {
      "maxAttemptsPerMethod": 3,
      "maxTotalAttempts": 8
    }
  },
  "searchTypes": [
    {
      "searchType": "EMPLOYMENT",
      "searchConfig": {
        "thirdPartyBan": ["TALX_WORK_NUMBER", "TRUEWORK"],
        "channels": {
          "email": true,
          "voice": false,
          "fax": false,
          "preferredChannel": "EMAIL"
        },
        "outbound": {
          "contactHints": [
            { "email": "hr@techcorp.com", "priority": "HIGH" }
          ]
        }
      }
    }
  ]
}
For client-specific third-party restrictions, see Third-party ban for supported vendor codes, multiple-value examples, and deferral behavior.

Response

{
  "verificationOrderId": "ord_123e4567-e89b-12d3-a456-426614174000",
  "searchIds": ["search_456e7890-e89b-12d3-a456-426614174001"]
}
Next, call Get order searches or rely on webhooks.

Error responses

400 Bad Request
{
  "statusCode": 400,
  "message": ["searchTypes must not be empty"],
  "error": "Bad Request"
}
401 Unauthorized
{
  "statusCode": 401,
  "message": "Unauthorized"
}