# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api PATCH /v1/customers/cus_abc123/associated_businesses/ae_abc123 \
--body '<request-json>'Update an associated business (cus_abc123, ae_abc123).
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}"
payload = {
"parentEntityId": "<string>",
"countryCode": "<string>",
"email": "<string>",
"phone": "<string>",
"hasOwnership": True,
"hasControl": True,
"ownershipPercentage": 123,
"isSigner": True,
"isDirector": True,
"supportingDocuments": [
{
"file": "doc_abc123",
"requirementId": "<string>",
"type": "PROOF_OF_ADDRESS",
"subtype": "UTILITY_BILL",
"description": "Passport issued in 2020",
"remarks": "Uploaded to support proof of business address"
}
],
"attestedOwnershipStructureAt": "<string>",
"relationshipDate": "2020-01-15",
"businessName": "<string>",
"registrationNumber": "<string>",
"dateOfIncorporation": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
parentEntityId: '<string>',
countryCode: '<string>',
email: '<string>',
phone: '<string>',
hasOwnership: true,
hasControl: true,
ownershipPercentage: 123,
isSigner: true,
isDirector: true,
supportingDocuments: [
{
file: 'doc_abc123',
requirementId: '<string>',
type: 'PROOF_OF_ADDRESS',
subtype: 'UTILITY_BILL',
description: 'Passport issued in 2020',
remarks: 'Uploaded to support proof of business address'
}
],
attestedOwnershipStructureAt: '<string>',
relationshipDate: '2020-01-15',
businessName: '<string>',
registrationNumber: '<string>',
dateOfIncorporation: '<string>'
})
};
fetch('https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}', 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://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'parentEntityId' => '<string>',
'countryCode' => '<string>',
'email' => '<string>',
'phone' => '<string>',
'hasOwnership' => true,
'hasControl' => true,
'ownershipPercentage' => 123,
'isSigner' => true,
'isDirector' => true,
'supportingDocuments' => [
[
'file' => 'doc_abc123',
'requirementId' => '<string>',
'type' => 'PROOF_OF_ADDRESS',
'subtype' => 'UTILITY_BILL',
'description' => 'Passport issued in 2020',
'remarks' => 'Uploaded to support proof of business address'
]
],
'attestedOwnershipStructureAt' => '<string>',
'relationshipDate' => '2020-01-15',
'businessName' => '<string>',
'registrationNumber' => '<string>',
'dateOfIncorporation' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}"
payload := strings.NewReader("{\n \"parentEntityId\": \"<string>\",\n \"countryCode\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"hasOwnership\": true,\n \"hasControl\": true,\n \"ownershipPercentage\": 123,\n \"isSigner\": true,\n \"isDirector\": true,\n \"supportingDocuments\": [\n {\n \"file\": \"doc_abc123\",\n \"requirementId\": \"<string>\",\n \"type\": \"PROOF_OF_ADDRESS\",\n \"subtype\": \"UTILITY_BILL\",\n \"description\": \"Passport issued in 2020\",\n \"remarks\": \"Uploaded to support proof of business address\"\n }\n ],\n \"attestedOwnershipStructureAt\": \"<string>\",\n \"relationshipDate\": \"2020-01-15\",\n \"businessName\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"dateOfIncorporation\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"parentEntityId\": \"<string>\",\n \"countryCode\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"hasOwnership\": true,\n \"hasControl\": true,\n \"ownershipPercentage\": 123,\n \"isSigner\": true,\n \"isDirector\": true,\n \"supportingDocuments\": [\n {\n \"file\": \"doc_abc123\",\n \"requirementId\": \"<string>\",\n \"type\": \"PROOF_OF_ADDRESS\",\n \"subtype\": \"UTILITY_BILL\",\n \"description\": \"Passport issued in 2020\",\n \"remarks\": \"Uploaded to support proof of business address\"\n }\n ],\n \"attestedOwnershipStructureAt\": \"<string>\",\n \"relationshipDate\": \"2020-01-15\",\n \"businessName\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"dateOfIncorporation\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"parentEntityId\": \"<string>\",\n \"countryCode\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"hasOwnership\": true,\n \"hasControl\": true,\n \"ownershipPercentage\": 123,\n \"isSigner\": true,\n \"isDirector\": true,\n \"supportingDocuments\": [\n {\n \"file\": \"doc_abc123\",\n \"requirementId\": \"<string>\",\n \"type\": \"PROOF_OF_ADDRESS\",\n \"subtype\": \"UTILITY_BILL\",\n \"description\": \"Passport issued in 2020\",\n \"remarks\": \"Uploaded to support proof of business address\"\n }\n ],\n \"attestedOwnershipStructureAt\": \"<string>\",\n \"relationshipDate\": \"2020-01-15\",\n \"businessName\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"dateOfIncorporation\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "asp_abc123",
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z",
"entityType": "BUSINESS",
"hasOwnership": true,
"hasControl": true,
"parentEntityId": "asp_parent123",
"details": {
"firstName": "John",
"nickname": "Johnny",
"lastName": "Doe",
"middleName": "Michael",
"dateOfBirth": "1985-03-15",
"taxResidenceCountry": "GB",
"transliteratedFirstName": "<string>",
"transliteratedMiddleName": "<string>",
"transliteratedLastName": "<string>",
"taxIdentificationDocumentType": "UTR"
},
"countryCode": "US",
"email": "contact@acmeholdings.com",
"phone": "+14155551234",
"address": {
"addressLine1": "123 Main Street",
"city": "San Francisco",
"postalCode": "94102",
"country": "US",
"addressLine2": "Apt 4B",
"state": "CA",
"transliterated": {
"addressLine1": "123 Main Street",
"addressLine2": "Apt 4B",
"city": "Beijing",
"state": "Hebei"
}
},
"ownershipPercentage": 51,
"isSigner": false,
"isDirector": false,
"role": "CEO",
"title": "Managing Director",
"documents": [
"doc_abc123"
],
"attestedOwnershipStructureAt": "2026-01-15T10:30:00Z",
"displayName": "Acme Holdings LLC",
"verificationLink": {
"sessionId": "vsess_abc123",
"verificationUrl": "https://verify.infinite.dev/?sessionId=vsess_abc123",
"expiresAt": "2026-01-09T10:30:00Z",
"status": "ACTIVE"
}
}Update an associated business
Update a business associated entity for a customer without sending polymorphic nested detail objects.
# Requires: npm i -g @infinite_dev/cli && export INFINITE_API_KEY=sk_sandbox_...
# Escape hatch for any endpoint: infinite api <METHOD> <path>
infinite api PATCH /v1/customers/cus_abc123/associated_businesses/ae_abc123 \
--body '<request-json>'Update an associated business (cus_abc123, ae_abc123).
# Infinite MCP is read-only for this endpoint — use a dedicated MCP tool when one exists, otherwise run the CLI tab.import requests
url = "https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}"
payload = {
"parentEntityId": "<string>",
"countryCode": "<string>",
"email": "<string>",
"phone": "<string>",
"hasOwnership": True,
"hasControl": True,
"ownershipPercentage": 123,
"isSigner": True,
"isDirector": True,
"supportingDocuments": [
{
"file": "doc_abc123",
"requirementId": "<string>",
"type": "PROOF_OF_ADDRESS",
"subtype": "UTILITY_BILL",
"description": "Passport issued in 2020",
"remarks": "Uploaded to support proof of business address"
}
],
"attestedOwnershipStructureAt": "<string>",
"relationshipDate": "2020-01-15",
"businessName": "<string>",
"registrationNumber": "<string>",
"dateOfIncorporation": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
parentEntityId: '<string>',
countryCode: '<string>',
email: '<string>',
phone: '<string>',
hasOwnership: true,
hasControl: true,
ownershipPercentage: 123,
isSigner: true,
isDirector: true,
supportingDocuments: [
{
file: 'doc_abc123',
requirementId: '<string>',
type: 'PROOF_OF_ADDRESS',
subtype: 'UTILITY_BILL',
description: 'Passport issued in 2020',
remarks: 'Uploaded to support proof of business address'
}
],
attestedOwnershipStructureAt: '<string>',
relationshipDate: '2020-01-15',
businessName: '<string>',
registrationNumber: '<string>',
dateOfIncorporation: '<string>'
})
};
fetch('https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}', 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://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'parentEntityId' => '<string>',
'countryCode' => '<string>',
'email' => '<string>',
'phone' => '<string>',
'hasOwnership' => true,
'hasControl' => true,
'ownershipPercentage' => 123,
'isSigner' => true,
'isDirector' => true,
'supportingDocuments' => [
[
'file' => 'doc_abc123',
'requirementId' => '<string>',
'type' => 'PROOF_OF_ADDRESS',
'subtype' => 'UTILITY_BILL',
'description' => 'Passport issued in 2020',
'remarks' => 'Uploaded to support proof of business address'
]
],
'attestedOwnershipStructureAt' => '<string>',
'relationshipDate' => '2020-01-15',
'businessName' => '<string>',
'registrationNumber' => '<string>',
'dateOfIncorporation' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}"
payload := strings.NewReader("{\n \"parentEntityId\": \"<string>\",\n \"countryCode\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"hasOwnership\": true,\n \"hasControl\": true,\n \"ownershipPercentage\": 123,\n \"isSigner\": true,\n \"isDirector\": true,\n \"supportingDocuments\": [\n {\n \"file\": \"doc_abc123\",\n \"requirementId\": \"<string>\",\n \"type\": \"PROOF_OF_ADDRESS\",\n \"subtype\": \"UTILITY_BILL\",\n \"description\": \"Passport issued in 2020\",\n \"remarks\": \"Uploaded to support proof of business address\"\n }\n ],\n \"attestedOwnershipStructureAt\": \"<string>\",\n \"relationshipDate\": \"2020-01-15\",\n \"businessName\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"dateOfIncorporation\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"parentEntityId\": \"<string>\",\n \"countryCode\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"hasOwnership\": true,\n \"hasControl\": true,\n \"ownershipPercentage\": 123,\n \"isSigner\": true,\n \"isDirector\": true,\n \"supportingDocuments\": [\n {\n \"file\": \"doc_abc123\",\n \"requirementId\": \"<string>\",\n \"type\": \"PROOF_OF_ADDRESS\",\n \"subtype\": \"UTILITY_BILL\",\n \"description\": \"Passport issued in 2020\",\n \"remarks\": \"Uploaded to support proof of business address\"\n }\n ],\n \"attestedOwnershipStructureAt\": \"<string>\",\n \"relationshipDate\": \"2020-01-15\",\n \"businessName\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"dateOfIncorporation\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox.api.infinite.dev/v1/customers/{customerId}/associated_businesses/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"parentEntityId\": \"<string>\",\n \"countryCode\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": \"<string>\",\n \"hasOwnership\": true,\n \"hasControl\": true,\n \"ownershipPercentage\": 123,\n \"isSigner\": true,\n \"isDirector\": true,\n \"supportingDocuments\": [\n {\n \"file\": \"doc_abc123\",\n \"requirementId\": \"<string>\",\n \"type\": \"PROOF_OF_ADDRESS\",\n \"subtype\": \"UTILITY_BILL\",\n \"description\": \"Passport issued in 2020\",\n \"remarks\": \"Uploaded to support proof of business address\"\n }\n ],\n \"attestedOwnershipStructureAt\": \"<string>\",\n \"relationshipDate\": \"2020-01-15\",\n \"businessName\": \"<string>\",\n \"registrationNumber\": \"<string>\",\n \"dateOfIncorporation\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "asp_abc123",
"createdAt": "2026-01-15T10:30:00Z",
"updatedAt": "2026-01-15T10:30:00Z",
"entityType": "BUSINESS",
"hasOwnership": true,
"hasControl": true,
"parentEntityId": "asp_parent123",
"details": {
"firstName": "John",
"nickname": "Johnny",
"lastName": "Doe",
"middleName": "Michael",
"dateOfBirth": "1985-03-15",
"taxResidenceCountry": "GB",
"transliteratedFirstName": "<string>",
"transliteratedMiddleName": "<string>",
"transliteratedLastName": "<string>",
"taxIdentificationDocumentType": "UTR"
},
"countryCode": "US",
"email": "contact@acmeholdings.com",
"phone": "+14155551234",
"address": {
"addressLine1": "123 Main Street",
"city": "San Francisco",
"postalCode": "94102",
"country": "US",
"addressLine2": "Apt 4B",
"state": "CA",
"transliterated": {
"addressLine1": "123 Main Street",
"addressLine2": "Apt 4B",
"city": "Beijing",
"state": "Hebei"
}
},
"ownershipPercentage": 51,
"isSigner": false,
"isDirector": false,
"role": "CEO",
"title": "Managing Director",
"documents": [
"doc_abc123"
],
"attestedOwnershipStructureAt": "2026-01-15T10:30:00Z",
"displayName": "Acme Holdings LLC",
"verificationLink": {
"sessionId": "vsess_abc123",
"verificationUrl": "https://verify.infinite.dev/?sessionId=vsess_abc123",
"expiresAt": "2026-01-09T10:30:00Z",
"status": "ACTIVE"
}
}Authorizations
API Key in Bearer format (e.g., Bearer sk_test_...)
Headers
API key
Path Parameters
An ID that uniquely identifies a customer resource
"cus_1234567890abcdef"
An ID that uniquely identifies an associated entity resource
"asp_1234567890abcdef"
Body
Updated associated business data
Parent entity ID for nested ownership. Must reference a BUSINESS associated entity on the same customer.
Country code (ISO 3166-1 alpha-2)
Email address
Phone number
Address. Use the nested transliterated field for Latin character versions of non-Latin addresses.
Show child attributes
Show child attributes
Whether this entity is an owner. For an individual with indirect ownership whose percentage is not quantified, omit ownershipPercentage and set this to true to identify them as a beneficial owner.
Has significant control (e.g. CEO, managing member). A control person satisfies the business submission requirement when no individual holds 25% or more effective ownership.
Ownership percentage
Has signing authority
Is a director
Structured role at the company.
CEO, CFO, COO, PRESIDENT, GENERAL_COUNSEL, MANAGING_MEMBER, TREASURER, OTHER Additional supporting document references for this associated entity.
Show child attributes
Show child attributes
Timestamp when ownership structure was attested
Date when the relationship with this entity was established (YYYY-MM-DD)
"2020-01-15"
Business name
Business registration number
Date of incorporation (YYYY-MM-DD)
Business address
Show child attributes
Show child attributes
Response
Associated business updated successfully
Unique identifier
"asp_abc123"
Created timestamp
"2026-01-15T10:30:00Z"
Last updated timestamp
"2026-01-15T10:30:00Z"
Type of entity
INDIVIDUAL, BUSINESS "BUSINESS"
Whether this entity is an owner. For an individual with indirect ownership whose percentage is not quantified, omit ownershipPercentage and set this to true to identify them as a beneficial owner.
true
Has significant control (e.g. CEO, managing member). A control person satisfies the business submission requirement when no individual holds 25% or more effective ownership.
true
Parent entity ID for nested ownership. Use the associated business entity ID returned from the associated entity endpoints when linking a child owner beneath an intermediate business owner.
"asp_parent123"
Type-specific details (individual or business)
- Option 1
- Option 2
Show child attributes
Show child attributes
Country code (ISO 3166-1 alpha-2)
"US"
Email address
"contact@acmeholdings.com"
Phone number
"+14155551234"
Address. Use the nested transliterated field for Latin character versions of non-Latin addresses.
Show child attributes
Show child attributes
Ownership percentage
51
Has signing authority
false
Is a director
false
Structured role at the company.
CEO, CFO, COO, PRESIDENT, GENERAL_COUNSEL, MANAGING_MEMBER, TREASURER, OTHER Custom title at the company.
"Managing Director"
Array of document IDs
["doc_abc123"]
Timestamp when ownership structure was attested
"2026-01-15T10:30:00Z"
Display name
"Acme Holdings LLC"
Verification link for UBO KYC. Present on create (when generateVerificationLink is true) and on single entity GET if there is an active/pending verification session.
Show child attributes
Show child attributes
Was this page helpful?