Complete Know Your Business (KYB) Verification

Overview

The Know Your Business API enables you to programmatically verify the information of businesses onboarding to your platform and ensure regulatory compliance. This verification is required before businesses can begin using BitGo products through your platform.

The KYB API works by associating individual identities of key business personnel with the business' identity. After you create and associate all the necessary identities and request BitGo product access, BitGo generates documentation requirements specifically tailored to the business and regulatory requirements. The API supports piecemeal updates, so you can collect and update documentation over time.

KYB Webhooks

You can set up webhooks to keep you informed throughout the KYB process. See the Create Organization Webhook endpoint for more information.

Prerequisites

1. Create Enterprise and Primary User

Endpoint: Create an Enterprise for an Organization

export ORGANIZATION_ID="<YOUR_ORGANIZATION_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export EMAIL="<YOUR_USER'S_EMAIL>"
export IDEMPOTENCY_KEY="<UNIQUE_IDENTIFIER_PER_REQUEST>"

curl -X POST \
  "https://app.bitgo-test.com/api/v2/organization/$ORGANIZATION_ID/enterprise" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "email": "$EMAIL",
    "idempotencyKey": "$IDEMPOTENCY_KEY",
    "additionalAdmins": [
        "5cb525d7e1b1328103076788fd6a07f9"
    ],
    "accountType": "entity" #This creates a business enterprise instead of an individual enterprise.
}'

Step Result

All of the following occurs:

  • Create a new child enterprise within your parent organization.
  • Create a new user for the child enterprise, this is the primary contact for the business.
  • Assign the service user to the child enterprise.
  • Assign organization admins to the child enterprise.
{
    "enterpriseId": "68cc1b65564dc0f83892a49d1ee75626",
    "userId": "68cc1b63564dc0f83892a32072a8b5c7"
}

2. Create Users for Associated Persons

Repeat this step to create users for all beneficial owners, control persons, and platform admins associated with the onboarding business.

Endpoint: Add a User to an Enterprise Within an Organization

export ORGANIZATION_ID="<YOUR_ORGANIZATION_ID>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export EMAIL="<YOUR_USER'S_EMAIL>"

curl -X POST \
  "https://app.bitgo-test.com/api/v2/organization/$ORGANIZATION_ID/enterprise/{enterpriseId}/user" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        "email": "$EMAIL"
}'

Step Result

You receive a user ID for the user. Store the IDs you create for all associated persons for use in the following steps.

{
  "userId": "68cc1bc8b1b5017f12c5c1e3c04cd1d4"
}

3. Create Business Identity

Create the main business identity with requested products. The following products are available:

  • Custody
  • Trade
  • Trade API
  • Instant Fee Wallets
  • Go Account
  • Defi
  • Cold Self-Custody
  • Staking
  • Hot-Self Custody

The following code sample requests the products necessary for trading.

Endpoint: Create KYB Identity

export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export ORGANIZATION_ID="<YOUR_ORGANIZATION_ID>"

curl -X POST \
  "https://app.bitgo-test.com/api/identity-service/v1/identities" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        {
  "type": "business",
  "enterpriseId": "$ENTERPRISE_ID",
  "organizationId": "$ORGANIZATION_ID",
  "requestedProducts": [
    {
      "name": "Trade",
      "bitgoOrg": "BitGo Trust"
    },
    {
      "name": "Go Account",
      "bitgoOrg": "BitGo Trust"
    },
    {
      "name": "Trade API",
      "bitgoOrg": "BitGo Trust"
    }
  ]
}

}'

Step Result

{
  "type": "business",
  "organizationId": "659706890515c624f4f0871b879b00a6",
  "enterpriseId": "68cc1b65564dc0f83892a49d1ee75626",
  "business": {},
  "associatedPeople": [],
  "id": "c1ecba6b-0914-4bc3-ae67-4188e061aa3e",
  "requestedProducts": [
    {
      "id": "1a595191-b22d-48f9-b816-4ca311a3f5a4",
      "name": "Trade",
      "bitgoOrg": "BitGo Trust",
      "status": "missingLocation"
    },
    {
      "id": "81948454-f74e-438e-b51e-75e3fdbac1d3",
      "name": "Go Account",
      "bitgoOrg": "BitGo Trust",
      "status": "missingLocation"
    },
    {
      "id": "287be386-dd7e-4dc9-9180-8b1e33e2c26d",
      "name": "Trade API",
      "bitgoOrg": "BitGo Trust",
      "status": "missingLocation"
    }
  ],
  "requirements": [],
  "documents": [],
  "finalizeSubmission": false
}

4. Add Business Location

Add a location to the business. This generates additional business-specific information requirements.

Endpoint: Update KYB Identity

export BUSINESS_IDENTITY_ID="<YOUR_BUSINESS_IDENTITY_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X PATCH \
  "https://app.bitgo-test.com/api/identity-service/v1/identities/$BUSINESS_IDENTITY_ID" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "business": {
        "physicalBusinessAddress": {
            "street1": "123 4th St",
            "city": "San Francisco",
            "subdivision": "CA",
            "zip": "85255",
            "country": "USA"
            }
        }
}'

Step Result

The response shows the new requirements and their status.

{
  "type": "business",
  "organizationId": "659706890515c624f4f0871b879b00a6",
  "enterpriseId": "68cc1b65564dc0f83892a49d1ee75626",
  "business": {
    "physicalBusinessAddress": {
      "street1": "123 4th St",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "85255",
      "country": "USA"
    }
  },
  "associatedPeople": [],
  "id": "c1ecba6b-0914-4bc3-ae67-4188e061aa3e",
  "requestedProducts": [
    {
      "id": "1a595191-b22d-48f9-b816-4ca311a3f5a4",
      "name": "Trade",
      "bitgoOrg": "BitGo Trust",
      "status": "missingEntityStructure"
    },
    {
      "id": "81948454-f74e-438e-b51e-75e3fdbac1d3",
      "name": "Go Account",
      "bitgoOrg": "BitGo Trust",
      "status": "missingEntityStructure"
    },
    {
      "id": "287be386-dd7e-4dc9-9180-8b1e33e2c26d",
      "name": "Trade API",
      "bitgoOrg": "BitGo Trust",
      "status": "missingEntityStructure"
    }
  ],
  "requirements": [
    {
      "id": "97aa9da8-bce3-4c75-921f-19b5dc2e1fe9",
      "kind": "businessInformation",
      "name": "businessName",
      "status": "missing"
    },
    {
      "id": "d4e2f291-dbcb-4645-9cfa-2af82e321528",
      "kind": "businessInformation",
      "name": "einTinIdentificationNumber",
      "status": "missing"
    },
    {
      "id": "8770df93-740b-4217-9295-fd7f934c0013",
      "kind": "businessInformation",
      "name": "legalEntityStructure",
      "status": "missing"
    },
    {
      "id": "90e3730c-52b0-4bbc-be22-7d8f85e75847",
      "kind": "businessInformation",
      "name": "otherEntityId",
      "status": "missing"
    },
    {
      "id": "c4d1e296-2d57-48e9-b7bd-6661f796eeed",
      "kind": "businessInformation",
      "name": "tradeStrategy",
      "status": "missing"
    },
    {
      "id": "46486076-1b79-4e7a-8140-7029f15c8ea1",
      "kind": "businessInformation",
      "name": "activeExchanges",
      "status": "missing"
    },
    {
      "id": "fecacda4-fd4a-4e21-9b1a-2d4502992b1d",
      "kind": "businessInformation",
      "name": "tradeVolumeUsd",
      "status": "missing"
    },
    {
      "id": "cd1e9438-d47a-4291-b293-7afc4b1e03c3",
      "kind": "businessInformation",
      "name": "diligenceCounselName",
      "status": "missing"
    },
    {
      "id": "5cdf6e6b-7aae-4be0-b921-84cdb2584eb0",
      "kind": "businessInformation",
      "name": "walletAddress",
      "status": "missing"
    },
    {
      "id": "ba06ba8a-4563-45fb-9230-627d9f398955",
      "kind": "businessInformation",
      "name": "incorporationCountryCode",
      "status": "missing"
    },
    {
      "id": "27a57e08-aac0-4000-9990-5f48e2fb9c2f",
      "kind": "businessInformation",
      "name": "primaryOperationsCountryCode",
      "status": "missing"
    },
    {
      "id": "7a819a4c-f764-4b45-b495-4ef252c56adc",
      "kind": "businessInformation",
      "name": "formationDate",
      "status": "missing"
    },
    {
      "id": "0bdbbb09-2bb1-4a8a-a15f-ae21eb4713d6",
      "kind": "businessInformation",
      "name": "companyWebsiteAddress",
      "status": "missing"
    },
    {
      "id": "a90b53f8-c222-40be-9791-249119666de8",
      "kind": "businessInformation",
      "name": "descriptionBusinessActivities",
      "status": "missing"
    },
    {
      "id": "213fb00a-41fc-4052-a5b3-2d47eb6096d9",
      "kind": "businessInformation",
      "name": "activeCoinTokens",
      "status": "missing"
    },
    {
      "id": "9e9aab26-c2db-4500-8d93-1ea2610a538b",
      "kind": "businessInformation",
      "name": "customerBaseLocations",
      "status": "missing"
    },
    {
      "id": "3e005cd6-2bca-4163-9758-5f94a933717d",
      "kind": "businessInformation",
      "name": "hasAuditor",
      "status": "missing"
    },
    {
      "id": "fba8d81f-6fef-4164-89ba-87f6c48f4a90",
      "kind": "businessInformation",
      "name": "hasLegalCounsel",
      "status": "missing"
    },
    {
      "id": "12ba0148-fb8c-4904-8a64-57ad8340d1e3",
      "kind": "businessInformation",
      "name": "authorizedSigner",
      "status": "missing"
    },
    {
      "id": "aacb1e67-e535-4695-af55-059d5afed521",
      "kind": "businessInformation",
      "name": "dbaName",
      "status": "missing"
    },
    {
      "id": "08429fe3-f95e-42ce-bdc1-cc16dbf61c56",
      "kind": "businessInformation",
      "name": "primaryBusinessTypeInstitutional",
      "status": "missing"
    },
    {
      "id": "046d005b-2fc7-49ef-989c-1637faebfc97",
      "kind": "businessInformation",
      "name": "diligenceRetailInstitutional",
      "status": "missing"
    },
    {
      "id": "0df8d309-bd5c-470e-870d-8802d5816b31",
      "kind": "businessInformation",
      "name": "firmAuditor",
      "status": "missing"
    },
    {
      "id": "e4e96c5a-9db1-40b6-8c17-ac1ea8072bf9",
      "kind": "businessInformation",
      "name": "sanctionAffiliates",
      "status": "missing"
    },
    {
      "id": "8e621c34-a7cf-47ff-a96a-ddbf54ba8836",
      "kind": "businessInformation",
      "name": "billingAddress",
      "status": "missing"
    },
    {
      "id": "d0b48435-1c8e-44b1-b198-01c9c1b62b3a",
      "kind": "businessInformation",
      "name": "billingContact",
      "status": "missing"
    },
    {
      "id": "6baa5f12-27c1-4976-8797-5d41f444670c",
      "kind": "businessInformation",
      "name": "mailingAddress",
      "status": "missing"
    },
    {
      "id": "3e98ca55-d7aa-4634-8006-04253fdf87f4",
      "kind": "businessInformation",
      "name": "primaryBusinessType",
      "status": "missing"
    },
    {
      "id": "d6f77654-9afa-4a45-95c4-1cd7431bf3c3",
      "kind": "businessInformation",
      "name": "physicalBusinessAddress",
      "status": "submitted"
    },
    {
      "id": "02dcf645-cb00-4280-a9e1-b79d64511204",
      "kind": "associatedPerson",
      "name": "beneficialOwners",
      "status": "submitted"
    },
    {
      "id": "a0ab73e7-e06e-4b94-acc7-e75644d80157",
      "kind": "associatedPerson",
      "name": "controlPeople",
      "status": "missing"
    }
  ],
  "documents": [],
  "finalizeSubmission": false,
  "ignoredFields": []
}

5. Update Legal Entity Structure

Update the business identity with a legal entity structure. This generates additional document requirements.

Endpoint: Update KYB Identity

export BUSINESS_IDENTITY_ID="<YOUR_BUSINESS_IDENTITY_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X PATCH \
  "https://app.bitgo-test.com/api/identity-service/v1/identities/$BUSINESS_IDENTITY_ID" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "business": {
    "legalEntityStructure": "corporationCAndS",
  }
}'

Step Result

{
  "type": "business",
  "organizationId": "659706890515c624f4f0871b879b00a6",
  "enterpriseId": "68cc1b65564dc0f83892a49d1ee75626",
  "business": {
    "physicalBusinessAddress": {
      "street1": "123 4th St",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "85255",
      "country": "USA"
    },
    "businessName": "Acme Corporation",
    "incorporationCountryCode": "USA",
    "primaryOperationsCountryCode": "USA",
    "einTinIdentificationNumber": "12-3456789",
    "otherEntityId": "ABC123456",
    "mailingAddress": {
      "street1": "456 Business Ave",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "94102",
      "country": "USA"
    },
    "billingAddress": {
      "street1": "789 Finance St",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "94103",
      "country": "USA"
    },
    "legalEntityStructure": "corporationCAndS",
    "formationDate": "2020-01-15",
    "dbaName": "Acme",
    "companyWebsiteAddress": "https://www.acme.com",
    "primaryBusinessType": "Software or Technology Company",
    "primaryBusinessTypeInstitutional": true,
    "descriptionBusinessActivities": "Development Services",
    "billingContact": {
      "nameFirst": "Jane",
      "nameLast": "Smith",
      "emailAddress": "[email protected]",
      "phoneNumber": {
        "countryCode": "1",
        "phoneNumber": "5551234567"
      }
    },
    "authorizedSigner": {
      "nameFirst": "John",
      "nameLast": "Doe",
      "emailAddress": "[email protected]",
      "phoneNumber": {
        "countryCode": "1",
        "phoneNumber": "5559876543"
      }
    },
    "tradeStrategy": "Long-term investment in technology stocks and crypto assets",
    "activeCoinTokens": "BTC, ETH, USDC, USDT",
    "tradeVolumeUsd": "1000000",
    "activeExchanges": "Coinbase, Binance, Kraken",
    "diligenceRetailInstitutional": "institutional",
    "customerBaseLocations": "United States, Canada, Europe",
    "sanctionAffiliates": false,
    "hasAuditor": true,
    "firmAuditor": "Deloitte and Touche LLP",
    "hasLegalCounsel": true,
    "diligenceCounselName": "Smith and Associates Law Firm",
    "walletAddress": "0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6"
  },
  "associatedPeople": [],
  "id": "c1ecba6b-0914-4bc3-ae67-4188e061aa3e",
  "requestedProducts": [
    {
      "id": "287be386-dd7e-4dc9-9180-8b1e33e2c26d",
      "name": "Trade API",
      "bitgoOrg": "BitGo Trust",
      "status": "missingRequirements"
    },
    {
      "id": "1a595191-b22d-48f9-b816-4ca311a3f5a4",
      "name": "Trade",
      "bitgoOrg": "BitGo Trust",
      "status": "missingRequirements"
    },
    {
      "id": "81948454-f74e-438e-b51e-75e3fdbac1d3",
      "name": "Go Account",
      "bitgoOrg": "BitGo Trust",
      "status": "missingRequirements"
    }
  ],
  "requirements": [
    {
      "id": "d6f77654-9afa-4a45-95c4-1cd7431bf3c3",
      "kind": "businessInformation",
      "name": "physicalBusinessAddress",
      "status": "submitted"
    },
    {
      "id": "02dcf645-cb00-4280-a9e1-b79d64511204",
      "kind": "associatedPerson",
      "name": "beneficialOwners",
      "status": "submitted"
    },
    {
      "id": "a0ab73e7-e06e-4b94-acc7-e75644d80157",
      "kind": "associatedPerson",
      "name": "controlPeople",
      "status": "submitted"
    },
    {
      "id": "e65ddc61-2cbe-4e44-a86f-666760952d3a",
      "kind": "document",
      "name": "certificateOfTrust",
      "status": "missing"
    },
    {
      "id": "16c518a2-d757-41a3-bac7-040a1011aab7",
      "kind": "document",
      "name": "proofOfAuthorizedSignatories",
      "status": "missing"
    },
    {
      "id": "e149b8df-c077-4771-8534-c8169d117742",
      "kind": "document",
      "name": "w9",
      "status": "missing"
    },
    {
      "id": "97aa9da8-bce3-4c75-921f-19b5dc2e1fe9",
      "kind": "businessInformation",
      "name": "businessName",
      "status": "submitted"
    },
    {
      "id": "ba06ba8a-4563-45fb-9230-627d9f398955",
      "kind": "businessInformation",
      "name": "incorporationCountryCode",
      "status": "submitted"
    },
    {
      "id": "27a57e08-aac0-4000-9990-5f48e2fb9c2f",
      "kind": "businessInformation",
      "name": "primaryOperationsCountryCode",
      "status": "submitted"
    },
    {
      "id": "d4e2f291-dbcb-4645-9cfa-2af82e321528",
      "kind": "businessInformation",
      "name": "einTinIdentificationNumber",
      "status": "submitted"
    },
    {
      "id": "90e3730c-52b0-4bbc-be22-7d8f85e75847",
      "kind": "businessInformation",
      "name": "otherEntityId",
      "status": "submitted"
    },
    {
      "id": "6baa5f12-27c1-4976-8797-5d41f444670c",
      "kind": "businessInformation",
      "name": "mailingAddress",
      "status": "submitted"
    },
    {
      "id": "8e621c34-a7cf-47ff-a96a-ddbf54ba8836",
      "kind": "businessInformation",
      "name": "billingAddress",
      "status": "submitted"
    },
    {
      "id": "8770df93-740b-4217-9295-fd7f934c0013",
      "kind": "businessInformation",
      "name": "legalEntityStructure",
      "status": "submitted"
    },
    {
      "id": "7a819a4c-f764-4b45-b495-4ef252c56adc",
      "kind": "businessInformation",
      "name": "formationDate",
      "status": "submitted"
    },
    {
      "id": "aacb1e67-e535-4695-af55-059d5afed521",
      "kind": "businessInformation",
      "name": "dbaName",
      "status": "submitted"
    },
    {
      "id": "0bdbbb09-2bb1-4a8a-a15f-ae21eb4713d6",
      "kind": "businessInformation",
      "name": "companyWebsiteAddress",
      "status": "submitted"
    },
    {
      "id": "3e98ca55-d7aa-4634-8006-04253fdf87f4",
      "kind": "businessInformation",
      "name": "primaryBusinessType",
      "status": "submitted"
    },
    {
      "id": "08429fe3-f95e-42ce-bdc1-cc16dbf61c56",
      "kind": "businessInformation",
      "name": "primaryBusinessTypeInstitutional",
      "status": "submitted"
    },
    {
      "id": "a90b53f8-c222-40be-9791-249119666de8",
      "kind": "businessInformation",
      "name": "descriptionBusinessActivities",
      "status": "submitted"
    },
    {
      "id": "d0b48435-1c8e-44b1-b198-01c9c1b62b3a",
      "kind": "businessInformation",
      "name": "billingContact",
      "status": "submitted"
    },
    {
      "id": "12ba0148-fb8c-4904-8a64-57ad8340d1e3",
      "kind": "businessInformation",
      "name": "authorizedSigner",
      "status": "submitted"
    },
    {
      "id": "c4d1e296-2d57-48e9-b7bd-6661f796eeed",
      "kind": "businessInformation",
      "name": "tradeStrategy",
      "status": "submitted"
    },
    {
      "id": "213fb00a-41fc-4052-a5b3-2d47eb6096d9",
      "kind": "businessInformation",
      "name": "activeCoinTokens",
      "status": "submitted"
    },
    {
      "id": "fecacda4-fd4a-4e21-9b1a-2d4502992b1d",
      "kind": "businessInformation",
      "name": "tradeVolumeUsd",
      "status": "submitted"
    },
    {
      "id": "46486076-1b79-4e7a-8140-7029f15c8ea1",
      "kind": "businessInformation",
      "name": "activeExchanges",
      "status": "submitted"
    },
    {
      "id": "046d005b-2fc7-49ef-989c-1637faebfc97",
      "kind": "businessInformation",
      "name": "diligenceRetailInstitutional",
      "status": "submitted"
    },
    {
      "id": "9e9aab26-c2db-4500-8d93-1ea2610a538b",
      "kind": "businessInformation",
      "name": "customerBaseLocations",
      "status": "submitted"
    },
    {
      "id": "e4e96c5a-9db1-40b6-8c17-ac1ea8072bf9",
      "kind": "businessInformation",
      "name": "sanctionAffiliates",
      "status": "submitted"
    },
    {
      "id": "3e005cd6-2bca-4163-9758-5f94a933717d",
      "kind": "businessInformation",
      "name": "hasAuditor",
      "status": "submitted"
    },
    {
      "id": "0df8d309-bd5c-470e-870d-8802d5816b31",
      "kind": "businessInformation",
      "name": "firmAuditor",
      "status": "submitted"
    },
    {
      "id": "fba8d81f-6fef-4164-89ba-87f6c48f4a90",
      "kind": "businessInformation",
      "name": "hasLegalCounsel",
      "status": "submitted"
    },
    {
      "id": "cd1e9438-d47a-4291-b293-7afc4b1e03c3",
      "kind": "businessInformation",
      "name": "diligenceCounselName",
      "status": "submitted"
    },
    {
      "id": "5cdf6e6b-7aae-4be0-b921-84cdb2584eb0",
      "kind": "businessInformation",
      "name": "walletAddress",
      "status": "submitted"
    }
  ],
  "documents": [],
  "finalizeSubmission": false,
  "ignoredFields": []
}

6. Create Individual Identities for Associated Persons

Create individual identities for each beneficial owner and control person using the user IDs created previously. You don't need to request products for associated people. They inherit the product approvals of the business they are associated with.

Endpoint: Create KYB Identity

export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export USER_ID="<YOUR_USER_ID>"

curl -X POST \
  "https://app.bitgo-test.com/api/identity-service/v1/identities" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        "type": "individual",
        "userId": "$USER_ID",
        "requestedProducts": []
}'

Step Result

{
  "type": "individual",
  "userId": "68cc1bc8b1b5017f12c5c1e3c04cd1d4",
  "individual": {},
  "id": "df114ee7-7dc9-431e-aeae-fe4294f789cc",
  "requestedProducts": [],
  "requirements": [],
  "documents": [],
  "finalizeSubmission": false
}

7. Add Associated Persons to Business Identity

When you add associated persons to the business identity, BitGo generates requirements for their individual identities. These requirements are specific to each associated person's identity. Beneficial owners are not required if no one has a 10% stake or more in the company, so the requirement automatically defaults to “submitted”, but you can always submit more.

Endpoint: Create KYB Identity

export BUSINESS_IDENTITY_ID="<YOUR_BUSINESS_IDENTITY_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
  "https://app.bitgo-test.com/api/identity-service/v1/identities/$BUSINESS_IDENTITY_ID" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        "associatedPeople": [
            {
                "role": "beneficialOwner",
                "identityId": "f56a207c-0c96-4e5d-b59d-5bcf8092580a",
                "percentageOwnership": 25
            },
            {
                "role": "controlPerson",
                "identityId": "df114ee7-7dc9-431e-aeae-fe4294f789cc"
            }
        ]
}'

Step Result

{
  "type": "business",
  "organizationId": "659706890515c624f4f0871b879b00a6",
  "enterpriseId": "68cc1b65564dc0f83892a49d1ee75626",
  "business": {
    "physicalBusinessAddress": {
      "street1": "123 4th St",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "85255",
      "country": "USA"
    }
  },
  "associatedPeople": [
    {
      "role": "beneficialOwner",
      "identityId": "f56a207c-0c96-4e5d-b59d-5bcf8092580a",
      "percentageOwnership": 25
    },
    {
      "role": "controlPerson",
      "identityId": "df114ee7-7dc9-431e-aeae-fe4294f789cc"
    }
  ],
  "id": "c1ecba6b-0914-4bc3-ae67-4188e061aa3e",
  "requestedProducts": [
    {
      "id": "1a595191-b22d-48f9-b816-4ca311a3f5a4",
      "name": "Trade",
      "bitgoOrg": "BitGo Trust",
      "status": "missingEntityStructure"
    },
    {
      "id": "81948454-f74e-438e-b51e-75e3fdbac1d3",
      "name": "Go Account",
      "bitgoOrg": "BitGo Trust",
      "status": "missingEntityStructure"
    },
    {
      "id": "287be386-dd7e-4dc9-9180-8b1e33e2c26d",
      "name": "Trade API",
      "bitgoOrg": "BitGo Trust",
      "status": "missingEntityStructure"
    }
  ],
  "requirements": [
    {
      "id": "97aa9da8-bce3-4c75-921f-19b5dc2e1fe9",
      "kind": "businessInformation",
      "name": "businessName",
      "status": "missing"
    },
    {
      "id": "d4e2f291-dbcb-4645-9cfa-2af82e321528",
      "kind": "businessInformation",
      "name": "einTinIdentificationNumber",
      "status": "missing"
    },
    {
      "id": "8770df93-740b-4217-9295-fd7f934c0013",
      "kind": "businessInformation",
      "name": "legalEntityStructure",
      "status": "missing"
    },
    {
      "id": "90e3730c-52b0-4bbc-be22-7d8f85e75847",
      "kind": "businessInformation",
      "name": "otherEntityId",
      "status": "missing"
    },
    {
      "id": "c4d1e296-2d57-48e9-b7bd-6661f796eeed",
      "kind": "businessInformation",
      "name": "tradeStrategy",
      "status": "missing"
    },
    {
      "id": "46486076-1b79-4e7a-8140-7029f15c8ea1",
      "kind": "businessInformation",
      "name": "activeExchanges",
      "status": "missing"
    },
    {
      "id": "fecacda4-fd4a-4e21-9b1a-2d4502992b1d",
      "kind": "businessInformation",
      "name": "tradeVolumeUsd",
      "status": "missing"
    },
    {
      "id": "cd1e9438-d47a-4291-b293-7afc4b1e03c3",
      "kind": "businessInformation",
      "name": "diligenceCounselName",
      "status": "missing"
    },
    {
      "id": "5cdf6e6b-7aae-4be0-b921-84cdb2584eb0",
      "kind": "businessInformation",
      "name": "walletAddress",
      "status": "missing"
    },
    {
      "id": "ba06ba8a-4563-45fb-9230-627d9f398955",
      "kind": "businessInformation",
      "name": "incorporationCountryCode",
      "status": "missing"
    },
    {
      "id": "27a57e08-aac0-4000-9990-5f48e2fb9c2f",
      "kind": "businessInformation",
      "name": "primaryOperationsCountryCode",
      "status": "missing"
    },
    {
      "id": "7a819a4c-f764-4b45-b495-4ef252c56adc",
      "kind": "businessInformation",
      "name": "formationDate",
      "status": "missing"
    },
    {
      "id": "0bdbbb09-2bb1-4a8a-a15f-ae21eb4713d6",
      "kind": "businessInformation",
      "name": "companyWebsiteAddress",
      "status": "missing"
    },
    {
      "id": "a90b53f8-c222-40be-9791-249119666de8",
      "kind": "businessInformation",
      "name": "descriptionBusinessActivities",
      "status": "missing"
    },
    {
      "id": "213fb00a-41fc-4052-a5b3-2d47eb6096d9",
      "kind": "businessInformation",
      "name": "activeCoinTokens",
      "status": "missing"
    },
    {
      "id": "9e9aab26-c2db-4500-8d93-1ea2610a538b",
      "kind": "businessInformation",
      "name": "customerBaseLocations",
      "status": "missing"
    },
    {
      "id": "3e005cd6-2bca-4163-9758-5f94a933717d",
      "kind": "businessInformation",
      "name": "hasAuditor",
      "status": "missing"
    },
    {
      "id": "fba8d81f-6fef-4164-89ba-87f6c48f4a90",
      "kind": "businessInformation",
      "name": "hasLegalCounsel",
      "status": "missing"
    },
    {
      "id": "12ba0148-fb8c-4904-8a64-57ad8340d1e3",
      "kind": "businessInformation",
      "name": "authorizedSigner",
      "status": "missing"
    },
    {
      "id": "aacb1e67-e535-4695-af55-059d5afed521",
      "kind": "businessInformation",
      "name": "dbaName",
      "status": "missing"
    },
    {
      "id": "08429fe3-f95e-42ce-bdc1-cc16dbf61c56",
      "kind": "businessInformation",
      "name": "primaryBusinessTypeInstitutional",
      "status": "missing"
    },
    {
      "id": "046d005b-2fc7-49ef-989c-1637faebfc97",
      "kind": "businessInformation",
      "name": "diligenceRetailInstitutional",
      "status": "missing"
    },
    {
      "id": "0df8d309-bd5c-470e-870d-8802d5816b31",
      "kind": "businessInformation",
      "name": "firmAuditor",
      "status": "missing"
    },
    {
      "id": "e4e96c5a-9db1-40b6-8c17-ac1ea8072bf9",
      "kind": "businessInformation",
      "name": "sanctionAffiliates",
      "status": "missing"
    },
    {
      "id": "8e621c34-a7cf-47ff-a96a-ddbf54ba8836",
      "kind": "businessInformation",
      "name": "billingAddress",
      "status": "missing"
    },
    {
      "id": "d0b48435-1c8e-44b1-b198-01c9c1b62b3a",
      "kind": "businessInformation",
      "name": "billingContact",
      "status": "missing"
    },
    {
      "id": "6baa5f12-27c1-4976-8797-5d41f444670c",
      "kind": "businessInformation",
      "name": "mailingAddress",
      "status": "missing"
    },
    {
      "id": "3e98ca55-d7aa-4634-8006-04253fdf87f4",
      "kind": "businessInformation",
      "name": "primaryBusinessType",
      "status": "missing"
    },
    {
      "id": "d6f77654-9afa-4a45-95c4-1cd7431bf3c3",
      "kind": "businessInformation",
      "name": "physicalBusinessAddress",
      "status": "submitted"
    },
    {
      "id": "02dcf645-cb00-4280-a9e1-b79d64511204",
      "kind": "associatedPerson",
      "name": "beneficialOwners",
      "status": "submitted"
    },
    {
      "id": "a0ab73e7-e06e-4b94-acc7-e75644d80157",
      "kind": "associatedPerson",
      "name": "controlPeople",
      "status": "submitted"
    }
  ],
  "documents": [],
  "finalizeSubmission": false,
  "ignoredFields": []
}

8. Update Individual Identities with Required Information

Provide the required personal information for each associated person based on the generated requirements.

Endpoint: Create KYB Identity

export INDIVIDUAL_IDENTITY_ID="<YOUR_INDIVIDUAL_IDENTITY_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
  "https://app.bitgo-test.com/api/identity-service/v1/identities/$INDIVIDUAL_IDENTITY_ID" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        "individual": {
            "nameFirst": "John",
            "nameLast": "Doe",
            "birthdate": {
                "month": "1",
                "day": "1",
                "year": "2000"
            },
            "identificationNumber": "12345678",
            "phoneNumber": {
                "countryCode": "1",
                "phoneNumber": "5559876543"
            },
            "occupation": "unknown",
            "countryOfResidence": "USA",
            "countryOfCitizenship": "USA",
            "address": {
                "street1": "123 4th st",
                "city": "San Francisco",
                "subdivision": "CA",
                "zip": "94103",
                "country": "USA"
            },
            "politicallyExposedPerson": false
        }
}'

Step Result

{
  "type": "individual",
  "userId": "68cc1bc8b1b5017f12c5c1e3c04cd1d4",
  "individual": {
    "nameFirst": "John",
    "nameLast": "Doe",
    "birthdate": {
      "month": "1",
      "day": "1",
      "year": "2000"
    },
    "identificationNumber": "12345678",
    "phoneNumber": {
      "countryCode": "1",
      "phoneNumber": "5559876543"
    },
    "occupation": "unknown",
    "countryOfResidence": "USA",
    "countryOfCitizenship": "USA",
    "address": {
      "street1": "123 4th st",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "94103",
      "country": "USA"
    },
    "politicallyExposedPerson": false
  }
  "id": "df114ee7-7dc9-431e-aeae-fe4294f789cc",
  "requestedProducts": [],
  "requirements": [
  {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "kind": "data",
    "name": "nameFirst",
    "status": "submitted"
  },
  {
    "id": "b2c3d4e5-f6g7-8901-bcde-f23456789012",
    "kind": "data",
    "name": "nameLast",
    "status": "submitted"
  },
  {
    "id": "c3d4e5f6-g7h8-9012-cdef-345678901234",
    "kind": "data",
    "name": "birthdate",
    "status": "submitted"
  },
  {
    "id": "d4e5f6g7-h8i9-0123-defg-456789012345",
    "kind": "data",
    "name": "identificationNumber",
    "status": "submitted"
  },
  {
    "id": "e5f6g7h8-i9j0-1234-efgh-567890123456",
    "kind": "data",
    "name": "phoneNumber",
    "status": "submitted"
  },
  {
    "id": "f6g7h8i9-j0k1-2345-fghi-678901234567",
    "kind": "data",
    "name": "occupation",
    "status": "submitted"
  },
  {
    "id": "g7h8i9j0-k1l2-3456-ghij-789012345678",
    "kind": "data",
    "name": "countryOfResidence",
    "status": "submitted"
  },
  {
    "id": "h8i9j0k1-l2m3-4567-hijk-890123456789",
    "kind": "data",
    "name": "countryOfCitizenship",
    "status": "submitted"
  },
  {
    "id": "i9j0k1l2-m3n4-5678-ijkl-901234567890",
    "kind": "data",
    "name": "address",
    "status": "submitted"
  },
  {
    "id": "j0k1l2m3-n4o5-6789-jklm-012345678901",
    "kind": "data",
    "name": "politicallyExposedPerson",
    "status": "submitted"
  }
],
  "documents": [],
  "finalizeSubmission": false,
}

9. Create Required Documents

Create and upload the required documents for KYB verification. For each required document you must generate an upload URL, upload the document, and then verify it.

9.1 Generate Document Upload URL

Generate a document upload URL. Upload URLs have an expiration date and time specified in the response. Make sure to upload documents before the URL expires.

Endpoint: Create a New Document

export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
  "https://app.bitgo-test.com/api/document-service/v1/documents" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{

        "documentType": "w9"
}'

Step Result

{
  "documentId": "c7c00bb6-0ad3-470d-83f3-a96ce043d812",
  "documentType": "w9",
  "documentTypeLabel": "W9 Form",
  "subType": null,
  "status": "awaitingUpload",
  "files": [
    {
      "fileId": "c6c8651e-dbd3-4f35-ad4d-b3ed1c742a6b",
      "fileView": "full",
      "label": "W9 Form Document",
      "required": true,
      "uploadUrl": "https://api.withcortex.ai/public/apps/files/uploads/up_6B1Re7PtUzgzSimXdygEx3",
      "expiresAt": "2025-10-18T16:09:23.973Z"
    }
  ]
}

9.2 Upload Document

Use the URL from the previous step to upload your document.

export UPLOAD_URL="<DOCUMENT_UPLOAD_URL>"
export FILE_PATH="</path/to/your/document.pdf>"

curl -X POST "$UPLOAD_URL" \
  -F "file=@$FILE_PATH"

Step Result

{
  "id": "afile_1jGYRK9FwcQ7mrPETfS3o6",
  "file_id": "486674b3064254a7e3fa45f4314dbef7-fd377b79ef89f05782976d41f3f5aa9",
  "file_filename": "w9.pdf",
  "file_size": 140815,
  "file_mimetype": "application/pdf",
  "file_url": "https://files.cortex-content.com/486674b3064254a7e3fa45f4314dbef7-fd377b79ef89f05782976d41f3f5aa9?t=1758212347-xwnpNK2akF4YdbpZxCTvg6iLgZyYh9rF6avGVoDf0OA%3D",
  "file_status": "PROCESSED",
  "created_at": "2025-09-18T16:19:07.894Z"
}

9.3 Verify Document

After uploading your document, verify the document ID.

Endpoint: Verify Document Upload Status

export DOCUMENT_ID="<YOUR_DOCUMENT_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
  "https://app.bitgo-test.com/api/document-service/v1/documents/$DOCUMENT_ID/verify" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{}'

Step Result

{
  "documentId": "c7c00bb6-0ad3-470d-83f3-a96ce043d812",
  "documentType": "w9",
  "documentTypeLabel": "W9 Form",
  "status": "uploaded",
  "files": [
    {
      "fileId": "c6c8651e-dbd3-4f35-ad4d-b3ed1c742a6b",
      "fileView": "full",
      "required": true,
      "status": "uploaded",
      "downloadUrl": "https://files.cortex-content.com/486674b3064254a7e3fa45f4314dbef7-fd377b79ef89f05782976d41f3f5aa9?t=1758212583-ZYhX5s%2BAxtlq6MeFz2uGfkSOesYzMxpsFlAfaIW8a%2Fs%3D"
    }
  ]
}

10. Associate Documents with Identity

Associate the created documents with the appropriate identity.

Endpoint: Add KYB Documents

export IDENTITY_ID="<YOUR_IDENTITY_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
  "https://app.bitgo-test.com/api/identity-service/v1/identities/$IDENTITY_ID/documents" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        "documents": [
            {
            "documentId": "c7c00bb6-0ad3-470d-83f3-a96ce043d812",
            "documentType": "w9"
            }
        ]
  }'

Step Result

{
  "identityId": "c1ecba6b-0914-4bc3-ae67-4188e061aa3e",
  "acceptedDocuments": [
    {
      "id": "3a83bde3-6db8-49f4-b3aa-7d38ecd1006c",
      "documentId": "c7c00bb6-0ad3-470d-83f3-a96ce043d812",
      "documentType": "w9",
      "status": "submitted",
      "createdAt": "2025-09-18T16:25:52.045Z",
      "updatedAt": "2025-09-18T16:25:52.045Z"
    }
  ],
  "rejectedDocuments": []
}

11. Finalize Business Identity

Once all of the requirements are submitted, mark the business identity as ready for review by updating it with the finalizeSubmission parameter. This locks the business identity and all associated person identities and prevents further updates while BitGo reviews them.

Note: Once you finalize an identity, it goes into review and no further updates are allowed. Ensure all information is complete before finalizing.

Endpoint: Update KYB Identity

export IDENTITY_ID="<YOUR_IDENTITY_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"


curl -X PATCH \
  "https://app.bitgo-test.com/api/identity-service/v1/identities/$IDENTITY_ID" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        "finalizeSubmission": true
  }'

Step Result

{
  {
  "type": "business",
  "organizationId": "659706890515c624f4f0871b879b00a6",
  "enterpriseId": "68cc1b65564dc0f83892a49d1ee75626",
  "business": {
    "physicalBusinessAddress": {
      "street1": "123 4th St",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "85255",
      "country": "USA"
    },
    "businessName": "Acme Trust Corporation",
    "incorporationCountryCode": "USA",
    "primaryOperationsCountryCode": "USA",
    "einTinIdentificationNumber": "12-3456789",
    "otherEntityId": "ABC123456",
    "mailingAddress": {
      "street1": "456 Business Ave",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "94102",
      "country": "USA"
    },
    "billingAddress": {
      "street1": "789 Finance St",
      "city": "San Francisco",
      "subdivision": "CA",
      "zip": "94103",
      "country": "USA"
    },
    "legalEntityStructure": "trusts",
    "formationDate": "2020-01-15",
    "dbaName": "Acme Trust",
    "companyWebsiteAddress": "https://www.acmetrust.com",
    "primaryBusinessType": "Bank",
    "primaryBusinessTypeInstitutional": true,
    "descriptionBusinessActivities": "Trust services and asset management",
    "billingContact": {
      "nameFirst": "Jane",
      "nameLast": "Smith",
      "emailAddress": "[email protected]",
      "phoneNumber": {
        "countryCode": "1",
        "phoneNumber": "5551234567"
      }
    },
    "authorizedSigner": {
      "nameFirst": "John",
      "nameLast": "Doe",
      "emailAddress": "[email protected]",
      "phoneNumber": {
        "countryCode": "1",
        "phoneNumber": "5559876543"
      }
    },
    "tradeStrategy": "Long-term investment in technology stocks and crypto assets",
    "activeCoinTokens": "BTC, ETH, USDC, USDT",
    "tradeVolumeUsd": "1000000",
    "activeExchanges": "Coinbase, Binance, Kraken",
    "diligenceRetailInstitutional": "institutional",
    "customerBaseLocations": "United States, Canada, Europe",
    "sanctionAffiliates": false,
    "hasAuditor": true,
    "firmAuditor": "Deloitte and Touche LLP",
    "hasLegalCounsel": true,
    "diligenceCounselName": "Smith and Associates Law Firm",
    "walletAddress": "0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6"
  },
  "associatedPeople": [
    {
      "role": "beneficialOwner",
      "identityId": "f56a207c-0c96-4e5d-b59d-5bcf8092580a",
      "percentageOwnership": 25
    },
    {
      "role": "controlPerson",
      "identityId": "df114ee7-7dc9-431e-aeae-fe4294f789cc"
    }
  ],
  "id": "c1ecba6b-0914-4bc3-ae67-4188e061aa3e",
  "requestedProducts": [
    {
      "id": "287be386-dd7e-4dc9-9180-8b1e33e2c26d",
      "name": "Trade API",
      "bitgoOrg": "BitGo Trust",
      "status": "missingRequirements"
    },
    {
      "id": "1a595191-b22d-48f9-b816-4ca311a3f5a4",
      "name": "Trade",
      "bitgoOrg": "BitGo Trust",
      "status": "missingRequirements"
    },
    {
      "id": "81948454-f74e-438e-b51e-75e3fdbac1d3",
      "name": "Go Account",
      "bitgoOrg": "BitGo Trust",
      "status": "missingRequirements"
    }
  ],
  "requirements": [
    {
      "id": "d6f77654-9afa-4a45-95c4-1cd7431bf3c3",
      "kind": "businessInformation",
      "name": "physicalBusinessAddress",
      "status": "submitted"
    },
    {
      "id": "02dcf645-cb00-4280-a9e1-b79d64511204",
      "kind": "associatedPerson",
      "name": "beneficialOwners",
      "status": "submitted"
    },
    {
      "id": "a0ab73e7-e06e-4b94-acc7-e75644d80157",
      "kind": "associatedPerson",
      "name": "controlPeople",
      "status": "submitted"
    },
    {
      "id": "e65ddc61-2cbe-4e44-a86f-666760952d3a",
      "kind": "document",
      "name": "certificateOfTrust",
      "status": "missing"
    },
    {
      "id": "16c518a2-d757-41a3-bac7-040a1011aab7",
      "kind": "document",
      "name": "proofOfAuthorizedSignatories",
      "status": "missing"
    },
    {
      "id": "e149b8df-c077-4771-8534-c8169d117742",
      "kind": "document",
      "name": "w9",
      "status": "missing"
    },
    {
      "id": "97aa9da8-bce3-4c75-921f-19b5dc2e1fe9",
      "kind": "businessInformation",
      "name": "businessName",
      "status": "submitted"
    },
    {
      "id": "ba06ba8a-4563-45fb-9230-627d9f398955",
      "kind": "businessInformation",
      "name": "incorporationCountryCode",
      "status": "submitted"
    },
    {
      "id": "27a57e08-aac0-4000-9990-5f48e2fb9c2f",
      "kind": "businessInformation",
      "name": "primaryOperationsCountryCode",
      "status": "submitted"
    },
    {
      "id": "d4e2f291-dbcb-4645-9cfa-2af82e321528",
      "kind": "businessInformation",
      "name": "einTinIdentificationNumber",
      "status": "submitted"
    },
    {
      "id": "90e3730c-52b0-4bbc-be22-7d8f85e75847",
      "kind": "businessInformation",
      "name": "otherEntityId",
      "status": "submitted"
    },
    {
      "id": "6baa5f12-27c1-4976-8797-5d41f444670c",
      "kind": "businessInformation",
      "name": "mailingAddress",
      "status": "submitted"
    },
    {
      "id": "8e621c34-a7cf-47ff-a96a-ddbf54ba8836",
      "kind": "businessInformation",
      "name": "billingAddress",
      "status": "submitted"
    },
    {
      "id": "8770df93-740b-4217-9295-fd7f934c0013",
      "kind": "businessInformation",
      "name": "legalEntityStructure",
      "status": "submitted"
    },
    {
      "id": "7a819a4c-f764-4b45-b495-4ef252c56adc",
      "kind": "businessInformation",
      "name": "formationDate",
      "status": "submitted"
    },
    {
      "id": "aacb1e67-e535-4695-af55-059d5afed521",
      "kind": "businessInformation",
      "name": "dbaName",
      "status": "submitted"
    },
    {
      "id": "0bdbbb09-2bb1-4a8a-a15f-ae21eb4713d6",
      "kind": "businessInformation",
      "name": "companyWebsiteAddress",
      "status": "submitted"
    },
    {
      "id": "3e98ca55-d7aa-4634-8006-04253fdf87f4",
      "kind": "businessInformation",
      "name": "primaryBusinessType",
      "status": "submitted"
    },
    {
      "id": "08429fe3-f95e-42ce-bdc1-cc16dbf61c56",
      "kind": "businessInformation",
      "name": "primaryBusinessTypeInstitutional",
      "status": "submitted"
    },
    {
      "id": "a90b53f8-c222-40be-9791-249119666de8",
      "kind": "businessInformation",
      "name": "descriptionBusinessActivities",
      "status": "submitted"
    },
    {
      "id": "d0b48435-1c8e-44b1-b198-01c9c1b62b3a",
      "kind": "businessInformation",
      "name": "billingContact",
      "status": "submitted"
    },
    {
      "id": "12ba0148-fb8c-4904-8a64-57ad8340d1e3",
      "kind": "businessInformation",
      "name": "authorizedSigner",
      "status": "submitted"
    },
    {
      "id": "c4d1e296-2d57-48e9-b7bd-6661f796eeed",
      "kind": "businessInformation",
      "name": "tradeStrategy",
      "status": "submitted"
    },
    {
      "id": "213fb00a-41fc-4052-a5b3-2d47eb6096d9",
      "kind": "businessInformation",
      "name": "activeCoinTokens",
      "status": "submitted"
    },
    {
      "id": "fecacda4-fd4a-4e21-9b1a-2d4502992b1d",
      "kind": "businessInformation",
      "name": "tradeVolumeUsd",
      "status": "submitted"
    },
    {
      "id": "46486076-1b79-4e7a-8140-7029f15c8ea1",
      "kind": "businessInformation",
      "name": "activeExchanges",
      "status": "submitted"
    },
    {
      "id": "046d005b-2fc7-49ef-989c-1637faebfc97",
      "kind": "businessInformation",
      "name": "diligenceRetailInstitutional",
      "status": "submitted"
    },
    {
      "id": "9e9aab26-c2db-4500-8d93-1ea2610a538b",
      "kind": "businessInformation",
      "name": "customerBaseLocations",
      "status": "submitted"
    },
    {
      "id": "e4e96c5a-9db1-40b6-8c17-ac1ea8072bf9",
      "kind": "businessInformation",
      "name": "sanctionAffiliates",
      "status": "submitted"
    },
    {
      "id": "3e005cd6-2bca-4163-9758-5f94a933717d",
      "kind": "businessInformation",
      "name": "hasAuditor",
      "status": "submitted"
    },
    {
      "id": "0df8d309-bd5c-470e-870d-8802d5816b31",
      "kind": "businessInformation",
      "name": "firmAuditor",
      "status": "submitted"
    },
    {
      "id": "fba8d81f-6fef-4164-89ba-87f6c48f4a90",
      "kind": "businessInformation",
      "name": "hasLegalCounsel",
      "status": "submitted"
    },
    {
      "id": "cd1e9438-d47a-4291-b293-7afc4b1e03c3",
      "kind": "businessInformation",
      "name": "diligenceCounselName",
      "status": "submitted"
    },
    {
      "id": "5cdf6e6b-7aae-4be0-b921-84cdb2584eb0",
      "kind": "businessInformation",
      "name": "walletAddress",
      "status": "submitted"
    }
  ],
  "documents": [
    {
      "id": "3a83bde3-6db8-49f4-b3aa-7d38ecd1006c",
      "documentId": "c7c00bb6-0ad3-470d-83f3-a96ce043d812",
      "documentType": "w9",
      "status": "submitted",
      "createdAt": "2025-09-18T16:25:52.045Z",
      "updatedAt": "2025-09-18T16:25:52.045Z"
    },
    {
      "id": "3a83bde3-6db8-49f4-b3aa-7d38ecd1006c",
      "documentId": "c7c00bb6-0ad3-470d-83f3-a96ce043d812",
      "documentType": "proofOfAuthorizedSignatories",
      "status": "submitted",
      "createdAt": "2025-09-18T16:25:52.045Z",
      "updatedAt": "2025-09-18T16:25:52.045Z"
    },
    {
      "id": "3a83bde3-6db8-49f4-b3aa-7d38ecd1006c",
      "documentId": "c7c00bb6-0ad3-470d-83f3-a96ce043d812",
      "documentType": "certificateOfTrust",
      "status": "submitted",
      "createdAt": "2025-09-18T16:25:52.045Z",
      "updatedAt": "2025-09-18T16:25:52.045Z"
    }
  ],
  "finalizeSubmission": false
}
}

12. Sign Contracts

Before BitGo activates the enterprise, you must sign the required contracts for the business identity. You can sign the contracts at any point in the KYB process.

Contract types:

  • Custody - custody-sa
  • Trade - trade-sa
  • Staking - staking-sa
  • Combined (all types) - master-agreement

You can sign all three agreements by submitting the master-agreement contract type.

Endpoint: Sign a Contract for an Enterprise Within an Organization

export ORGANIZATION_ID="<YOUR_ORGANIZATION_ID>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
  "https://app.bitgo-test.com/api/v2/organization/$ORGANIZATION_ID/enterprise/$ENTERPRISE_ID/contract/sign" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
        "contractType": "master-agreement"
        "signedDate": "2025-09-09T18:47:23"
  }'

Approval Process

After finalizing all identities, the KYB process enters review. During this time:

  • You can't update any of the finalized identities.
  • BitGo reviews all submitted information.
  • If additional information is required, BitGo will contact you - not your end user.

BitGo activates licenses for the requested products after all contracts are signed and the identity is approved.

Next Steps

Create Go Accounts for your users.

See Also