curl --request POST \
--url https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"imageFrontSide": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
}
'import requests
url = "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough"
payload = { "imageFrontSide": "data:image/jpeg;base64,/9j/4AAQSkZJRg..." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({imageFrontSide: 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'})
};
fetch('https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'imageFrontSide' => 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough"
payload := strings.NewReader("{\n \"imageFrontSide\": \"data:image/jpeg;base64,/9j/4AAQSkZJRg...\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"imageFrontSide\": \"data:image/jpeg;base64,/9j/4AAQSkZJRg...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"imageFrontSide\": \"data:image/jpeg;base64,/9j/4AAQSkZJRg...\"\n}"
response = http.request(request)
puts response.read_bodyDocument verification
Verify a supported identity document and return authenticity checks, extracted fields, and document images.
curl --request POST \
--url https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"imageFrontSide": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
}
'import requests
url = "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough"
payload = { "imageFrontSide": "data:image/jpeg;base64,/9j/4AAQSkZJRg..." }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({imageFrontSide: 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'})
};
fetch('https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'imageFrontSide' => 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough"
payload := strings.NewReader("{\n \"imageFrontSide\": \"data:image/jpeg;base64,/9j/4AAQSkZJRg...\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"imageFrontSide\": \"data:image/jpeg;base64,/9j/4AAQSkZJRg...\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/document-verification-passthrough")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"imageFrontSide\": \"data:image/jpeg;base64,/9j/4AAQSkZJRg...\"\n}"
response = http.request(request)
puts response.read_bodyVerification configuration
screenMatchLevel
Determines how strictly the service checks for screen replay attacks. Higher levels detect digital displays more aggressively but may reject valid physical documents.
Select Level1 through Level10. Level1 is the least strict and Level10 is the most strict. Defaults to Level5 if omitted.
photocopyMatchLevel
Controls how strictly the service checks for photocopied documents. Higher levels detect photocopies more aggressively but may reject more genuine physical documents.
Select Level1 through Level10. Level1 is the least strict and Level10 is the most strict. Defaults to Level5 if omitted.
photoForgeryMatchLevel
Controls how strictly the service checks for photo forgery, including photo replacement, face swapping, and digital editing. Higher levels apply stricter checks but may reject more genuine documents.
Select Level1 through Level10. Level1 is the least strict and Level10 is the most strict. Defaults to Level5 if omitted.
staticSecurityFeaturesMatchLevel
Controls how strictly the service verifies visible security features such as background patterns, microprinting, fine-line artwork, and document-design consistency. Higher levels provide stricter fraud detection but may increase false rejections.
Select Level1 through Level10. Level1 is the least strict and Level10 is the most strict. Defaults to Level5 if omitted. Set this field to Disabled to skip the check.
documentTypeFilter
Restricts verification to the specified issuing country and document types. Set country to an ISO 3166-1 alpha-3 country code and list one or more supported values in cardType.
The following filter accepts only Malaysian driver’s licences:
{
"documentTypeFilter": {
"country": "MYS",
"cardType": [
"malaysia_driver_license"
]
}
}
Supported document type filters
- Philippines
- Malaysia
- Indonesia
- Australia
PHL as the country value.cardType value | Document |
|---|---|
philippines_driving_license | LTO Driver License |
philippines_prc | PRC ID |
philippines_social_security | SSS ID |
philippines_umid_ssn | UMID ID |
philippines_health_insurance_card | Health Insurance Card |
philippines_tax_id | Tax ID |
philippines_passport | Passport |
philippines_philsys_id | PhilSys ID |
philippines_voter_id | Voter ID |
philippines_postal_id | Postal ID |
philippines_alien_id | Alien ID (ACR I-Card) |
MYS as the country value.cardType value | Document |
|---|---|
malaysia_mykad | MyKad |
malaysia_driver_license | Driver’s License |
malaysia_i_kad | i-Kad |
malaysia_mykas | MyKAS |
malaysia_mykid | MyKid |
malaysia_mypolis | MyPolis |
malaysia_mypr | MyPR |
malaysia_mytentera | MyTentera |
malaysia_refugee_id | Refugee ID |
malaysia_passport | Polycarbonate Passport |
IDN as the country value.cardType value | Document |
|---|---|
indonesia_ktp | Indonesian ID (KTP) |
indonesia_driver_license | Driver’s License |
indonesia_passport | Passport |
AUS as the country value.cardType value | Document |
|---|---|
australia_driver_license | Driver License |
australia_passport | Passport |
australia_identity_card | Identity Card |
australia_health_insurance_card | Health Insurance Card |
country and one of the values in cardType. Check data.response.documentTypeFilter.documentTypeMatchesFilter in the response to confirm the match.Example configuration
This configuration verifies Malaysian driver’s licences, applies level 5 screen and photocopy detection, level 3 photo-forgery detection, and skips static-security-feature validation.{
"screenMatchLevel": "Level5",
"photocopyMatchLevel": "Level5",
"photoForgeryMatchLevel": "Level3",
"staticSecurityFeaturesMatchLevel": "Disabled",
"documentTypeFilter": {
"country": "MYS",
"cardType": [
"malaysia_driver_license"
]
}
}
Interpret the response
success: true means the API processed the request. Use verificationStatus, data.response.verification.recommendedOutcome, and data.response.verification.result to determine the verification outcome.
| Field | Meaning |
|---|---|
data.response.checks | Nested authenticity, liveness, validity, and extracted-data checks. |
data.response.processIndicators | Capture-quality and scan-process signals such as clarity, cropping, and hand presence. |
data.response.extraction | Extracted fields, side-specific results, and detected document classification. |
data.response.images | Returned document and portrait images. Availability depends on the detected document. |
data.response.optionsUsed | Effective verification settings applied by the service. |
data.response.documentTypeFilter | Configured filters, detected type, and whether the detected document matched the filter. |
data.response.runtime | Processing duration, component versions, recognition path, and trace ID. |
NotPerformed means that a check was disabled, unsupported, or not applicable to the submitted document. It does not by itself mean the document failed verification.Authorizations
Use your API token as a Bearer token in the Authorization header.
Headers
"Bearer {your_api_token}"
Body
Front document image as a JPEG or PNG data URL containing base64-encoded image data.
"data:image/jpeg;base64,/9j/4AAQSkZJRg..."
Back document image as a JPEG or PNG data URL. Include this field for a two-sided document.
"data:image/jpeg;base64,/9j/4AAQSkZJRg..."
Your reference data. The API returns this object unchanged in the response.
{ "customerRef": "ACME-8891" }
Controls how strictly the service checks for screen replay attacks. Level1 is the least strict and Level10 is the most strict. Higher levels may reject more valid physical documents. Defaults to Level5 if omitted.
Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Level10 "Level5"
Controls how strictly the service checks for photocopied documents. Level1 is the least strict and Level10 is the most strict. Higher levels may reject more genuine physical documents. Defaults to Level5 if omitted.
Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Level10 "Level5"
Controls how strictly the service checks for photo forgery. Level1 is the least strict and Level10 is the most strict. Higher levels may reject more genuine documents. Defaults to Level5 if omitted.
Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Level10 "Level3"
Controls how strictly the service verifies visible security features. Level1 is the least strict and Level10 is the most strict. Higher levels may increase false rejections. Defaults to Level5 if omitted. Use Disabled to skip this check.
Disabled, Level1, Level2, Level3, Level4, Level5, Level6, Level7, Level8, Level9, Level10 "Disabled"
Show child attributes
Show child attributes
Response
Document verification completed. Use verificationStatus and the nested verification result to determine the business outcome.
Whether the request was processed successfully.
Show child attributes
Show child attributes
Business outcome for the verification request.
"VERIFIED"
Numeric code for verificationStatus.
3
"document_verification"
UTC timestamp when the verification record was created.
Metadata supplied in the request.

