Onboard individuals
Updated as of 12/04/2025
Individual payloads
New endpoint payloads and flows were developed to add support to more account types with more complex structures, including joint accounts. This new flow supports opening the following account types:
INDIVIDUAL_TAXABLE(current account type that is created in our flow when we create an account for an Individual End Client)INSTITUTIONAL_TAXABLE(current account type that is created in our flow when we create an account for an Institutional End Client)IRA- may contain an optionalCONVERSIONorROLLOVERsub-typeROTH- may contain an optionalCONVERSIONorROLLOVERsub-typeJOINTCUSTODIAL
Note: This step to create an individual end client is very similar with the already existing flow.
The differences are:
physicalStateUSneeds to be filled with the United States state 2 letter code when thephysicalCountryis US.physicalStateOtherneeds to be filled with alphabetical characters when thephysicalCountryis not US.- New
idTypefield that needs to have the valueGOVERNMENT_ISSUED_ID_CARDorPASSPORT- If
GOVERNMENT_ISSUED_ID_CARDthe files that will need to be provided areidCardFront(step 2 and 3) andidCardBack(step 4 and 5) - If
PASSPORTthe files that will need to be provided ispassportDocument(step 6 and 7)
- If
- This fields have been removed on this new flow:
initialFundingMethodsourceOfWealthinitialFundingWalletGroup
Integration steps - End client individual onboarding steps
Step 1: Create an individual application
POST /v2/onboarding/customers
POST /v2/onboarding/customersapplicationType: RIA_PC_INDIVIDUALexternalId: unique identifier used by the wealth platform to identify this end cliententries- refer the table below to check all the possibilities for the entries object
Note: If the given externalId has already been tied to another end client, an external_id already in use error will be returned.
The endpoint accepts the following entries data:
| Tag | Description | Required | Type | Value restrictions |
|---|---|---|---|---|
| legalEntityName | legal entity name | Yes | String | |
| programCustomer | list of end clients | Yes | Array | 1 entry |
| programCustomer/firstName | end client first name | Yes | String | limited to 36 characters |
| programCustomer/lastName | end client last name | Yes | String | limited to 48 characters |
| programCustomer/middleName | end client middle name | No | String | |
| programCustomer/dateOfBirth | end client date of birth | Yes | Date | ISO 8601 date (without time) |
| programCustomer/email | end client email address | Yes | String | valid e-mail address |
| programCustomer/ssn | end client social security number | Yes (this or governmentId should be provided) | String | 9-digit number |
| programCustomer/governmentId | end client governement specific id | Yes (this or ssn should be provided) | String | |
| programCustomer/physicalCountry | end client country | Yes | String | ISO 3166-1 alpha-2 country code |
| programCustomer/physicalStreetAddress | end client street address | Yes | String | |
| programCustomer/physicalCity | end client city name | Yes | String | |
| programCustomer/physicalStateUS | end client US state | Yes, for US country | String | 2-character USPS state code |
| programCustomer/physicalStateOther | end client non-US state or province | Yes, for non-US countries | String | |
| programCustomer/physicalPostalCode | end client zip code or postal code | Yes | String | |
| programCustomer/idType | end client type of ID uploaded | Yes | Enum | GOVERNMENT_ISSUED_ID_CARD or PASSPORT |
| certifiedW9 | customer has signed w9 certfication | Yes if programCustomer/ssn is provided (US individuals) | Boolean | true or false (true if required) |
| certifiedW8 | customer has signed w8 certfication | Yes if programCustomer/governmentId is provided (Non-US individuals) | Boolean | true or false (true if required) |
A unique customerId is returned, which will be used in all future calls to identify this end client at Anchorage Digital.
Sample
Example payload for PC Individual for w8 (Non-US Individual):
{
"applicationType": "RIA_PC_INDIVIDUAL",
"entries": [
{ "key": "legalEntityName", "value": "RIA PC Inv 1 Test" },
{ "key": "programCustomer",
"value": {
"firstName": "Kevin",
"lastName": "Flynn_1",
"dateOfBirth": "01/01/1970",
"email": "[email protected]",
"governmentId": "123456789",
"physicalCity": "city",
"physicalCountry": "FRANCE",
"physicalPostalCode": "7500",
"physicalStateOther": "Paris",
"physicalStreetAddress": "123 Lightcycle Way",
"idType": "GOVERNMENT_ISSUED_ID_CARD"
}
},
{ "key": "certifiedW8", "value": true },
]
}Example payload for PC Individual for w9 (US individual)
{
"applicationType": "RIA_PC_INDIVIDUAL",
"entries": [
{ "key": "legalEntityName", "value": "RIA PC Inv 1 Test" },
{ "key": "programCustomer",
"value": {
"firstName": "Kevin",
"lastName": "Flynn_1",
"dateOfBirth": "01/01/1970",
"email": "[email protected]",
"ssn": "123456789",
"physicalCity": "city",
"physicalCountry": "US",
"physicalPostalCode": "94104",
"physicalStateUS": "CA",
"physicalStreetAddress": "123 Lightcycle Way",
"idType": "GOVERNMENT_ISSUED_ID_CARD"
}
},
{ "key": "certifiedW9", "value": true },
]
}Response:
{
"data": {
"customerId": "c78e4bbd8f346e1f314f160ef3c84e69d2d1cbc878e569137eba688a1cf56ea1",
"status": "IN_PROGRESS"
}
}Step 2: Upload required document images
POST /v2/onboarding/customers/{{customerId}}/document
POST /v2/onboarding/customers/{{customerId}}/document| Tag | Description | Required | Type | Value Restrictions |
|---|---|---|---|---|
| documentType | passport | yes, if ID card is not provided | Upload | image/gif, image/jpeg, image/png, or application/pdf less than 25MB |
| documentType | government issued ID card front | yes, if passport is not provided | Upload | image/gif, image/jpeg, image/png, or application/pdf less than 25MB |
| documentType | government issued ID card back | yes, if passport is not provided | Upload | image/gif, image/jpeg, image/png, or application/pdf less than 25MB |
Note: A single image file of type GIF, JPEG, PNG or PDF should be uploaded to the URL. If a second one is uploaded, the latest one will be the one used. A multi-file archive would be rejected since it’s not one of these MIME types.
A signed upload URL is returned, which will accept the document in a PUT call. The upload URL will only accept a document for 15 minutes. If the URL times out, a new one can be requested by calling the above endpoint again.
Sample
Request:
{
"documentType": "programCustomer.idCardFront"
}Response:
{
"data": {
"url": "https://storage.googleapis.com/staging-191601-bio-default/anchorage/pii/v1/64626bc421f36808f99fa9542a2075ce67d0466a019f31aefa22f84f31a3adb2/ID_CARD_FRONT/55c7e1dc053fdd522470040e59a448cb3ad9593dd169729cee27660ae95466c4?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=kyc-default%40staging-191601.iam.gserviceaccount.com%2F20250409%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250409T042548Z&X-Goog-Expires=899&X-Goog-Signature=38c2cfa9f06d32c5ba0641fab10ca2270603b0f9c22fe0d2493787cc58673b2b557c8f243347b43fd42e216acc3f0fe391c7f5ba5df2442c2c4ec4a08ad9524554122ca0a0228761d90f668251812f359e2dbad39126b8c8cab4d0175bea227091ea85ac6e3c0a5d8ea587b02fcfee733f8e033f43b7835170db9cea9eaf3496198e112e7aa7b1cd6f2891f4540e09d3167960891dfdfe80ac93c2cd5a6e049d9eda3f97fcddc7fa36b932bd0b8ee8fe5f6c2689586d333c7b6a6aa0d431040d1fd961773e8dbff3d968599a565da379c50c81182279e925c7e30b75ea89a59988e9e53cbd6a133dfc8084cbd3a707e4bacbd08408c5f324e67a528c63a5b92c&X-Goog-SignedHeaders=host"
}
}Upload image:
curl -X PUT -H 'Content-Type: application/octet-stream' --data-binary @image.png {{step2url.response.body.data.url}}Step 3: check the status of the individual application
GET /v2/onboarding/customers/{{customerId}}
GET /v2/onboarding/customers/{{customerId}}Any errors or missing documents will be listed in the errors section of the returned JSON.
Sample
Response:
{
"data": {
"customerId": "c78e4bbd8f346e1f314f160ef3c84e69d2d1cbc878e569137eba688a1cf56ea1",
"entries": [
{
"key": "programCustomer",
"value": [
{
"dateOfBirth": "01/01/1970",
"email": "[email protected]",
"firstName": "Kevin",
"idCardBack": "866b68b4a99de75dd9bca11d231041a7bd4e2469bc488abf5d6614283917b34c",
"idCardFront": "55c7e1dc053fdd522470040e59a448cb3ad9593dd169729cee27660ae95466c4",
"idType": "GOVERNMENT_ISSUED_ID_CARD",
"lastName": "Flynn_1",
"physicalCity": "city",
"physicalCountry": "US",
"physicalPostalCode": "94104",
"physicalStateUS": "CA",
"physicalStreetAddress": "123 Lightcycle Way",
"ssn": "123456789"
}
]
},
{
"key": "legalEntityName",
"value": "RIA PC Inv 1 Test"
}
],
"errors": [
{
"key": "programCustomer.idCardFront",
"status": "MISSING",
"value": "expected 1 answer for non-void triggered question, instead got 0"
},
{
"key": "programCustomer.idCardBack",
"status": "MISSING",
"value": "expected 1 answer for non-void triggered question, instead got 0"
}
],
"status": "IN_PROGRESS"
}
}Step 4: Submit the application
POST /v2/onboarding/customers/{{customerId}}/submit
POST /v2/onboarding/customers/{{customerId}}/submitOnce the application is successfully submitted, you may submit another end client application or a linked subaccount application.
Note: You do not need to wait for approval before submitting linked subaccount applications.
Step 5: Check the approval status of the individual application
GET /v2/onboarding/customers/{{customerId}}
GET /v2/onboarding/customers/{{customerId}}Upon successful submission, the returned application status will change from IN_PROGRESS to IN_REVIEW. Once the application has been fully approved, the status will change to COMPLETE.
Alternatively you can register for a webhook asynchronous response for an event when the application is approved. Information on registering for webhooks is available here.
Sample
Response:
{
"data": {
"customerId": "c78e4bbd8f346e1f314f160ef3c84e69d2d1cbc878e569137eba688a1cf56ea1",
"entries": [
{
"key": "programCustomer",
"value": [
{
"dateOfBirth": "01/01/1970",
"email": "[email protected]",
"firstName": "Kevin",
"idCardBack": "866b68b4a99de75dd9bca11d231041a7bd4e2469bc488abf5d6614283917b34c",
"idCardFront": "55c7e1dc053fdd522470040e59a448cb3ad9593dd169729cee27660ae95466c4",
"idType": "GOVERNMENT_ISSUED_ID_CARD",
"lastName": "Flynn_1",
"physicalCity": "city",
"physicalCountry": "US",
"physicalPostalCode": "94104",
"physicalStateUS": "CA",
"physicalStreetAddress": "123 Lightcycle Way",
"ssn": "123456789"
}
]
},
{
"key": "legalEntityName",
"value": "RIA PC Inv 1 Test"
}
],
"errors": [],
"status": "COMPLETE"
}
}Step 6: (Reliance Only) Edit Customer Onboarding Information
RIAs for which Anchorage has full or partial KYC reliance have access to a unique onboarding flow in which Program Customers are “auto-approved” given they have already gone through KYC with the RIA. As a result, for these RIAs, we allow editability for select Program Customer fields even after application “status” is “COMPLETE”.
| Tag | Description | Required | Can Edit | Type | Value Restrictions |
|---|---|---|---|---|---|
| legalEntityName | legal entity name | Yes | No | String | |
| programCustomer | list of end clients | Yes | Yes | Array | 1 entry |
| programCustomer/firstName | end client first name | Yes | Yes | String | limited to 36 characters |
| programCustomer/lastName | end client last name | Yes | Yes | String | limited to 48 characters |
| programCustomer/middleName | end client middle name | No | Yes | String | |
| programCustomer/dateOfBirth | end client date of birth | Yes | No | Date | ISO 8601 date (without time) |
| programCustomer/email | end client email address | Yes | Yes | String | valid e-mail address |
| programCustomer/ssn | end client social security number | Yes (this or governmentId should be provided) | No | String | 9-digit number |
| programCustomer/governmentId | end client governement specific id | Yes (this or ssn should be provided) | No | String | |
| programCustomer/physicalCountry | end client country | Yes | Yes | String | ISO 3166-1 alpha-2 country code |
| programCustomer/physicalStreetAddress | end client street address | Yes | Yes | String | |
| programCustomer/physicalCity | end client city name | Yes | Yes | String | |
| programCustomer/physicalStateUS | end client US state | Yes, for US country | Yes | String | 2-character USPS state code |
| programCustomer/physicalStateOther | end client non-US state or province | Yes, for non-US countries | Yes | String | |
| programCustomer/physicalPostalCode | end client zip code or postal code | Yes | Yes | String | |
| programCustomer/idType | end client type of ID uploaded | Yes | No | Enum | GOVERNMENT_ISSUED_ID_CARD or PASSPORT |
| certifiedW9 | customer has signed w9 certfication | Yes if programCustomer/ssn is provided (US individuals) | No | Boolean | true or false |
| certifiedW8 | customer has signed w8 certfication | Yes if programCustomer/governmentId is provided (Non-US individuals) | No | Boolean | should be true if required |
Changelog
| Date | Change |
|---|---|
| December 4, 2025 | Updates for new onboarding API fields related to new 1099-DA requirements to collect W8/W9 to avoid backup withholding. New fields added are around Country of Citizenship and Tax Reporting Certification. |
| June 10, 2025 | Updates for new onboarding API payloads and flows |
| May 1, 2025 | Initial version |
Updated 8 months ago