Wallets

In order to receive crypto securities, investors need wallets. Wallets are created for investor accounts using the wallet endpoints. A wallet's account address is always connected to a single investor identity. Wallets cannot be shared between investors.

There are two different types of wallets in Cashlink Connect:

  • Generic wallets are managed outside of Cashlink Connect. If you're already using a wallet solution (crypto custodian or technical provider) you can create a wallet there and link it to the investor accounts in Cashlink Connect as a generic wallet. An investor account can have any number of generic wallets.

  • Managed wallets Managed wallets are provided by Cashlink as a regulated crypto custodian. This needs to be enabled for your distribution platform by the Cashlink support team, before you can start using the feature. Each investor accounts can only hold a single managed wallet.

Creating a wallet

Wallets can be added to investors, if the following conditions are met:

  • The investor account has a successful KYC status

  • All relevant tax information is set on the investor. This does not apply for legal person investors marked as "custodian banks".

Generic wallets are created via the /eth-generic/ endpoint by providing an account address.

Example:

r = requests.post(
    f'{URL}/distributor/v2/investors/{investor_id}/wallets/eth-generic/',
    json={
        'address': '0xF5...',
        'receiving_enabled': True
    },
    headers={**headers, 'X-Idempotency-Key': make_key()}
)
assert r.status_code < 300, r.content
wallet_id = r.json()['id']
print(f'Generic wallet: {wallet_id}')

Managed wallets are created via the /eth-managed/ endpoint. You do not need to provide an address for managed wallets because the address is created once you trigger the wallet creation via the API. Investors need to accept the Cashlink custody terms and conditions, before you create a wallet via the API.

r = requests.post(
    f'{URL}/distributor/v2/investors/{investor_id}/wallets/eth-managed/',
    json={
        'receiving_enabled': True
    },
    headers={**headers, 'X-Idempotency-Key': make_key()}
)
assert r.status_code < 300, r.content
wallet_id = r.json()['id']
print(f'Managed wallet: {wallet_id}')

If not specified otherwise the the request, wallets are created with receiving_enabled set to False. That means that these wallets are not able to receive and hold crypto securities. Any incoming transfer to those wallets will fail. Remember to set the value to True if you want to receive crypto securities on those wallets.

Retrieving wallet information

You can use the wallet endpoints to retrieve information about the wallet itself and its balances of different crypto securities.

Example:

r = requests.get(
    f'{URL}/distributor/v2/investors/{investor_id}/wallets/{wallet_id}/',
    headers={**headers}
)
assert r.status_code < 300, r.content
print(r.json())

Last updated

Was this helpful?