curl --request POST \
--url https://app.crown-brlv.com/api/v1/accounts/kyc/company \
--header 'Content-Type: application/json' \
--data '
{
"identifiers": [
{
"value": "12345678000195",
"country": "BRA"
}
],
"tax-residence": "BRA",
"legal-name": "Acme Servicos Ltda",
"reward-tier": 97,
"related-parties": [
{
"first-name": "Ana",
"last-name": "Silva",
"date-of-birth": "1990-04-12",
"identifier": {
"value": "12345678909",
"country": "BRA"
},
"tax-residence": "BRA",
"address": {
"postal-code": "01310-100",
"line1": "Avenida Paulista, 1000",
"city": "Sao Paulo",
"country": "BRA",
"line2": "<string>",
"state": "SP"
},
"document": {
"front-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"back-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254"
},
"pep": {
"declared": true,
"full-name": "<string>",
"role": "<string>"
},
"roles": [
"representative",
"ubo"
],
"power-of-attorney-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"ownership-percentage": 35
}
],
"trade-name": "Acme",
"external-wallets": [
{
"address": "0xabc...",
"custody-country": "BRA",
"custodian-name": "<string>"
}
]
}
'import requests
url = "https://app.crown-brlv.com/api/v1/accounts/kyc/company"
payload = {
"identifiers": [
{
"value": "12345678000195",
"country": "BRA"
}
],
"tax-residence": "BRA",
"legal-name": "Acme Servicos Ltda",
"reward-tier": 97,
"related-parties": [
{
"first-name": "Ana",
"last-name": "Silva",
"date-of-birth": "1990-04-12",
"identifier": {
"value": "12345678909",
"country": "BRA"
},
"tax-residence": "BRA",
"address": {
"postal-code": "01310-100",
"line1": "Avenida Paulista, 1000",
"city": "Sao Paulo",
"country": "BRA",
"line2": "<string>",
"state": "SP"
},
"document": {
"front-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"back-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254"
},
"pep": {
"declared": True,
"full-name": "<string>",
"role": "<string>"
},
"roles": ["representative", "ubo"],
"power-of-attorney-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"ownership-percentage": 35
}
],
"trade-name": "Acme",
"external-wallets": [
{
"address": "0xabc...",
"custody-country": "BRA",
"custodian-name": "<string>"
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
identifiers: [{value: '12345678000195', country: 'BRA'}],
'tax-residence': 'BRA',
'legal-name': 'Acme Servicos Ltda',
'reward-tier': 97,
'related-parties': [
{
'first-name': 'Ana',
'last-name': 'Silva',
'date-of-birth': '1990-04-12',
identifier: {value: '12345678909', country: 'BRA'},
'tax-residence': 'BRA',
address: {
'postal-code': '01310-100',
line1: 'Avenida Paulista, 1000',
city: 'Sao Paulo',
country: 'BRA',
line2: '<string>',
state: 'SP'
},
document: {
'front-file-id': 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'back-file-id': 'ev_019712CFC86D703F85B8BDAA4FC8D254'
},
pep: {declared: true, 'full-name': '<string>', role: '<string>'},
roles: ['representative', 'ubo'],
'power-of-attorney-file-id': 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'ownership-percentage': 35
}
],
'trade-name': 'Acme',
'external-wallets': [{address: '0xabc...', 'custody-country': 'BRA', 'custodian-name': '<string>'}]
})
};
fetch('https://app.crown-brlv.com/api/v1/accounts/kyc/company', 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://app.crown-brlv.com/api/v1/accounts/kyc/company",
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([
'identifiers' => [
[
'value' => '12345678000195',
'country' => 'BRA'
]
],
'tax-residence' => 'BRA',
'legal-name' => 'Acme Servicos Ltda',
'reward-tier' => 97,
'related-parties' => [
[
'first-name' => 'Ana',
'last-name' => 'Silva',
'date-of-birth' => '1990-04-12',
'identifier' => [
'value' => '12345678909',
'country' => 'BRA'
],
'tax-residence' => 'BRA',
'address' => [
'postal-code' => '01310-100',
'line1' => 'Avenida Paulista, 1000',
'city' => 'Sao Paulo',
'country' => 'BRA',
'line2' => '<string>',
'state' => 'SP'
],
'document' => [
'front-file-id' => 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'back-file-id' => 'ev_019712CFC86D703F85B8BDAA4FC8D254'
],
'pep' => [
'declared' => true,
'full-name' => '<string>',
'role' => '<string>'
],
'roles' => [
'representative',
'ubo'
],
'power-of-attorney-file-id' => 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'ownership-percentage' => 35
]
],
'trade-name' => 'Acme',
'external-wallets' => [
[
'address' => '0xabc...',
'custody-country' => 'BRA',
'custodian-name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://app.crown-brlv.com/api/v1/accounts/kyc/company"
payload := strings.NewReader("{\n \"identifiers\": [\n {\n \"value\": \"12345678000195\",\n \"country\": \"BRA\"\n }\n ],\n \"tax-residence\": \"BRA\",\n \"legal-name\": \"Acme Servicos Ltda\",\n \"reward-tier\": 97,\n \"related-parties\": [\n {\n \"first-name\": \"Ana\",\n \"last-name\": \"Silva\",\n \"date-of-birth\": \"1990-04-12\",\n \"identifier\": {\n \"value\": \"12345678909\",\n \"country\": \"BRA\"\n },\n \"tax-residence\": \"BRA\",\n \"address\": {\n \"postal-code\": \"01310-100\",\n \"line1\": \"Avenida Paulista, 1000\",\n \"city\": \"Sao Paulo\",\n \"country\": \"BRA\",\n \"line2\": \"<string>\",\n \"state\": \"SP\"\n },\n \"document\": {\n \"front-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"back-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\"\n },\n \"pep\": {\n \"declared\": true,\n \"full-name\": \"<string>\",\n \"role\": \"<string>\"\n },\n \"roles\": [\n \"representative\",\n \"ubo\"\n ],\n \"power-of-attorney-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"ownership-percentage\": 35\n }\n ],\n \"trade-name\": \"Acme\",\n \"external-wallets\": [\n {\n \"address\": \"0xabc...\",\n \"custody-country\": \"BRA\",\n \"custodian-name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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://app.crown-brlv.com/api/v1/accounts/kyc/company")
.header("Content-Type", "application/json")
.body("{\n \"identifiers\": [\n {\n \"value\": \"12345678000195\",\n \"country\": \"BRA\"\n }\n ],\n \"tax-residence\": \"BRA\",\n \"legal-name\": \"Acme Servicos Ltda\",\n \"reward-tier\": 97,\n \"related-parties\": [\n {\n \"first-name\": \"Ana\",\n \"last-name\": \"Silva\",\n \"date-of-birth\": \"1990-04-12\",\n \"identifier\": {\n \"value\": \"12345678909\",\n \"country\": \"BRA\"\n },\n \"tax-residence\": \"BRA\",\n \"address\": {\n \"postal-code\": \"01310-100\",\n \"line1\": \"Avenida Paulista, 1000\",\n \"city\": \"Sao Paulo\",\n \"country\": \"BRA\",\n \"line2\": \"<string>\",\n \"state\": \"SP\"\n },\n \"document\": {\n \"front-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"back-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\"\n },\n \"pep\": {\n \"declared\": true,\n \"full-name\": \"<string>\",\n \"role\": \"<string>\"\n },\n \"roles\": [\n \"representative\",\n \"ubo\"\n ],\n \"power-of-attorney-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"ownership-percentage\": 35\n }\n ],\n \"trade-name\": \"Acme\",\n \"external-wallets\": [\n {\n \"address\": \"0xabc...\",\n \"custody-country\": \"BRA\",\n \"custodian-name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.crown-brlv.com/api/v1/accounts/kyc/company")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"identifiers\": [\n {\n \"value\": \"12345678000195\",\n \"country\": \"BRA\"\n }\n ],\n \"tax-residence\": \"BRA\",\n \"legal-name\": \"Acme Servicos Ltda\",\n \"reward-tier\": 97,\n \"related-parties\": [\n {\n \"first-name\": \"Ana\",\n \"last-name\": \"Silva\",\n \"date-of-birth\": \"1990-04-12\",\n \"identifier\": {\n \"value\": \"12345678909\",\n \"country\": \"BRA\"\n },\n \"tax-residence\": \"BRA\",\n \"address\": {\n \"postal-code\": \"01310-100\",\n \"line1\": \"Avenida Paulista, 1000\",\n \"city\": \"Sao Paulo\",\n \"country\": \"BRA\",\n \"line2\": \"<string>\",\n \"state\": \"SP\"\n },\n \"document\": {\n \"front-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"back-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\"\n },\n \"pep\": {\n \"declared\": true,\n \"full-name\": \"<string>\",\n \"role\": \"<string>\"\n },\n \"roles\": [\n \"representative\",\n \"ubo\"\n ],\n \"power-of-attorney-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"ownership-percentage\": 35\n }\n ],\n \"trade-name\": \"Acme\",\n \"external-wallets\": [\n {\n \"address\": \"0xabc...\",\n \"custody-country\": \"BRA\",\n \"custodian-name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"account": {
"id": "019712cf-c86d-703f-85b8-bdaa4fc8d254",
"alias": "Trading account",
"status": "active",
"external-id": "ext-12345",
"created-at": "2024-01-15T10:30:00Z",
"parent-id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"account": {
"id": "019712cf-c86d-703f-85b8-bdaa4fc8d254",
"alias": "Trading account",
"status": "active",
"external-id": "ext-12345",
"created-at": "2024-01-15T10:30:00Z",
"parent-id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}Create Account (KYC, Company)
Requests onboarding of a company account whose verification Crown runs itself.
The body carries the company profile plus the people behind it: every representative, director and ultimate beneficial owner, each with their identity document and, where their role asks for one, the liveness session and the power of attorney. Files travel as ids: upload each one with POST /v1/accounts/files, then reference the returned id here.
tax-residence selects the body. A company resident in BRA sends the Brazilian Company body; every other company sends the Foreign Company body.
Request-first: the response describes a creation request, not an account. The request enters compliance review and the account is provisioned on approval.
Every country code in the body is ISO 3166-1 alpha-3, read regardless of case: bra is read as BRA.
Validated on this request — every rule below is answered before anything is created, so no valid body needs a round trip to discover a condition:
- The parent account must onboard accounts in kyc mode. A parent that onboards in reliance mode is refused with
403and must usePOST /v1/accounts/reliance. - The parent must hold the
subaccounts-<tier>-tiercapability matchingreward-tier, or the request is refused with403. identifierscarries at most one entry per country, and at most one outsideBRA.- A company whose
tax-residenceisBRAlists its CNPJ alone. A company resident abroad must list an entry under itstax-residence, and may add the CNPJ it also holds underBRA. - An entry under
BRAmust be a valid CNPJ and carries notype. Every entry outsideBRAcarries atype. headquarters-address.stateis required whenheadquarters-address.countryisBRA, where it must be the two-letter federal unit code (SP,RJ,MG, …).- For every entry in
related-parties,identifier.countrymust beBRAexactly when that person’stax-residenceisBRA, and a BRA identifier must be a valid CPF. Each person’s identifier and residence are read on their own, not against the company’s. - For every entry in
related-parties,date-of-birth,addressanddocumentfollow the same rules as an individual holder’s. - At least one entry in
related-partiesholds therepresentativerole. livenessandpower-of-attorney-file-idare required of every representative and rejected on anyone else.ownership-percentageandfinancial-profileare required of every ubo and rejected on anyone else.- The declared
ownership-percentagevalues together cannot exceed 100. - The same person, by
identifier, appears at most once inrelated-parties. - Every file id referenced in the body must have been uploaded by this same parent account via
POST /v1/accounts/files. - Addresses in
external-walletsmust be unique within the request, and none may already be registered to another account.
Idempotency: a request under the same parent with the same number in the entry under its tax-residence, whether pending, approved or active, is returned as-is with 200, instead of a second request being created.
curl --request POST \
--url https://app.crown-brlv.com/api/v1/accounts/kyc/company \
--header 'Content-Type: application/json' \
--data '
{
"identifiers": [
{
"value": "12345678000195",
"country": "BRA"
}
],
"tax-residence": "BRA",
"legal-name": "Acme Servicos Ltda",
"reward-tier": 97,
"related-parties": [
{
"first-name": "Ana",
"last-name": "Silva",
"date-of-birth": "1990-04-12",
"identifier": {
"value": "12345678909",
"country": "BRA"
},
"tax-residence": "BRA",
"address": {
"postal-code": "01310-100",
"line1": "Avenida Paulista, 1000",
"city": "Sao Paulo",
"country": "BRA",
"line2": "<string>",
"state": "SP"
},
"document": {
"front-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"back-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254"
},
"pep": {
"declared": true,
"full-name": "<string>",
"role": "<string>"
},
"roles": [
"representative",
"ubo"
],
"power-of-attorney-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"ownership-percentage": 35
}
],
"trade-name": "Acme",
"external-wallets": [
{
"address": "0xabc...",
"custody-country": "BRA",
"custodian-name": "<string>"
}
]
}
'import requests
url = "https://app.crown-brlv.com/api/v1/accounts/kyc/company"
payload = {
"identifiers": [
{
"value": "12345678000195",
"country": "BRA"
}
],
"tax-residence": "BRA",
"legal-name": "Acme Servicos Ltda",
"reward-tier": 97,
"related-parties": [
{
"first-name": "Ana",
"last-name": "Silva",
"date-of-birth": "1990-04-12",
"identifier": {
"value": "12345678909",
"country": "BRA"
},
"tax-residence": "BRA",
"address": {
"postal-code": "01310-100",
"line1": "Avenida Paulista, 1000",
"city": "Sao Paulo",
"country": "BRA",
"line2": "<string>",
"state": "SP"
},
"document": {
"front-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"back-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254"
},
"pep": {
"declared": True,
"full-name": "<string>",
"role": "<string>"
},
"roles": ["representative", "ubo"],
"power-of-attorney-file-id": "ev_019712CFC86D703F85B8BDAA4FC8D254",
"ownership-percentage": 35
}
],
"trade-name": "Acme",
"external-wallets": [
{
"address": "0xabc...",
"custody-country": "BRA",
"custodian-name": "<string>"
}
]
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
identifiers: [{value: '12345678000195', country: 'BRA'}],
'tax-residence': 'BRA',
'legal-name': 'Acme Servicos Ltda',
'reward-tier': 97,
'related-parties': [
{
'first-name': 'Ana',
'last-name': 'Silva',
'date-of-birth': '1990-04-12',
identifier: {value: '12345678909', country: 'BRA'},
'tax-residence': 'BRA',
address: {
'postal-code': '01310-100',
line1: 'Avenida Paulista, 1000',
city: 'Sao Paulo',
country: 'BRA',
line2: '<string>',
state: 'SP'
},
document: {
'front-file-id': 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'back-file-id': 'ev_019712CFC86D703F85B8BDAA4FC8D254'
},
pep: {declared: true, 'full-name': '<string>', role: '<string>'},
roles: ['representative', 'ubo'],
'power-of-attorney-file-id': 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'ownership-percentage': 35
}
],
'trade-name': 'Acme',
'external-wallets': [{address: '0xabc...', 'custody-country': 'BRA', 'custodian-name': '<string>'}]
})
};
fetch('https://app.crown-brlv.com/api/v1/accounts/kyc/company', 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://app.crown-brlv.com/api/v1/accounts/kyc/company",
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([
'identifiers' => [
[
'value' => '12345678000195',
'country' => 'BRA'
]
],
'tax-residence' => 'BRA',
'legal-name' => 'Acme Servicos Ltda',
'reward-tier' => 97,
'related-parties' => [
[
'first-name' => 'Ana',
'last-name' => 'Silva',
'date-of-birth' => '1990-04-12',
'identifier' => [
'value' => '12345678909',
'country' => 'BRA'
],
'tax-residence' => 'BRA',
'address' => [
'postal-code' => '01310-100',
'line1' => 'Avenida Paulista, 1000',
'city' => 'Sao Paulo',
'country' => 'BRA',
'line2' => '<string>',
'state' => 'SP'
],
'document' => [
'front-file-id' => 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'back-file-id' => 'ev_019712CFC86D703F85B8BDAA4FC8D254'
],
'pep' => [
'declared' => true,
'full-name' => '<string>',
'role' => '<string>'
],
'roles' => [
'representative',
'ubo'
],
'power-of-attorney-file-id' => 'ev_019712CFC86D703F85B8BDAA4FC8D254',
'ownership-percentage' => 35
]
],
'trade-name' => 'Acme',
'external-wallets' => [
[
'address' => '0xabc...',
'custody-country' => 'BRA',
'custodian-name' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://app.crown-brlv.com/api/v1/accounts/kyc/company"
payload := strings.NewReader("{\n \"identifiers\": [\n {\n \"value\": \"12345678000195\",\n \"country\": \"BRA\"\n }\n ],\n \"tax-residence\": \"BRA\",\n \"legal-name\": \"Acme Servicos Ltda\",\n \"reward-tier\": 97,\n \"related-parties\": [\n {\n \"first-name\": \"Ana\",\n \"last-name\": \"Silva\",\n \"date-of-birth\": \"1990-04-12\",\n \"identifier\": {\n \"value\": \"12345678909\",\n \"country\": \"BRA\"\n },\n \"tax-residence\": \"BRA\",\n \"address\": {\n \"postal-code\": \"01310-100\",\n \"line1\": \"Avenida Paulista, 1000\",\n \"city\": \"Sao Paulo\",\n \"country\": \"BRA\",\n \"line2\": \"<string>\",\n \"state\": \"SP\"\n },\n \"document\": {\n \"front-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"back-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\"\n },\n \"pep\": {\n \"declared\": true,\n \"full-name\": \"<string>\",\n \"role\": \"<string>\"\n },\n \"roles\": [\n \"representative\",\n \"ubo\"\n ],\n \"power-of-attorney-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"ownership-percentage\": 35\n }\n ],\n \"trade-name\": \"Acme\",\n \"external-wallets\": [\n {\n \"address\": \"0xabc...\",\n \"custody-country\": \"BRA\",\n \"custodian-name\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
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://app.crown-brlv.com/api/v1/accounts/kyc/company")
.header("Content-Type", "application/json")
.body("{\n \"identifiers\": [\n {\n \"value\": \"12345678000195\",\n \"country\": \"BRA\"\n }\n ],\n \"tax-residence\": \"BRA\",\n \"legal-name\": \"Acme Servicos Ltda\",\n \"reward-tier\": 97,\n \"related-parties\": [\n {\n \"first-name\": \"Ana\",\n \"last-name\": \"Silva\",\n \"date-of-birth\": \"1990-04-12\",\n \"identifier\": {\n \"value\": \"12345678909\",\n \"country\": \"BRA\"\n },\n \"tax-residence\": \"BRA\",\n \"address\": {\n \"postal-code\": \"01310-100\",\n \"line1\": \"Avenida Paulista, 1000\",\n \"city\": \"Sao Paulo\",\n \"country\": \"BRA\",\n \"line2\": \"<string>\",\n \"state\": \"SP\"\n },\n \"document\": {\n \"front-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"back-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\"\n },\n \"pep\": {\n \"declared\": true,\n \"full-name\": \"<string>\",\n \"role\": \"<string>\"\n },\n \"roles\": [\n \"representative\",\n \"ubo\"\n ],\n \"power-of-attorney-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"ownership-percentage\": 35\n }\n ],\n \"trade-name\": \"Acme\",\n \"external-wallets\": [\n {\n \"address\": \"0xabc...\",\n \"custody-country\": \"BRA\",\n \"custodian-name\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.crown-brlv.com/api/v1/accounts/kyc/company")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"identifiers\": [\n {\n \"value\": \"12345678000195\",\n \"country\": \"BRA\"\n }\n ],\n \"tax-residence\": \"BRA\",\n \"legal-name\": \"Acme Servicos Ltda\",\n \"reward-tier\": 97,\n \"related-parties\": [\n {\n \"first-name\": \"Ana\",\n \"last-name\": \"Silva\",\n \"date-of-birth\": \"1990-04-12\",\n \"identifier\": {\n \"value\": \"12345678909\",\n \"country\": \"BRA\"\n },\n \"tax-residence\": \"BRA\",\n \"address\": {\n \"postal-code\": \"01310-100\",\n \"line1\": \"Avenida Paulista, 1000\",\n \"city\": \"Sao Paulo\",\n \"country\": \"BRA\",\n \"line2\": \"<string>\",\n \"state\": \"SP\"\n },\n \"document\": {\n \"front-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"back-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\"\n },\n \"pep\": {\n \"declared\": true,\n \"full-name\": \"<string>\",\n \"role\": \"<string>\"\n },\n \"roles\": [\n \"representative\",\n \"ubo\"\n ],\n \"power-of-attorney-file-id\": \"ev_019712CFC86D703F85B8BDAA4FC8D254\",\n \"ownership-percentage\": 35\n }\n ],\n \"trade-name\": \"Acme\",\n \"external-wallets\": [\n {\n \"address\": \"0xabc...\",\n \"custody-country\": \"BRA\",\n \"custodian-name\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"account": {
"id": "019712cf-c86d-703f-85b8-bdaa4fc8d254",
"alias": "Trading account",
"status": "active",
"external-id": "ext-12345",
"created-at": "2024-01-15T10:30:00Z",
"parent-id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"account": {
"id": "019712cf-c86d-703f-85b8-bdaa4fc8d254",
"alias": "Trading account",
"status": "active",
"external-id": "ext-12345",
"created-at": "2024-01-15T10:30:00Z",
"parent-id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}{
"error": {
"type": "<string>",
"message": "<string>",
"code": "<string>"
}
}Body
- Brazilian Company
- Foreign Company
A company whose tax residence is Brazil, and therefore identified by a CNPJ. The CNPJ answers for the company itself, so the body asks for its names and the people behind it and nothing else
Every register the company is known to, one entry each, at most one per country. The entry whose country is the company's tax residence is the one that identifies it. A company resident abroad that also holds a CNPJ adds a second entry under BRA
Show child attributes
Show child attributes
[
{
"value": "12345678000195",
"country": "BRA"
}
]
Tax residence country, ISO-3
BRA "BRA"
The name the company is registered under
"Acme Servicos Ltda"
CDI reward tier (%) for the account. The parent account must hold the matching subaccounts--tier capability.
93.5, 90, 97 97
The natural persons behind the company: its representatives, its directors and every ultimate beneficial owner above 25%. The ownership chain is flattened: this list never carries a company, only the people at the end of it
1Show child attributes
Show child attributes
The name the company trades under, when it differs from the registered one
"Acme"
Show child attributes
Show child attributes
Response
An equivalent non-terminal request already exists
Show child attributes
Show child attributes