IDN KYB Comprehensive
curl --request POST \
--url https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"companyName": "<string>",
"country": "<string>",
"registrationNumber": "<string>",
"trustFlowId": 0,
"trustValidationId": "{your_trust_validation_id}"
}
'import requests
url = "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive"
payload = {
"companyName": "<string>",
"country": "<string>",
"registrationNumber": "<string>",
"trustFlowId": 0,
"trustValidationId": "{your_trust_validation_id}"
}
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({
companyName: '<string>',
country: '<string>',
registrationNumber: '<string>',
trustFlowId: 0,
trustValidationId: '{your_trust_validation_id}'
})
};
fetch('https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive', 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/kyb/idn/comprehensive",
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([
'companyName' => '<string>',
'country' => '<string>',
'registrationNumber' => '<string>',
'trustFlowId' => 0,
'trustValidationId' => '{your_trust_validation_id}'
]),
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/kyb/idn/comprehensive"
payload := strings.NewReader("{\n \"companyName\": \"<string>\",\n \"country\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"trustFlowId\": 0,\n \"trustValidationId\": \"{your_trust_validation_id}\"\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/kyb/idn/comprehensive")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"companyName\": \"<string>\",\n \"country\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"trustFlowId\": 0,\n \"trustValidationId\": \"{your_trust_validation_id}\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive")
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 \"companyName\": \"<string>\",\n \"country\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"trustFlowId\": 0,\n \"trustValidationId\": \"{your_trust_validation_id}\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "IDN KYB Comprehensive Request Received",
"data": {
"companyFound": true
},
"verificationStatus": "IN_PROGRESS",
"verificationStatusCode": 5,
"trustFlowId": 189,
"trustValidationId": "{your_trust_validation_id}",
"metadata": null,
"createdAt": "2026-06-05 06:31:31+0000"
}Indonesia
IDN KYB Comprehensive
Comprehensive Know Your Business verification for Indonesian companies. Two-step asynchronous flow.
POST
/
api
/
v3
/
verifications
/
kyb
/
idn
/
comprehensive
IDN KYB Comprehensive
curl --request POST \
--url https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"companyName": "<string>",
"country": "<string>",
"registrationNumber": "<string>",
"trustFlowId": 0,
"trustValidationId": "{your_trust_validation_id}"
}
'import requests
url = "https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive"
payload = {
"companyName": "<string>",
"country": "<string>",
"registrationNumber": "<string>",
"trustFlowId": 0,
"trustValidationId": "{your_trust_validation_id}"
}
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({
companyName: '<string>',
country: '<string>',
registrationNumber: '<string>',
trustFlowId: 0,
trustValidationId: '{your_trust_validation_id}'
})
};
fetch('https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive', 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/kyb/idn/comprehensive",
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([
'companyName' => '<string>',
'country' => '<string>',
'registrationNumber' => '<string>',
'trustFlowId' => 0,
'trustValidationId' => '{your_trust_validation_id}'
]),
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/kyb/idn/comprehensive"
payload := strings.NewReader("{\n \"companyName\": \"<string>\",\n \"country\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"trustFlowId\": 0,\n \"trustValidationId\": \"{your_trust_validation_id}\"\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/kyb/idn/comprehensive")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"companyName\": \"<string>\",\n \"country\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"trustFlowId\": 0,\n \"trustValidationId\": \"{your_trust_validation_id}\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{environment-subdomain}.idmetagroup.com/api/v3/verifications/kyb/idn/comprehensive")
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 \"companyName\": \"<string>\",\n \"country\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"trustFlowId\": 0,\n \"trustValidationId\": \"{your_trust_validation_id}\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "IDN KYB Comprehensive Request Received",
"data": {
"companyFound": true
},
"verificationStatus": "IN_PROGRESS",
"verificationStatusCode": 5,
"trustFlowId": 189,
"trustValidationId": "{your_trust_validation_id}",
"metadata": null,
"createdAt": "2026-06-05 06:31:31+0000"
}Run a comprehensive Know Your Business verification on an Indonesian company by name. This verification uses a two-step asynchronous flow. Initial API request usually take up to 45 seconds to determine whether the company exists, and up to 3 minutes to return the full results due to the slowness of the Indonesian AHU registry.
If the API finds a matching company, it proceeds to gather the company information and returns the results to your webhook via
resultNotificationURL. If no match is found, the webhook will be sent with no company detail results (empty data.result).
The initial API response acknowledges the request with verificationStatus: IN_PROGRESS if the company is found, or REJECTED if no matching company exists. When the company is found, the final result is delivered to the resultNotificationURL you supply. The webhook envelope carries type: "verification.idn_kyb_comprehensive" and a verificationStatus of VERIFIED (records found) or REJECTED (no records matched the supplied name).
Data source
Company information is retrieved from Administrasi Hukum Umum (AHU).Webhook callback
When the search-and-detail flow completes, IDmeta sends a POST to yourresultNotificationURL with the payload below.
{
"type": "verification.idn_kyb_comprehensive",
"success": true,
"message": "IDN KYB Comprehensive Completed",
"data": {
"shareholders": {
"total": 2,
"data": {
"individual": [
{
"shareholderNameOG": "Example Shareholder One",
"isTranslated": false,
"shareholderNameEN": "Example Shareholder One",
"entityType": "COMPANY",
"percentageOwned": "50.00%",
"capital": "17910171500",
"currency": "IDR",
"shareholderID": null,
"shareholderLocation": null,
"shareType": null,
"numberOfShares": null,
"dob": null
},
{
"shareholderNameOG": "Example Shareholder Two",
"isTranslated": false,
"shareholderNameEN": "Example Shareholder Two",
"entityType": "COMPANY",
"percentageOwned": "50.00%",
"capital": "17712500",
"currency": "IDR",
"shareholderID": null,
"shareholderLocation": null,
"shareType": null,
"numberOfShares": null,
"dob": null
}
]
}
},
"companyInformation": {
"total": 1,
"data": [
{
"name": {
"companyName": "Example Company Indonesia",
"isTranslated": false,
"companyNameOG": null
},
"companyStatus": "TERTUTUP",
"entityType": "PMA",
"industry": [
{
"industryCode": "47919",
"industryName": "Perdagangan Eceran Melalui Media Untuk Berbagai Macam Barang Lainnya"
},
{
"industryCode": "47920",
"industryName": "Perdagangan Eceran Atas Dasar Balas Jasa (Fee) Atau Kontrak"
},
{
"industryCode": "62019",
"industryName": "Aktivitas Pemrograman Komputer Lainnya"
},
{
"industryCode": "66413",
"industryName": "Penyelenggara Penunjang Sistem Pembayaran"
},
{
"industryCode": "77322",
"industryName": "Aktivitas Penyewaan dan Sewa Guna Tanpa Hak Opsi Alat Alat Bantu Teknologi Digital"
}
],
"regAddress": {
"full": "Example Commercial Area, Jl. Contoh Raya RT: 000 RW: 000, Jakarta Selatan"
},
"capital": [
{
"capitalAmount": "17927884000",
"currency": "IDR",
"numberOfShares": "25304",
"paidUpCapital": "17927884000"
}
],
"companyIDOther1": null,
"companyID": null,
"incorpDate": null
}
]
},
"majorPerson": {
"total": 5,
"data": [
{
"enName": "Example Person One",
"ogName": "Example Person One",
"isTranslated": false,
"role": "DIREKTUR",
"address": null,
"identity": null
},
{
"enName": "Example Person Two",
"ogName": "Example Person Two",
"isTranslated": false,
"role": "KOMISARIS",
"address": "Jl. Contoh Raya No. 1, Jakarta Selatan",
"identity": null
}
]
}
},
"verificationStatus": "VERIFIED",
"verificationStatusCode": 3,
"trustFlowId": 189,
"trustValidationId": "{your_trust_validation_id}",
"metadata": null
}
Authorizations
Use Bearer {your_api_token} in the Authorization header.
Body
application/json
Name of the company to be verified.
Country where the company is registered.
Official company registration number.
Trust flow identifier used to categorize or group requests for tracking or reporting.
Trust validation identifier for the verification request.
Response
200 - application/json
Verification accepted (async). Final result is delivered via webhook.

