curl --request POST \
--url https://api.meow.com/v1/entities/{entity_id}/due-diligence \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"form_type": "<string>",
"form_data": {
"overview": "<string>",
"international_investments": true,
"registered_sec": true,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": true,
"investors": {
"type_of_investors": [],
"international_investors": true,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
}
}
}
'import requests
url = "https://api.meow.com/v1/entities/{entity_id}/due-diligence"
payload = {
"form_type": "<string>",
"form_data": {
"overview": "<string>",
"international_investments": True,
"registered_sec": True,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": True,
"investors": {
"type_of_investors": [],
"international_investors": True,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
}
}
}
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({
form_type: '<string>',
form_data: {
overview: '<string>',
international_investments: true,
registered_sec: true,
current_portfolio_value: 123,
countries_invested: [],
works_with_investors: true,
investors: {
type_of_investors: [],
international_investors: true,
investor_verification_process: '<string>',
investor_countries: [],
additional_investors_due_diligence: '<string>'
}
}
})
};
fetch('https://api.meow.com/v1/entities/{entity_id}/due-diligence', 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}/due-diligence"
payload := strings.NewReader("{\n \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\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}/due-diligence")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/entities/{entity_id}/due-diligence")
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 \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\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}/due-diligence",
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([
'form_type' => '<string>',
'form_data' => [
'overview' => '<string>',
'international_investments' => true,
'registered_sec' => true,
'current_portfolio_value' => 123,
'countries_invested' => [
],
'works_with_investors' => true,
'investors' => [
'type_of_investors' => [
],
'international_investors' => true,
'investor_verification_process' => '<string>',
'investor_countries' => [
],
'additional_investors_due_diligence' => '<string>'
]
]
]),
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}/due-diligence';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
form_type: '<string>',
form_data: {
overview: '<string>',
international_investments: true,
registered_sec: true,
current_portfolio_value: 123,
countries_invested: [],
works_with_investors: true,
investors: {
type_of_investors: [],
international_investors: true,
investor_verification_process: '<string>',
investor_countries: [],
additional_investors_due_diligence: '<string>'
}
}
})
};
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}/due-diligence");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\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 \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/entities/{entity_id}/due-diligence")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"form_type": "<string>",
"form_data": [
"overview": "<string>",
"international_investments": true,
"registered_sec": true,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": true,
"investors": [
"type_of_investors": [],
"international_investors": true,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
]
]
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/entities/{entity_id}/due-diligence")!
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}/due-diligence' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"form_type": "<string>",
"form_data": {
"overview": "<string>",
"international_investments": true,
"registered_sec": true,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": true,
"investors": {
"type_of_investors": [],
"international_investors": true,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
}
}
}'{
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"business_name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"documents": [
{
"file_name": "<string>",
"representative_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"next_step": {
"missing": [
"<string>"
],
"can_submit": true,
"required_proof_types": []
},
"representatives": [
{
"representative_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"is_primary": true,
"is_beneficial_owner": true,
"percent_ownership": "<string>"
}
],
"consent_url": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Submit a due diligence form
Submit an enhanced due diligence form for a business entity. Some industries require additional due diligence before the application can be submitted (check next_step.missing on the onboarding status). Only forms that collect plain data are accepted here; forms that require document uploads must be completed in the web app. Returns the updated onboarding status.
curl --request POST \
--url https://api.meow.com/v1/entities/{entity_id}/due-diligence \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"form_type": "<string>",
"form_data": {
"overview": "<string>",
"international_investments": true,
"registered_sec": true,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": true,
"investors": {
"type_of_investors": [],
"international_investors": true,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
}
}
}
'import requests
url = "https://api.meow.com/v1/entities/{entity_id}/due-diligence"
payload = {
"form_type": "<string>",
"form_data": {
"overview": "<string>",
"international_investments": True,
"registered_sec": True,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": True,
"investors": {
"type_of_investors": [],
"international_investors": True,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
}
}
}
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({
form_type: '<string>',
form_data: {
overview: '<string>',
international_investments: true,
registered_sec: true,
current_portfolio_value: 123,
countries_invested: [],
works_with_investors: true,
investors: {
type_of_investors: [],
international_investors: true,
investor_verification_process: '<string>',
investor_countries: [],
additional_investors_due_diligence: '<string>'
}
}
})
};
fetch('https://api.meow.com/v1/entities/{entity_id}/due-diligence', 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}/due-diligence"
payload := strings.NewReader("{\n \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\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}/due-diligence")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/entities/{entity_id}/due-diligence")
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 \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\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}/due-diligence",
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([
'form_type' => '<string>',
'form_data' => [
'overview' => '<string>',
'international_investments' => true,
'registered_sec' => true,
'current_portfolio_value' => 123,
'countries_invested' => [
],
'works_with_investors' => true,
'investors' => [
'type_of_investors' => [
],
'international_investors' => true,
'investor_verification_process' => '<string>',
'investor_countries' => [
],
'additional_investors_due_diligence' => '<string>'
]
]
]),
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}/due-diligence';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
form_type: '<string>',
form_data: {
overview: '<string>',
international_investments: true,
registered_sec: true,
current_portfolio_value: 123,
countries_invested: [],
works_with_investors: true,
investors: {
type_of_investors: [],
international_investors: true,
investor_verification_process: '<string>',
investor_countries: [],
additional_investors_due_diligence: '<string>'
}
}
})
};
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}/due-diligence");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\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 \"form_type\": \"<string>\",\n \"form_data\": {\n \"overview\": \"<string>\",\n \"international_investments\": true,\n \"registered_sec\": true,\n \"current_portfolio_value\": 123,\n \"countries_invested\": [],\n \"works_with_investors\": true,\n \"investors\": {\n \"type_of_investors\": [],\n \"international_investors\": true,\n \"investor_verification_process\": \"<string>\",\n \"investor_countries\": [],\n \"additional_investors_due_diligence\": \"<string>\"\n }\n }\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/entities/{entity_id}/due-diligence")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"form_type": "<string>",
"form_data": [
"overview": "<string>",
"international_investments": true,
"registered_sec": true,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": true,
"investors": [
"type_of_investors": [],
"international_investors": true,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
]
]
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/entities/{entity_id}/due-diligence")!
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}/due-diligence' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"form_type": "<string>",
"form_data": {
"overview": "<string>",
"international_investments": true,
"registered_sec": true,
"current_portfolio_value": 123,
"countries_invested": [],
"works_with_investors": true,
"investors": {
"type_of_investors": [],
"international_investors": true,
"investor_verification_process": "<string>",
"investor_countries": [],
"additional_investors_due_diligence": "<string>"
}
}
}'{
"entity_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"business_name": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"documents": [
{
"file_name": "<string>",
"representative_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"next_step": {
"missing": [
"<string>"
],
"can_submit": true,
"required_proof_types": []
},
"representatives": [
{
"representative_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"is_primary": true,
"is_beneficial_owner": true,
"percent_ownership": "<string>"
}
],
"consent_url": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Your Meow API key, sent in the x-api-key header for authentication.
Path Parameters
Body
Response
Successful Response
Public ID of the onboarded business entity, stable across the onboarding lifecycle and matching the entity_id used in the Customer API, MCP, and webhook payloads.
Current onboarding status.
pending_document_upload, pending_user_action, submitted, under_review, approved, rejected Legal business name.
ISO 8601 timestamp of when the entity was created.
ISO 8601 timestamp of when onboarding was last updated.
Documents uploaded during onboarding.
Show child attributes
Show child attributes
Identity verification status of the primary representative. After you submit KYC data or they complete verification, this moves to pending and resolves on its own; poll it to track progress. action_required means their verification needs another step from them (for example, a document): create a link with POST /entities/{entity_id}/representatives/{representative_id}/verification-link and share it so they can finish. See representatives for every representative's status.
not_started, pending, action_required, approved, rejected How this entity was onboarded (e.g. api, smb, partner).
api, smb, mcp, partner What you must do next: the current onboarding step, the items still missing for it, and whether the application is ready to be submitted for review.
Show child attributes
Show child attributes
Every representative on the application with their identity verification (KYC) status. The top-level kyc_status reflects the primary representative; the application can only be approved once every representative is approved.
Show child attributes
Show child attributes
Link where the primary representative reviews and accepts the required agreements and disclosures in their browser. Populated once the application has been submitted; share it with the primary representative. The link needs no login and anyone holding it can accept on the business's behalf, so treat it as a secret.