Create a wallet
Creates a wallet for a customer. Polymorphic on type: fiat and custodial are implemented — noncustodial is accepted by the request discriminator but rejected with 501 WalletTypeNotSupported. Pass an Idempotency-Key header to safely retry without provisioning duplicates; a replay returns the same response, including the same operation Location.
A fiat create requires the project to be configured for fiat wallets at “Erebor Bank, N.A.” (403 EreborConfigMissing), the fiat-wallet book-transfer rail enabled for the project (403 DestinationRailNotAllowed), and the customer registered with that bank (400 EreborCustomerNotMapped); the wallet starts pending and becomes active once the bank opens the backing account. The customerWallet.created webhook fires when the wallet is first recorded and carries pending; customerWallet.statusChanged to active follows when the bank opens the account. A custodial create requires the project and the customer to be enrolled with the custody provider (422 ProjectMissingCoinmeID, 422 ProviderUserAccountNotFound) and an asset/network pair that provider supports (422 UnsupportedAsset); it returns 201 with the wallet when the wallet already exists or the provider confirms it synchronously, and 202 with a Location header pointing at the wallet-provisioning operation — poll GET /wallets/operations/{operationId} — when confirmation arrives asynchronously. A durable provider rejection is 422 WalletProvisioningRejected.
Authorizations
Token from POST /auth/token
Headers
Required on POST and PUT requests. Use a unique value per logical mutation attempt, for example a UUID.
Body
- Custodial wallet
- Non-custodial wallet
- Fiat wallet
Create a custodial crypto wallet. Not yet implemented — returns 501.
Owning customer (cst_ prefix).
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$Type discriminator.
custodial Custodial crypto wallet create request details.
Response
The request has succeeded and a new resource has been created as a result.
- Crypto wallet
- Fiat wallet
The walletCrypto variant — one crypto asset on one network, held on the customer's behalf by the custody provider, currently "Coinme Inc.". address is the on-chain deposit address and is omitted until the provider reports one.
Wallet ID (TypeID; wlt_ for both crypto and fiat wallets; a wlt_fiat_ id is also accepted on input).
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$The customer that owns this record.
Current wire status.
pending, active, frozen, suspended, closed The asset the wallet holds, lowercase: a crypto symbol (e.g. usdc) or a fiat currency (only usd today).
Claim/routing state: whether a live deposit address or virtual account currently receives into this wallet, or has in the past. Always present.
The legal entity holding this wallet's assets, derived from wallet type and asset: walletCrypto → "Coinme Inc."; walletFiat (usd) → "Erebor Bank, N.A.". New providers may be added, so treat the string as free-form rather than a fixed set.
Type discriminator.
walletCrypto Blockchain network the wallet operates on (canonical name, e.g. "polygon").
The partner-supplied label. Absent when none is set.
On-chain deposit address. Omitted when the provider has not reported one yet.