The Content-Type entity header is used to describe the media type of a resource. In requests, a Content-Type header tells the server what type of data is being sent. In responses, it tells the client what type of data the returned content actually is.
Our default is to accept data as application/x-www-form-urlencoded (which is typical for most websites you interact with), but you are free to send other data types, like application/json, as it suits you. Simply specify the Content-Type in the header of the request.
curl -X POST https://api.checkr.com/v1/candidates \
-H "Content-Type: application/json" \
-u YOUR_API_KEY: \
-d '{"first_name": "John", "last_name": "Smith", "email": "john.smith@gmail.com"}'By default, an API response contains the requested resource, and provides the IDs of related resources. You can also request related resources to be embedded in the initial response.
The include parameter specifies the names of resources that should be embedded in the response. Resources to embed must be comma-separated.
curl -X GET "https://api.checkr.com/v1/reports/59b650f567e1dd0f01422b92?include=candidate,ssn_trace,county_criminal_searches" \
-u YOUR_API_KEY:Pagination is enabled for endpoints that return a list of records.
There are two parameters that control pagination: page, which specifies the page number to retrieve, and per_page, which indicates how many records each page should contain. The default value of per_page is 25 records.
curl -X GET "https://api.checkr.com/v1/candidates?page=2&per_page=25" \
-u YOUR_API_KEY:| Parameters | Description |
|---|---|
page | integer greater than or equal to 1 |
per_page | integer between 0 and 100 |
Paginated responses include the following attributes:
| Attributes | Description |
|---|---|
count | integer the total number of items |
data | array list of objects |
next_href | string URI to fetch the next page of results |
object | string "list" |
previous_href | string URI to fetch the previous page of results |
In order to provide a high-quality of service for all customers, our API is rate limited. The current limit is 1200 requests per minute across all endpoints. We reserve the right to adjust the rate limit for given endpoints.
If the rate limit is exceeded, the API responds with a HTTP 429 "Too Many Requests" status code. The response has a X-Ratelimit-Reset header that tells you when the rate limit count will reset.
Here are the headers related to rate limiting that our API returns for any requests:
| Header | Description |
|---|---|
X-Ratelimit-Limit | Number of requests allowed per minute |
X-Ratelimit-Remaining | Remaining number of requests allowed for the current minute |
X-Ratelimit-Reset | Time at which the rate limit count resets |
Here are some recommendations to stay under the limit:
- Subscribe to Checkr webhooks to get updates about a report's activity instead of polling.
- If you do anticipate situations where you could exceed the limit, we recommend using an exponential backoff (wait 2 seconds, then 5, then 10, then 30, etc.) and retrying the API call.
The Checkr API supports idempotency in POST requests. Use this feature to safely repeat POST requests without accidentally creating the same reports or candidates multiple times.
First, provide an Idempotency-Key: <key> header to the POST request. This header value will be used server side to recognize retries of the same request.
The client side must then generate a unique value for every POST request, and re-use the same header value in any subsequent retry attempts. We recommend the use of V4 UUIDs to avoid collisions.
curl -X POST https://api.checkr.com/v1/reports \
-u YOUR_API_KEY: \
-H 'Idempotency-Key: 40b23921-c005-4ec7-832a-3ae023dbbc11' \
-d package=driver_pro \
-d candidate_id=be529e5d8cc5ad26e655ce89 \
-d consent_document_ids[]=b73f89e14b393979857806f9When serving the request with a new idempotency key, Checkr service will save the response (including status code, headers, body) for the first request if it is successful (2xx status), and return the saved response for later requests with the same idempotency key.
The idempotency key expires after 24 hours. Retries with an expired idempotency key will be handled as new requests.
409 HTTP status code will be received when another request with the same idempotency key is still being processed. Wait for the other request to complete before making a new request with the same idempotency key.
The Checkr API supports alphanumeric character input, as well as accented characters and some punctuation marks.
Corresponding regex character ranges: [a-zA-Z0-9ªµºÀ-ÖØ-öø-ÿ\-'., ]
| ª | µ | º | À | Á | Â | Ã | Ä | Å | Æ |
| Ç | È | É | Ê | Ë | Ì | Í | Î | Ï | Ð |
| Ñ | Ò | Ó | Ô | Ö | Ø | Ù | Ú | Û | Ü |
| Ý | Þ | ß | à | á | â | ã | ä | å | æ |
| ç | è | é | ê | ë | ì | í | î | ï | ð |
| ñ | ò | ó | ô | õ | ö | ø | ù | ú | û |
| ü | ý | þ | ÿ | ' | . | , | - |
Checkr's product incorporates SSN field controls designed to not accept SSNs with the following characteristics:
- SSNs without exactly 9 numeric characters
- SSNs that start with 666 (666-34-3768)
- SSNs that start with 9 (967-65-4325)
- SSNs that are a single digit (111-11-1111)
- SSNs that are sequential digits (123-45-6789)
The Checkr API validates submitted email addresses using the industry standard RFC 5322. The string length must be <=255, and the domain must be valid and configured to accept email. (For example: gmail.com is a valid domain, while gmeil.con is not.)
To avoid errors, we suggest that you validate emails used in your candidate creation requests.
Checkr's API offers a number of error codes to facilitate your building and troubleshooting. Some common error codes include:
| Status Code | Response |
|---|---|
| 400 | SSN is invalid |
| 400 | Zipcode is invalid |
| 400 | Email is not a valid email address |
| 400 | First name must only contain letters, numbers, spaces, hyphens, apostrophes, periods, and commas |
| 400 | Last name must only contain letters, numbers, spaces, hyphens, apostrophes, periods, and commas |
| 400 | Middle name must only contain letters, numbers, spaces, hyphens, apostrophes, periods, and commas. |
| 400 | Report is too old to upgrade |
| 400 | New package does not add any screenings |
| 400 | Candidate must have a driver license number and a driver license state for the package mvr |
| 400 | Report has a pre-existing adverse action. See Update a Report |
| 400 | SSN is invalid. TIN was provided. |
| 400 | SSN has already been taken |
| 400 | First name must only contain letters, numbers, spaces, hyphens, apostrophes, periods, and commas", "Last name must only contain letters, numbers, spaces, hyphens, apostrophes, periods, and commas |
| 400 | Candidate must be at least 16 years old |
| 400 | Candidate must be at least 18 years old |
| 400 | Candidate must have SSN for the package driver_premium |
| 400 | Candidate has reached the limit of Reports allowed |
| 400 | Candidate must_not have middle name when no_middle_name flag is set to true for the candidate report_id= |
| 400 | Candidate must have middle name when no_middle_name flag is set for the candidate report_id= |
| 400 | No middle name can not be updated, No middle name must have middle name when no_middle_name flag is set to false for the candidate candidate_id= |
| 400 | Report driver license state not supported or not enabled for account |
| 400 | Number Driver license number must only contain letters, numbers, spaces, hyphens, and asterisks |
| 400 | Number can't be blank, State can't be blank, State is not a valid US state |
| 403 | Forbidden |
| 403 | Sorry, your account is not approved for production |
| 403 | Candidate has requested that their PII be removed |
| 409 | Duplicate geo, name: peninsulasw_wa, state: WA already exists |
| 409 | Duplicate report detected. No more than 3 reports per candidate can be created within a 24 hour period |
| 409 | Duplicate candidate detected. No more than 2 duplicate candidates can be created within a 24 hour period |
Screenings can be canceled due to various scenarios. Here is a list of the current cancellation reasons and their descriptions.
| Reason | Description |
|---|---|
candidate_missing_consent | Candidate consent not provided |
candidate_pii_updated_customer_requested | Customer updated candidate PII prior to screening completion |
exception_ssn_trace | SSN Trace completed with an exception prior to screening completion |
source_inaccessible_closed_court | Court closed or has limited access to court records |
complete_now_customer_requested | Customer requested Complete Now prior to screening completion |
missing_required_information | Required information not received |
vendor_unable_to_complete | Vendor unable to complete screening |
vendor_account_deauthorized | Vendor deauthorized account |
international_entry_not_supported | Screening does not support international entries |
no_history_required_information | Candidate declared no history |
profile_on_hold_customer_requested | Customer requested candidate profile on hold |
candidate_withdrew_consent | Candidate withdrew consent |
minors_package_not_enabled | Package not configured to allow candidates under age 18 |
candidate_below_minimum_age | Candidate is below the minimum age for a background check |
exception_mvr | MVR canceled with an exception |
customer_account_deauthorized | Customer account was deauthorized |
adverse_action_completed | Adverse Action completed prior to screening completion |
adverse_action_suspended_report_timer_customer_requested | Customer configured the Adverse Action on Suspended Reports feature and its timer expired prior to screening completion |
unable_to_fulfill_mvr | Unable to fulfill MVR request as data is not available |
identity_verification_unverified | Identity Verification completed with an Unverified result and action was taken to cancel the Report |
request_withdrawn | Request withdrawn |
license_state_not_enabled | Unable to fulfill MVR request as driver license state is not enabled for account |
Verification type values that indicate additional information or actions requested from a candidate. These types are shown inside of webhooks and from the API for verifications. For more information about verifications please visit the links for the webhook events or the api.
| Type |
|---|
candidate_employment_history |
driver_license |
driver_license_history |
education |
id |
id_document |
license_document |
passport_document |
previous_license_document |
ssn_confirmation |
ssn_document |
matrix |
consent |
Workflow types are high-level flows the employee can select at the moment of creating an I9 form, it affects what will be the filling experience is from a candidate’s perspective.
| Workflow Type | Description |
|---|---|
remote_section_1_only | Employee will complete Section 1 on their own. Then Employer help them complete Section 2 on-site. |
employee_appointment | Employee will complete Section 1 on their own. Then Employer authorize an employee-designated representative to help them complete Section 2. |
Represents the current status of the I-9/E-Verify process.
| Status | Description |
|---|---|
Section 1 in progress | Indicates that the employee must complete Section 1. |
Section 2 in progress | Indicates that the employer/customer or the Authorized Representative (when applicable) must complete Section 2. |
E-Verify in progress | Indicates that the E-Verify case is in progress. |
Action required | Indicates that the employer/customer must take action — for example, resolving an E-Verify Tentative Non-Confirmation (TNC), a photo match, or a document upload, or following up on a rejected Section 1. |
Authorized | Indicates that the Form I-9 is complete and, when E-Verify is enabled for the Worksite, the E-Verify case closed as authorized. |
Unauthorized | Indicates that the E-Verify case closed without confirming employment authorization (for example, a Final Nonconfirmation). |
Checkr has compiled the following table of valid driver license number input per jurisdiction. To avoid errors, we suggest that you implement driver license number validation for both the Candidates and Driver Licenses endpoints.
| Jurisdiction | Validation Criteria | Regex |
|---|---|---|
| AL | 7-8 Numeric | /\A\d{7,8}\z/ |
| AK | 7 Numeric | /\A\d{7}\z/ |
| AZ | (1 Alpha + 8 Numeric) OR 9 Numeric | /\A[A-Z]{1}\d{8}\z/ OR /\A\d{9}\z/ |
| AR | 9 Numeric | /\A\d{9}\z/ |
| CA | 1 Alpha + 7 Numeric | /\A[A-Z]{1}\d{7}\z/ |
| CO | 9 Numeric | /\A\d{9}\z/ |
| CT | 9 Numeric | /\A\d{9}\z/ |
| DE | 2-7 Numeric | /\A\d{2,7}\z/ |
| DC | 7-9 Numeric | /\A\d{7,9}\z/ |
| FL | 1 Alpha + 12 Numeric | /\A[A-Z]{1}\d{12}\z/ |
| GA | 9 Numeric | /\A\d{9}\z/ |
| HI | ("H" + 8 Numeric) or 9 Numeric | /\AH\d{8}\z/ OR /\A\d{9}\z/ |
| ID | (2 Alpha + 6 Numeric + 1 Alpha) or 9 Numeric | /\A[A-Z]{2}\d{6}[A-Z]{1}\z/ OR /\A\d{9}\z/ |
| IL | 1 Alpha + 11-12 Numeric | /\A[A-Z]{1}\d{11,12}\z/ |
| IN | 10 Numeric | /\A\d{10}\z/ |
| IA | 9 Numeric or (3 Numeric + 2 Alpha + 4 Numeric) | /(\A\d{9}\z)/ OR /(\A\d{3}[A-Z]{2}\d{4}\z)/ |
| KS | "K" + 8 Numeric | /\A[K]{1}\d{8}\z/ |
| KY | 1 Alpha + 8 Numeric | /\A[A-Z]{1}\d{8}\z/ |
| LA | ("0" + 7 Numeric) OR ("0" + 8 Numeric) OR 7 Numeric or 8 Numeric | /\A[0]{0,1}\d{7,8}\z/ |
| ME | 7 Numeric | /\A\d{7}\z/ |
| MD | (1 Alpha + 12 Numeric) OR ("MD" + 11 Numeric) | /\A[A-Z]{1}\d{12}\z/ OR /\AMD\d{11}\z/ |
| MA | ("SA" + 7 Numeric) OR ("S" + 8 Numeric) OR 9 Numeric | \ASA\d{7}\z OR \AS\d{8}\z OR \A\d{9}\z |
| MI | 1 Alpha + 12 Numeric | /\A[A-Z]{1}\d{12}\z/ |
| MN | 1 Alpha + 12 Numeric | /\A[A-Z]{1}\d{12}\z/ |
| MS | 9 Numeric | /\A\d{9}\z/ |
| MO | 9 Numeric OR (1 Alpha + 5-9 Numeric) OR (3 Numeric + 1 Alpha + 6 Numeric) | /(\A\d{9}\z)/ OR /(\A[A-Z]{1}\d{5,9}\z)/ OR /(\A\d{3}[A-Z]{1}\d{6}\z)/ |
| MT | 13 Numeric or 9 Alpha-Numeric or (3 Alpha + 10 Numeric) | /(\A\d{13}\z)/ OR /(\A(\d|[A-Z]){9}\z)/ OR \ /(\A[A-Z]{3}\d{10}\z)/ |
| NE | 1 Alpha + 3-8 Numeric | /\A[A-Z]{1}\d{3,8}\z/ |
| NV | 9-10 Numeric OR 12 Numeric OR ("X" + 8 Numeric) | /\A\d{9,10}\z/ OR /\A\d{12}\z/ OR /\AX\d{8}\z/ |
| NH | (2 Numeric + 3 Alpha + 5 Numeric) OR (("NHL" or "NHN") + 8 Numeric) | /(\A\d{2}[A-Z]{3}\d{5}\z)/ OR /(\A(NHL|NHN)\d{8}\z)/ |
| NJ | 1 Alpha + 14 Numeric | /\A[A-Z]{1}\d{14}\z/ |
| NM | 9 Numeric | /\A\d{9}\z/ |
| NY | 9 Numeric OR 1 Alpha + 18 Numeric | /(\A\d{9}\z)/ OR /(\A[A-Z]{1}\d{18}\z)/ |
| NC | 4-12 Numeric (with up to 5 leading zeros) | /\A0{0,5}\d{4,12}\z/ |
| ND | 9 Alpha-Numeric | /\A(\d|[A-Z]){9}\z/ |
| OH | (1-2 Alpha + 4-7 Numeric) OR 8 Numeric | /(\A[A-Z]{1,2}\d{4,7}\z)/ OR /(\A\d{8}\z)/ |
| OK | (1 Alpha + 9 Numeric) or 9 Numeric | /(\A[A-Z]{1}\d{9}\z)/ OR /(\A\d{9}\z)/ |
| OR | 5-7 Numeric OR (1 Alpha + 6 Numeric) | /(\A\d{5,7}\z)/ OR /(\A[A-Z]{1}\d{6}\z)/ |
| PA | 8 Numeric | /\A\d{8}\z/ |
| PR | 5-9 Numeric | /\A\d{5,9}\z/ |
| RI | 7-8 Numeric OR ("V" + 6 Numeric) | /(\A\d{7,8}\z)/ OR /(\AV\d{6}\z)/ |
| SC | 3-10 Numeric | /\A\d{3,10}\z/ |
| SD | 6-9 Numeric | /\A\d{6,9}\z/ |
| TN | 7-9 Numeric | /\A\d{7,9}\z/ |
| TX | 7-8 Numeric | /\A\d{7,8}\z/ |
| UT | 4-10 Numeric | /\A\d{4,10}\z/ |
| VT | 8 Numeric or (7 Numeric + 1 Alpha [A, F, J, K, L, Q, R, T, V, X, Y]) | /(\A\d{8}\z)/ OR /(\A\d{7}[AFJKLQRTVXY]\z)/ |
| VA | (1 Alpha + 8 Numeric) OR 9 Numeric | /\A[A-Z]{1}\d{8}\z/ OR /\A\d{9}\z/ |
| WA | (4-8 Alpha + 2-3 Numeric + 2 Alpha-Numeric) OR ("WDL" + 9 Alpha-Numeric) | /\A[A-Z*]{4,8}\d{2,3}(\d|[A-Z]){2}\z/ OR /\AWDL([A-Z]|\d){9}\z/ |
| WV | 7 Alpha-Numeric | /\A([A-Z]|\d){7}\z/ |
| WI | 1 Alpha + 13 Numeric | /\A[A-Z]{1}\d{13}\z/ |
| WY | 9 Numeric | /\A\d{9}\z/ |
| AB | 1-9 Numeric | /\A\d{1,9}\z/ |
| BC | 7-8 Numeric | /\A\d{7,8}\z/ |
| MB | 1 Alpha + 4 Alpha or Asterisk + 1 Alpha + 1 Alpha or Asterisk + 2 Alpha-Numeric + 1 Numeric + 2 Alpha-Numeric | /\A[A-Z][A-Z*]{4}[A-Z][A-Z*][A-Z0-9]{2}\d[A-Z0-9]{2}\z/ |
| NB | 1-7 Numeric | /\A\d{1,7}\z/ |
| NL | 1 Alpha + 9 Numeric | /\A[A-Z]\d{9}\z/ |
| NS | 5 Alpha or Asterisk + 9 Numeric | /\A[A-Z*]{5}\d{9}\z/ |
| NT | 1-6 Numeric | /\A\d{1,6}\z/ |
| NU | 1-6 Numeric | /\A\d{1,6}\z/ |
| ON | 1 Alpha + 14 Numeric | /\A[A-Z]\d{14}\z/ |
| PE | 1-6 Numeric | /\A\d{1,6}\z/ |
| QC | 1 Alpha + 10 Numeric + 1 Alpha-Numeric + 1 Numeric | /\A[A-Z]\d{10}[A-Z0-9]\d\z/ |
| SK | 8 Numeric | /\A\d{8}\z/ |
| YT | 1-6 Numeric | /\A\d{1,6}\z/ |