Verifying an Individual's Identity

An id_verification check requires the individual to complete a verification session with a
provider, presenting both an identity document and their face to a camera. It targets an
individual only.

The check is driven by a verification URL returned at creation, which the individual must open.
To submit document images directly, without a session completed by the individual, use
ID Document instead. The shared envelope, the status model and the
general review mechanism are described in The Check object.

Creating a check

POST /v1/checks/id_verification requires an individual_id. settings is optional.

curl -X POST https://api.dotfile.com/v1/checks/id_verification \
  -H "X-DOTFILE-API-KEY: $DOTFILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "individual_id": "4b36ce30-3d90-421a-b2d9-a046e5e4cfef",
    "settings": {
      "automatic_approval": true,
      "automatic_rejection": true,
      "redirect_url": "https://your-app.example.com/onboarding/done"
    }
  }'

The response contains the verification URL. No further request is required to obtain it.

Create an Identity verification check from the console

Settings

FieldTypeDefaultDescription
vendorenumcheckoutcheckout, veriff, onfido or idnow
modeenumautoThe session type, constrained by the vendor. See below
automatic_approvalbooleantrueRecord the provider's approval without manual confirmation
automatic_rejectionbooleantrueRecord the provider's rejection without manual confirmation
redirect_urlstringhttps://dotfile.comWhere the individual is sent once the session ends

Each field resolves independently, in order: request, then workspace settings, then the API
default. Workspace-level values are set in the console, described in
Liveness ID verification check.

Modes are vendor-specific:

VendormodeSession
checkoutautoVideoAuto, automated review
checkoutexpertVideoExpert (v2), systematic human review
checkoutcertifiedVideoCertified, PVID certified
idnowcertifiedVideoIdent, BaFin-compliant live agent
veriffdefaultthe vendor's single session type
onfidodefaultthe vendor's single session type

A mode the selected vendor does not offer is replaced by that vendor's first available mode
rather than rejected, so the effective value is data.settings.mode in the response. The ubble
vendor is deprecated: outside workspaces on the legacy configuration, a request specifying it is
served by checkout.

The verification URL

data.vendor.verification_url is the address the individual must open. It is valid for 15
minutes.

An expired URL is replaced in place rather than by creating a second check:

curl -X POST https://api.dotfile.com/v1/checks/id_verification/$CHECK_ID/refresh_url \
  -H "X-DOTFILE-API-KEY: $DOTFILE_API_KEY"

The response is the check, carrying a new data.vendor.verification_url valid for a further 15
minutes.

With the onfido vendor, data.vendor.sdk_token is also populated, for embedding the provider
SDK in a front-end instead of redirecting.

Identity verification check, approved, with its extracted information

Status

ConditionStatus
created, session not yet startedin_progress
session completed, provider processingprocessing
session abandoned or interruptedin_progress
provider approved, automatic_approval is trueapproved
provider rejected, automatic_rejection is truerejected
provider returned no result or an error, or the corresponding automatic setting is falseneed_review

A check returned to in_progress after an interrupted session accepts a refreshed URL and a new
attempt. automatic_rejection is disregarded when the two preceding attempts on the same check
were both rejected automatically by the system: the check is set to need_review instead.

Reading the result

data.result is approved, rejected, error or null. The evidence is returned on three
objects.

data.information holds the extracted data and the session metadata:

FieldDescription
document_typepassport, identity_card, driving_license, residence_permit, visa or other
document_number, mrzas printed on and encoded in the document
first_name, last_name, gender, nationalityidentity fields
birth_date, birth_place, birth_countryidentity fields. birth_place is a city name, in the air or at sea
issuing_date, issuing_country, expiration_datedocument validity
ip_addressthe device used to complete the session
front_file_id, back_file_id, face_file_id, video_file_id, signature_file_ididentifiers for Download a file. signature_file_id is populated for document types carrying a signature page

data.vendor holds name, verification_ref, verification_status, started_at,
ended_at, comment with the provider's reason on a rejection, and report_file_id when the
provider issues a report.

data.detailed_results holds the control-point breakdown, split across two objects:

ObjectControl points
documentdata_validation, data_consistency, data_comparison, image_integrity, visual_authenticity, compromised_document
faceface_comparison, image_integrity, visual_authenticity

Each is approved, rejected, error or null; a control point the provider did not evaluate
remains null.

detailed_results is marked deprecated in the schema. It remains the only structured breakdown
exposed by the API; the analysis-result model that replaces it is not yet public.

What each control point examines, and the document coverage per vendor, are described in
Liveness ID verification check.

Reviewing the check

curl -X PATCH https://api.dotfile.com/v1/checks/id_verification/$CHECK_ID/review \
  -H "X-DOTFILE-API-KEY: $DOTFILE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action": "reject", "comment": "Face comparison inconclusive on both attempts"}'

action is approve or reject, comment is optional, and override set to true changes a
decision already recorded. review.reviewer_type is set to api; automatic transitions record
system.

Following the check

The session may be completed long after the check is created. Subscribe to Check.Started,
Check.ReviewNeeded, Check.Approved and Check.Rejected rather than polling. See
Webhooks.

Create the id_verification check, send the individual to the verification URL, the session completes at the IDV provider, then follow the result asynchronously by webhook

Endpoints