---
title: "\\[DEPRECATED\\] Add wallet (advanced only)"
method: POST
path: "/api/v2/{coin}/wallet"
tags: ["Wallet"]
---

# \[DEPRECATED\] Add wallet (advanced only)

`POST /api/v2/{coin}/wallet`

>**Note:** This route is deprecated in favor of [Add Wallet](/reference/v2walletadd).

Add Wallet is for advanced API users. It lets you manually create and
specify keys. The recommended (and simpler) method is [Generate Wallet](/reference/expresswalletgenerate)
with the SDK or BitGo Express. You can also create wallets in the BitGo UI.

This API creates a new wallet for the user or enterprise. The keys to
use with the new wallet (passed in the 'keys' parameter) must be
registered with BitGo prior to using this API.

BitGo currently only supports 2-of-3 (e.g., m=2 and n=3) wallets. The
third key, and only the third key, must be a BitGo key. The first key
is by convention the user key, with its encrypted xprv stored on BitGo.

Ethereum and XRP wallets can only be created under an enterprise. Pass in the
id of the enterprise to associate the wallet with. Your enterprise id
can be seen by clicking on the "Manage Organization" link in the
enterprise dropdown. Using the Add Wallet API, you can create a wallet
using either the enterprise fee address (used by default for all
wallets in the enterprise), or a unique fee address (created manually
with the Keychains API). Pass the desired key as the third key ID in
the 'keys' array. In either case, the fee address must be funded
before creating the wallet.

You cannot generate a wallet by passing in a subtoken (i.e. ERC20 token) as the coin.
Subtokens use the wallet of their parent coin and it is not possible to create a
wallet specific to one token. For example, to create a wallet for an ERC20 token,
create an Ethereum wallet. It can hold any ERC20 tokens as well as Ether.

BitGo Ethereum wallet is a smart-contract implementing multi-signature scheme.
Because contracts itself can not initiate transactions, fee addresses are used
for this purpose. Ethereum transactions initiated by a given address, are
confirmed by the network in order of creation, so one lower fee transaction can
potentially delay all subsequent transactions. To help lower network fee costs,
two fee addresses are provided.

`feeAddress` is a main fee address usable for all operations.
`lowPriorityFeeAddress` is a secondary fee address that can be used to pay
lower fee for Create Address operations without risking delaying subsequent
higher-priority transactions initiated by main fee address.

## Path parameters

- `coin` string, required — A cryptocurrency or token ticker symbol.

## Request body

- CreateWallet
  - `coinSpecific` WalletCreateCoinSpecific
    - `xlm` WalletCreateCoinSpecificXlm
      - `stellarUsername` string — Username for the user's Stellar address. It's case insensitive, and it can't be changed after it's set.
    - `txlm` WalletCreateCoinSpecificXlm
      - `stellarUsername` string — Username for the user's Stellar address. It's case insensitive, and it can't be changed after it's set.
    - `lnbtc` WalletCreateCoinSpecificLnbtc
      - `keys` Id[]
    - `tlnbtc` WalletCreateCoinSpecificLnbtc
      - `keys` Id[]
    - `userKeySigningRequired` boolean — (OFC wallets only) Whether the wallet requires a user-key signature for every transaction. When false, BitGo KMS co-signs without user-key participation. Sending it for any other coin returns 400. When omitted the server resolves the default (true for CaaS enterprises).
  - `enterprise` string
  - `keys` Id[]
  - `keySignatures` object
    - `backup` string — a signature of the backup pub key using the user key (useful for change address verification)
    - `bitgo` string — a signature of the bitgo pub key using the user key (useful for change address verification)
  - `label` string
  - `multisigType` 'onchain' | 'tss'
  - `address` string — A custom address can be provided for EOS wallets. It must be exactly 12 alphanumeric characters.
  - `m` integer — Number of signatures required. This value must be 2 for hot wallets, 1 for **ofc** wallets, and not specified for custodial wallets.
  - `n` integer — Number of keys provided. This value must be 3 for hot wallets, 1 for **ofc** wallets, and not specified for custodial wallets.
  - `tags` Id[]
  - `type` 'cold' | 'custodial' | 'custodialPaired' | 'hot' | 'trading' | 'distributedCustody' | 'advanced' — The type describes who owns the keys to the wallet and how they are stored. `cold` wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. `custodial` means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. `custodialPaired` means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of `hot` wallets. `trading` wallets are trading accounts where the coin is `ofc`. `distributedCustody` means You manage one key and another key agent manages the second key. BitGo manages the third key
  - `walletVersion` integer — (ETH only) Specify the wallet creation contract version used when creating a wallet contract. Use 0 for the old wallet creation, 1 for the new wallet creation, where it is only deployed upon receiving funds. 2 for wallets with the same functionality as v1 but with NFT support. 3 for MPC wallets. 4 is same as v2 but with some changes related to network identifier and encoding of tx data. v4 is applicable for Arbitrum, Optimism, ZkSync, and other EVM-compatible chains that we will onboard in the future. 5 for MPC MPCv2 wallets. 6 for EVM MPCv2 wallets with receive addresses.
  - `eip1559` object — (ETH walletVersion: 0 wallets only) Specify eip1559 fee parameters in wallet creation transactions.
    - `maxPriorityFeePerGas` string, required — Max priority tip price for EIP1559 transactions. Only for ETH and ERC20 tokens.
    - `maxFeePerGas` string, required — Max total gasPrice for EIP1559 transactions. Only for ETH and ERC20 tokens.
  - `evmKeyRingReferenceWalletId` string, required — Optional reference wallet ID for EVM keyring child wallets. When provided, child wallets inherit properties from the parent wallet.

## Response `200`

OK

- Wallet1
  - `admin` object
    - `policy` Policy1
      - `id` string, required
      - `date` string, date-time
      - `label` string
      - `latest` boolean, required
      - `rules` PolicyRule[], required
        - `id` string, required
        - `lockDate` string, date-time, required — The time at which this rule becomes immutable
        - `mutabilityConstraint` 'managed' | 'permanent' — Specifies whether a BitGo admin can change `lockDate` * `managed` - Not locked, but requires approval from a BitGo admin to change * `permanent` - `lockDate` cannot be changed
        - `coin` string — A cryptocurrency or token ticker symbol.
        - `type` 'advancedWhitelist' | 'allTx' | 'bitcoinAddressWhitelist' | 'coinAddressWhitelist' | 'coinAddressBlacklist' | 'transactionLimit' | 'velocityLimit' | 'webhook', required — What causes this rule to trigger
        - `condition` union — Parameters for the type
          - object
            - `amountString` string
            - `timeWindow` integer — Time window in seconds for a velocity limit, between 1 and a month
          - object
            - `amountString` string
            - `timeWindow` integer — Time window in seconds for a velocity limit, between 1 and 30 days
          - object
            - `addresses` union[] — Addresses allowed/restricted for a whitelist/blacklist
              - …
          - object
            - `entries` AdvancedListRuleEntry1[] — Entries specifying which addresses/ wallets/ enterprises are on the whitelist
              - …
          - object
            - `url` string — the url to query for the webhook
        - `action` PolicyRuleActions, required — What happens when this rule is triggered
          - `type` 'deny' | 'getApproval' | 'getFinalApproval' | 'getCustodianApproval' | 'getIdVerification', required
          - `userIds` Id[] — For a final approver action, who can approve
      - `version` integer, required
  - `allowBackupKeySigning` boolean
  - `approvalsRequired` integer, required
  - `balanceString` string
  - `buildDefaults` WalletBuildDefaults
    - `minFeeRate` integer, nullable — (BTC only) The minimum fee rate (in base units) per kilobyte (or virtual kilobyte). For example, satoshis per kvByte. Must be greater than or equal to the default of 1000 satoshis/kvByte. Note: The you can override `minFeeRate` on a per transaction basis with the `feeRate` parameter.
    - `maxFeeRate` integer, nullable — (BTC only) The maximum fee rate (in base units) per kilobyte (or virtual kilobyte). For example, satoshis per kvByte. The `maxFeeRate` limits the fee rate generated by both `feeMultiplier` and `numBlocks`. Note: The you can override `maxFeeRate` on a per transaction basis with the `feeRate` parameter.
    - `feeMultiplier` number, nullable — (UTXO only) Custom multiplier to the `feeRate`. The resulting fee rate is limited by the `maxFeeRate`. For replace-by-fee (RBF) transactions (that include `rbfTxIds`), the `feeMultiplier` must be greater than 1, since it's an absolute fee multiplier to the transaction being replaced. Note: The `maxFeeRate` limits the fee rate generated by `feeMultiplier`.
    - `changeAddressType` 'p2sh' | 'p2shP2wsh' | 'p2wsh' | 'p2tr' | 'p2trMusig2' | 'default', nullable — (UTXO only) The default script type to use for change for this wallet. Per transaction, you override the default with the `changeAddressType` parameter. If `default` is provided, it will clear the `changeAddressType` default on the wallet. Note that each UTXO coin has different address types available. For example, Only BTC supports `p2tr`.
    - `txFormat` 'legacy' | 'psbt' | 'psbt-lite' — (UTXO only) The default transaction format to use for this wallet. Per transaction, you can override the default with the `txFormat` parameter.
    - `autoReserveUnspentsOnBuildMins` number, nullable — (UTXO only) Automatically reserve unspents when building a transaction.
  - `coin` string, required — A cryptocurrency or token ticker symbol.
  - `coinSpecific` union
    - object
      - `creationFailure` TxId[] — Includes list of fail initialization txids
      - `pendingChainInitialization` boolean — Whether the wallet needs to be initialized on the chain
    - WalletCoinSpecificBtc
      - `allowQuantumUnsafeAddresses` boolean — If true, the wallet allows creation of addresses which are vulnerable to quantum attacks. Defaults to false.
    - WalletCoinSpecificCosmos
      - `rootAddress` string, required — Wallet address to send or receive assets.
      - `lastChainIndex` number — Index of last address that was derived.
      - `lastMemoId` string, required — A running counter of the last known memo id. The first one is 0.
      - `pendingEcdsaTssInitialization` boolean — If true, this wallet cannot sign transactions or messages as the enterprise has not finished MPC setup.
    - WalletCoinSpecificOfc — Coin-specific data for OFC (Go Account) wallets.
      - `needsKeyReshareAfterPasswordReset` boolean — Deprecated: legacy password-reset recovery flag. Retained only for backward compatibility and will be removed in a future release. Do not rely on its presence or value.
      - `pendingSystemInitialization` boolean — True if the wallet is still pending initialization. While true, users cannot create addresses or initiate withdrawals.
      - `userKeySigningRequired` boolean — True if the wallet requires user signatures for all transactions and refuses BitGo KMS signing. Defaults to true when not explicitly set. Only applicable for OFC wallets.
    - WalletCoinSpecificXlm
      - `rootAddress` string — Root address of the wallet
      - `stellarUsername` string — Username for the user's Stellar address
      - `homeDomain` string — Home domain of a Stellar account
      - `stellarAddress` string — Email-like address associated to a Stellar account
  - `custodialWallet` object — The associated custodial wallet object
  - `custodialWalletId` string
  - `deleted` boolean, required
  - `disableTransactionNotifications` boolean, required
  - `enterprise` string
  - `freeze` object
    - `time` string, dateTime
    - `expires` string, dateTime
    - `reason` 'TxIntentMismatch' | 'TxIntentMismatchRecipient' | 'TxIntentMismatchContract' | 'TxIntentMismatchApproval' | 'UserRequest' | 'AdminRequest' — Reason why the wallet was frozen
    - `referenceId` string — Optional reference ID for tracking purposes
    - `adminOrUserId` string — The user who froze the wallet
  - `id` string, required
  - `isCold` boolean
  - `keys` Id[]
  - `label` string, required
  - `m` integer — Number of signatures required. This value must be 2 for hot wallets, 1 for **ofc** wallets, and not specified for custodial wallets.
  - `n` integer — Number of keys provided. This value must be 3 for hot wallets, 1 for **ofc** wallets, and not specified for custodial wallets.
  - `nodeId` string
  - `receiveAddress` Address21
    - `id` string
    - `address` string
    - `chain` 0 | 1 | 10 | 11 | 20 | 21 | 30 | 31 | 40 | 41
    - `index` integer
    - `coin` string
    - `lastNonce` integer
    - `wallet` string
    - `coinSpecific` object — Properties which are specific to certain coin types
      - `xlm` AddressCoinSpecificXlm
        - `memoId` string — Latest memo id generated for the wallet
        - `rootAddress` string — Root address of the wallet
      - `txlm` AddressCoinSpecificXlm
        - `memoId` string — Latest memo id generated for the wallet
        - `rootAddress` string — Root address of the wallet
    - `balance` object — Balance of the address. In case of Eth and Celo, if returnBalancesForToken is passed with includeBalances, then it will return token balance in the address object. This field will be present only when `includeBalances` query param is passed as true.
      - `updated` string, date-time — The last time a transaction affected the balance of this address
      - `balance` integer — The cleared balance of the address
      - `balanceString` string — String representation of `balance`. Guaranteed to not lose precision.
      - `totalReceived` integer — The total amount received on this address (in the chain's base unit)
      - `totalSent` integer — The total amount send from this address (in the chain's base unit)
      - `confirmedBalanceString` string — The total balance of confirmed transactions for the address (in the chain's base unit). Guaranteed to not lose precision.
      - `spendableBalanceString` string — The total balance of the address (in the chain's base unit) which may be used as inputs for creating new transactions in string representation. Guaranteed to not lose precision.
    - `label` string, nullable — A human-readable label for the address.
    - `addressType` 'p2sh' | 'p2shP2wsh' | 'p2wsh' | 'p2tr' | 'p2trMusig2'
  - `recoverable` boolean
  - `tags` Id[]
  - `spendableBalanceString` string
  - `unspentCount` number — Number of unspent outputs present in the wallet
  - `startDate` string, date-time
  - `type` 'cold' | 'custodial' | 'custodialPaired' | 'hot' | 'trading' | 'distributedCustody' | 'advanced' — The type describes who owns the keys to the wallet and how they are stored. `cold` wallets are wallets where the private key of the user key is stored exclusively outside of BitGo's system. `custodial` means that this wallet is a cold wallet where BitGo owns the keys. Only customers of the BitGo Trust can create this kind of wallet. `custodialPaired` means that this is a hot wallet that is owned by the customer but it will be linked to a cold (custodial) wallet where BitGo owns the keys. This option is only available to customers of BitGo Inc. BitGo stores an encrypted private key for the user key of `hot` wallets. `trading` wallets are trading accounts where the coin is `ofc`. `distributedCustody` means You manage one key and another key agent manages the second key. BitGo manages the third key
  - `users` WalletUser[]
    - `user` string
    - `permissions` WalletPermission[]
  - `customChangeKeySignatures` CustomChangeKeySignatures — Signatures for the keys which will be used to derive custom change addresses. **Note:** These signatures may only be set once for each wallet and are not modifiable after being set.
    - `user` string
    - `backup` string
    - `bitgo` string
  - `multisigType` 'onchain' | 'tss'
  - `multisigTypeVersion` 'MPCv2'

## Other responses

- `400` — Bad Request
- `403` — Forbidden

---

[API](https://skmtc.net/bitgo/apis/bitgo-api.md) · [All operations](https://skmtc.net/bitgo/apis/bitgo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bitgo/bitgo-api/revisions/e445c15e5bee/schema)
