Submit tier 2 verification
curl --request POST \
--url https://api.daya.co/v1/customers/{id}/tier2-verification \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"customer_type": "<string>",
"residential_address": {
"residential_address.street_line_1": "<string>",
"residential_address.city": "<string>",
"residential_address.subdivision": "<string>",
"residential_address.postal_code": "<string>",
"residential_address.country": "<string>"
},
"nationality": "<string>",
"birth_date": "<string>",
"identifying_information": [
{}
],
"source_of_funds": "<string>",
"account_purpose": "<string>",
"expected_monthly_payments_usd": "<string>",
"acting_as_intermediary": true,
"employment_status": "<string>",
"most_recent_occupation": "<string>",
"documents": [
{}
],
"business_legal_name": "<string>",
"business_description": "<string>",
"business_type": "<string>",
"registered_address": {},
"physical_address": {},
"is_dao": true,
"associated_persons": [
{
"associated_persons[].first_name": "<string>",
"associated_persons[].last_name": "<string>",
"associated_persons[].email": "<string>",
"associated_persons[].residential_address": {},
"associated_persons[].birth_date": "<string>",
"associated_persons[].has_ownership": true,
"associated_persons[].has_control": true,
"associated_persons[].is_signer": true,
"associated_persons[].title": "<string>",
"associated_persons[].nationality": "<string>",
"associated_persons[].identifying_information": [
{}
]
}
],
"estimated_annual_revenue_usd": "<string>",
"operates_in_prohibited_countries": true,
"conducts_money_services": true
}
'import requests
url = "https://api.daya.co/v1/customers/{id}/tier2-verification"
payload = {
"customer_type": "<string>",
"residential_address": {
"residential_address.street_line_1": "<string>",
"residential_address.city": "<string>",
"residential_address.subdivision": "<string>",
"residential_address.postal_code": "<string>",
"residential_address.country": "<string>"
},
"nationality": "<string>",
"birth_date": "<string>",
"identifying_information": [{}],
"source_of_funds": "<string>",
"account_purpose": "<string>",
"expected_monthly_payments_usd": "<string>",
"acting_as_intermediary": True,
"employment_status": "<string>",
"most_recent_occupation": "<string>",
"documents": [{}],
"business_legal_name": "<string>",
"business_description": "<string>",
"business_type": "<string>",
"registered_address": {},
"physical_address": {},
"is_dao": True,
"associated_persons": [
{
"associated_persons[].first_name": "<string>",
"associated_persons[].last_name": "<string>",
"associated_persons[].email": "<string>",
"associated_persons[].residential_address": {},
"associated_persons[].birth_date": "<string>",
"associated_persons[].has_ownership": True,
"associated_persons[].has_control": True,
"associated_persons[].is_signer": True,
"associated_persons[].title": "<string>",
"associated_persons[].nationality": "<string>",
"associated_persons[].identifying_information": [{}]
}
],
"estimated_annual_revenue_usd": "<string>",
"operates_in_prohibited_countries": True,
"conducts_money_services": True
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customer_type: '<string>',
residential_address: {
'residential_address.street_line_1': '<string>',
'residential_address.city': '<string>',
'residential_address.subdivision': '<string>',
'residential_address.postal_code': '<string>',
'residential_address.country': '<string>'
},
nationality: '<string>',
birth_date: '<string>',
identifying_information: [{}],
source_of_funds: '<string>',
account_purpose: '<string>',
expected_monthly_payments_usd: '<string>',
acting_as_intermediary: true,
employment_status: '<string>',
most_recent_occupation: '<string>',
documents: [{}],
business_legal_name: '<string>',
business_description: '<string>',
business_type: '<string>',
registered_address: {},
physical_address: {},
is_dao: true,
associated_persons: [
{
'associated_persons[].first_name': '<string>',
'associated_persons[].last_name': '<string>',
'associated_persons[].email': '<string>',
'associated_persons[].residential_address': {},
'associated_persons[].birth_date': '<string>',
'associated_persons[].has_ownership': true,
'associated_persons[].has_control': true,
'associated_persons[].is_signer': true,
'associated_persons[].title': '<string>',
'associated_persons[].nationality': '<string>',
'associated_persons[].identifying_information': [{}]
}
],
estimated_annual_revenue_usd: '<string>',
operates_in_prohibited_countries: true,
conducts_money_services: true
})
};
fetch('https://api.daya.co/v1/customers/{id}/tier2-verification', 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://api.daya.co/v1/customers/{id}/tier2-verification",
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([
'customer_type' => '<string>',
'residential_address' => [
'residential_address.street_line_1' => '<string>',
'residential_address.city' => '<string>',
'residential_address.subdivision' => '<string>',
'residential_address.postal_code' => '<string>',
'residential_address.country' => '<string>'
],
'nationality' => '<string>',
'birth_date' => '<string>',
'identifying_information' => [
[
]
],
'source_of_funds' => '<string>',
'account_purpose' => '<string>',
'expected_monthly_payments_usd' => '<string>',
'acting_as_intermediary' => true,
'employment_status' => '<string>',
'most_recent_occupation' => '<string>',
'documents' => [
[
]
],
'business_legal_name' => '<string>',
'business_description' => '<string>',
'business_type' => '<string>',
'registered_address' => [
],
'physical_address' => [
],
'is_dao' => true,
'associated_persons' => [
[
'associated_persons[].first_name' => '<string>',
'associated_persons[].last_name' => '<string>',
'associated_persons[].email' => '<string>',
'associated_persons[].residential_address' => [
],
'associated_persons[].birth_date' => '<string>',
'associated_persons[].has_ownership' => true,
'associated_persons[].has_control' => true,
'associated_persons[].is_signer' => true,
'associated_persons[].title' => '<string>',
'associated_persons[].nationality' => '<string>',
'associated_persons[].identifying_information' => [
[
]
]
]
],
'estimated_annual_revenue_usd' => '<string>',
'operates_in_prohibited_countries' => true,
'conducts_money_services' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$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://api.daya.co/v1/customers/{id}/tier2-verification"
payload := strings.NewReader("{\n \"customer_type\": \"<string>\",\n \"residential_address\": {\n \"residential_address.street_line_1\": \"<string>\",\n \"residential_address.city\": \"<string>\",\n \"residential_address.subdivision\": \"<string>\",\n \"residential_address.postal_code\": \"<string>\",\n \"residential_address.country\": \"<string>\"\n },\n \"nationality\": \"<string>\",\n \"birth_date\": \"<string>\",\n \"identifying_information\": [\n {}\n ],\n \"source_of_funds\": \"<string>\",\n \"account_purpose\": \"<string>\",\n \"expected_monthly_payments_usd\": \"<string>\",\n \"acting_as_intermediary\": true,\n \"employment_status\": \"<string>\",\n \"most_recent_occupation\": \"<string>\",\n \"documents\": [\n {}\n ],\n \"business_legal_name\": \"<string>\",\n \"business_description\": \"<string>\",\n \"business_type\": \"<string>\",\n \"registered_address\": {},\n \"physical_address\": {},\n \"is_dao\": true,\n \"associated_persons\": [\n {\n \"associated_persons[].first_name\": \"<string>\",\n \"associated_persons[].last_name\": \"<string>\",\n \"associated_persons[].email\": \"<string>\",\n \"associated_persons[].residential_address\": {},\n \"associated_persons[].birth_date\": \"<string>\",\n \"associated_persons[].has_ownership\": true,\n \"associated_persons[].has_control\": true,\n \"associated_persons[].is_signer\": true,\n \"associated_persons[].title\": \"<string>\",\n \"associated_persons[].nationality\": \"<string>\",\n \"associated_persons[].identifying_information\": [\n {}\n ]\n }\n ],\n \"estimated_annual_revenue_usd\": \"<string>\",\n \"operates_in_prohibited_countries\": true,\n \"conducts_money_services\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<x-api-key>")
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://api.daya.co/v1/customers/{id}/tier2-verification")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customer_type\": \"<string>\",\n \"residential_address\": {\n \"residential_address.street_line_1\": \"<string>\",\n \"residential_address.city\": \"<string>\",\n \"residential_address.subdivision\": \"<string>\",\n \"residential_address.postal_code\": \"<string>\",\n \"residential_address.country\": \"<string>\"\n },\n \"nationality\": \"<string>\",\n \"birth_date\": \"<string>\",\n \"identifying_information\": [\n {}\n ],\n \"source_of_funds\": \"<string>\",\n \"account_purpose\": \"<string>\",\n \"expected_monthly_payments_usd\": \"<string>\",\n \"acting_as_intermediary\": true,\n \"employment_status\": \"<string>\",\n \"most_recent_occupation\": \"<string>\",\n \"documents\": [\n {}\n ],\n \"business_legal_name\": \"<string>\",\n \"business_description\": \"<string>\",\n \"business_type\": \"<string>\",\n \"registered_address\": {},\n \"physical_address\": {},\n \"is_dao\": true,\n \"associated_persons\": [\n {\n \"associated_persons[].first_name\": \"<string>\",\n \"associated_persons[].last_name\": \"<string>\",\n \"associated_persons[].email\": \"<string>\",\n \"associated_persons[].residential_address\": {},\n \"associated_persons[].birth_date\": \"<string>\",\n \"associated_persons[].has_ownership\": true,\n \"associated_persons[].has_control\": true,\n \"associated_persons[].is_signer\": true,\n \"associated_persons[].title\": \"<string>\",\n \"associated_persons[].nationality\": \"<string>\",\n \"associated_persons[].identifying_information\": [\n {}\n ]\n }\n ],\n \"estimated_annual_revenue_usd\": \"<string>\",\n \"operates_in_prohibited_countries\": true,\n \"conducts_money_services\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daya.co/v1/customers/{id}/tier2-verification")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customer_type\": \"<string>\",\n \"residential_address\": {\n \"residential_address.street_line_1\": \"<string>\",\n \"residential_address.city\": \"<string>\",\n \"residential_address.subdivision\": \"<string>\",\n \"residential_address.postal_code\": \"<string>\",\n \"residential_address.country\": \"<string>\"\n },\n \"nationality\": \"<string>\",\n \"birth_date\": \"<string>\",\n \"identifying_information\": [\n {}\n ],\n \"source_of_funds\": \"<string>\",\n \"account_purpose\": \"<string>\",\n \"expected_monthly_payments_usd\": \"<string>\",\n \"acting_as_intermediary\": true,\n \"employment_status\": \"<string>\",\n \"most_recent_occupation\": \"<string>\",\n \"documents\": [\n {}\n ],\n \"business_legal_name\": \"<string>\",\n \"business_description\": \"<string>\",\n \"business_type\": \"<string>\",\n \"registered_address\": {},\n \"physical_address\": {},\n \"is_dao\": true,\n \"associated_persons\": [\n {\n \"associated_persons[].first_name\": \"<string>\",\n \"associated_persons[].last_name\": \"<string>\",\n \"associated_persons[].email\": \"<string>\",\n \"associated_persons[].residential_address\": {},\n \"associated_persons[].birth_date\": \"<string>\",\n \"associated_persons[].has_ownership\": true,\n \"associated_persons[].has_control\": true,\n \"associated_persons[].is_signer\": true,\n \"associated_persons[].title\": \"<string>\",\n \"associated_persons[].nationality\": \"<string>\",\n \"associated_persons[].identifying_information\": [\n {}\n ]\n }\n ],\n \"estimated_annual_revenue_usd\": \"<string>\",\n \"operates_in_prohibited_countries\": true,\n \"conducts_money_services\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "650e8400-e29b-41d4-a716-446655440000",
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe",
"is_verified": false,
"tier_1_kyc_complete": true,
"tier_2_kyc_complete": false,
"capabilities": [
{ "name": "base", "status": "approved" },
{ "name": "usd_banking", "status": "pending" }
],
"rejection_reasons": [],
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T16:00:00Z"
}
{
"error": {
"code": "TIER2_ALREADY_PENDING",
"message": "Tier 2 verification is already pending",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
{
"error": {
"code": "TIER2_ALREADY_VERIFIED",
"message": "Customer has already completed tier 2 verification",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Customers
Submit tier 2 verification
Submit tier 2 KYC or business KYB verification for a customer
POST
/
v1
/
customers
/
{id}
/
tier2-verification
Submit tier 2 verification
curl --request POST \
--url https://api.daya.co/v1/customers/{id}/tier2-verification \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"customer_type": "<string>",
"residential_address": {
"residential_address.street_line_1": "<string>",
"residential_address.city": "<string>",
"residential_address.subdivision": "<string>",
"residential_address.postal_code": "<string>",
"residential_address.country": "<string>"
},
"nationality": "<string>",
"birth_date": "<string>",
"identifying_information": [
{}
],
"source_of_funds": "<string>",
"account_purpose": "<string>",
"expected_monthly_payments_usd": "<string>",
"acting_as_intermediary": true,
"employment_status": "<string>",
"most_recent_occupation": "<string>",
"documents": [
{}
],
"business_legal_name": "<string>",
"business_description": "<string>",
"business_type": "<string>",
"registered_address": {},
"physical_address": {},
"is_dao": true,
"associated_persons": [
{
"associated_persons[].first_name": "<string>",
"associated_persons[].last_name": "<string>",
"associated_persons[].email": "<string>",
"associated_persons[].residential_address": {},
"associated_persons[].birth_date": "<string>",
"associated_persons[].has_ownership": true,
"associated_persons[].has_control": true,
"associated_persons[].is_signer": true,
"associated_persons[].title": "<string>",
"associated_persons[].nationality": "<string>",
"associated_persons[].identifying_information": [
{}
]
}
],
"estimated_annual_revenue_usd": "<string>",
"operates_in_prohibited_countries": true,
"conducts_money_services": true
}
'import requests
url = "https://api.daya.co/v1/customers/{id}/tier2-verification"
payload = {
"customer_type": "<string>",
"residential_address": {
"residential_address.street_line_1": "<string>",
"residential_address.city": "<string>",
"residential_address.subdivision": "<string>",
"residential_address.postal_code": "<string>",
"residential_address.country": "<string>"
},
"nationality": "<string>",
"birth_date": "<string>",
"identifying_information": [{}],
"source_of_funds": "<string>",
"account_purpose": "<string>",
"expected_monthly_payments_usd": "<string>",
"acting_as_intermediary": True,
"employment_status": "<string>",
"most_recent_occupation": "<string>",
"documents": [{}],
"business_legal_name": "<string>",
"business_description": "<string>",
"business_type": "<string>",
"registered_address": {},
"physical_address": {},
"is_dao": True,
"associated_persons": [
{
"associated_persons[].first_name": "<string>",
"associated_persons[].last_name": "<string>",
"associated_persons[].email": "<string>",
"associated_persons[].residential_address": {},
"associated_persons[].birth_date": "<string>",
"associated_persons[].has_ownership": True,
"associated_persons[].has_control": True,
"associated_persons[].is_signer": True,
"associated_persons[].title": "<string>",
"associated_persons[].nationality": "<string>",
"associated_persons[].identifying_information": [{}]
}
],
"estimated_annual_revenue_usd": "<string>",
"operates_in_prohibited_countries": True,
"conducts_money_services": True
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customer_type: '<string>',
residential_address: {
'residential_address.street_line_1': '<string>',
'residential_address.city': '<string>',
'residential_address.subdivision': '<string>',
'residential_address.postal_code': '<string>',
'residential_address.country': '<string>'
},
nationality: '<string>',
birth_date: '<string>',
identifying_information: [{}],
source_of_funds: '<string>',
account_purpose: '<string>',
expected_monthly_payments_usd: '<string>',
acting_as_intermediary: true,
employment_status: '<string>',
most_recent_occupation: '<string>',
documents: [{}],
business_legal_name: '<string>',
business_description: '<string>',
business_type: '<string>',
registered_address: {},
physical_address: {},
is_dao: true,
associated_persons: [
{
'associated_persons[].first_name': '<string>',
'associated_persons[].last_name': '<string>',
'associated_persons[].email': '<string>',
'associated_persons[].residential_address': {},
'associated_persons[].birth_date': '<string>',
'associated_persons[].has_ownership': true,
'associated_persons[].has_control': true,
'associated_persons[].is_signer': true,
'associated_persons[].title': '<string>',
'associated_persons[].nationality': '<string>',
'associated_persons[].identifying_information': [{}]
}
],
estimated_annual_revenue_usd: '<string>',
operates_in_prohibited_countries: true,
conducts_money_services: true
})
};
fetch('https://api.daya.co/v1/customers/{id}/tier2-verification', 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://api.daya.co/v1/customers/{id}/tier2-verification",
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([
'customer_type' => '<string>',
'residential_address' => [
'residential_address.street_line_1' => '<string>',
'residential_address.city' => '<string>',
'residential_address.subdivision' => '<string>',
'residential_address.postal_code' => '<string>',
'residential_address.country' => '<string>'
],
'nationality' => '<string>',
'birth_date' => '<string>',
'identifying_information' => [
[
]
],
'source_of_funds' => '<string>',
'account_purpose' => '<string>',
'expected_monthly_payments_usd' => '<string>',
'acting_as_intermediary' => true,
'employment_status' => '<string>',
'most_recent_occupation' => '<string>',
'documents' => [
[
]
],
'business_legal_name' => '<string>',
'business_description' => '<string>',
'business_type' => '<string>',
'registered_address' => [
],
'physical_address' => [
],
'is_dao' => true,
'associated_persons' => [
[
'associated_persons[].first_name' => '<string>',
'associated_persons[].last_name' => '<string>',
'associated_persons[].email' => '<string>',
'associated_persons[].residential_address' => [
],
'associated_persons[].birth_date' => '<string>',
'associated_persons[].has_ownership' => true,
'associated_persons[].has_control' => true,
'associated_persons[].is_signer' => true,
'associated_persons[].title' => '<string>',
'associated_persons[].nationality' => '<string>',
'associated_persons[].identifying_information' => [
[
]
]
]
],
'estimated_annual_revenue_usd' => '<string>',
'operates_in_prohibited_countries' => true,
'conducts_money_services' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$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://api.daya.co/v1/customers/{id}/tier2-verification"
payload := strings.NewReader("{\n \"customer_type\": \"<string>\",\n \"residential_address\": {\n \"residential_address.street_line_1\": \"<string>\",\n \"residential_address.city\": \"<string>\",\n \"residential_address.subdivision\": \"<string>\",\n \"residential_address.postal_code\": \"<string>\",\n \"residential_address.country\": \"<string>\"\n },\n \"nationality\": \"<string>\",\n \"birth_date\": \"<string>\",\n \"identifying_information\": [\n {}\n ],\n \"source_of_funds\": \"<string>\",\n \"account_purpose\": \"<string>\",\n \"expected_monthly_payments_usd\": \"<string>\",\n \"acting_as_intermediary\": true,\n \"employment_status\": \"<string>\",\n \"most_recent_occupation\": \"<string>\",\n \"documents\": [\n {}\n ],\n \"business_legal_name\": \"<string>\",\n \"business_description\": \"<string>\",\n \"business_type\": \"<string>\",\n \"registered_address\": {},\n \"physical_address\": {},\n \"is_dao\": true,\n \"associated_persons\": [\n {\n \"associated_persons[].first_name\": \"<string>\",\n \"associated_persons[].last_name\": \"<string>\",\n \"associated_persons[].email\": \"<string>\",\n \"associated_persons[].residential_address\": {},\n \"associated_persons[].birth_date\": \"<string>\",\n \"associated_persons[].has_ownership\": true,\n \"associated_persons[].has_control\": true,\n \"associated_persons[].is_signer\": true,\n \"associated_persons[].title\": \"<string>\",\n \"associated_persons[].nationality\": \"<string>\",\n \"associated_persons[].identifying_information\": [\n {}\n ]\n }\n ],\n \"estimated_annual_revenue_usd\": \"<string>\",\n \"operates_in_prohibited_countries\": true,\n \"conducts_money_services\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<x-api-key>")
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://api.daya.co/v1/customers/{id}/tier2-verification")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customer_type\": \"<string>\",\n \"residential_address\": {\n \"residential_address.street_line_1\": \"<string>\",\n \"residential_address.city\": \"<string>\",\n \"residential_address.subdivision\": \"<string>\",\n \"residential_address.postal_code\": \"<string>\",\n \"residential_address.country\": \"<string>\"\n },\n \"nationality\": \"<string>\",\n \"birth_date\": \"<string>\",\n \"identifying_information\": [\n {}\n ],\n \"source_of_funds\": \"<string>\",\n \"account_purpose\": \"<string>\",\n \"expected_monthly_payments_usd\": \"<string>\",\n \"acting_as_intermediary\": true,\n \"employment_status\": \"<string>\",\n \"most_recent_occupation\": \"<string>\",\n \"documents\": [\n {}\n ],\n \"business_legal_name\": \"<string>\",\n \"business_description\": \"<string>\",\n \"business_type\": \"<string>\",\n \"registered_address\": {},\n \"physical_address\": {},\n \"is_dao\": true,\n \"associated_persons\": [\n {\n \"associated_persons[].first_name\": \"<string>\",\n \"associated_persons[].last_name\": \"<string>\",\n \"associated_persons[].email\": \"<string>\",\n \"associated_persons[].residential_address\": {},\n \"associated_persons[].birth_date\": \"<string>\",\n \"associated_persons[].has_ownership\": true,\n \"associated_persons[].has_control\": true,\n \"associated_persons[].is_signer\": true,\n \"associated_persons[].title\": \"<string>\",\n \"associated_persons[].nationality\": \"<string>\",\n \"associated_persons[].identifying_information\": [\n {}\n ]\n }\n ],\n \"estimated_annual_revenue_usd\": \"<string>\",\n \"operates_in_prohibited_countries\": true,\n \"conducts_money_services\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.daya.co/v1/customers/{id}/tier2-verification")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customer_type\": \"<string>\",\n \"residential_address\": {\n \"residential_address.street_line_1\": \"<string>\",\n \"residential_address.city\": \"<string>\",\n \"residential_address.subdivision\": \"<string>\",\n \"residential_address.postal_code\": \"<string>\",\n \"residential_address.country\": \"<string>\"\n },\n \"nationality\": \"<string>\",\n \"birth_date\": \"<string>\",\n \"identifying_information\": [\n {}\n ],\n \"source_of_funds\": \"<string>\",\n \"account_purpose\": \"<string>\",\n \"expected_monthly_payments_usd\": \"<string>\",\n \"acting_as_intermediary\": true,\n \"employment_status\": \"<string>\",\n \"most_recent_occupation\": \"<string>\",\n \"documents\": [\n {}\n ],\n \"business_legal_name\": \"<string>\",\n \"business_description\": \"<string>\",\n \"business_type\": \"<string>\",\n \"registered_address\": {},\n \"physical_address\": {},\n \"is_dao\": true,\n \"associated_persons\": [\n {\n \"associated_persons[].first_name\": \"<string>\",\n \"associated_persons[].last_name\": \"<string>\",\n \"associated_persons[].email\": \"<string>\",\n \"associated_persons[].residential_address\": {},\n \"associated_persons[].birth_date\": \"<string>\",\n \"associated_persons[].has_ownership\": true,\n \"associated_persons[].has_control\": true,\n \"associated_persons[].is_signer\": true,\n \"associated_persons[].title\": \"<string>\",\n \"associated_persons[].nationality\": \"<string>\",\n \"associated_persons[].identifying_information\": [\n {}\n ]\n }\n ],\n \"estimated_annual_revenue_usd\": \"<string>\",\n \"operates_in_prohibited_countries\": true,\n \"conducts_money_services\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "650e8400-e29b-41d4-a716-446655440000",
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe",
"is_verified": false,
"tier_1_kyc_complete": true,
"tier_2_kyc_complete": false,
"capabilities": [
{ "name": "base", "status": "approved" },
{ "name": "usd_banking", "status": "pending" }
],
"rejection_reasons": [],
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T16:00:00Z"
}
{
"error": {
"code": "TIER2_ALREADY_PENDING",
"message": "Tier 2 verification is already pending",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
{
"error": {
"code": "TIER2_ALREADY_VERIFIED",
"message": "Customer has already completed tier 2 verification",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
Overview
Submits tier 2 verification for an existing customer. Use the individual KYC payload for people, or passcustomer_type: "business" with business KYB fields for an entity customer.
Tier 2 verification is required before the customer can use Bridge-backed banking features.
Business KYB can also be submitted through the compatibility route
POST /v1/customers/{id}/business-verification. New integrations should prefer this tier 2 endpoint with customer_type: "business".Tier 2 verification is required for:
- Creating USD virtual accounts
- Creating
US_BANK_ACCOUNTorSWIFT_BANK_ACCOUNTrecipients - Sending USD transfers to ACH, wire, or SWIFT recipients
Idempotency behavior:
- If tier 2 status is already
PENDING, resubmission is blocked. - If tier 2 status is already
VERIFIED, resubmission is blocked.
Authentication
string
required
Your merchant API key
Path Parameters
string
required
Customer ID (UUID format)Example:
650e8400-e29b-41d4-a716-446655440000Request Body
string
Verification subject type. Omit this field or use
individual for individual KYC. Use business for business/entity KYB.Allowed values: individual | businessIndividual KYC fields
Use these fields whencustomer_type is omitted or set to individual.
object
required
Customer’s residential address.
Show residential_address properties
Show residential_address properties
string
required
ISO 3166-1 alpha-3 country code for the customer’s nationality.Example:
NGAstring
required
Date of birth in
YYYY-MM-DD format.Example: 1990-05-15array
required
Array of identity documents and tax IDs. Non-US customers should include at least one government photo ID (
passport, drivers_license, or national_id) with image_front. Add tin when Daya or the verification provider asks for a tax identification number.Show identifying_information item properties
Show identifying_information item properties
string
required
Identification type. Use
tin when Daya or the verification provider asks for the customer’s tax identification number.Allowed values: passport | drivers_license | national_id | tinstring
required
ISO 3166-1 alpha-3 country code of the issuing country.Example:
NGAstring
Document or tax identification number. Required when
type is tin.Example: A12345678string
Document expiration date in
YYYY-MM-DD format.Example: 2030-01-01string
Front image of the document. Required for government photo ID types:
passport, drivers_license, and national_id. Not required for tin when you are only submitting the tax identification number. If Daya specifically asks for a tax document image, send it as a base64 data URL up to 1 MiB decoded. Compress large camera images before encoding.Example: data:image/png;base64,iVBORw0KGgo...string
Back image of the document. Must be a base64 data URL up to 1 MiB decoded when provided.Example:
data:image/png;base64,iVBORw0KGgo...Tax ID is not required for every customer. Some higher-risk customers or provider follow-up reviews may require it. For non-US customers,
tin is additional information and should be sent alongside a government photo ID. Send type: "tin" in Daya’s API; Daya maps it to the provider’s country-specific tax identifier type before submission.string
required
Source of the customer’s funds.Allowed values:
company_funds | ecommerce_reseller | gambling_proceeds | gifts | government_benefits | inheritance | investments_loans | pension_retirement | salary | sale_of_assets_real_estate | savings | someone_elses_fundsstring
required
Purpose of the account.Allowed values:
charitable_donations | ecommerce_retail_payments | investment_purposes | operating_a_company | other | payments_to_friends_or_family_abroad | personal_or_living_expenses | protect_wealth | purchase_goods_and_services | receive_payment_for_freelancing | receive_salarystring
required
Expected monthly payment volume bracket.Allowed values:
0_4999 | 5000_9999 | 10000_49999 | 50000_plusboolean
required
Whether the customer is acting as an intermediary for a third party.Example:
falsestring
required
Customer’s current employment status.Allowed values:
employed | homemaker | retired | self_employed | student | unemployedstring
required
Customer’s most recent occupation category.Allowed values:
BUSINESS_ADMIN | STEM | HEALTHCARE_SOCIAL | EDUCATION_ARTS_MEDIA | SERVICE_PUBLIC_SAFETY | TRADES_LABORarray
Supporting documents. Optional at the schema level, but conditionally required when
expected_monthly_payments_usd is above the 0_4999 bucket. For 5000_9999, 10000_49999, and 50000_plus buckets, supporting documents should be provided.Business KYB fields
Use these fields whencustomer_type is business. Daya will submit the customer to the business verification provider flow and update the same customer object.
string
required
Legal name of the business or entity. Daya also uses this as the trade name when submitting to the verification provider.Example:
Ada Labs Ltdstring
required
Short description of what the business does.
string
required
Provider-supported business type, such as
corporation, llc, or another type approved for your use case.object
required
Registered business address using the same address shape as
residential_address.object
Physical operating address using the same address shape as
residential_address. If omitted, Daya uses registered_address as the physical address.boolean
required
Whether the entity is a DAO.
array
required
Directors, signers, controllers, and beneficial owners associated with the business. At least one associated person is required. At least one associated person must have
has_control: true, and at least one must have is_signer: true.Show associated_persons item properties
Show associated_persons item properties
string
required
First name.
string
required
Last name.
string
required
Email address.
object
required
Residential address using the same address shape as
residential_address.string
required
Date of birth in
YYYY-MM-DD format.boolean
required
Whether the person is a beneficial owner.
boolean
required
Whether the person has control over the entity. At least one associated person must be a control person.
boolean
required
Whether the person is authorized to sign for the entity. At least one associated person must be a signer.
string
The person’s title at the entity. Required when
has_control is true.string
required
ISO 3166-1 alpha-3 nationality code.
array
required
Government ID and tax identification details for the associated person.
string
required
Estimated annual revenue bracket.Example:
1000000_4999999string
required
Expected monthly payment volume bracket.Allowed values:
0_4999 | 5000_9999 | 10000_49999 | 50000_plusboolean
required
Whether the business operates in prohibited countries.
string
required
Purpose of the account.Example:
operating_a_companystring
required
Source of business funds.Example:
company_fundsboolean
required
Whether the business conducts money services.
array
required
Business identifying information. Include the business tax ID as an item with
type: "tin" and number.array
required
Business supporting documents. Include at least one
proof_of_address document and one proof_of_source_of_funds document.For business KYB, associated persons carry the required government ID documents. A non-US business tax ID does not require the business itself to submit a passport.
Request Example
Individual KYC example
curl --request POST \
--url https://api.daya.co/v1/customers/650e8400-e29b-41d4-a716-446655440000/tier2-verification \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"residential_address": {
"street_line_1": "123 Main St",
"city": "Lagos",
"subdivision": "LA",
"postal_code": "100001",
"country": "NGA"
},
"nationality": "NGA",
"birth_date": "1990-05-15",
"identifying_information": [
{
"type": "passport",
"issuing_country": "NGA",
"number": "A12345678",
"expiration": "2030-01-01",
"image_front": "data:image/png;base64,iVBORw0KGgo..."
}
],
"source_of_funds": "salary",
"account_purpose": "personal_or_living_expenses",
"expected_monthly_payments_usd": "0_4999",
"acting_as_intermediary": false,
"employment_status": "employed",
"most_recent_occupation": "BUSINESS_ADMIN"
}'
Business KYB example
curl --request POST \
--url https://api.daya.co/v1/customers/650e8400-e29b-41d4-a716-446655440000/tier2-verification \
--header 'X-Api-Key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"customer_type": "business",
"business_legal_name": "Ada Labs Ltd",
"business_description": "Cross-border collection and treasury operations",
"business_type": "corporation",
"registered_address": {
"street_line_1": "10 Market Street",
"city": "London",
"subdivision": "LDN",
"postal_code": "EC1A 1AA",
"country": "GBR"
},
"is_dao": false,
"associated_persons": [
{
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"residential_address": {
"street_line_1": "10 Market Street",
"city": "London",
"subdivision": "LDN",
"postal_code": "EC1A 1AA",
"country": "GBR"
},
"birth_date": "1990-05-15",
"has_ownership": true,
"has_control": true,
"is_signer": true,
"is_director": true,
"ownership_percentage": 50,
"relationship_established_at": "2020-01-01",
"nationality": "GBR",
"identifying_information": [
{
"type": "passport",
"issuing_country": "GBR",
"number": "123456789",
"expiration": "2030-01-01",
"image_front": "data:image/png;base64,iVBORw0KGgo..."
}
]
}
],
"estimated_annual_revenue_usd": "1000000_4999999",
"expected_monthly_payments_usd": "50000_plus",
"operates_in_prohibited_countries": false,
"account_purpose": "operating_a_company",
"source_of_funds": "company_funds",
"conducts_money_services": false,
"identifying_information": [
{
"type": "tin",
"issuing_country": "GBR",
"number": "GB123456789"
}
],
"documents": [
{
"purposes": ["proof_of_address"],
"file": "data:image/png;base64,iVBORw0KGgo..."
},
{
"purposes": ["proof_of_source_of_funds"],
"file": "data:image/png;base64,iVBORw0KGgo..."
}
]
}'
Add a tax ID when requested
If Daya or the verification provider asks for the customer’s tax identification number, add atin item to identifying_information and resubmit Tier 2 verification:
{
"identifying_information": [
{
"type": "passport",
"issuing_country": "NGA",
"number": "A12345678",
"expiration": "2030-01-01",
"image_front": "data:image/png;base64,iVBORw0KGgo..."
},
{
"type": "tin",
"issuing_country": "NGA",
"number": "1234567890"
}
]
}
Response
Returns the updated customer object with verification status.string
required
Customer ID (UUID)
string
required
Customer email address
string
Customer first name
string
Customer last name
boolean
required
Whether the customer has passed verification
boolean
required
Whether tier 1 KYC has been completed.
boolean
required
Whether tier 2 KYC has been completed.
true once Bridge approves the submitted data.array
required
array
required
Current blocking verification/capability issues. Empty array when the customer is approved for the relevant capability.
string
required
When the customer was created (ISO 8601)
string
required
When the customer was last updated (ISO 8601)
{
"id": "650e8400-e29b-41d4-a716-446655440000",
"email": "customer@example.com",
"first_name": "John",
"last_name": "Doe",
"is_verified": false,
"tier_1_kyc_complete": true,
"tier_2_kyc_complete": false,
"capabilities": [
{ "name": "base", "status": "approved" },
{ "name": "usd_banking", "status": "pending" }
],
"rejection_reasons": [],
"created_at": "2026-01-05T15:04:05Z",
"updated_at": "2026-01-05T16:00:00Z"
}
{
"error": {
"code": "TIER2_ALREADY_PENDING",
"message": "Tier 2 verification is already pending",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}
{
"error": {
"code": "TIER2_ALREADY_VERIFIED",
"message": "Customer has already completed tier 2 verification",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}