curl --request POST \
--url https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"file_name": "<string>",
"content_type": "application/pdf"
}
'import requests
url = "https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url"
payload = {
"file_name": "<string>",
"content_type": "application/pdf"
}
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({file_name: '<string>', content_type: 'application/pdf'})
};
fetch('https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url', 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}/info-requests/{request_id}/documents/upload-url"
payload := strings.NewReader("{\n \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\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}/info-requests/{request_id}/documents/upload-url")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url")
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 \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\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}/info-requests/{request_id}/documents/upload-url",
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([
'file_name' => '<string>',
'content_type' => 'application/pdf'
]),
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}/info-requests/{request_id}/documents/upload-url';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({file_name: '<string>', content_type: 'application/pdf'})
};
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}/info-requests/{request_id}/documents/upload-url");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\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 \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"file_name": "<string>",
"content_type": "application/pdf"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url")!
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}/info-requests/{request_id}/documents/upload-url' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"file_name": "<string>",
"content_type": "application/pdf"
}'{
"upload_url": "<string>",
"object_key": "<string>",
"max_bytes": 123,
"expires_in_seconds": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get an information request upload URL
Get a pre-signed URL to upload a document a reviewer asked for after the application was submitted. Take request_id from next_step.info_requests[] on the onboarding status, and the proof_type from that entry’s required_proof_types. Use HTTP PUT to upload the file to the returned URL, then confirm it. Unlike /documents/upload-url, this stays available after submission, which is when info requests are raised.
curl --request POST \
--url https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"file_name": "<string>",
"content_type": "application/pdf"
}
'import requests
url = "https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url"
payload = {
"file_name": "<string>",
"content_type": "application/pdf"
}
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({file_name: '<string>', content_type: 'application/pdf'})
};
fetch('https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url', 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}/info-requests/{request_id}/documents/upload-url"
payload := strings.NewReader("{\n \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\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}/info-requests/{request_id}/documents/upload-url")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url")
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 \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\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}/info-requests/{request_id}/documents/upload-url",
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([
'file_name' => '<string>',
'content_type' => 'application/pdf'
]),
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}/info-requests/{request_id}/documents/upload-url';
const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({file_name: '<string>', content_type: 'application/pdf'})
};
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}/info-requests/{request_id}/documents/upload-url");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("x-api-key", "<api-key>");
request.AddJsonBody("{\n \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\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 \"file_name\": \"<string>\",\n \"content_type\": \"application/pdf\"\n}")
val request = Request.Builder()
.url("https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url")
.post(body)
.addHeader("x-api-key", "<api-key>")
.addHeader("Content-Type", "application/json")
.build()
val response = client.newCall(request).execute()import Foundation
let parameters = [
"file_name": "<string>",
"content_type": "application/pdf"
] as [String : Any?]
let postData = try JSONSerialization.data(withJSONObject: parameters, options: [])
let url = URL(string: "https://api.meow.com/v1/entities/{entity_id}/info-requests/{request_id}/documents/upload-url")!
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}/info-requests/{request_id}/documents/upload-url' -Method POST -Headers $headers -ContentType 'application/json' -Body '{
"file_name": "<string>",
"content_type": "application/pdf"
}'{
"upload_url": "<string>",
"object_key": "<string>",
"max_bytes": 123,
"expires_in_seconds": 123
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Your Meow API key, sent in the x-api-key header for authentication.
Path Parameters
The information request, as returned in next_step.info_requests[].request_id.
The entity being onboarded.
Body
Type of KYB document being uploaded. Common values are incorporation (certificate of incorporation or formation document), address (proof of business address), and bank_statement. Non-US businesses also upload shareholder_registry (your shareholder registry, also called the register of members) and officer_registry (your register of directors and officers). The onboarding status response lists exactly what an entity owes in next_step.required_proof_types.
accredited, address, articles_of_organization, bank_statement, client_contract, client_invoice, beneficial_owner_address, beneficial_owner_id, beneficial_owner_id_back, beneficial_ownership_register, bylaws, certificate_of_good_standing, corporate_resolution, drivers_license, due_diligence, ein, final_edd_report, government_issued_business_license, hemp_cultivator_state_license, incorporation, industry_related_license, lease_agreement, llc_resolution, money_service_business_license, money_transmitter_registration, mortgage_statement, national_id, org_chart, partnership_agreement, partnership_agreement_due_diligence, partnership_resolution, personal_address, remote_employees_due_diligence, signed_ss4, tax_exemption_certificate, uk_officer_passport, officer_registry, uk_registry, shareholder_registry, uk_w8_en, utility_bill, us_based_office_proof_of_address_due_diligence, pitch_deck, active_business_registration, proof_of_ownership_or_banking_authorization, non_profit_bylaws, operating_agreement, flow_of_funds, aml_sanction, registration_or_license, sec_filing, legal_opinion, certificate_of_formation_master_llc, series_operating_agreement, share_subscription_agreement, fund_subscription_agreement, safe_agreement, convertible_note_agreement, loan_promissory_note, token_purchase_agreement, saft_agreement, deal_memo_hybrid_agreement, issuer_due_diligence_report, protocol_ecosystem_questionnaire, investment_company_due_diligence_form, us_based_operations_due_diligence_form, register_of_directors, articles_of_association, memorandum_of_association, non_profit_status, ofac_sanctions_screening_policy, aml_kyc_policy, w8_bene, corporate_structure_chart, custody_safeguarding_agreement, reserve_attestation, sanctions_vendor_service_agreement, contractual_fund_flow_agreements Original file name including extension.
MIME type of the file (e.g. application/pdf, image/png).
Response
Successful Response