---
title: "Verify ID document"
method: POST
path: "/liveness/verify-id"
tags: ["Verification"]
---

# Verify ID document

`POST /liveness/verify-id`

Validates the identity document provided and returns detailed information, risk signals, and an overall decision.

## Request body

- VerifyIDRequest
  - `session_id` string, uuid, required — The session ID obtained from the /liveness/session endpoint

## Response `200`

Document verification completed

- VerifyIDResponse
  - `metadata` object
    - `project_id` string, uuid
    - `session_id` string, uuid
    - `account_id` string, nullable
    - `referring_session_id` string, uuid, nullable
    - `request_id` string, uuid
    - `timestamp` string, date-time
  - `decision` 'Fake' | 'Suspicious' | 'Real' — Overall decision
  - `risk_score` number, float — Risk score where higher values indicate higher risk
  - `risk_flags` string[] — See [Risk Flags](/verifications/id-check/resources/risk-flags) for more information.
  - `document_signals` object
    - `id_age` integer — Age of the person on the identity document, calculated from the date of birth on the ID
    - `face_age_estimate` 'under8' | 'over8' | 'over13' | 'over16' | 'over18' | 'over21' | 'over25' | 'over30' | 'over40' | 'over50' | 'over65', nullable — Estimated age bracket of the person in the captured selfie, independent of the document's date of birth. The value is the highest bracket the person clearly appears to exceed (e.g. someone who looks ~23 returns `over21`). `null` when no estimate is available.
    - `id_face_match_score` number, float — Score indicating how well the face matches the ID
    - `id_barcode_status` 'no_barcode_specificed_by_template' | 'barcode_requested_but_not_found' | 'barcode_requested_but_error_reading' | 'success' | 'barcode_requested_and_read_but_could_not_parse' — Status of the ID barcode verification
    - `id_face_status` 'not_available' | 'likely_original_face' | 'cannot_confirm_id_is_authentic' | 'ocr_template_does_not_support_detection' — Status of the face on the ID verification
    - `id_text_status` 'not_available' | 'likely_original_text' | 'cannot_confirm_id_is_authentic' — Status of the text on the ID verification
    - `is_id_digital_spoof` 'likely_physical_id' | 'could_not_confidently_determine_physical_id_user_needs_to_retry' — Indicates if the ID is likely a digital spoof
    - `is_full_id_captured` 'full_id_detected' | 'could_not_confidently_determine_full_id_user_needs_to_retry' — Indicates if the full ID was captured
    - `id_validity` 'likely_authentic_id' | 'likely_fake_id' | 'cannot_confirm_id_is_authentic' — Indicates the validity of the ID
  - `document_data` object
    - `template_info` object
      - `document_country_code` string — Country code of the ID document
      - `document_state` string — State of the ID document
      - `template_type` 'passport' | 'driver_license' | 'state_id' | 'national_id' | 'residence_permit' | 'other' | 'unknown' — Type of the ID document
    - `user_data` object
      - `first_name` string — First name from the ID
      - `last_name` string — Last name from the ID
      - `date_of_birth` string — Date of birth from the ID, formatted as MM/DD/YYYY
      - `date_of_expiration` string — Expiration date of the ID, formatted as MM/DD/YYYY
      - `date_of_issue` string — Issue date of the ID, formatted as MM/DD/YYYY
      - `id_number` string — ID number from the document
      - `id_number2` string — Secondary ID number if applicable
      - `address` object
        - `city` string — City from the address
        - `country` string — Country from the address
        - `postal_code` string — Postal code from the address
        - `state` string — State from the address
        - `street` string — Street address
  - `device_network_signals` object
    - `device_risk` number, float — Risk score for the device
    - `proxy` number, float — Probability of proxy usage
    - `vpn` number, float — Probability of VPN usage
    - `datacenter` number, float — Probability of datacenter IP
    - `tor` number, float — Probability of Tor usage
    - `spoofed_ip` number, float — Probability of IP spoofing
    - `recent_fraud_ip` number, float — Probability of recent fraud association
    - `device_network_mismatch` number, float — Probability of device-network mismatch
    - `location_spoofing` number, float — Probability of location spoofing
  - `referring_session_signals` object
    - `impossible_travel` number, float — Probability of impossible travel
    - `ip_mismatch` number, float — Probability of IP mismatch
    - `user_agent_mismatch` number, float — Probability of user agent mismatch
    - `device_timezone_mismatch` number, float — Probability of device timezone mismatch
    - `ip_timezone_mismatch` number, float — Probability of IP timezone mismatch
  - `photo_urls` object
    - `face` string, uri — Signed URL to the face image
  - `video_urls` string[]
  - `session_data` object
    - `true_country_code` string — Country code of the true location
    - `network` object
      - `ip_address` string
      - `service_provider` string
      - `connection_type` string
    - `location` object
      - `continent` string
      - `country_code` string
      - `state` string
      - `city` string
      - `zip_code` string
      - `timezone` string
      - `latitude` number
      - `longitude` number
    - `browser` object
      - `type` string
      - `version` string
      - `language` string
      - `user_agent` string
      - `timezone` string
    - `device` object
      - `category` 'desktop' | 'mobile' | 'tablet' | 'console' | 'smarttv' | 'wearable' | 'embedded' | 'other' — Device category. See [Device Categories](/signals-scores/device#device-categories) for details.
      - `type` string
      - `os` string
      - `cpu_cores` integer
      - `memory` integer
      - `gpu` string
  - `matches` object
    - `num_accounts_linked` integer — Number of accounts linked
    - `accounts_linked` object[] — List of linked accounts
      - `account_id` string — Account ID
      - `match_types` string[] — Types of matches found

## Other responses

- `400` — Bad request - session is not valid

---

[API](https://skmtc.net/verisoul/apis/verisoul-api.md) · [All operations](https://skmtc.net/verisoul/apis/verisoul-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/verisoul/verisoul-api/revisions/a4f2fd0ee333/schema)
