Background check API for programmatic access
Base URL
https://core.rightperson.com/api/v1
All API requests require a bearer token in the
Authorization
header. Tokens are permanent and do not expire.
If the token is missing or invalid, the API responds with
401 Unauthorized
.
API requests are limited to
60 requests per minute
per API key. Exceeding this limit returns
429 Too Many Requests
with the following headers:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests per window (60). |
| X-RateLimit-Remaining | Requests remaining in the current window. |
| X-RateLimit-Reset | Unix timestamp when the window resets. |
| Retry-After | Seconds until the next request is allowed. |
All error responses use a consistent envelope with a machine-readable
type
and a human-readable
message
.
| Status | Type | Description |
|---|---|---|
| 400 | validation_error | Missing required parameter. |
| 401 | authentication_error | Invalid or missing API token. |
| 403 | forbidden | API key lacks permission for this action. |
| 404 | not_found | Requested resource does not exist. |
| 422 | validation_error | Request body failed validation. |
| 429 | rate_limit_exceeded | Too many requests. See rate limiting section. |
Returns all submitted check requests for the authenticated account, ordered by most recent first.
Returns a single check request by ID, including all subjects.
Creates and submits a background check with one or more subjects in a single request.
| Attribute | Type | Required | Description |
|---|---|---|---|
| type | String | Yes | Check package type. See Check types . |
| subjects | Array | Yes | One or more subjects to check. Min 1. |
| message | String | No | Custom message included in the candidate notification email. |
| contact_name | String | No | Contact person name. Defaults to the account's primary user. |
| contact_email | String | No | Contact person email. Defaults to the account email. |
| contact_phone_number | String | No | Contact person phone. |
| contact_role | String | No | Contact person role/title. |
| education_requirements | String | No | Education requirements description (shown to candidates). |
| Attribute | Type | Required | Description |
|---|---|---|---|
| organization_name | String | Yes (CRC) | Name of the requesting organization. |
| organization_number | String | Yes (CRC) | Organization number. |
| crc_purpose_id | UUID | Yes (CRC) | Criminal record check purpose. |
| e_learning_course | String | No |
"none"
(default),
"generic"
, or
"sports"
.
|
| Attribute | Type | Required | Description |
|---|---|---|---|
| String | Yes | Candidate's email. Duplicates within the request are ignored. | |
| first_name | String | Yes | Candidate's first name. |
| last_name | String | Yes | Candidate's last name. |
| phone | String | No | Candidate's phone number. Used for SMS notifications. |
| Attribute | Type | Required | Description |
|---|---|---|---|
| job_role | String | Yes (CRC) | The role the candidate is being hired for. |
| job_description | String | Yes (CRC) | Description of the job. |
| already_employed | Boolean | Yes (CRC) | Whether the candidate is already employed. |
| temporary_job | Boolean | Yes (CRC) | Whether the position is temporary. |
| employed_on | String | Yes (CRC) |
Employment date (
"YYYY-MM-DD"
).
|
Webhook endpoints are configured by your account administrator. When events occur, payloads are delivered to your registered endpoints.
Webhook payloads are sent as
POST
requests with a JSON body. Each delivery includes:
| Header | Description |
|---|---|
| Content-Type | application/json |
| X-Webhook-Id | Unique delivery ID (UUID). |
| X-Webhook-Timestamp | Unix timestamp (seconds) when the delivery was sent. |
| X-Webhook-Signature |
HMAC-SHA256 hex digest of
{timestamp}.{body}
using the endpoint secret. Verify by computing the same HMAC and comparing. Reject deliveries older than 5 minutes to prevent replay attacks.
|
Failed deliveries are retried with exponential backoff up to 5 attempts.
Although duplicate deliveries are rare, your endpoint should be idempotent — use the
X-Webhook-Id
header to detect and ignore duplicates.
| Event | Description |
|---|---|
| check.created | A new check request was submitted via the API. |
| check.completed | All subjects in a check request have reached a final status. |
| subject.consent_given | A candidate gave consent to the background check. |
| subject.in_progress | Checks have begun for a subject. |
| subject.completed | All checks for a subject are complete. |
| subject.expired | A subject invitation expired without consent. |
Used by
check.created
and
check.completed
events.
Used by
subject.consent_given
,
subject.in_progress
,
subject.completed
, and
subject.expired
events.
| Type | Checks included |
|---|---|
| identity | Global identity |
| criminal_record | BankID, information, criminal record, e-learning |
| information | Identity, information |
| basic | Global identity, work experience, education |
| enhanced | Global identity, work experience, education, business interests, open source search |
| comprehensive | Global identity, work experience, education, business interests, open source search, personal credit, specific source search, related countries |