---
title: "Create external account"
method: POST
path: "/v0/accounts/external"
tags: ["Accounts"]
---

# Create external account

`POST /v0/accounts/external`

## Request

- Base URL: `https://distributor-api.spiko.io`
- URL: `https://distributor-api.spiko.io/v0/accounts/external`
- Auth: HTTP basic
- TypeScript: <https://skmtc.dev/spiko/apis/spiko-distributor-api/docs/v0/accounts/external/post.ts> (a function with typed inputs; its response is checked against the schema)

**Register and authorize one of an investor's own blockchain addresses as an external account.**

- The returned `walletId` is the identifier to use as a `stablecoin-transfer` withdrawal destination on [create withdrawal order](#tag/Withdrawal-orders/operation/withdrawalOrders.createWithdrawalOrder), and the address a stablecoin deposit must originate from.
- `network` must be one of the networks enabled for the environment, and `address` must be a valid address for that network's family.
- The address must not already be assigned to another investor (409). Re-submitting an address whose account was previously archived reopens that account and returns its original `id`.
- An investor may hold at most 100 active external accounts (409).
- Whitelisting is submitted on-chain asynchronously: a success response means the transaction was launched, not yet confirmed.

> ⚠️ Only register addresses the investor actually controls. Spiko does not verify ownership on this endpoint, and the address is authorized for payouts on your assertion alone.

## Request body

- object
  - `network` 'Ethereum' | 'Polygon' | 'Base' | 'Arbitrum' | 'ArbitrumUk' | 'Etherlink' | 'Starknet' | 'Stellar' | 'Solana', required: a blockchain network e.g. "Ethereum", "Polygon", "Arbitrum", "Starknet"
  - `address` union, required
    - string
    - string
    - string
    - string
    - string: a valid Solana address, consisting of 32 to 44 base58 characters
  - `investorId` string, uuid, required: a Universally Unique Identifier
  - `name` string

## Response `200`

Success

- object
  - `id` string, uuid, required: a Universally Unique Identifier
  - `investorId` string, uuid, required: a Universally Unique Identifier
  - `walletId` string, uuid, required: a Universally Unique Identifier
  - `address` union, required: Deprecated. Use the wallet API instead.
    - string
    - string
    - string
    - string
    - string: a valid Solana address, consisting of 32 to 44 base58 characters
  - `network` 'Ethereum' | 'Polygon' | 'Base' | 'Arbitrum' | 'ArbitrumUk' | 'Etherlink' | 'Starknet' | 'Stellar' | 'Solana', required: Deprecated. Use the wallet API instead.
  - `createdAt` string, nullable, required
  - `name` union, required
    - object
      - `_tag` 'Some', required
      - `value` string, required
    - object
      - `_tag` 'None', required
  - `shareClassIds` UUID[], required

## Other responses

- `400`: Network Not Enabled | The request did not match the expected schema
- `401`: Authentication failed. Two bodies are possible: the schema below when the API rejects the credentials, and `{ "error": { "code", "status", "request", "message" } }` when the API gateway rejects them first. Only the former carries a `_tag`.
- `403`: Forbidden
- `404`: NotFound
- `409`: Conflict
- `503`: The investor is undergoing a scheduled upgrade, access is temporarily paused to ensure data safety.

---

[API](https://skmtc.dev/spiko/apis/spiko-distributor-api.md) - [All operations](https://skmtc.dev/spiko/apis/spiko-distributor-api/llms.txt) - [OpenAPI document](https://skmtc.dev/spiko/apis/spiko-distributor-api/revisions/ad85137fd00b?raw)
