How can we help? 👋

About Candidate Status

Complete reference of all candidate (contact) statuses and meta statuses used in CheckHub, essential for technical integrators.

📌 A note on terminology — CheckHub's newer web interface (Admin) uses the term contact to be more generic, while the API still uses the term candidate from the original version. The two refer to the same entity. This article uses candidate to stay consistent with the API, where these status codes appear.

Every candidate managed through CheckHub goes through a lifecycle represented by a status. Understanding these statuses is essential for building a robust integration, as they determine what state a candidate profile is in and what actions can or should be taken.

How Statuses Work

Each candidate status has three components:

  • Code — a numeric identifier (e.g. 100, 201, 900) used in the API payloads.
  • Name — a human-readable constant (e.g. NEW_CANDIDATE, VALIDATION_IN_PROGRESS) that describes the specific status.
  • Meta Status — a higher-level grouping (e.g. NEW_CANDIDATE, PENDING, VALIDATED, ERROR) that categorizes statuses into broad lifecycle stages.

The meta status is useful when you want to simplify your integration logic. Instead of handling every individual status code, you can branch on the meta status to cover the main workflow phases of a candidate.

Status Reference Table

Meta Status
Code
Name
Description
NEW_CANDIDATE
100
CREATED_BY_ADMIN
The candidate profile has been manually created by an admin user through the CheckHub interface.
NEW_CANDIDATE
101
CREATED_BY_INTEGRATION
The candidate profile has been created programmatically via the API or a third-party integration.
PENDING
200
DOCUMENT_OR_RESOURCE_NEEDED
The candidate profile is awaiting required documentation, files, or external resources before it can proceed.
PENDING
201
COMPLETE
All required information and documentation have been provided; the profile is ready for review.
PENDING
202
VALIDATION_IN_PROGRESS
The candidate's files or profile details are currently undergoing manual or automated validation.
VALIDATED
300
VALIDATED_BY_ADMIN
The candidate profile and all associated data have been reviewed and successfully approved by an admin.
VALIDATED
301
VALIDATED_BY_AUTO_CHECK
The candidate profile has passed all automated verification checks and is successfully validated.
ERROR
900
REJECTED_BY_ADMIN
The candidate profile has been manually reviewed and rejected by an admin.
ERROR
901
REJECTED_BY_INTEGRATION
An external integration or API process flagged an issue and rejected the candidate profile.
ERROR
902
REJECTED_BY_AUTO_CHECK
The system's automated check rules failed, resulting in an automatic rejection of the candidate.

Meta Status Overview

NEW_CANDIDATE — The initial stage of the candidate lifecycle. The profile has been successfully provisioned in the system but no verification work has started yet.

PENDING — The active operational stage. The candidate is either uploading required assets, waiting to be processed, or currently in the review queue.

VALIDATED — The successful final state. The candidate has passed all criteria (either via automated rules or human eyes) and is fully cleared.

ERROR — Something went wrong. The profile has been rejected by an admin, an automation routine, or an external system. Active intervention or re-submission is typically required to move the candidate out of this state.

Tips for Integrators

  • When polling or receiving webhooks, use the numeric code for precise status matching and the meta status for broader lifecycle logic.
  • Remember that the PENDING meta status covers multiple sub-states (200, 201, 202) — make sure your integration accounts for a candidate moving through resource collection, completion, and validation while still under the same meta status.
  • Both the NEW_CANDIDATE and ERROR meta statuses distinguish between admin-driven and integration/automated actions via their codes — branch on the specific code when you need to know the origin of a status change.
  • A candidate created via your integration will start at code 101 (CREATED_BY_INTEGRATION), which is a useful signal for reconciling records on your side.
Did this answer your question?
😞
😐
🤩