Onboard institutions
Updated as of 12/04/2025
Institution payloads
New customer 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
This step to create an institution 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 thephysicalCountryisUS.physicalStateOtherneeds to be filled with alphabetical characters when thephysicalCountryis notUS.- New
hasDbaNamethat is a boolean value true or false - New
dbaNamesis a text value that needs to be provided ifhasDbaNameis true - New upload field called
constitutionDocumentthat is a required field (step 2 and 3) - New upload field called
proofOfAddressthat is required ifhasProofOfAddressistrue(step 4 and 5) - These fields have been removed in the new flow:
legalStructurecustomerTypecountryOfIncorporationlegalRegistAddrDifPrincPlaceand all related fields:legalCountrylegalStreetAddresslegalCitylegalStateProvincelegalPostalCode
initialFundingWalletGroupsourceOfWealth
Integration steps: End client institution onboarding
Step 1: Create an institution application
POST /v2/onboarding/customers
POST /v2/onboarding/customersapplicationType: RIA_PC_INSTITUTIONexternalId: 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
externalIdhas already been tied to another end client, anexternal_id already in useerror will be returned.
The endpoint accepts the following general entries data:
| Tag | Description | Required | Type | Value Restrictions |
|---|---|---|---|---|
| legalEntityName | legal entity name | Yes | String | |
| hasDbaName | does your organization have a registered DBA name? | Yes | Boolean | true or false |
| dbaNames | last name | Yes, if hasDbaName = YES | String | |
| businessRegistrationNumber | Business registration number | yes (this or taxId should be provided) | String | |
| taxId | EIN | yes (this or businessRegistrationNumber should be provided) | Number | 9-digit number |
| proofOfAddressContext | When hasProofOfAddress is false explain why | No | String | |
| legalStructure | Legal structure of the institution | No | Enum | C_CORP; LLC; LLP; LP; S_CORP; SOLE_PROP; TRUST; NON_PROFIT; OTHER |
| legalStructureOther | Legal structure of the institution when selects OTHER in the legalStructure question | No | String | |
| physicalCountry | country | Yes | String | ISO 3166-1 alpha-2 country code |
| physicalStreetAddress | street address | Yes | String | |
| physicalCity | city name | Yes | String | |
| physicalStateUS | US state | Yes, for US country | String | 2-character USPS state code |
| physicalStateOther | non-US state or province | Yes, for non-US countries | String | |
| physicalPostalCode | zip code or postal code | Yes | String | |
| hasProofOfAddress | can you provide a proof of address? | Yes | Boolean | true or false |
| hasProofOfAddressContext | additional context if unable to provide proof of address | No | String | |
Please note new entries data for inclusion in payload due to new IRS reporting requirements for both US and Non-US Entities.
| Tag | Description | Required | Type | Value Restrictions |
|---|---|---|---|---|
| US Entity | ||||
| taxClassificationUs | Tax classification (entity type) | Yes if taxId is provided (US entity) | ENUM | see Tax Classifications page |
| taxExemptionPayeeCode | Exempt payee code | No | ENUM | TAX_EXEMPT_PAYEE_CODE_1, TAX_EXEMPT_PAYEE_CODE_2 …. TAX_EXEMPT_PAYEE_CODE_13. (Values found here) |
| fatcaExemptionReportingCode | Exemption from FATCA reporting code | No | ENUM | see FATCA page |
| certifiedW9 | customer has signed w9 certfication | Yes if taxId is provided (US entity) | Boolean | true or false (true if required) |
| Non-US Entity | ||||
| taxClassificationNonUs | Tax classification (entity type) | Yes if businessRegistrationNumber is provided (Non-US entity) | ENUM | see Tax Classifications page |
| disregardedEntityName | Disregarded entity name | Yes if taxClassificationNonUs=DISREGARDED_ENTITY | String | |
| fatcaEntityType | FATCA entity type | Yes if taxClassificationNonUs=DISREGARDED_ENTITY | ENUM | see FATCA page |
| fatcaStatusFfi | FATCA status | Yes if fatcaEntityType=FFI | ENUM | see FATCA page |
| fatcaStatusNffe | FATCA status | Yes if fatcaEntityType=NFFE | ENUM | see FATCA page |
| fatcaStatusExemptBO | FATCA status | Yes if fatcaEntityType=EXEMPTBO | ENUM | see FATCA page |
| giin | GIIN | Yes if fatcaStatusFfi is one of (REPORTING_MODEL_1, REPORTING_MODEL_2 or REGISTERED_DEEMED_COMPLIANT_OTHER_THAN_MODEL_1) | String | GIIN validation referenced here |
| beneficialOwnersRequired | Are there any individuals who directly or indirectly own 25% or more of the entity? | Yes if fatcaStatusNffe=passive | Boolean | |
| beneficiaryFirstName | Beneficiary’s Legal first Name | Yes if beneficialOwnersRequired=true | String | |
| beneficiaryLastName | Beneficiary’s Legal last Name | Yes if beneficialOwnersRequired=true | String | |
| beneficiaryTaxId | Beneficiary’s US taxpayer ID number | Yes if beneficialOwnersRequired=true | String | The US taxpayer ID must be a nine-digit number |
| beneficiaryAllocation | Beneficiary’s Percentage of ownership | Yes if beneficialOwnersRequired=true | String | Ownership percentage must be between 1 and 100, no percentage or spaces (e.g., 35) |
| beneficiaryCountry | Beneficiary’s Residential Country | Yes if beneficialOwnersRequired=true | String | ISO 3166-1 alpha-2 country code |
| beneficiaryStreetAddress | Beneficiary’s Residential Street Address | Yes if beneficialOwnersRequired=true | String | |
| beneficiaryCity | Beneficiary’s Residential City | Yes if beneficialOwnersRequired=true | String | |
| beneficiaryStateUS | Beneficiary’s Residential State/province | Yes, for US country | String | 2-character USPS state code |
| beneficiaryStateOther | Beneficiary’s Residential State/province | Yes, for non-US countries | String | |
| beneficiaryPostalCode | Beneficiary’s Zip code/postal code | Yes if beneficialOwnersRequired=true | String | |
| certifiedW8 | customer has signed w8 certfication | Yes if businessRegistrationNumber is provided (Non-US entity) | 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 Payloads
US Entity Request:
{
"applicationType": "RIA_PC_INSTITUTION",
"entries": [
{ "key": "legalEntityName", "value": "Encom LLC" },
{ "key": "hasDbaName", "value": true },
{ "key": "dbaNames", "value": "Encom Video Games" },
{ "key": "taxId", "value": "123456789" },
{ "key": "physicalCountry", "value": "US" },
{ "key": "physicalStreetAddress", "value": "123 Lightcycle Way" },
{ "key": "physicalCity", "value": "San Francisco" },
{ "key": "physicalStateUS", "value": "CA" },
{ "key": "physicalPostalCode", "value": "94104" },
{ "key": "hasProofOfAddress", "value": true },
{ "key": "taxClassificationUs", "value": "C_CORP"},
{ "key": "taxExemptionPayeeCode", "value": "TAX_EXEMPT_PAYEE_CODE_5"},
{ "key": "fatcaExemptionReportingCode", "value": "FATCA_EXEMPT_REPORTING_CODE_D"},
{ "key": "certifiedW9", "value": true}
]
}Non-US Entity Request:
{
"applicationType": "RIA_PC_INSTITUTION",
"entries": [
{ "key": "legalEntityName", "value": "Encom LLC" },
{ "key": "hasDbaName", "value": true },
{ "key": "dbaNames", "value": "Encom Video Games" },
{ "key": "businessRegistrationNumber", "value": "123456789" },
{ "key": "physicalCountry", "value": "GB" },
{ "key": "physicalStreetAddress", "value": "123 Lightcycle Way" },
{ "key": "physicalCity", "value": "London" },
{ "key": "physicalStateOther", "value": "London" },
{ "key": "physicalPostalCode", "value": "94104" },
{ "key": "hasProofOfAddress", "value": true },
{ "key": "taxClassificationNonUs", "value": "CORP"},
{ "key": "fatcaEntityType", "value": "NFFE"},
{ "key": "fatcaStatusNffe", "value": "PASSIVE"},
{ "key": "beneficialOwnersRequired", "value": true},
{
"key": "beneficiaryGroup",
"value": [
{
"beneficiaryFirstName": "John",
"beneficiaryLastName": "Smith",
"beneficiaryTaxId": "123456789",
"beneficiaryAllocation": "60",
"beneficiaryCountry": "GB",
"beneficiaryStreetAddress": "10 Downing Street",
"beneficiaryCity": "London",
"beneficiaryStateOther": "England",
"beneficiaryPostalCode": "SW1A 1AA"
},
{
"beneficiaryFirstName": "Jane",
"beneficiaryLastName": "Doe",
"beneficiaryTaxId": "987654321",
"beneficiaryAllocation": "40",
"beneficiaryCountry": "GB",
"beneficiaryStreetAddress": "221B Baker Street",
"beneficiaryCity": "London",
"beneficiaryStateOther": "England",
"beneficiaryPostalCode": "NW1 6XE"
}
]},
{ "key": "certifiedW8", "value": true}
]
}Response:
{
"data": {
"customerId": "d6f81b1563687f326ac9e3d4a00f9a0949e4ca81158cc47674846d27094b2503",
"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 |
|---|---|---|---|---|
| constitutionDocument | constitutional document | yes | Upload | image/gif, image/jpeg, image/png, or application/pdf less than 25MB |
| proofOfAddress | proof of address | yes, if hasProofOfAddress = TRUE | 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, while will accept the document in a PUT call. Note the upload URL will only accept a document for 15 minutes. If the URL is has timed out, a new one can be requested by calling the above endpoint again.
Sample
Request:
{
"documentType": "constitutionDocument"
}Response:
{
"data": {
"url": "https://storage.googleapis.com/staging-191601-bio-default/anchorage/pii/v1/d6f81b1563687f326ac9e3d4a00f9a0949e4ca81158cc47674846d27094b2503/CONSTITUTION_DOCUMENT/994c0115e0f5cd3c0bd17f82c93bd63aec1f3f919a9e7e431ce62aa564ea2c3d?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=kyc-default%40staging-191601.iam.gserviceaccount.com%2F20250409%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250409T043734Z&X-Goog-Expires=899&X-Goog-Signature=8e49d401c3e0916a98dab97f3b4718a612e53a26998e5ca80d8dded71a2b99e9628db38b4eef1611a0b54721c80fe4f57869185a4ce57045af372df57dd87ec4429f0aac6dde0193f6b1e0bd03b0050121113e9cf9e86cb182c0eed220c3e697646733ee81d240b893bf6a9a118d5d5183cb4f0fa97f1ed983c13941a55acf26fb9e841c812bbce3d69a9ff4583e523aaddf09c430c640c2cac4cc6ac2e8c83535b57375288b3c18dd8c46257ea6eea12563e9a98d2a18382a7955cedea4ac68e5271c1d32aa97a0546bb3350ab4063e11ced5e7019026c10bfa2fb7b17ff79ad9d912de3ccda0c83c10b21d7e91259e85988c4dd098bc7b6ccc734df12c9c8f&X-Goog-SignedHeaders=host"
}
}Upload image:
curl -X PUT -H 'Content-Type: application/octet-stream' --data-binary @image.png {{step4url.response.body.data.url}}Step 3: Check the status of the institutional 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
{
"data": {
"customerId": "26c014539bd34e8e441e34381d9d5dad9434bb3645dbbf27d8267304e7ad0584",
"entries": [
{
"key": "legalEntityName",
"value": "ACME Corp - 2025-04-11T11:08:11.771Z"
},
{
"key": "dbaNames",
"value": "Encom Video Games"
},
{
"key": "taxId",
"value": "123456789"
},
{
"key": "hasProofOfAddress",
"value": "Yes"
},
{
"key": "physicalCity",
"value": "San Francisco"
},
{
"key": "physicalCountry",
"value": "United States"
},
{
"key": "physicalStateUS",
"value": "California"
},
{
"key": "physicalStreetAddress",
"value": "123 Lightcycle Way"
},
{
"key": "physicalPostalCode",
"value": "94104"
},
{
"key": "hasDbaName",
"value": "Yes"
}
],
"errors": [
{
"key": "constitutionDocument",
"status": "MISSING",
"value": "expected 1 answer for non-void triggered question, instead got 0"
},
{
"key": "proofOfAddress",
"status": "MISSING",
"value": "expected 1 answer for non-void triggered question, instead got 0"
}
],
"errors": [],
"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 institutional 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
{
"data": {
"customerId": "26c014539bd34e8e441e34381d9d5dad9434bb3645dbbf27d8267304e7ad0584",
"entries": [
{
"key": "legalEntityName",
"value": "ACME Corp - 2025-04-11T11:08:11.771Z"
},
{
"key": "dbaNames",
"value": "Encom Video Games"
},
{
"key": "taxId",
"value": "123456789"
},
{
"key": "hasProofOfAddress",
"value": "Yes"
},
{
"key": "physicalCity",
"value": "San Francisco"
},
{
"key": "physicalCountry",
"value": "United States"
},
{
"key": "physicalStateUS",
"value": "California"
},
{
"key": "physicalStreetAddress",
"value": "123 Lightcycle Way"
},
{
"key": "physicalPostalCode",
"value": "94104"
},
{
"key": "hasDbaName",
"value": "Yes"
}
],
"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 | |
| hasDbaName | does your organization have a registered DBA name? | Yes | Yes | Boolean | true or false |
| dbaNames | last name | Yes, if hasDbaName = YES | Yes | String | |
| taxId | EIN | yes (this or businessRegistrationNumber should be provided) | No | Number | 9-digit number |
| businessRegistrationNumber | Business registration number | yes (this or taxId should be provided) | No | String | |
| proofOfAddressContext | When hasProofOfAddress is false explain why | No | Yes | String | |
| legalStructure | Legal structure of the institution | No | No | Enum | C_CORP; LLC; LLP; LP; S_CORP; SOLE_PROP; TRUST; NON_PROFIT; OTHER |
| legalStructureOther | Legal structure of the institution when selects OTHER in the legalStructure question | No | Yes | String | |
| physicalCountry | country | Yes | Yes | String | ISO 3166-1 alpha-2 country code |
| physicalStreetAddress | street address | Yes | Yes | String | |
| physicalCity | city name | Yes | Yes | String | |
| physicalStateUS | US state | Yes, for US country | Yes | String | 2-character USPS state code |
| physicalStateOther | non-US state or province | Yes, for non-US countries | Yes | String | |
| physicalPostalCode | zip code or postal code | Yes | Yes | String | |
| hasProofOfAddress | can you provide a proof of address? | Yes | Yes | Boolean | true or false |
| hasProofOfAddressContext | additional context if unable to provide proof of address | No | Yes | String |
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 Tax Classification. |
| June 10, 2025 | Updates for new onboarding API payloads and flows |
| May 1, 2025 | Initial version |
Updated 7 months ago