curl --request POST \
--url https://api.meow.com/v1/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}
'import requests
url = "https://api.meow.com/v1/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"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',
user_email: 'jsmith@example.com',
id_number: '123-45-6789',
id_type: 'us_ssn',
phone_number: '+14155550123'
})
};
fetch('https://api.meow.com/v1/partner/applications/{app_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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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',
'user_email' => 'jsmith@example.com',
'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/partner/applications/{app_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',
user_email: 'jsmith@example.com',
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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"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/partner/applications/{app_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/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}'{
"application_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_email": "<string>",
"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 KYC Data
Submit identity (KYC) data you have already collected for the applicant, with their consent. Verification runs server-side; the applicant does not need to complete a verification link. The result is usually available asynchronously: poll the application status endpoint for the final kyc_status, or subscribe to the identity_verification.* webhook events. Repeat submissions while a verification is in progress are idempotent and return the current status without re-sending data; corrected data is applied on a new submission after the current attempt completes or fails.
curl --request POST \
--url https://api.meow.com/v1/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}
'import requests
url = "https://api.meow.com/v1/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"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',
user_email: 'jsmith@example.com',
id_number: '123-45-6789',
id_type: 'us_ssn',
phone_number: '+14155550123'
})
};
fetch('https://api.meow.com/v1/partner/applications/{app_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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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',
'user_email' => 'jsmith@example.com',
'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/partner/applications/{app_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',
user_email: 'jsmith@example.com',
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/partner/applications/{app_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 \"user_email\": \"jsmith@example.com\",\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 \"user_email\": \"jsmith@example.com\",\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/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"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/partner/applications/{app_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/partner/applications/{app_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",
"user_email": "jsmith@example.com",
"id_number": "123-45-6789",
"id_type": "us_ssn",
"phone_number": "+14155550123"
}'{
"application_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_email": "<string>",
"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 onboarding application, as returned when it was created.
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"
Email address of the applicant this KYC data belongs to. Must match the user_email the application was created with.
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
Unique application identifier.
Email address of the verified applicant.
Identity verification status after this submission. Verification usually completes asynchronously; poll the application status endpoint for the final result. This polled status has no action_required value: attempts the identity_verification.* webhook stream reports as identity_verification.action_required appear here as pending until a new attempt resolves. A rejected status does not include a reason; contact support if you need a review.
not_started, pending, action_required, approved, rejected