curl --request POST \
--url https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": {
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
},
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}
'import requests
url = "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc"
payload = {
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": {
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
},
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}
headers = {
"x-api-key": "<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': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'Felix',
last_name: 'Whiskers',
date_of_birth: '2023-12-25',
address: {
address: '9 Whisker Way',
city: 'San Francisco',
zip: '94105',
address_2: 'Suite 9',
state: 'CA'
},
ip: '203.0.113.42',
id_number: '123-45-6789',
id_type: 'us_ssn',
phone_number: '+14155550123'
})
};
fetch('https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc"
payload := strings.NewReader("{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc",
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([
'first_name' => 'Felix',
'last_name' => 'Whiskers',
'date_of_birth' => '2023-12-25',
'address' => [
'address' => '9 Whisker Way',
'city' => 'San Francisco',
'zip' => '94105',
'address_2' => 'Suite 9',
'state' => 'CA'
],
'ip' => '203.0.113.42',
'id_number' => '123-45-6789',
'id_type' => 'us_ssn',
'phone_number' => '+14155550123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const url = 'https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'Felix',
last_name: 'Whiskers',
date_of_birth: '2023-12-25',
address: {
address: '9 Whisker Way',
city: 'San Francisco',
zip: '94105',
address_2: 'Suite 9',
state: 'CA'
},
ip: '203.0.113.42',
id_number: '123-45-6789',
id_type: 'us_ssn',
phone_number: '+14155550123'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));using RestSharp;
var options = new RestClientOptions("https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": [
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
],
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))falsefalse$headers=@{}
$headers.Add("x-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": {
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
},
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}'{
"representative_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kyc_status": "not_started"
}{
"code": 123,
"message": "<string>",
"debug_message": "<string>"
}{
"error_code": "<string>",
"message": "<string>"
}{
"error_code": "<string>",
"message": "<string>"
}{
"error_code": "<string>",
"message": "<string>"
}Submit representative KYC data
Submit identity (KYC) data for a representative you added. Verification runs server-side; poll the entity onboarding status endpoint for the result. Use this when you hold the representative’s identity details; otherwise mint a verification link for them to self-verify.
curl --request POST \
--url https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": {
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
},
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}
'import requests
url = "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc"
payload = {
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": {
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
},
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}
headers = {
"x-api-key": "<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': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'Felix',
last_name: 'Whiskers',
date_of_birth: '2023-12-25',
address: {
address: '9 Whisker Way',
city: 'San Francisco',
zip: '94105',
address_2: 'Suite 9',
state: 'CA'
},
ip: '203.0.113.42',
id_number: '123-45-6789',
id_type: 'us_ssn',
phone_number: '+14155550123'
})
};
fetch('https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc"
payload := strings.NewReader("{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<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.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}"
response = http.request(request)
puts response.read_body<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc",
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([
'first_name' => 'Felix',
'last_name' => 'Whiskers',
'date_of_birth' => '2023-12-25',
'address' => [
'address' => '9 Whisker Way',
'city' => 'San Francisco',
'zip' => '94105',
'address_2' => 'Suite 9',
'state' => 'CA'
],
'ip' => '203.0.113.42',
'id_number' => '123-45-6789',
'id_type' => 'us_ssn',
'phone_number' => '+14155550123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const url = 'https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: 'Felix',
last_name: 'Whiskers',
date_of_birth: '2023-12-25',
address: {
address: '9 Whisker Way',
city: 'San Francisco',
zip: '94105',
address_2: 'Suite 9',
state: 'CA'
},
ip: '203.0.113.42',
id_number: '123-45-6789',
id_type: 'us_ssn',
phone_number: '+14155550123'
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));using RestSharp;
var options = new RestClientOptions("https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
val client = OkHttpClient()
val mediaType = MediaType.parse("application/json")
val body = RequestBody.create(mediaType, "{\n \"first_name\": \"Felix\",\n \"last_name\": \"Whiskers\",\n \"date_of_birth\": \"2023-12-25\",\n \"address\": {\n \"address\": \"9 Whisker Way\",\n \"city\": \"San Francisco\",\n \"zip\": \"94105\",\n \"address_2\": \"Suite 9\",\n \"state\": \"CA\"\n },\n \"ip\": \"203.0.113.42\",\n \"id_number\": \"123-45-6789\",\n \"id_type\": \"us_ssn\",\n \"phone_number\": \"+14155550123\"\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": [
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
],
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.timeoutInterval = 10
request.allHTTPHeaderFields = [
"x-api-key": "<api-key>",
"Content-Type": "application/json"
]
request.httpBody = postData
let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))falsefalse$headers=@{}
$headers.Add("x-api-key", "<api-key>")
$headers.Add("Content-Type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.meow.com/v1/entities/{entity_id}/representatives/{representative_id}/kyc' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"first_name": "Felix",
"last_name": "Whiskers",
"date_of_birth": "2023-12-25",
"address": {
"address": "9 Whisker Way",
"city": "San Francisco",
"zip": "94105",
"address_2": "Suite 9",
"state": "CA"
},
"ip": "203.0.113.42",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}'{
"representative_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kyc_status": "not_started"
}{
"code": 123,
"message": "<string>",
"debug_message": "<string>"
}{
"error_code": "<string>",
"message": "<string>"
}{
"error_code": "<string>",
"message": "<string>"
}{
"error_code": "<string>",
"message": "<string>"
}Authorizations
Your Meow API key, sent in the x-api-key header for authentication.
Path Parameters
The representative, as returned in representatives on GET /entities/{entity_id}.
The entity being onboarded.
Body
Legal first name.
1"Felix"
Legal last name.
1"Whiskers"
Date of birth (YYYY-MM-DD).
Residential address.
Show child attributes
Show child attributes
IPv4 or IPv6 address of the end user submitting this verification. Forwarded to the identity-verification provider as a fraud signal.
"203.0.113.42"
Government ID number matching id_type. For us_ssn use nine digits, with or without dashes (123-45-6789 or 123456789); for us_ssn_last_4 use the last four digits; for non-US ID types provide the number as issued. Formatting characters are stripped before verification. Required when the representative's country issues an ID type we can verify, and must be omitted when it does not (e.g. the United Kingdom, which has no supported ID type).
"123-45-6789"
Type of government ID, which must belong to the country of the representative's address. Defaults to us_ssn; non-US representatives pass their country-specific type (e.g. sg_nric, au_passport, ca_sin). Ignored when the country has no supported ID type.
ar_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, in_epic, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_id Phone number in E.164 format (e.g. +14155550123).
^\+[1-9]\d{1,14}$"+14155550123"
Response
Successful Response
ID of the representative whose KYC was submitted.
This representative's identity verification status right after submission. It completes asynchronously; track this representative's status in the representatives array on GET /entities/{entity_id} or via the identity_verification.* webhooks. The entity's top-level kyc_status reflects only the primary representative, and next_step advances once every representative has started verification (not once they pass), so neither confirms this representative's outcome.
not_started, pending, action_required, approved, rejected