openapi: 3.0.3
info:
  title: BitGo Express API
  version: 1.0.0
servers:
  - url: /
    description: Default server
tags:
  - name: Express
paths:
  /api/v2/{coin}/pendingapprovals/{approvalId}:
    put:
      tags:
        - Express
      summary: Resolve pending approval
      operationId: express.pendingapprovals
      description: Accept or reject a pending approval
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathApprovalId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressResolvePendingApprovalRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlatformPendingApproval'
  /advancedwallet/ping:
    post:
      summary: Advanced Wallets - Ping
      description: Test your connection to the Master Bitgo Express (MBE) server.
      operationId: advancedwallet.mbe.ping
      tags:
        - Advanced Wallets
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PingResponseType'
  /advancedwallet/version:
    get:
      summary: Advanced Wallets - Check Version
      description: Check your version of the Master Bitgo Express (MBE) server.
      operationId: advancedwallet.mbe.version
      tags:
        - Advanced Wallets
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VersionResponseType'
  /api/v1/{coin}/advancedwallet/{walletId}/accelerate:
    post:
      summary: Advanced Wallets - Accelerate Transaction
      description: >-
        Send a new transaction to accelerate the targeted unconfirmed
        transaction either by using Child-Pays-For-Parent (CPFP) or
        Replace-By-Fee (RBF).


        Retrieves the private key from KMS using the provided public key, then
        signs and broadcasts the transaction.


        Use this endpoint only with advanced wallets. For other wallet types,
        use [Accelerate
        Transaction](https://developers.bitgo.com/reference/expresswalletacceleratetx).
      operationId: advancedwallet.accelerate.tx
      tags:
        - Advanced Wallets
      parameters:
        - name: walletId
          in: path
          required: true
          schema:
            type: string
        - name: coin
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                pubkey:
                  type: string
                  description: Public key used for signing the acceleration transaction.
                  example: >-
                    xpub661MyMwAqRbcGCNnmzqt3u5KhxmXBHiC78cwAyUMaKJXpFDfHpJwNap6qpG1Kz2SPexKXy3akhPQz7GDYWpHNWkLxRLj6bDxQSf74aTAP9y
                source:
                  type: string
                  enum:
                    - user
                    - backup
                  description: The key to use for signing the transaction.
                  example: user
                cpfpTxIds:
                  type: array
                  example:
                    - >-
                      abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234
                  items:
                    type: string
                    description: >-
                      Transaction IDs to accelerate using Child-Pays-For-Parent
                      (CPFP). CPFP creates a new transaction that spends an
                      output from the original transaction.
                cpfpFeeRate:
                  type: number
                  description: >-
                    Fee rate in satoshis per byte for the CPFP transaction.
                    Higher fee rates result in faster confirmations but higher
                    transaction costs.
                  example: null
                maxFee:
                  type: number
                  description: >-
                    Maximum fee in satoshis for the acceleration transaction.
                    Helps prevent overpaying for transaction acceleration.
                  example: null
                rbfTxIds:
                  type: array
                  example:
                    - >-
                      abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234
                  items:
                    type: string
                    description: >-
                      Transaction IDs to accelerate using Replace-By-Fee (RBF).
                      RBF creates a new transaction that replaces the original
                      transaction. The original transaction must have been
                      created with RBF enabled.
                feeMultiplier:
                  type: number
                  description: >-
                    Fee multiplier for RBF transactions. The new fee will be the
                    original fee multiplied by this value.
                  example: null
              required:
                - pubkey
                - source
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                description: Successful acceleration response.
                example:
                  txid: >-
                    abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234
                  tx: >-
                    01000000000101edd7a5d948a6c79f273ce686a6a8f2e96ed8c2583b5e77b866aa2a1b3426fbed0100000000ffffffff02102700000000000017a914192f23283c2a9e6c5d11562db0eb5d4eb47f460287b9bc2c000000000017a9145c139b242ab3701f321d2399d3a11b028b3b361e870247304402206ac9477fece38d96688c6c3719cb27396c0563ead0567457e7e884b406b6da8802201992d1cfa1b55a67ce8acb482e9957812487d2555f5f54fb0286ecd3095d78e4012103c92564575197c4d6e3d9792280e7548b3ba52a432101c62de2186c4e2fa7fc580000000000
                properties:
                  txid:
                    type: string
                    description: >-
                      The transaction ID (hash) of the acceleration transaction.
                      This can be used to track the transaction on a block
                      explorer.
                    example: >-
                      abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234
                  tx:
                    type: string
                    description: >-
                      The full signed transaction in hexadecimal format. This
                      transaction can be broadcast to the network.
                    example: >-
                      01000000000101edd7a5d948a6c79f273ce686a6a8f2e96ed8c2583b5e77b866aa2a1b3426fbed0100000000ffffffff02102700000000000017a914192f23283c2a9e6c5d11562db0eb5d4eb47f460287b9bc2c000000000017a9145c139b242ab3701f321d2399d3a11b028b3b361e870247304402206ac9477fece38d96688c6c3719cb27396c0563ead0567457e7e884b406b6da8802201992d1cfa1b55a67ce8acb482e9957812487d2555f5f54fb0286ecd3095d78e4012103c92564575197c4d6e3d9792280e7548b3ba52a432101c62de2186c4e2fa7fc580000000000
                required:
                  - txid
                  - tx
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/{coin}/advancedwallet/{walletId}/consolidate:
    post:
      summary: Advanced Wallets - Consolidate Account
      description: >-
        Build, sign, and send a consolidation transaction, all in one call. For
        account-based assets, consolidating the balances in the receive
        addresses to the base address maximizes the spendable balance of a
        wallet.


        Retrieves the private key from KMS using the provided public key or
        common keychain, then signs and broadcasts the transaction.


        Use this endpoint only with advanced wallets. For other wallet types,
        use [Consolidate account
        (simple)](https://developers.bitgo.com/reference/expresswalletconsolidateaccount).
      operationId: advancedwallet.consolidate
      tags:
        - Advanced Wallets
      parameters:
        - name: walletId
          in: path
          required: true
          schema:
            type: string
        - name: coin
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                source:
                  type: string
                  enum:
                    - user
                    - backup
                  description: The key to use for signing the transaction
                pubkey:
                  type: string
                  description: Public key of the key used for signing multisig transactions
                consolidateAddresses:
                  type: array
                  items:
                    type: string
                    description: >-
                      Optional: restrict the consolidation to the specified
                      receive addresses. If not provided, will consolidate the
                      funds from all receive addresses up to 500 addresses.
                commonKeychain:
                  type: string
                  description: For TSS wallets, this is the common keychain of the wallet
                apiVersion:
                  type: string
                  enum:
                    - full
                    - lite
                  description: >-
                    The Trasaction Request API version to use for MPC EdDSA Hot
                    Wallets. Defaults based on the wallet type and asset curve.
              required:
                - source
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/{coin}/advancedwallet/{walletId}/consolidateunspents:
    post:
      summary: Advanced Wallets - Consolidate Unspents
      description: >-
        Builds, signs, and sends a transaction to consolidate unspents all in 1
        call. Consolidating unspents is only for UTXO-based assets.


        Retrieves the private key from KMS using the provided public key, then
        signs and broadcasts the transaction.


        Use this endpoint only with advanced wallets. For other wallet types,
        use [Consolidate unspents
        (simple)](https://developers.bitgo.com/reference/expresswalletconsolidateunspents).
      operationId: advancedwallet.consolidate.unspents
      tags:
        - Advanced Wallets
      parameters:
        - name: walletId
          in: path
          required: true
          schema:
            type: string
        - name: coin
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                pubkey:
                  type: string
                  description: Public key of the key used for signing multisig transactions
                source:
                  type: string
                  enum:
                    - user
                    - backup
                  description: The key to use for signing the transaction
                feeRate:
                  type: number
                  description: Custom fee rate (in base units) per kilobyte
                maxFeeRate:
                  type: number
                  description: Maximum fee rate (in base units) per kilobyte
                maxFeePercentage:
                  type: number
                  description: Maximum fee percentage
                feeTxConfirmTarget:
                  type: number
                  description: Fee transaction confirmation target
                bulk:
                  type: boolean
                  description: Enable bulk processing
                minValue:
                  oneOf:
                    - type: string
                    - type: number
                  description: Minimum value for unspents
                maxValue:
                  oneOf:
                    - type: string
                    - type: number
                  description: Maximum value for unspents
                minHeight:
                  type: number
                  description: Minimum block height
                minConfirms:
                  type: number
                  description: Minimum confirmations required
                enforceMinConfirmsForChange:
                  type: boolean
                  description: Enforce minimum confirmations for change outputs
                limit:
                  type: number
                  description: Limit the number of unspents to process
                numUnspentsToMake:
                  type: number
                  description: Number of unspents to make
                targetAddress:
                  type: string
                  description: Target address for consolidation
              required:
                - pubkey
                - source
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  tx:
                    type: string
                  txid:
                    type: string
                required:
                  - tx
                  - txid
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/{coin}/advancedwallet/{walletId}/sendMany:
    post:
      summary: Advanced Wallets - Send to Many
      description: >-
        Send coins or tokens to one or more recipients. You can use this
        endpoint to schedule outgoing transactions in bulk, lowering your
        aggregate amount of blockchain fees.


        Retrieves the private key from KMS using the provided public key, then
        signs and broadcasts the transaction.


        Works with both multisignature and MPC wallets.


        Works with most BitGo-supported assets, but currently unavailable for:
        ALGO, ARBETH, AVAXC, CELO, CELO:CUSD, CSPR, DOT, EOS, HTETH:BGERCH,
        NEAR, OPETH, STX, TON, TRX, TRX:USDC, XLM, XRP, XTZ


        Use this endpoint only with advanced wallets. For other wallet types,
        use [Send to
        many](https://developers.bitgo.com/reference/expresswalletsendmany).
      operationId: advancedwallet.sendmany
      tags:
        - Advanced Wallets
      parameters:
        - name: walletId
          in: path
          required: true
          schema:
            type: string
        - name: coin
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                source:
                  type: string
                  enum:
                    - user
                    - backup
                  description: The key to use for signing the transaction
                type:
                  type: string
                  enum:
                    - transfer
                    - fillNonce
                    - acceleration
                    - accountSet
                    - enabletoken
                    - transfertoken
                    - trustline
                  description: Required for transactions from MPC wallets.
                recipients:
                  type: array
                  items:
                    type: object
                    properties:
                      address:
                        type: string
                        description: Destination address
                        example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS
                        maxLength: 250
                      amount:
                        oneOf:
                          - type: string
                          - type: number
                        description: >-
                          The amount in base units (e.g. satoshis) to send. For
                          doge, only string is allowed.
                        example: '"2000000"'
                        pattern: ^-?\d+$
                    required:
                      - address
                      - amount
                    description: List of recipient addresses and amounts to send
                pubkey:
                  type: string
                  description: >-
                    Public key of the key used for signing multisig transactions
                    i.e if source is user, this is the user's public key if
                    source is backup, this is the backup key's public key
                commonKeychain:
                  type: string
                  description: >-
                    For TSS wallets, this is the common keychain of the wallet,
                    it remains the same whether source is user or backup
                numBlocks:
                  type: number
                  description: >-
                    (BTC only) The number of blocks required to confirm a
                    transaction. You can use `numBlocks` to estimate the fee
                    rate by targeting confirmation within a given number of
                    blocks. If both `feeRate` and `numBlocks` are absent, the
                    transaction defaults to 2 blocks for confirmation. Note: The
                    `maxFeeRate` limits the fee rate generated by `numBlocks`.
                  minimum: 2
                  maximum: 1000
                feeRate:
                  type: number
                  description: >-
                    Custom fee rate (in base units) per kilobyte (or virtual
                    kilobyte). For example, satoshis per kvByte. If the
                    `feeRate` is less than the minimum required network fee,
                    then the minimum fee applies. For example, 1000 sat/kvByte,
                    a flat 1000 microAlgos, or a flat 10 drops of xrp. For XRP,
                    the actual fee is usually 4.5 times the open ledger fee.
                    Note: The `feeRate` overrides the `maxFeeRate` and
                    `minFeeRate`.
                feeMultiplier:
                  type: number
                  description: >-
                    (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`.
                maxFeeRate:
                  type: number
                  description: >-
                    (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 `feeRate`
                    overrides the `maxFeeRate`.
                minConfirms:
                  type: number
                  description: >-
                    The unspent selection for the transaction will only consider
                    unspents with at least this many confirmations to be used as
                    inputs. Does not apply to change outputs unless used in
                    combination with `enforceMinConfirmsForChange`.
                enforceMinConfirmsForChange:
                  type: boolean
                  default: false
                  description: >-
                    When set to true, will enforce minConfirms for change
                    outputs. Defaults to false.
                targetWalletUnspents:
                  type: number
                  default: 1000
                  description: >-
                    Specifies the minimum count of good-sized unspents to
                    maintain in the wallet. Change splitting ceases when the
                    wallet has `targetWalletUnspents` good-sized unspents. Note:
                    Wallets that continuously send a high count of transactions
                    will automatically split large change amounts into multiple
                    good-sized change outputs while they have fewer than
                    `targetWalletUnspents` good-sized unspents in their unspent
                    pool. Breaking up large unspents helps to reduce the amount
                    of unconfirmed funds in flight in future transactions, and
                    helps to avoid long chains of unconfirmed transactions. This
                    is especially useful for newly funded wallets or recently
                    refilled send-only wallets.
                message:
                  type: string
                  description: >-
                    Optional metadata (only persisted in BitGo) to be applied to
                    the transaction. Use this to add transaction-specific
                    information such as the transaction's purpose or another
                    identifier that you want to reference later. The value is
                    shown in the UI in the transfer listing page.
                  maxLength: 256
                minValue:
                  oneOf:
                    - type: number
                    - type: string
                  description: >-
                    Ignore unspents smaller than this amount of base units (e.g.
                    satoshis). For doge, only string is allowed.
                maxValue:
                  oneOf:
                    - type: number
                    - type: string
                  description: >-
                    Ignore unspents larger than this amount of base units (e.g.
                    satoshis). For doge, only string is allowed.
                sequenceId:
                  type: string
                  description: >-
                    A `sequenceId` is a unique and arbitrary wallet identifier
                    applied to transfers and transactions at creation. It is
                    optional but highly recommended. With a `sequenceId` you can
                    easily reference transfers and transactions—for example, to
                    safely retry sending. Because the system only confirms one
                    send request per `sequenceId` (and fails all subsequent
                    attempts), you can retry sending without the risk of double
                    spending. The `sequenceId` is only visible to users on the
                    wallet and is not shared publicly.
                lastLedgerSequence:
                  type: number
                  description: >-
                    (XRP only) Absolute max ledger the transaction should be
                    accepted in, whereafter it will be rejected
                ledgerSequenceDelta:
                  type: number
                  description: >-
                    (XRP only) Relative ledger height (in relation to the
                    current ledger) that the transaction should be accepted in,
                    whereafter it will be rejected
                noSplitChange:
                  type: boolean
                  default: false
                  description: >-
                    Set `true` to disable automatic change splitting. Also see:
                    `targetWalletUnspents`
                unspents:
                  type: array
                  items:
                    type: string
                    description: >-
                      Used to explicitly specify the unspents to be used in the
                      input set in the transaction. Each unspent should be in
                      the form `prevTxId:nOutput`.
                comment:
                  type: string
                  description: >-
                    Optional metadata (only persisted in BitGo) to be applied to
                    the transaction. Use this to add transaction-specific
                    information such as the transaction's purpose or another
                    identifier that you want to reference later. The value is
                    shown in the UI in the transfer listing page.
                  maxLength: 256
                otp:
                  type: string
                  description: >-
                    Two factor auth code to enable sending the transaction. Not
                    necessary if using a long lived access token within the
                    spending limit.
                changeAddress:
                  type: string
                  description: >-
                    Specifies a custom destination address for the transaction's
                    change output(s)
                  maxLength: 250
                allowExternalChangeAddress:
                  type: boolean
                  description: Flag for allowing external change addresses
                instant:
                  type: boolean
                  description: >-
                    (DASH only) Specifies whether or not to use Dash's
                    "InstantSend" feature when sending a transaction.
                memo:
                  type: string
                  description: >-
                    Extra transaction information for CSPR, EOS, HBAR, RUNE,
                    STX, TON, XLM, and XRP. Required for XLM transactions. Note:
                    For XRP this is the destination tag (DT). For CSPR this is
                    the transfer ID.
                transferId:
                  type: number
                  description: Transfer ID for the transaction
                eip1559: {}
                gasLimit:
                  type: number
                  description: >-
                    Custom gas limit to be used for sending the transaction.
                    Only for ETH and ERC20 tokens.
                custodianTransactionId:
                  type: string
                  description: Custodian transaction ID
                nonce:
                  type: string
                  description: >-
                    (DOT only) A nonce ID is a number used to protect private
                    communications by preventing replay attacks. This is an
                    advanced option where users can manually input a new nonce
                    value in order to correct or fill in a missing nonce ID
                    value.
              required:
                - source
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/{coin}/advancedwallet/{walletId}/txrequest/{txRequestId}/signAndSend:
    post:
      summary: Advanced Wallets - Sign and Send MPC Transaction
      description: >-
        Sign and send a MPC transaction.


        Retrieves the private key from KMS using the provided common keychain,
        then signs and broadcasts the transaction.


        Use this endpoint only with advanced wallets. For other wallet types,
        use [Sign MPC
        transaction](https://developers.bitgo.com/reference/expresswalletsigntxtss).
      operationId: advancedwallet.sign.tx.tss
      tags:
        - Advanced Wallets
      parameters:
        - name: walletId
          in: path
          required: true
          schema:
            type: string
        - name: coin
          in: path
          required: true
          schema:
            type: string
        - name: txRequestId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                source:
                  type: string
                  enum:
                    - user
                    - backup
                  description: The key to use for signing the transaction
                commonKeychain:
                  type: string
                  description: Common keychain of the wallet during wallet creation
              required:
                - source
                - commonKeychain
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/{coin}/advancedwallet/generate:
    post:
      summary: Advanced Wallets - Generate Wallet
      description: >-
        Create a new advanced wallet. Calling this endpoint does the following:

        1. Generates user keychain in isolated AWM, then sends to KMS (encrypts
        private key, stores public key mapping).

        2. Generates backup keychain in isolated AWM, then sends to KMS
        (encrypts private key, stores public key mapping).

        3. Uploads the user and backup public keys to BitGo.

        4. Creates the BitGo key on the BitGo service.

        5. Creates the wallet on BitGo with the 3 keys.
      operationId: advancedwallet.generate
      tags:
        - Advanced Wallets
      parameters:
        - name: coin
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
                  description: >-
                    A human-readable label for the wallet This will be displayed
                    in the BitGo dashboard and API responses
                  example: My Wallet
                multisigType:
                  type: string
                  enum:
                    - onchain
                    - tss
                  description: >-
                    The type of multisig wallet to create - onchain: Traditional
                    multisig wallets using on-chain scripts - tss: Threshold
                    Signature Scheme wallets using MPC protocols If absent,
                    BitGo uses the default wallet type for the asset
                  example: tss
                enterprise:
                  type: string
                  description: >-
                    Enterprise ID - Required for Ethereum wallets Ethereum
                    wallets can only be created under an enterprise Each
                    enterprise has a fee address which will be used to pay for
                    transaction fees Your enterprise ID can be seen by clicking
                    on the "Manage Organization" link on the enterprise dropdown
                  example: 59cd72485007a239fb00282ed480da1f
                  pattern: ^[0-9a-f]{32}$
                disableTransactionNotifications:
                  type: boolean
                  description: >-
                    Flag for disabling wallet transaction notifications When
                    true, BitGo will not send email/SMS notifications for wallet
                    transactions
                  example: false
                isDistributedCustody:
                  type: boolean
                  description: >-
                    True, if the wallet type is a distributed-custodial If
                    passed, you must also pass the 'enterprise' parameter
                    Distributed custody allows multiple parties to share control
                    of the wallet
                  example: false
                walletVersion:
                  type: number
                  description: >-
                    Specify the wallet creation contract version used when
                    creating an Ethereum wallet contract - 0: Old wallet
                    creation (legacy) - 1: New wallet creation, only deployed
                    upon receiving funds - 2: Same functionality as v1 but with
                    NFT support - 3: MPC wallets
                  example: 1
                  minimum: 0
                  maximum: 3
              required:
                - label
                - multisigType
                - enterprise
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  wallet:
                    $ref: '#/components/schemas/WalletType1'
                  userKeychain:
                    $ref: '#/components/schemas/UserKeychainType'
                  backupKeychain:
                    $ref: '#/components/schemas/UserKeychainType'
                  bitgoKeychain:
                    $ref: '#/components/schemas/BitgoKeychainType'
                  responseType:
                    type: string
                required:
                  - wallet
                  - userKeychain
                  - backupKeychain
                  - bitgoKeychain
                  - responseType
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/{coin}/advancedwallet/recovery:
    post:
      summary: Advanced Wallets - Recover Assets
      description: >-
        Recover assets from an advanced wallet with a balance only in the base
        address. Works for both multisignature and MPC recoveries.


        Retrieves the private keys from KMS using the provided public keys or
        common keychain, then signs and returns the broadcastable transaction
        hex.


        Note: This endpoint only works when AWM and MBE are running in recovery
        mode.


        To recover assets from an advanced wallet with balances in multiple
        receive addresses, use [Advanced Wallets - Consolidate and Recover
        Assets](https://developers.bitgo.com/reference/advancedwalletconsolidaterecovery).


        Use this endpoint only with advanced wallets. For other wallet types,
        use the [Wallet Recovery
        Wizard](https://developers.bitgo.com/docs/wallets-recover#/).
      operationId: advancedwallet.recovery
      tags:
        - Advanced Wallets
      parameters:
        - name: coin
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: >-
                Request type for the wallet recovery endpoint. Used to recover
                funds from both standard multisig and TSS wallets. Recover funds
                from an advanced wallet by building a transaction with user and
                backup keys.
              properties:
                isTssRecovery:
                  type: boolean
                  description: >-
                    Set to true to perform a TSS (Threshold Signature Scheme)
                    recovery.
                  example: true
                tssRecoveryParams:
                  type: object
                  description: >-
                    Parameters specific to TSS recovery. Required when
                    isTssRecovery is true.
                  properties:
                    commonKeychain:
                      type: string
                      description: >-
                        The common keychain string used for TSS wallets.
                        Required for TSS recovery.
                      example: >-
                        0280ec751d3b165a48811b2cc90f90dcf323f33e8bcaadc0341e1e010adcdcf7005afde80dd286d65b6be947af0424dd1e9f7611f3d20e02a4fc84ad8c8b74c1a5
                  required:
                    - commonKeychain
                multiSigRecoveryParams:
                  type: object
                  description: >-
                    Parameters specific to standard multisig recovery. Required
                    when isTssRecovery is false (default).
                  properties:
                    backupPub:
                      type: string
                      description: The backup public key.
                      example: >-
                        xpub661MyMwAqRbcGCNnmzqt3u5KhxmXBHiC78cwAyUMaKJXpFDfHpJwNap6qpG1Kz2SPexKXy3akhPQz7GDYWpHNWkLxRLj6bDxQSf74aTAP9y
                    bitgoPub:
                      type: string
                      description: >-
                        The BitGo public key. Required for UTXO coins, optional
                        for others.
                      example: >-
                        xpub661MyMwAqRbcGCNnmzqt3u5KhxmXBHiC78cwAyUMaKJXpFDfHpJwNap6qpG1Kz2SPexKXy3akhPQz7GDYWpHNWkLxRLj6bDxQSf74aTAP9y
                    userPub:
                      type: string
                      description: The user's public key.
                      example: >-
                        xpub661MyMwAqRbcGCNnmzqt3u5KhxmXBHiC78cwAyUMaKJXpFDfHpJwNap6qpG1Kz2SPexKXy3akhPQz7GDYWpHNWkLxRLj6bDxQSf74aTAP9y
                    walletContractAddress:
                      type: string
                      description: >-
                        The wallet contract address. Required for ETH-like
                        recoveries.
                      example: '0x1234567890123456789012345678901234567890'
                  required:
                    - backupPub
                    - bitgoPub
                    - userPub
                    - walletContractAddress
                recoveryDestinationAddress:
                  type: string
                  description: >-
                    The address where recovered funds will be sent. Must be a
                    valid address for the coin being recovered.
                  example: '"9zvKDB8o96QvToQierXtwSfqK9NqaHw7uvmxWsmSrxns" // For SOL'
                apiKey:
                  type: string
                  description: >-
                    API Key for a block chain explorer. Required for some coins
                    (BTC, ETH) to build a recovery transaction without BitGo.
                coinSpecificParams:
                  type: object
                  description: >-
                    Coin-specific recovery options. Different parameters are
                    required based on the coin family: - For UTXO coins (BTC,
                    etc): provide utxoRecoveryOptions. - For EVM chains (ETH,
                    etc): provide evmRecoveryOptions. - For Solana: provide
                    solanaRecoveryOptions.
                  properties:
                    ecdsaCosmosLikeRecoverySpecificParams:
                      type: object
                      properties:
                        rootAddress:
                          type: string
                      required:
                        - rootAddress
                    ecdsaEthLikeRecoverySpecificParams:
                      type: object
                      properties:
                        apiKey:
                          type: string
                        bitgoDestinationAddress:
                          type: string
                        walletContractAddress:
                          type: string
                      required:
                        - apiKey
                        - bitgoDestinationAddress
                        - walletContractAddress
                    evmRecoveryOptions:
                      type: object
                      description: >-
                        EVM-specific recovery parameters for Ethereum and
                        EVM-compatible chains. Used for recovering funds from
                        standard multisig wallets on Ethereum and EVM-compatible
                        chains. Required when recovering ETH, MATIC, BSC, AVAX
                        C-Chain, etc.
                      properties:
                        eip1559:
                          type: object
                          description: >-
                            EIP-1559 gas parameters for modern Ethereum
                            transactions. Required for EIP-1559 compatible
                            networks (Ethereum post-London fork).
                          properties:
                            maxFeePerGas:
                              type: number
                              description: >-
                                Maximum fee per gas in wei (base fee + priority
                                fee).
                              example: null
                            maxPriorityFeePerGas:
                              type: number
                              description: >-
                                Maximum priority fee per gas in wei (tip for
                                miners/validators).
                              example: null
                          required:
                            - maxFeePerGas
                            - maxPriorityFeePerGas
                        gasLimit:
                          type: number
                          description: >-
                            Gas limit for the recovery transaction. Must be
                            enough to cover the contract execution costs.
                          example: 500000
                        gasPrice:
                          type: number
                          description: >-
                            Gas price in wei for the recovery transaction (for
                            legacy transactions). Higher gas prices result in
                            faster confirmations but higher transaction costs.
                          example: null
                        replayProtectionOptions:
                          type: object
                          description: >-
                            Replay protection options for the transaction.
                            Required to prevent transaction replay attacks
                            across different chains.
                          properties:
                            chain:
                              oneOf:
                                - type: string
                                - type: number
                              description: Chain ID or name.
                              example: '"goerli" // Goerli Testnet'
                            hardfork:
                              type: string
                              default: london
                              description: >-
                                Hardfork name to determine the transaction
                                format.
                              example: '"istanbul" // Pre-London fork'
                          required:
                            - chain
                            - hardfork
                        scan:
                          type: number
                          default: 20
                          description: >-
                            Number of addresses to scan for funds. Higher values
                            will scan more addresses but take longer to
                            complete.
                          example: null
                    solanaRecoveryOptions:
                      type: object
                      description: Solana-specific recovery parameters.
                      properties:
                        closeAtaAddress:
                          type: string
                          description: >-
                            The close associated token account address. Required
                            for token recovery.
                        durableNonce:
                          type: object
                          description: >-
                            Durable nonce configuration for transaction
                            durability. Optional but recommended for recovery
                            operations. Refer to
                            https://github.com/BitGo/wallet-recovery-wizard/blob/master/DURABLE_NONCE.md
                            on durable nonce creation.
                          properties:
                            publicKey:
                              type: string
                              description: The public key of the durable nonce account.
                            secretKey:
                              type: string
                              description: The secret key of the durable nonce account.
                          required:
                            - publicKey
                            - secretKey
                        programId:
                          type: string
                          description: >-
                            The program ID for the token. Required for token
                            recovery.
                        recoveryDestinationAtaAddress:
                          type: string
                          description: >-
                            The recovery destination's associated token account
                            address. Required for token recovery.
                        tokenContractAddress:
                          type: string
                          description: >-
                            The token contract address for token recovery.
                            Required when recovering tokens.
                    utxoRecoveryOptions:
                      type: object
                      description: >-
                        UTXO-specific recovery parameters for Bitcoin &
                        Bitcoin-like cryptocurrencies. Used for recovering funds
                        from standard multisig wallets on UTXO chains. Required
                        when recovering BTC, BCH, LTC, DASH, ZEC, etc.
                      properties:
                        feeRate:
                          type: number
                          description: >-
                            Fee rate for the recovery transaction in satoshis
                            per byte. Higher fee rates result in faster
                            confirmations but higher transaction costs.
                          example: null
                        ignoreAddressTypes:
                          type: array
                          example:
                            - p2sh-p2wsh
                            - p2wsh
                          items:
                            type: string
                            description: >-
                              Array of address types to ignore during recovery.
                              Useful when you want to exclude specific address
                              types from the recovery process.
                        scan:
                          type: number
                          description: >-
                            Number of addresses to scan for funds. Higher values
                            will scan more addresses but take longer to
                            complete.
                          example: null
                        userKeyPath:
                          type: string
                          default: m/0
                          description: >-
                            Derivation path for the user key. Specifies the HD
                            path to derive the correct user key for signing.
                          example: m/0/0/0/0
              required:
                - recoveryDestinationAddress
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                description: Successful recovery response.
                example:
                  txHex: >-
                    01000000000101edd7a5d948a6c79f273ce686a6a8f2e96ed8c2583b5e77b866aa2a1b3426fbed0100000000ffffffff02102700000000000017a914192f23283c2a9e6c5d11562db0eb5d4eb47f460287b9bc2c000000000017a9145c139b242ab3701f321d2399d3a11b028b3b361e870247304402206ac9477fece38d96688c6c3719cb27396c0563ead0567457e7e884b406b6da8802201992d1cfa1b55a67ce8acb482e9957812487d2555f5f54fb0286ecd3095d78e4012103c92564575197c4d6e3d9792280e7548b3ba52a432101c62de2186c4e2fa7fc580000000000
                properties:
                  txHex:
                    type: string
                    description: >-
                      The full signed transaction in hexadecimal format. This
                      transaction can be broadcast to the network to complete
                      the recovery.
                required:
                  - txHex
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /api/v1/{coin}/advancedwallet/recoveryconsolidations:
    post:
      summary: Advanced Wallets - Consolidate and Recover Assets
      description: >-
        Recover assets from an advanced wallet with a balance in multiple
        receive addresses. Build, sign, and send a consolidation and recovery,
        all in one call. Sign using your user and backup keys. Works for both
        multisignature and MPC recoveries.


        Retrieves the private keys from KMS using the provided public keys or
        common keychain, then signs and returns the broadcastable transaction
        hex.


        Note: This endpoint only works when AWM and MBE are running in recovery
        mode.


        To recover assets from an advanced wallet with a balance only in the
        base address, use [Advanced Wallets - Recover
        Assets](https://developers.bitgo.com/reference/advancedwalletrecovery).


        Use this endpoint only with advanced wallets. For other wallet types,
        use the [Wallet Recovery
        Wizard](https://developers.bitgo.com/docs/wallets-recover#/).
      operationId: advancedwallet.consolidate.recovery
      tags:
        - Advanced Wallets
      parameters:
        - name: coin
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: >-
                Request type for wallet recovery consolidations endpoint. Used
                to consolidate and recover funds from multiple addresses in a
                wallet, via signing with user and backup keys.
              properties:
                userPub:
                  type: string
                  description: >-
                    The user's public key for standard multisig wallets.
                    Required for onchain multisig recovery consolidations.
                  example: >-
                    xpub661MyMwAqRbcGCNnmzqt3u5KhxmXBHiC78cwAyUMaKJXpFDfHpJwNap6qpG1Kz2SPexKXy3akhPQz7GDYWpHNWkLxRLj6bDxQSf74aTAP9y
                backupPub:
                  type: string
                  description: >-
                    The backup public key for standard multisig wallets.
                    Required for onchain multisig recovery consolidations.
                  example: >-
                    xpub661MyMwAqRbcGCNnmzqt3u5KhxmXBHiC78cwAyUMaKJXpFDfHpJwNap6qpG1Kz2SPexKXy3akhPQz7GDYWpHNWkLxRLj6bDxQSf74aTAP9y
                bitgoPub:
                  type: string
                  description: >-
                    The BitGo public key for standard multisig wallets. Required
                    for onchain UTXO multisig recovery consolidations.
                  example: >-
                    xpub661MyMwAqRbcGCNnmzqt3u5KhxmXBHiC78cwAyUMaKJXpFDfHpJwNap6qpG1Kz2SPexKXy3akhPQz7GDYWpHNWkLxRLj6bDxQSf74aTAP9y
                multisigType:
                  type: string
                  enum:
                    - onchain
                    - tss
                  description: >-
                    The type of wallet to recover - onchain: Traditional
                    multisig wallets. - tss: Threshold Signature Scheme wallets.
                  example: onchain
                commonKeychain:
                  type: string
                  description: >-
                    The common keychain for TSS wallets. Required when
                    multisigType is 'tss'.
                  example: >-
                    0280ec751d3b165a48811b2cc90f90dcf323f33e8bcaadc0341e1e010adcdcf7005afde80dd286d65b6be947af0424dd1e9f7611f3d20e02a4fc84ad8c8b74c1a5
                tokenContractAddress:
                  type: string
                  description: >-
                    The token contract address for token recovery (e.g., ERC20
                    tokens on Ethereum or SPL tokens on Solana). Required when
                    recovering specific tokens instead of the native coin.
                  example: >-
                    "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" // USDC on
                    Solana
                startingScanIndex:
                  type: number
                  description: >-
                    The starting index to scan for addresses to consolidate.
                    Useful for limiting the scan range for better performance.
                  example: 0
                endingScanIndex:
                  type: number
                  default: 20
                  description: >-
                    The ending index to scan for addresses to consolidate.
                    Useful for limiting the scan range for better performance.
                  example: 100
                apiKey:
                  type: string
                  description: >-
                    API key for blockchain explorer services. Required for some
                    coins to build recovery transactions.
                  example: >-
                    v2x8d5e46cf15a7b9b7xc60685d4f56xd8bd5f5cdcef3c1e9d4399c955d587179b
                durableNonces:
                  type: object
                  description: >-
                    Durable nonces configuration for Solana transactions.
                    Provides transaction durability for Solana recovery
                    operations. Refer to
                    https://github.com/BitGo/wallet-recovery-wizard/blob/master/DURABLE_NONCE.md
                    on durable nonce creation.
                  properties:
                    publicKeys:
                      type: array
                      example:
                        - BurablNonc1234567890123456789012345678901
                        - BurablNonc1234567890123456789012345678902
                      items:
                        type: string
                        description: >-
                          Array of public keys associated with the durable
                          nonce.
                    secretKey:
                      type: string
                      description: The secret key of the durable nonce account.
                      example: >-
                        3XNrU5JSPs2VnZCLnWK8GDzB6Pqoy3tYNMJJVesKBXnGqRxwdXDg2QKgv7E9a6QbAiKnLHSxysKWgXDKNdfXZCQM
                  required:
                    - publicKeys
                    - secretKey
              required:
                - multisigType
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema: {}
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '501':
          description: Not Implemented
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
  /ping/advancedWalletManager:
    post:
      summary: Advanced Wallets - Ping Advanced Wallet Manager
      description: >-
        Test your connection between the Advanced Wallet Manager (AWM) and the
        Master Bitgo Express (MBE) servers.
      operationId: advancedwallet.mbe.awm.ping
      tags:
        - Advanced Wallets
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                  awmResponse:
                    $ref: '#/components/schemas/PingResponseType'
                required:
                  - status
                  - awmResponse
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  details:
                    type: string
                required:
                  - error
                  - details
  /express/api/v1/wallets/simplecreate:
    post:
      summary: Create Wallet with Keychains
      description: >-
        Creates a new 2-of-3 multisignature wallet along with all three required
        keychains in a single

        operation. This is a convenience method that handles the entire wallet
        setup process.


        **WARNING: BE SURE TO BACKUP! NOT DOING SO CAN RESULT IN LOSS OF
        FUNDS!**


        **Workflow:**

        1. Creates the user keychain locally and encrypts it with the provided
        passphrase

        2. Handles backup keychain based on parameters (see Backup Keychain
        Strategies below)

        3. Uploads the encrypted user keychain and backup keychain xpub to BitGo

        4. Creates the BitGo-managed keychain on the service

        5. Creates the 2-of-3 multisig wallet on BitGo with all three public
        keys


        **Backup Keychain Strategies:**

        - **KRS Provider (Recommended)**: Set backupXpubProvider to use a Key
        Recovery Service (e.g., "keyternal")

        - Creates instant-capable wallets

        - Professional key management

        - Cannot be combined with backupXpub

        - **External Xpub (Recommended)**: Provide backupXpub generated on a
        separate, secure machine

        - Maximum security (keys never on same machine)

        - You control the backup key

        - Cannot be combined with backupXpubProvider

        - **Local Generation (NOT RECOMMENDED)**: If neither backupXpub nor
        backupXpubProvider provided

        - Creates backup key on same machine as user key (security risk)

        - Response includes warning message and unencrypted backup xprv

        - You MUST back up the backup keychain yourself


        **Response:** Returns wallet object and all three keychains. If backup
        keychain was created

        locally, response includes warning message and the backup keychain will
        contain xprv (which

        you must securely back up). Otherwise, backup keychain only contains
        xpub.
      operationId: express.v1.wallet.simplecreate
      tags:
        - Express
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: >-
                Wallet creation parameters including passphrase, label, and
                backup key configuration
              properties:
                passphrase:
                  type: string
                  description: >-
                    Wallet passphrase to encrypt user and backup keys with
                    (required)
                label:
                  type: string
                  description: Wallet label shown in BitGo UI
                backupXpub:
                  type: string
                  description: >-
                    Backup keychain xpub generated on a separate machine (HIGHLY
                    RECOMMENDED for security - cannot be used with
                    backupXpubProvider)
                backupXpubProvider:
                  type: string
                  description: >-
                    Key Recovery Service provider for backup key, e.g.
                    "keyternal" (creates instant-capable wallet - cannot be used
                    with backupXpub)
                enterprise:
                  type: string
                  description: Enterprise ID to create wallet under
                passcodeEncryptionCode:
                  type: string
                  description: >-
                    Code used to encrypt the wallet passcode for the recovery
                    process
                disableTransactionNotifications:
                  type: boolean
                  description: Disable transaction notifications for this wallet
                disableKRSEmail:
                  type: boolean
                  description: >-
                    Disable KRS email notifications (only applicable when using
                    backupXpubProvider)
              required:
                - passphrase
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimpleCreateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BitgoExpressError'
  /express/api/v1/walletshare/{shareId}/acceptShare:
    post:
      summary: Accept a Wallet Share
      description: >-
        Accepts a wallet share invitation from another user, granting access to
        the shared wallet

        according to the permissions specified by the sharing user.


        ## Wallet Share Permissions

        - **View**: Read-only access to wallet information and transactions

        - **Spend**: Ability to create and sign transactions

        - **Admin**: Full control including user management and settings


        ## Acceptance Workflow


        The acceptance process varies based on the share type:


        ### 1. View-Only Shares

        No encryption processing needed. The share is accepted immediately
        without requiring userPassword.


        ### 2. Spend/Admin Shares with Keychain (Standard Path)

        Uses ECDH (Elliptic Curve Diffie-Hellman) key sharing:

        - Requires `userPassword` to decrypt your ECDH keychain

        - Derives a shared secret between you and the sharing user

        - Decrypts the shared wallet keys using this secret

        - Re-encrypts the keys with `newWalletPassphrase` (or `userPassword` if
        not specified)

        - Stores the encrypted keys for future wallet operations


        ### 3. Override Path (Out-of-Band Key Exchange)

        When `overrideEncryptedXprv` is provided:

        - Bypasses the ECDH key derivation process

        - Uses the pre-encrypted xprv directly

        - No password required (keys are already encrypted)


        ## Security Notes

        - `userPassword` must match your BitGo account password

        - `newWalletPassphrase` should be strong and securely stored

        - The ECDH key exchange ensures only the intended recipient can decrypt
        the wallet keys

        - `overrideEncryptedXprv` should only be used for keys received through
        a separate secure channel
      operationId: express.v1.wallet.acceptShare
      tags:
        - Express
      parameters:
        - name: shareId
          description: ID of the wallet share to accept
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Credentials and configuration for accepting the wallet share
              properties:
                userPassword:
                  type: string
                  description: >-
                    User's password for authentication.

                    Required when accepting shares with spend/admin permissions
                    that include encrypted keychains,

                    unless overrideEncryptedXprv is provided. Used to decrypt
                    the user's ECDH keychain

                    for deriving the shared secret that decrypts the shared
                    wallet keys.
                newWalletPassphrase:
                  type: string
                  description: >-
                    New passphrase to encrypt the shared wallet keys with.

                    If not provided, defaults to userPassword. This passphrase
                    will be required

                    for future wallet operations that need to decrypt the wallet
                    keys.

                    Only applicable when accepting shares with encrypted
                    keychains.
                overrideEncryptedXprv:
                  type: string
                  description: >-
                    Pre-encrypted wallet xprv received through an out-of-band
                    secure channel.

                    When provided, bypasses the ECDH key derivation and
                    decryption process.

                    Use this only if you received the encrypted key separately
                    from the share invitation.

                    The xprv must already be encrypted with your desired
                    passphrase.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/AcceptShareResponse'
                description: Successfully accepted wallet share
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/BitgoExpressError'
                description: Error response
  /express/api/v2/{coin}/verifyaddress:
    post:
      summary: Verify address for a given coin
      description: >-
        Returns whether the address is valid for the specified coin.

        For UTXO coins, an optional legacy script hash flag can be provided to
        allow previous script hash versions.
      operationId: express.verifycoinaddress
      tags:
        - Express
      parameters:
        - name: coin
          description: Coin ticker / chain identifier
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Request body for coin-specific address verification.
              properties:
                address:
                  type: string
                  description: Address which should be verified for correct format
                supportOldScriptHashVersion:
                  type: boolean
                  description: >-
                    Accept legacy script hash version for applicable UTXO coins
                    (optional).
              required:
                - address
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  isValid:
                    type: boolean
                required:
                  - isValid
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BitgoExpressError'
  /express/api/v2/ping:
    get:
      summary: Ping
      description: >-
        Health check endpoint that returns 200 when the Express server is
        running.
      operationId: express.v2.ping
      tags:
        - Express
      parameters: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties: {}
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BitgoExpressError'
  /api/v2/pingexpress:
    get:
      tags:
        - Express
      summary: Ping BitGo Express
      operationId: express.ping
      description: >
        Ping bitgo express to ensure that it is still running. Unlike /ping,
        this does not try connecting to bitgo.com.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressPingResponse'
  /api/v2/{coin}/wallet/{walletId}/sendcoins:
    post:
      tags:
        - Express
      summary: Send transaction
      operationId: express.wallet.sendcoins
      description: >-
        This call allows you to create and send cryptocurrency to a destination
        address.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressSendCoinsRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/sendmany:
    post:
      tags:
        - Express
      summary: Send to many
      operationId: express.wallet.sendmany
      description: >
        Send coins or tokens to one or more recipients. You can use this
        endpoint to schedule outgoing transactions in bulk, lowering your
        aggregate amount of blockchain fees.



        Works with both multisignature and MPC wallets. Also supports
        external-signer mode.


        Works with most BitGo-supported assets, but currently unavailable for:
        ALGO, ARBETH, AVAXC, CELO, CELO:CUSD, CSPR, DOT, EOS, HTETH:BGERCH,
        NEAR, OPETH, STX, TON, TRX, TRX:USDC, XLM, XRP, XTZ
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressSendManyRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/encrypt:
    post:
      tags:
        - Express
      summary: Encrypt messages
      operationId: express.encrypt
      description: Symmetrically encrypt an arbitrary message with provided password
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressEncryptRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressEncryptResponse'
  /api/v2/decrypt:
    post:
      tags:
        - Express
      summary: Decrypt messages
      operationId: express.decrypt
      description: Decrypt a ciphertext generated by encrypt route with provided password
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressDecryptRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressDecryptResponse'
        '500':
          description: Internal Server Error
  /api/v2/calculateminerfeeinfo:
    post:
      tags:
        - Express
      summary: Calculate mining fee
      operationId: express.calculateminerfeeinfo
      description: Calculate the fee and estimated size in bytes for a Bitcoin transaction
      deprecated: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressCalculateMinerFeeInfoRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressCalculateMinerFeeInfoResponse'
  /api/v2/{coin}/keychain/local:
    post:
      tags:
        - Express
      summary: Create key
      operationId: express.keychain.local
      parameters:
        - $ref: '#/components/parameters/pathCoin'
      description: >
        Local client-side function to create a new keychain.


        Creating your keychains is a critical step for safely securing your
        Bitcoin. When generating new keychains, this API uses a random number
        generator that adheres to industry standards. If you provide your own
        seed, you must take extreme caution when creating it.

        Returns an object containing the xprv and xpub for the new chain. The
        created keychain is not known to the BitGo service. To use it with the
        BitGo service, use the ‘Store Keychain’ API call.


        For security reasons, it is highly recommended that you encrypt and
        destroy the original xprv immediately to prevent theft.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressCreateKeychainResponse'
  /api/v2/{coin}/walletshare/{walletShareId}/acceptshare:
    post:
      tags:
        - Express
      summary: Accept wallet share
      operationId: express.wallet.acceptshare
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletShareId'
      description: Accept a wallet share, adding the wallet to the user's list
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressAcceptShareRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressAcceptShareResponse'
  /api/v2/{coin}/signtx:
    post:
      tags:
        - Express
      summary: Sign transaction
      operationId: express.signtx
      description: >-
        This route is for users who would like to maintain their own keys, or
        otherwise would not like BitGo to decrypt their key, and instead provide
        it in the clear themselves
      parameters:
        - $ref: '#/components/parameters/pathCoin'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressSignTxRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSignTxResponse'
  /api/v2/{coin}/wallet/{walletId}/signtx:
    post:
      tags:
        - Express
      summary: Sign wallet transaction
      operationId: express.wallet.signtx
      description: >-
        Sign transactions for multisignature wallets using external-signing
        mode. You must maintain your keys, in the clear, on a separate Express
        server. BitGo doesn't decrypt your private keys.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressWalletSignTxRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSignTxResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/signtxtss:
    post:
      tags:
        - Express
      summary: Sign MPC transaction
      operationId: express.wallet.signtxtss
      description: >-
        Sign transactions for MPC wallets. If using external-signer mode, you
        must maintain your keys, in the clear, on a separate Express server -
        BitGo doesn't decrypt your private MPC key shares.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressSignTssTx'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionRequest'
  /api/v2/{coin}/wallet/{walletId}/recovertoken:
    post:
      tags:
        - Express
      summary: Recover ETH token
      operationId: express.wallet.recovertoken
      description: Recover an unsupported Ethereum token from a BitGo multisig wallet
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressWalletRecoverTokenRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressWalletRecoverTokenResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/consolidateunspents:
    post:
      tags:
        - Express
      summary: Consolidate unspents (simple)
      operationId: express.wallet.consolidateunspents
      description: >-
        Builds, signs, and sends a transaction to consolidate unspents all in 1
        call. Consolidating unspents is only for UTXO-based assets.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressConsolidateUnspentsRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/fanoutunspents:
    post:
      tags:
        - Express
      summary: Fan out unspents
      operationId: express.wallet.fanoutunspents
      description: Fan out unspents on a wallet
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressFanOutUnspentsRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/iswalletaddress:
    post:
      tags:
        - Express
      summary: Verify if an address belongs to a wallet
      operationId: express.wallet.isWalletAddress
      description: >
        This endpoint verifies whether a given address belongs to the specified
        wallet.

        It performs cryptographic verification, checking address derivation
        against wallet keychains and configuration.


        Returns `true` if the address belongs to the wallet.

        Throws an error if verification fails or parameters are invalid.


        To verify a baseAddress, set `baseAddress` and `address` to the base
        address of the wallet.


        Due to architecture limitations, forwarder version 0 addresses cannot be
        verified and will return `true` without verification.


        Verifying custodial wallet addresses is not supported.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressIsWalletAddressRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressIsWalletAddressResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
        '500':
          description: Addresss Verification Failure
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
  /api/v2/{coin}/wallet/{walletId}/sweep:
    post:
      tags:
        - Express
      summary: Sweep funds
      operationId: express.wallet.sweep
      description: >
        The sweep call spends the full balance of the wallet to the provided
        address. On UTXO coins, the sweep call will

        fail if the wallet has any unconfirmed funds, or if there are more
        unspents than can be sent with a

        single transaction.


        **Note:** This endpoint is designed primarily for UTXO-based coins (e.g.
        BTC, LTC) using

        the multisig wallet architecture. It is **not** supported for
        account-based coins (e.g. ETH, XRP,

        ALGO). Calling this endpoint for account-based coins will result in an
        error.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressSweepRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/acceleratetx:
    post:
      tags:
        - Express
      summary: Accelerate Transaction
      operationId: express.wallet.acceleratetx
      description: >
        Send a new transaction to accelerate the targeted unconfirmed
        transaction either by using Child-Pays-For-Parent (CPFP) or
        Replace-By-Fee (RBF).


        **Background**:

        1. In Bitcoin, a transaction can only be included in a block when all
        its inputs are confirmed.

        This requirement can be used to increase the effective fee rate of a
        stuck low-fee transaction.

        One of the stuck transaction's outputs is spent in a child transaction
        with a much higher fee.

        Miners include the transactions with the highest fees first to maximize
        their revenue,

        but the high-fee child transaction can only be included once the parent
        transaction is confirmed.

        The miners are therefore incentivized to include both the parent and the
        child transaction together in a block.

        A Child-Pays-For-Parent transaction can be created by a recipient of the
        transaction or by the sender if the

        target transaction has a change output.

        2. In Bitcoin, a transaction can be replaced by a new transaction with a
        higher fee as long as the new transaction spends few or all of the same
        inputs used by the original transaction that's being replaced. Unlike
        CPFP, only the sender of the transaction can create a Replace-By-Fee
        transaction, and only either of the transactions can be confirmed. More
        often than not, the replacement transaction with the higher fee will be
        accepted by the miners.


        **Notes**:

        1. As other coins do not have a blockspace market, this route is only
        available for Bitcoin at this time.<br/>

        2. Using CPFP, if a target transaction depends on other unconfirmed
        transactions, this route also adds sufficient fees to elevate the entire
        transaction ancestry's effective fee rate to the `cpfpFeeRate`.
      parameters:
        - $ref: '#/components/parameters/pathBitcoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressAccelerateTxRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendCoinsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/canonicaladdress:
    post:
      tags:
        - Express
      summary: Canonicalize address
      operationId: express.canonicaladdress
      description: Canonicalize an LTC or BCH address.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressCanonicalAddressRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddressString3'
  /api/v2/{coin}/verifyaddress:
    post:
      tags:
        - Express
      summary: Verify address
      operationId: express.verifycoinaddress1
      description: Verify address for a given coin
      parameters:
        - $ref: '#/components/parameters/pathCoin'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressVerifyCoinAddressRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  isValid:
                    type: boolean
  /api/v2/{coin}/wallet/{walletId}/state:
    get:
      tags:
        - Express
      summary: Lightning - Get node state
      operationId: express.lightning.getState
      description: >-
        This is only used for self-custody lightning. Get the current state of
        the lightning node.
      parameters:
        - $ref: '#/components/parameters/pathLightningCoin'
        - $ref: '#/components/parameters/pathWalletId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressLightningNodeStateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /express/api/v2/{coin}/wallet/{walletId}:
    put:
      tags:
        - Express
      summary: Update Wallet
      description: >-
        The express update wallet route is meant to be used for lightning
        (lnbtc/tlnbtc). It will produced a signed wallet update request that can
        be used to update the wallet. For other coins, use the standard wallet
        update endpoint.
      operationId: express.wallet.update
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                signerHost:
                  type: string
                  description: The host address of the lightning signer node.
                signerTlsCert:
                  type: string
                  description: >-
                    The TLS certificate for the lighting signer node encoded to
                    base64.
                signerMacaroon:
                  type: string
                  description: (Optional) The signer macaroon for the lighting signer node.
                passphrase:
                  type: string
                  description: >-
                    The wallet passphrase. This is not uploaded to BitGo, but
                    used to decrypt userAuthKey used to sign the request before
                    sending to BitGo.
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Wallet1'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
        '403':
          description: Forbidden
        '404':
          description: Not Found
  /api/v2/{coin}/wallet/{walletId}/initwallet:
    post:
      tags:
        - Express
      summary: Lightning - Initialize node
      operationId: express.lightning.initWallet
      description: >-
        This is only used for self-custody lightning. Initialize a newly created
        Lightning Network Daemon (LND) for the first time. Returns the updated
        wallet with the encrypted admin macaroon in the `coinSpecific` response
        field.
      parameters:
        - $ref: '#/components/parameters/pathLightningCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressInitWalletRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressGenerateWalletResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/unlockwallet:
    post:
      tags:
        - Express
      summary: Lightning - Unlock node
      operationId: express.lightning.unlockWallet
      description: >-
        This is only used for self-custody lightning. Unlock the Lightning
        Network Daemon (LND) node with the given wallet password.
      parameters:
        - $ref: '#/components/parameters/pathLightningCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressUnlockLightningWalletRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressUnlockLightningWalletResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/lightning/payment:
    post:
      tags:
        - Express
      summary: Lightning - Pay a Lightning Invoice
      operationId: express.lightning.payInvoice
      description: Pay a Lightning Network invoice from the given wallet.
      parameters:
        - $ref: '#/components/parameters/pathLightningCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressPayInvoiceRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressPayInvoiceResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/lightning/withdraw:
    post:
      tags:
        - Express
      summary: Lightning - Withdraw to an onchain address
      operationId: express.lightning.withdrawOnchain
      description: >-
        Withdraw onchain balance from a lightning wallet to a regular onchain
        address.
      parameters:
        - $ref: '#/components/parameters/pathLightningCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressOnchainWithdrawRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressOnchainWithdrawResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/consolidateAccount:
    post:
      tags:
        - Express
      summary: Consolidate account (simple)
      operationId: express.wallet.consolidateAccount
      description: >-
        Build, sign, and send a consolidation transaction for an account-based
        asset all in 1 call. For account-based assets, consolidating the
        balances in the receive addresses to the base address maximizes the
        spendable balance of a wallet.
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressConsolidateAccountRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressSendConsolidationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError3'
                  - $ref: '#/components/schemas/InvalidWalletId'
  /api/v2/{coin}/wallet/{walletId}/signermacaroon:
    post:
      summary: Lightning - Create signer macaroon
      description: >-
        This is only used for self-custody lightning. Create the signer macaroon
        for the watch-only

        Lightning Network Daemon (LND) node. This macaroon derives from the
        signer node admin macaroon

        and is used by the watch-only node to request signatures from the signer
        node for operational

        tasks. Returns the updated wallet with the encrypted signer macaroon in
        the `coinSpecific`

        response field.
      operationId: express.lightning.signerMacaroon
      tags:
        - Express
      x-internal: false
      parameters:
        - name: coin
          description: A lightning coin name
          in: path
          required: true
          schema:
            allOf:
              - $ref: '#/components/schemas/CoinString'
            example: lnbtc
        - name: walletId
          description: The wallet ID
          in: path
          required: true
          schema:
            allOf:
              - $ref: '#/components/schemas/WalletIdString'
            example: 59cd72485007a239fb00282ed480da1f
            pattern: ^[0-9a-f]{32}$
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Request body for creating a signer macaroon via Express.
              properties:
                passphrase:
                  type: string
                  description: Passphrase to decrypt the admin macaroon of the signer node.
                addIpCaveatToMacaroon:
                  type: boolean
                  description: If true, adds an IP caveat to the generated signer macaroon.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressGenerateWalletResponse1'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/PlatformError'
                  - $ref: '#/components/schemas/InvalidWalletId1'
  /api/v2/{coin}/wallet/generate:
    post:
      summary: Generate wallet
      description: >-
        Generate a new wallet for a coin. If you want a wallet to hold tokens,
        generate a wallet for the native coin of the

        blockchain (e.g. generate an ETH wallet to hold ERC20 tokens).


        Calling this endpoint does all of the following:


        * Creates the user keychain locally on your machine and encrypts it with
        the provided passphrase (skipped if you pass

        a `userKey`).

        * Creates the backup keychain locally on your machine.

        * Uploads the encrypted user keychain and public backup keychain to
        BitGo.

        * Creates the BitGo key (and the backup key if you pass
        `backupXpubProvider`) on the service.

        * Creates the wallet on BitGo with the 3 public keys above.


        ⓘ Many account-based assets, including Ethereum, require you to

        [Fund Gas
        Tanks](https://developers.bitgo.com/docs/get-started-gas-tanks) to
        initialize new wallets on chain. Ensure

        your gas tank has a sufficient balance to cover this cost before
        generating a new wallet.
      operationId: express.wallet.generate
      tags:
        - Express
      x-internal: false
      parameters:
        - name: includeKeychains
          description: Include user, backup and bitgo keychains along with generated wallet
          in: query
          schema:
            type: boolean
            default: false
        - name: coin
          description: A cryptocurrency or token ticker symbol
          in: path
          required: true
          schema:
            allOf:
              - $ref: '#/components/schemas/CoinString'
            example: btc
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Request body for generating a wallet via Express.
              properties:
                label:
                  type: string
                  description: Name the user assigned to the wallet
                  example: My Wallet
                enterprise:
                  allOf:
                    - $ref: '#/components/schemas/EnterpriseIdString'
                  description: >-
                    Enterprise id. This is required for Ethereum wallets since
                    they can only be created as part of an enterprise
                  example: 59cd72485007a239fb00282ed480da1f
                  pattern: ^[0-9a-f]{32}$
                multisigType:
                  type: string
                  enum:
                    - onchain
                    - tss
                  description: If absent, BitGo uses the default wallet type for the asset.
                type:
                  type: string
                  enum:
                    - hot
                    - cold
                    - custodial
                    - trading
                  description: >-
                    The type of wallet, defined by key management and signing
                    protocols.
                passphrase:
                  type: string
                  description: Passphrase to be used to encrypt the user key on the wallet
                userKey:
                  type: string
                  description: User provided public key
                backupXpub:
                  type: string
                  description: public part of a key pair
                  example: >-
                    xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH
                backupXpubProvider:
                  type: string
                  enum:
                    - dai
                  description: >-
                    Optional key recovery service to provide and store the
                    backup key
                disableTransactionNotifications:
                  type: boolean
                  description: Flag for disabling wallet transaction notifications
                passcodeEncryptionCode:
                  type: string
                  description: >-
                    The passphrase used for decrypting the encrypted wallet
                    passphrase during wallet recovery
                coldDerivationSeed:
                  type: string
                  description: >-
                    Seed that derives an extended user key or common keychain
                    for a cold wallet.
                gasPrice:
                  type: number
                  description: Gas price to use when deploying an Ethereum wallet
                disableKRSEmail:
                  type: boolean
                  description: >-
                    Flag for preventing KRS from sending email after creating
                    backup key
                walletVersion:
                  type: number
                  default: 1
                  description: >-
                    (ETH only) Specify the wallet creation contract version used
                    when creating a wallet contract.
                  minimum: 0
                  maximum: 6
                isDistributedCustody:
                  type: boolean
                  description: >-
                    True, if the wallet type is a distributed-custodial. If
                    passed, you must also pass the enterprise parameter.
                bitgoKeyId:
                  type: string
                  description: BitGo key ID for self-managed cold MPC wallets.
                  example: 59cd72485007a239fb00282ed480da1f
                  pattern: ^[0-9a-f]{32}$
                commonKeychain:
                  type: string
                  description: Common keychain for self-managed cold MPC wallets.
              required:
                - label
                - enterprise
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpressGenerateWalletResponse1'
  /api/v2/{coin}/wallet/{walletId}/share:
    post:
      tags:
        - Express
      summary: Share wallet
      operationId: express.wallet.share
      parameters:
        - $ref: '#/components/parameters/pathCoin'
        - $ref: '#/components/parameters/pathWalletId'
      description: Share wallet with an existing BitGo user
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpressShareWalletRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShareWalletResponse'
components:
  callbacks: {}
  headers: {}
  links: {}
  parameters:
    pathApprovalId:
      name: approvalId
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/Id'
    pathBitcoin:
      name: coin
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/Bitcoin'
    pathCoin:
      name: coin
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/Coin'
    pathLightningCoin:
      name: coin
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/LightningCoin'
    pathWalletId:
      name: walletId
      in: path
      required: true
      description: The wallet ID.
      schema:
        $ref: '#/components/schemas/Id'
    pathWalletShareId:
      name: walletShareId
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/Id'
  requestBodies: {}
  responses:
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            oneOf:
              - $ref: '#/components/schemas/GeneralError'
              - $ref: '#/components/schemas/ValidationError'
          example:
            code: BadRequest
            message: Bad Request
            status: 400
    BadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
    BadRequestError1:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
          example:
            error: Bad Request
            errorName: BadRequest
            reqId: some-id
    Conflict:
      description: Conflict - The request conflicts with the current state of the resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GeneralError'
          example:
            code: Conflict
            message: A pending change already exists for this policy rule
            status: 409
    ConflictError:
      description: Conflict
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
          example:
            error: Conflicting clientID
            errorName: Conflict
            reqId: some-id
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GeneralError'
          example:
            code: AccessDenied
            message: License not added for enterprise
            status: 403
    ForbiddenError:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
    ForbiddenError1:
      description: Forbidden - Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error1'
          examples:
            forbidden:
              summary: Insufficient permissions
              value:
                error: Forbidden, reqId=unk-nqo97l23l2ofpvgkbb8z
                errorName: backend:common:forbidden
                reqId: unk-nqo97l23l2ofpvgkbb8z
    ForbiddenError2:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
          example:
            error: Staking license not added for enterprise
            errorName: AccessDenied
            reqId: some-id
    ForbiddenError3:
      description: Forbidden - Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/WsError'
    InternalServerError:
      description: Server Error - Transient error please try again
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
    InternalServerError1:
      description: Server Error - Transient error please try again
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
          example:
            error: Database is down
            errorName: Internal_Server_Error
            reqId: some-id
    MalformedJSONError:
      description: Unprocessable Entity - JSON payload is improperly formatted
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error1'
          examples:
            malformedJSON:
              summary: JSON payload is improperly formatted
              value:
                error: backend:common:malformedJSON
                errorName: backend:common:malformedJSON
                reqId: unk-nqo97l23l2ofpvgkbb8z
    NotFound:
      description: The specified resource was not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GeneralError'
          example:
            code: NotFound
            message: Touchpoint not found
            status: 404
    NotFoundError:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
    NotFoundError1:
      description: Not Found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
          example:
            error: Wallet not found
            errorName: NotFound
            reqId: some-id
    RateLimitError:
      description: Too Many Requests - Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error1'
          examples:
            rateLimitExceeded:
              summary: Too many API requests
              value:
                error: backend:common:rateLimitExceeded
                errorName: backend:common:rateLimitExceeded
                reqId: unk-nqo97l23l2ofpvgkbb8z
    ServerError:
      description: Server Error - Transient error please try again
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GeneralError'
          example:
            code: Internal_Server_Error
            message: Database is down
            status: 500
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GeneralError'
          example:
            code: Unauthorized
            message: Unauthorized
            status: 401
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
    UnauthorizedError1:
      description: Unauthorized - Invalid or missing authentication
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error1'
          examples:
            unauthorized:
              summary: Unauthorized access
              value:
                error: Unauthorized
                errorName: Error
                reqId: unk-nqo97l23l2ofpvgkbb8z
    UnauthorizedError2:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/StakingError'
          example:
            error: Unauthorized
            errorName: Unauthorized
            reqId: some-id
    internalServerError1:
      description: Internal Server Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error1'
          examples:
            internalServerError:
              summary: Generic server error - Reach out to support for more information
              value:
                error: backend:common:internalServerError
                errorName: backend:common:internalServerError
                reqId: unk-nqo97l23l2ofpvgkbb8z
  schemas:
    AccelerationIntent:
      title: AccelerationIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - acceleration
              description: Must be "acceleration".
            txid:
              type: string
              description: >-
                Transaction hash (0x-prefixed) of the pending transaction to
                accelerate.
            senderAddress:
              type: string
              description: Sender address of the original transaction.
          required:
            - intentType
            - txid
        - $ref: '#/components/schemas/BaseIntent'
      description: >-
        Base codec for acceleration intents. Replaces a stuck pending EVM
        transaction

        with a higher-fee version to accelerate confirmation (replace-by-fee).
    AccelerationIntent1:
      title: AccelerationIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - acceleration
            txid:
              type: string
          required:
            - intentType
            - txid
        - $ref: '#/components/schemas/BaseIntent1'
    AcceptShareResponse:
      title: AcceptShareResponse
      type: object
      description: Response from accepting a wallet share
      properties:
        changed:
          type: boolean
          description: >-
            Indicates whether the share state was changed by this operation.

            true: The share was successfully accepted (state changed from
            pending to accepted).

            false: The share was already in the target state (already accepted).
        state:
          type: string
          description: >-
            Current state of the wallet share after the operation.

            Possible values: 'accepted', 'rejected', 'active',
            'pendingapproval', 'canceled'

            Should be 'accepted' after a successful acceptance.
      required:
        - changed
        - state
    AccountBaseBuildOptions:
      title: AccountBaseBuildOptions
      type: object
      properties:
        nonce:
          oneOf:
            - type: string
            - type: number
          description: Override the on-chain nonce for this transaction.
    AccountBaseBuildOptions1:
      title: AccountBaseBuildOptions
      type: object
      properties:
        nonce:
          oneOf:
            - type: string
            - type: number
    AccountBaseBuildOptions2:
      type: object
      properties:
        nonce:
          type: string
    AccountBaseConsolidateIntent:
      title: AccountBaseConsolidateIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - consolidate
              description: Must be "consolidate".
            receiveAddress:
              type: string
              description: >-
                Destination address for consolidated funds. Must be a
                wallet-owned address.
            senderAddressIndex:
              allOf:
                - $ref: '#/components/schemas/optionalNumber'
              description: Index of the wallet address to use as the sender.
            consolidateId:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: Opaque identifier used to correlate consolidation requests.
            recipients:
              type: array
              items:
                allOf:
                  - type: object
                    properties:
                      tokenData:
                        $ref: '#/components/schemas/TokenData'
                  - $ref: '#/components/schemas/RecipientEntry'
                description: Token recipients for token consolidation flows.
            keepAlive:
              allOf:
                - $ref: '#/components/schemas/optionalBoolean'
              description: >-
                When true, leaves a small amount in the source address to keep
                it alive.
          required:
            - intentType
            - receiveAddress
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    AccountBaseCreateAccountIntent:
      title: AccountBaseCreateAccountIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - createAccount
            name:
              $ref: '#/components/schemas/optionalString'
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    AccountBaseUpdateAccountIntent:
      title: AccountBaseUpdateAccountIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - updateAccount
            options:
              $ref: '#/components/schemas/optionalUnknownObject'
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    ActionType:
      title: ActionType
      type: string
      enum:
        - deny
        - getApproval
        - getEnterpriseUserApproval
        - getUserRoleApproval
        - getAnyApproval
        - getFinalApproval
        - getVideoApproval
        - getIdVerification
        - verifyWalletRebalance
        - getCustodianApproval
        - getCustodialSignature
        - triggerWebhookNotification
        - performLivenessVerification
        - recommendBackingWalletRouting
        - getManualTrustReview
        - getManualSupportReview
        - getSupportManagerApproval
        - getVideoApprovalFromSupport
    AdaConsolidateIntent:
      title: ADA Consolidate Intent
      allOf:
        - type: object
          properties:
            unspents:
              $ref: '#/components/schemas/optionalStringArray'
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
    AdaPaymentIntent:
      title: ADA Payment Intent
      allOf:
        - type: object
          properties:
            unspents:
              $ref: '#/components/schemas/optionalStringArray'
          required:
            - unspents
        - $ref: '#/components/schemas/PaymentIntent'
    AdaStakeClaimRewardsIntent:
      title: ADA Stake Claim Rewards Intent
      allOf:
        - $ref: '#/components/schemas/StakeClaimRewardsIntent'
    AdaStakeIntent:
      title: ADA Stake Intent
      allOf:
        - type: object
          properties:
            poolKeyHash:
              type: string
            dRepId:
              type: string
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
          required:
            - poolKeyHash
            - dRepId
        - $ref: '#/components/schemas/StakeIntent'
    AdaStakeIntent1:
      title: Ada Stake
      allOf:
        - $ref: '#/components/schemas/StakeIntent2'
        - type: object
          properties:
            poolKeyHash:
              type: string
              description: |
                The pool key hash to which the coins will be delegated to.
          required:
            - poolKeyHash
    AdaUnstakeIntent:
      title: ADA Unstake Intent
      allOf:
        - type: object
          properties:
            poolKeyHash:
              type: string
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
          required:
            - poolKeyHash
        - $ref: '#/components/schemas/UnstakeIntent'
    AdaVoteDelegationIntent:
      title: ADA Vote Delegation Intent
      allOf:
        - type: object
          properties:
            dRepId:
              type: string
          required:
            - dRepId
        - $ref: '#/components/schemas/VoteDelegationIntent'
    Address:
      title: Address
      type: object
      properties:
        address:
          $ref: '#/components/schemas/optionalString'
        option:
          $ref: '#/components/schemas/optionalUnknownObject'
    Address1:
      title: Address
      type: object
      properties:
        address:
          $ref: '#/components/schemas/optionalString'
        option:
          $ref: '#/components/schemas/optionalUnknownObject'
    Address2:
      type: object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: platform public id for an address
        address:
          $ref: '#/components/schemas/AddressString3'
        chain:
          $ref: '#/components/schemas/Chain'
        index:
          type: integer
        coin:
          type: string
        lastNonce:
          type: integer
          default: -1
        wallet:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: The wallet which contains this address
        coinSpecific:
          type: object
          description: Properties which are specific to certain coin types
          properties:
            xlm:
              $ref: '#/components/schemas/AddressCoinSpecificXlm'
            txlm:
              $ref: '#/components/schemas/AddressCoinSpecificXlm'
        balance:
          allOf:
            - type: object
            - $ref: '#/components/schemas/AddressBalance'
          description: >-
            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.
        label:
          $ref: '#/components/schemas/AddressLabel'
        addressType:
          $ref: '#/components/schemas/AddressType1'
    Address21:
      title: Address2
      type: object
      description: Address representation (`Address2` in platform.yaml).
      properties:
        id:
          type: string
          description: Platform public id for an address
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        address:
          $ref: '#/components/schemas/AddressString'
        chain:
          $ref: '#/components/schemas/AddressChain'
        index:
          type: number
        coin:
          $ref: '#/components/schemas/CoinString'
        lastNonce:
          type: number
          default: -1
        wallet:
          type: string
          description: The wallet which contains this address
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        coinSpecific:
          allOf:
            - $ref: '#/components/schemas/Address2CoinSpecific'
          description: Properties which are specific to certain coin types
        balance:
          $ref: '#/components/schemas/AddressBalance1'
        label:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/AddressLabelString'
          description: A human-readable label for the address.
        addressType:
          $ref: '#/components/schemas/AddressType3'
    Address2CoinSpecific:
      title: Address2CoinSpecific
      type: object
      properties:
        xlm:
          $ref: '#/components/schemas/AddressCoinSpecificXlm1'
        txlm:
          $ref: '#/components/schemas/AddressCoinSpecificXlm1'
    AddressBalance:
      type: object
      properties:
        updated:
          type: string
          description: The last time a transaction affected the balance of this address
          format: date-time
        balance:
          type: integer
          description: The cleared balance of the address
          example: 50000
        balanceString:
          type: string
          description: >-
            String representation of `balance`. Guaranteed to not lose
            precision.
          example: '50000'
        totalReceived:
          type: integer
          description: The total amount received on this address (in the chain's base unit)
        totalSent:
          type: integer
          description: The total amount send from this address (in the chain's base unit)
        confirmedBalanceString:
          type: string
          description: >
            The total balance of confirmed transactions for the address (in the
            chain's base unit).

            Guaranteed to not lose precision.
          example: '40000'
        spendableBalanceString:
          type: string
          description: >
            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.
          example: '40000'
    AddressBalance1:
      title: AddressBalance
      type: object
      description: Balance of an address (`AddressBalance` in platform.yaml).
      properties:
        updated:
          type: string
          description: The last time a transaction affected the balance of this address
        balance:
          type: number
          description: The cleared balance of the address
        balanceString:
          type: string
          description: >-
            String representation of `balance`. Guaranteed to not lose
            precision.
        totalReceived:
          type: number
          description: The total amount received on this address (in the chain's base unit)
        totalSent:
          type: number
          description: The total amount sent from this address (in the chain's base unit)
        confirmedBalanceString:
          type: string
          description: >-
            Confirmed balance in string representation. Guaranteed to not lose
            precision.
        spendableBalanceString:
          type: string
          description: >-
            Spendable balance in string representation. Guaranteed to not lose
            precision.
    AddressChain:
      title: AddressChain
      type: number
      enum:
        - 0
        - 1
        - 10
        - 11
        - 20
        - 21
        - 30
        - 31
        - 40
        - 41
    AddressCoinSpecificXlm:
      type: object
      properties:
        memoId:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
            - example: '1'
          description: Latest memo id generated for the wallet
        rootAddress:
          type: string
          description: Root address of the wallet
          example: GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM
    AddressCoinSpecificXlm1:
      title: AddressCoinSpecificXlm
      type: object
      description: >-
        Properties specific to XLM and TXLM addresses (`AddressCoinSpecificXlm`
        in platform.yaml).
      properties:
        memoId:
          type: string
          description: Latest memo id generated for the wallet
          example: '1'
        rootAddress:
          type: string
          description: Root address of the wallet
          example: GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM
    AddressLabel:
      type: string
      nullable: true
      example: Bob's Hot Wallet Address
      maxLength: 250
      description: A human-readable label for the address.
    AddressLabelString:
      title: AddressLabelString
      type: string
      description: A human-readable label for the address
      example: Bob's Hot Wallet Address
      maxLength: 250
    AddressListRuleUpdateCondition:
      title: AddressListRuleUpdateCondition
      type: object
      properties:
        add:
          type: string
        remove:
          type: string
        metaData:
          type: object
          additionalProperties:
            type: object
            additionalProperties: {}
    AddressString:
      title: AddressString
      type: string
      example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS
      maxLength: 250
    AddressString3:
      title: Address
      type: string
      example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS
      maxLength: 500
    AddressType1:
      type: string
      example: p2sh
      enum:
        - p2sh
        - p2shP2wsh
        - p2wsh
        - p2tr
        - p2trMusig2
    AddressType3:
      title: AddressType
      type: string
      enum:
        - p2sh
        - p2shP2wsh
        - p2wsh
        - p2tr
        - p2trMusig2
      example: p2sh */
    AdvancedListRuleEntry:
      title: AdvancedListRuleEntry
      type: object
      properties:
        item:
          type: string
          description: >-
            Either a valid address or a wallet, enterprise, or organization id.
            Must be unique in this whitelist.
        metaData:
          type: object
          additionalProperties: {}
          description: >-
            Any data about this entry that is not used to determine when to
            enforce the policy
        type:
          allOf:
            - $ref: '#/components/schemas/AdvancedListType'
          description: the kind of resource a list rule entry refers to
        verificationState:
          type: string
          enum:
            - unverified
            - verified
        verifiedBy:
          type: string
          enum:
            - unverifiedRule
            - fastWithdrawal
            - caasWaiverThreshold
          description: >-
            the source that verified this entry (unverifiedRule or
            fastWithdrawal)
        verifiedAt:
          type: string
          description: timestamp when this entry was first verified
          format: date-time
          title: ISO Date String
      required:
        - item
        - type
    AdvancedListRuleEntry1:
      title: Advanced whitelist rule entry
      type: object
      properties:
        item:
          allOf:
            - oneOf:
                - $ref: '#/components/schemas/AddressString3'
                - $ref: '#/components/schemas/Id'
          description: >-
            A valid blockchain address, wallet ID, enterprise ID, or
            organization ID. Must be unique in this whitelist.
        metaData:
          type: object
          description: >-
            Any data about this entry that is not used to determine when to
            enforce the policy
          properties:
            label:
              type: string
              description: >-
                A client-specified label for this entry. Label must be unique or
                not set.
            owner:
              type: string
              description: >-
                The legal owner of the address, wallet, enterprise, or
                organization.
              example: Legal Owner LLC
            address:
              type: string
              description: >-
                The address of the receiver wallet if the whitelist is of type
                'walletId'.
          additionalProperties: true
        type:
          $ref: '#/components/schemas/ListRuleEntryType'
        verificationState:
          type: string
          enum:
            - unverified
            - verified
          description: A state denoting whether entries have already been verified.
        verifiedBy:
          type: string
          enum:
            - unverifiedRule
            - fastWithdrawal
          description: >-
            The source that verified this entry (unverifiedRule or
            fastWithdrawal)
      required:
        - item
        - type
    AdvancedListRuleUpdateCondition:
      title: AdvancedListRuleUpdateCondition
      type: object
      properties:
        add:
          $ref: '#/components/schemas/AdvancedListRuleEntry'
        remove:
          type: object
          properties:
            item:
              type: string
            type:
              type: string
              enum:
                - address
                - enterpriseId
                - walletId
                - organizationId
          required:
            - item
        verifyItems:
          type: object
          properties:
            items:
              type: array
              items:
                type: string
          required:
            - items
    AdvancedListType:
      title: AdvancedListType
      type: string
      enum:
        - address
        - enterpriseId
        - walletId
        - organizationId
    Amount:
      title: Amount
      type: object
      properties:
        value:
          type: string
        symbol:
          type: string
      required:
        - value
        - symbol
    Amount1:
      title: Amount
      type: object
      properties:
        value:
          type: string
        symbol:
          type: string
      required:
        - value
        - symbol
    Amount2:
      type: object
      properties:
        value:
          type: string
          description: The value should be a valid number.
          example: '100'
        symbol:
          type: string
          description: The coin or token the value is referring to.
          example: usdc
      required:
        - value
        - symbol
    AnchorType:
      title: AnchorType
      type: string
      enum:
        - policyRuleId
        - settlementId
        - crossChainRecoveryId
    PlatformError:
      title: Api Error
      allOf:
        - type: object
          properties:
            name:
              type: string
              description: Error code
            context:
              type: object
              additionalProperties: {}
              description: Properties that apply to a specific error name
          required:
            - context
        - $ref: '#/components/schemas/PlatformErrorNoName'
    PlatformError3:
      title: API error
      allOf:
        - $ref: '#/components/schemas/PlatformErrorNoName3'
        - properties:
            context:
              type: object
              description: Properties that apply to a specific error name
            name:
              type: string
              description: Error code
          required:
            - name
    PlatformErrorNoName:
      title: PlatformErrorNoName
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
        requestId:
          type: string
          description: Client request id
      required:
        - error
        - requestId
    PlatformErrorNoName3:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
        requestId:
          type: string
          description: Client request id
      required:
        - error
        - requestId
    ApiRuleType:
      title: ApiRuleType
      type: string
      enum:
        - advancedWhitelist
        - coinAddressWhitelist
        - coinAddressBlacklist
    ApprovalsRequired:
      type: integer
      minimum: 1
      example: 1
    AptBuildOptions:
      title: AptBuildOptions
      allOf:
        - type: object
          properties:
            maxGasAmount:
              type: number
            gasUnitPrice:
              type: number
            expirationTime:
              type: number
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    AptCustomTxIntent:
      title: APT Custom Transaction Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - customTx
            aptosCustomTransactionParams:
              type: object
              properties:
                moduleName:
                  type: string
                functionName:
                  type: string
                typeArguments:
                  type: array
                  items:
                    type: string
                functionArguments:
                  type: array
                  items: {}
                abi:
                  $ref: '#/components/schemas/EntryFunctionABI'
              required:
                - moduleName
                - functionName
          required:
            - intentType
            - aptosCustomTransactionParams
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/AptBuildOptions'
    AtomPaymentIntent:
      title: Atom Payment Intent
      allOf:
        - type: object
          properties:
            memo:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                Optional memo string attached to the transaction, used for
                routing or identification by exchanges.
          required:
            - memo
        - $ref: '#/components/schemas/PaymentIntent'
      description: |-
        Transfer tokens from a Cosmos-family wallet to one or more recipient
        addresses. Supported on all Cosmos-family chains. An optional memo may
        be included for exchange routing or identification.
    AtomStakeIntent:
      title: Atom Stake Intent
      allOf:
        - type: object
          properties:
            validatorAddress:
              type: string
              description: >-
                Bech32 validator address to delegate tokens to (e.g.
                cosmosvaloper1...).
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
                description: >-
                  Optional list of validator–amount pairs for multi-validator
                  delegation. When provided, overrides validatorAddress and
                  amount.
          required:
            - validatorAddress
        - $ref: '#/components/schemas/StakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Delegate (stake) tokens to one or more validators on ATOM. Use
        `validatorAddress` and `amount` for a single validator, or `recipients`
        for multi-validator delegation.
    AtomUnstakeIntent:
      title: Atom Unstake Intent
      allOf:
        - type: object
          properties:
            validatorAddress:
              type: string
              description: >-
                Bech32 validator address to undelegate tokens from (e.g.
                cosmosvaloper1...).
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
                description: >-
                  Optional list of validator–amount pairs for multi-validator
                  undelegation. When provided, overrides validatorAddress and
                  amount.
          required:
            - validatorAddress
        - $ref: '#/components/schemas/UnstakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Undelegate (unstake) tokens from one or more validators on ATOM. Tokens
        enter the unbonding period. Use `validatorAddress` and `amount` for
        single validator or `recipients` for multi-validator.
    BabyCreateBtcDelegationIntent:
      title: Baby CreateBtcDelegation Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - createBtcDelegation
              description: >-
                Register a BTC delegation on the Babylon chain for Baby BTC
                staking.
            createBtcDelegationBytes:
              type: string
          required:
            - intentType
            - createBtcDelegationBytes
        - $ref: '#/components/schemas/BaseStakeIntent'
    BabyWithdrawRewardIntent:
      title: Baby WithdrawReward Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stakeClaimRewards
            type:
              type: string
          required:
            - intentType
            - type
        - $ref: '#/components/schemas/BaseStakeIntent'
    BaseBridgeFundsIntent:
      title: Bridge Funds Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - bridgeFunds
              description: Must be "bridgeFunds".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: Base codec for bridge-funds intents across chains or protocols.
    BaseGoStakeIntent:
      title: BaseGoStakeIntent
      allOf:
        - type: object
          properties:
            goStakingRequestId:
              type: string
              description: Internal coordination identifier for the GO staking request.
          required:
            - goStakingRequestId
        - $ref: '#/components/schemas/BaseIntent'
      description: |-
        Base interface for GO wallet staking intents that require a GO staking
        request identifier (e.g. admin/internal go-unstake flows such as Sui).
    BaseIntent:
      title: Intent
      type: object
      properties:
        intentType:
          $ref: '#/components/schemas/IntentType'
        sequenceId:
          allOf:
            - $ref: '#/components/schemas/optionalString'
          description: Client-assigned sequence identifier for idempotency.
        comment:
          allOf:
            - $ref: '#/components/schemas/optionalString'
          description: Human-readable memo attached to the transaction.
        nonce:
          oneOf:
            - type: string
            - type: number
          description: Override the on-chain nonce for this transaction.
      required:
        - intentType
    BaseIntent1:
      title: Intent
      type: object
      properties:
        intentType:
          $ref: '#/components/schemas/IntentType1'
        sequenceId:
          $ref: '#/components/schemas/optionalString'
        comment:
          $ref: '#/components/schemas/optionalString'
        nonce:
          oneOf:
            - type: string
            - type: number
      required:
        - intentType
    BaseIntent2:
      type: object
      properties:
        intentType:
          type: string
        sequenceId:
          type: string
          description: >
            A `sequenceId` is a unique and arbitrary wallet identifier applied
            to transfers and transactions at creation. It is optional but highly
            recommended. With a `sequenceId` you can easily reference transfers
            and transactions&mdash;for example, to safely retry sending. Because
            BitGo only confirms one send request per `sequenceId` (and fails all
            subsequent attempts), you can retry sending without the risk of
            double spending. The `sequenceId` is only visible to users on the
            wallet and is not shared publicly. It is the responsibility of the
            caller to keep track of this ID.
          example: abc123
        comment:
          type: string
          description: >-
            The `comment` is only visible to users on the wallet and is not
            shared publicly.
        nonce:
          type: string
          description: The 'nonce' of a transaction (optional)
        memo:
          type: string
          description: >
            A `memo` is an additional address feature necessary for identifying
            a transaction recipient beyond wallet address.
      required:
        - intentType
    BaseIntentWithAmount:
      title: BaseIntentWithAmount
      type: object
      description: >-
        Schema fragment for intents with direct amount field


        This fragment defines an amount field directly on the intent object

        (not nested in recipients). Common in staking, claiming, and delegation
        intents.


        Used by:

        - StakeIntent variants (AtomStakeIntent, SolStakeIntent, etc.)

        - UnstakeIntent variants (AtomUnstakeIntent, etc.)

        - DelegateIntent variants (BscDelegateIntent, TonDelegateIntent, etc.)

        - ClaimRewardsIntent variants (AdaStakeClaimRewardsIntent, etc.)

        - WithdrawIntent variants (AtomWithdrawIntent, CosmosWithdrawIntent,
        etc.)


        Asset extraction: Extracts symbol from the amount field
      properties:
        amount:
          allOf:
            - $ref: '#/components/schemas/Amount'
          description: >-
            Transaction amount. amount.symbol identifies the asset (e.g.
            "hypeevm:eth"); amount.value is the quantity in base units.
      required:
        - amount
    BaseIntentWithRecipients:
      title: BaseIntentWithRecipients
      type: object
      description: >-
        ============================================================================

        REUSABLE SCHEMA FRAGMENTS FOR ASSET-CONTAINING INTENTS

        ============================================================================


        These schemas define reusable building blocks that concrete intent
        schemas

        can compose with. They serve multiple purposes:


        1. **Schema Reuse**: Concrete intents can intersect with these fragments

        2. **Pattern Matching**: getAssetsFromIntent utility matches against
        these

        3. **Type Safety**: Ensures consistency across all asset-containing
        intents

        4. **Documentation**: Clearly shows which intents handle which asset
        types


        By using the actual RecipientEntry and TokenRecipientEntry types, we
        ensure

        these patterns exactly match the structures used in concrete intents.
      properties:
        recipients:
          type: array
          items:
            type: object
            properties:
              address:
                $ref: '#/components/schemas/Address'
              amount:
                $ref: '#/components/schemas/Amount'
              data:
                $ref: '#/components/schemas/optionalString'
            required:
              - address
              - amount
            description: Array of recipient addresses and amounts.
      required:
        - recipients
    BaseIntentWithTokenName:
      title: BaseIntentWithTokenName
      type: object
      description: |-
        Schema fragment for intents with direct tokenName field

        This fragment defines a tokenName field directly on the intent object
        (not nested in recipients).

        Used by:
        - TokenApprovalIntent

        Asset extraction: Extracts tokenName
      properties:
        tokenName:
          type: string
          description: Name of the ERC-20 token to approve (e.g. "usdc", "weth").
      required:
        - tokenName
    BaseIntentWithTokenRecipients:
      title: BaseIntentWithTokenRecipients
      type: object
      description: >-
        Schema fragment for intents with token recipients


        This fragment defines a recipients array using TokenRecipientEntry,
        which

        extends RecipientEntry with optional tokenData containing token-specific
        info.


        Used by:

        - TransferTokenIntent (and variants: EthTransferTokenIntent, etc.)

        - ConsolidateTokenIntent (and variants: EthConsolidateTokenIntent, etc.)


        Asset extraction: Extracts tokenName only (the actual asset identifier)

        Note: tokenType, tokenContractAddress, tokenId are technical fields, not
        assets

        Note: This also matches BaseIntentWithRecipients since
        TokenRecipientEntry extends RecipientEntry
      properties:
        recipients:
          type: array
          items:
            allOf:
              - type: object
                properties:
                  tokenData:
                    $ref: '#/components/schemas/TokenData'
              - $ref: '#/components/schemas/RecipientEntry'
            description: >-
              Recipients of the token transfer. Each entry must include
              tokenData with tokenName and tokenContractAddress.
      required:
        - recipients
    BaseIntentWithoutNonce:
      title: BaseIntentWithoutNonce
      type: object
      properties:
        intentType:
          $ref: '#/components/schemas/IntentType'
        sequenceId:
          allOf:
            - $ref: '#/components/schemas/optionalString'
          description: Client-assigned sequence identifier for idempotency.
        comment:
          allOf:
            - $ref: '#/components/schemas/optionalString'
          description: Human-readable memo attached to the transaction.
      required:
        - intentType
    BaseIntentWithoutNonce1:
      title: BaseIntentWithoutNonce
      type: object
      properties:
        intentType:
          $ref: '#/components/schemas/IntentType1'
        sequenceId:
          $ref: '#/components/schemas/optionalString'
        comment:
          $ref: '#/components/schemas/optionalString'
      required:
        - intentType
    BaseShare:
      title: BaseShare
      type: object
      properties:
        from:
          allOf:
            - $ref: '#/components/schemas/SignatureShareType'
          description: The source of the commitment share
          example: user
        to:
          allOf:
            - $ref: '#/components/schemas/SignatureShareType'
          description: The recipient of the commitment share.
          example: bitgo
        share:
          type: string
          description: The commitment share.
      required:
        - from
        - to
        - share
    BaseStakeIntent:
      title: BaseStakeIntent
      allOf:
        - type: object
          properties:
            stakingRequestId:
              type: string
              description: >-
                ID of the staking request, obtained from the BitGo staking
                service.
            source:
              allOf:
                - $ref: '#/components/schemas/StakingRequestSource'
              description: >-
                Origin of the staking request: MANUAL (user-initiated),
                AUTO_STAKE, or EXTERNAL.
          required:
            - stakingRequestId
        - $ref: '#/components/schemas/BaseIntent'
    BaseStakeIntent1:
      title: BaseStakeIntent
      allOf:
        - type: object
          properties:
            stakingRequestId:
              type: string
          required:
            - stakingRequestId
        - $ref: '#/components/schemas/BaseIntent1'
    BaseStakeIntent2:
      allOf:
        - $ref: '#/components/schemas/BaseIntent2'
        - type: object
          properties:
            stakingRequestId:
              type: string
          required:
            - stakingRequestId
    BaseStakeIntentWithCalldata:
      title: Base Stake Intent with Calldata
      allOf:
        - type: object
          properties:
            calldata:
              type: string
              description: >-
                Pre-computed ABI-encoded calldata for the staking contract
                interaction, provided by the BitGo staking service.
          required:
            - calldata
        - $ref: '#/components/schemas/BaseStakeIntent'
    BeraDelegateIntent:
      title: Bera Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
    Bitcoin:
      type: string
      enum:
        - btc
        - tbtc4
      description: This route is only available for Bitcoin.
    BitgoExpressError:
      title: BitgoExpressError
      type: object
      properties:
        message:
          type: string
        name:
          type: string
        bitgoJsVersion:
          type: string
        bitgoExpressVersion:
          type: string
      required:
        - message
        - name
        - bitgoJsVersion
        - bitgoExpressVersion
    BitgoKeychainType:
      title: BitgoKeychainType
      type: object
      properties:
        id:
          type: string
          description: Keychain ID
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        source:
          type: string
          description: Party that created the key
          example: bitgo
        type:
          type: string
          description: Keychain type (e.g. "independent" for onchain, "tss" for MPC)
        isBitGo:
          type: boolean
          description: Flag for identifying keychain as created by BitGo
          example: true
        isTrust:
          type: boolean
          description: Flag for identifying keychain as trust keychain
          example: false
        hsmType:
          type: string
          description: HSM type used for the BitGo key
          example: institutional
        pub:
          type: string
          description: Public part of a key pair (onchain wallets)
        ethAddress:
          type: string
          description: Ethereum address corresponding to this keychain (onchain wallets)
        commonKeychain:
          type: string
          description: Common keychain string (TSS wallets)
        verifiedVssProof:
          oneOf:
            - type: boolean
            - type: string
          description: Whether VSS proof was verified (TSS wallets)
        keyShares:
          type: array
          items:
            type: object
            additionalProperties: {}
            description: TSS key share metadata (TSS wallets)
        walletHSMGPGPublicKeySigs:
          type: string
          description: Wallet HSM GPG public key signatures (TSS wallets)
      required:
        - id
        - source
        - type
        - isBitGo
        - isTrust
        - hsmType
    BscDelegateIntent:
      title: BSC Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            validatorAddress:
              type: string
            relayerFee:
              type: string
            delegateVotePower:
              type: string
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    BscUnDelegateIntent:
      title: BSC UnDelegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            validatorAddress:
              type: string
            relayerFee:
              type: string
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    BscWithdrawUndelegateIntent:
      title: BSC Withdraw Intent
      allOf:
        - type: object
          properties:
            validatorAddress:
              type: string
            requestNumber:
              type: number
          required:
            - validatorAddress
            - requestNumber
        - $ref: '#/components/schemas/WithdrawIntent'
    BuildParams:
      type: object
      properties:
        type:
          type: string
          description: >
            Required for transactions from MPC wallets. "acceleration" speeds up
            transactions with a certain nonce by adjusting the gas setting.
            "accountSet" is for XRP AccountSet transactions. "consolidate"
            combines multiple UTXO inputs into fewer outputs. "enabletoken" is
            for SOL. "fanout" splits UTXO inputs into many smaller outputs (UTXO
            coins only). "stakingLock" and "stakingUnlock" are for Stacks
            delegations. "transfer" is for native-asset transfers. "trustline"
            is for Stellar trustline transactions. Possible types include:
            [acceleration, accountSet, consolidate, enabletoken, fanout,
            stakingLock, stakingUnlock, transfer, transfertoken, trustline]


            For AVAX, possible types include: `addValidator`, `export`, and
            `import`.


            For XRP, possible types include: `payment` and `accountSet`. The
            default is `payment`.


            For STX, type is required.
        messages:
          description: >-
            [UTXO only] An array of messages that you sign with the wallet keys
            using the BIP322 format. If passed, the `recipients` array must be
            empty.
          type: array
          items:
            type: object
            properties:
              address:
                type: string
                description: >-
                  The address for which you're proving ownership. This address
                  must belong to the wallet.
              message:
                type: string
                description: Message that is being signed.
                example: BIP322 test message.
        numBlocks:
          type: integer
          description: >
            (BTC only) The number of blocks required to confirm a transaction.
            You can use `numBlocks` to estimate the fee rate by targeting
            confirmation within a given number of blocks. If both `feeRate` and
            `numBlocks` are absent, the transaction defaults to 2 blocks for
            confirmation.


            Note: The `maxFeeRate` limits the fee rate generated by `numBlocks`.
          minimum: 2
          maximum: 1000
        feeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrString'
            - example: 10000
          description: >
            Custom fee rate (in base units) per kilobyte (or virtual kilobyte).
            For example, satoshis per kvByte.


            If the `feeRate` is less than the minimum required network fee, then
            the minimum fee applies. For example, 1000 sat/kvByte, a flat 1000
            microAlgos, or a flat 10 drops of xrp. For XRP, the actual fee is
            usually 4.5 times the open ledger fee.


            Note: The `feeRate` overrides the `maxFeeRate` and `minFeeRate`.
        maxFeeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
            - example: 20000
          description: >
            (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 `feeRate` overrides the `maxFeeRate`.
        feeMultiplier:
          allOf:
            - $ref: '#/components/schemas/NumberOrString'
            - example: 1.5
          description: >
            (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`.
        minConfirms:
          type: integer
          description: >
            The unspent selection for the transaction will only consider
            unspents with at least this many confirmations to be used as inputs.
            Does not apply to change outputs unless used in combination with
            `enforceMinConfirmsForChange`.
        enforceMinConfirmsForChange:
          type: boolean
          description: >-
            When set to true, will enforce minConfirms for change outputs.
            Defaults to false.
          default: false
        gasPrice:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Custom gas price to be used for sending the transaction. Only for
            ETH and ERC20 tokens.
        eip1559:
          properties:
            maxPriorityFeePerGas:
              allOf:
                - $ref: '#/components/schemas/IntegerOrIntegerString'
                - maximum: 100000000000
              description: >-
                Max priority tip price for EIP1559 transactions. Only for ETH
                and ERC20 tokens.
            maxFeePerGas:
              allOf:
                - $ref: '#/components/schemas/IntegerOrIntegerString'
              description: >-
                Max total gasPrice for EIP1559 transactions. Only for ETH and
                ERC20 tokens.
        gasLimit:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Custom gas limit to be used for sending the transaction. Only for
            ETH and ERC20 tokens.
        targetWalletUnspents:
          type: integer
          description: >
            Specifies the minimum count of good-sized unspents to maintain in
            the wallet. Change splitting ceases when the

            wallet has `targetWalletUnspents` good-sized unspents.


            **Note**: Wallets that continuously send a high count of
            transactions will automatically split large change amounts

            into multiple good-sized change outputs while they have fewer than
            `targetWalletUnspents` good-sized unspents in

            their unspent pool. Breaking up large unspents helps to reduce the
            amount of unconfirmed funds in flight in future

            transactions, and helps to avoid long chains of unconfirmed
            transactions. This is especially useful for newly

            funded wallets or recently refilled send-only wallets.
          default: 1000
        minValue:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Ignore unspents smaller than this amount of base units (e.g.
            satoshis). For doge, only string is allowed.
        maxValue:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Ignore unspents larger than this amount of base units (e.g.
            satoshis). For doge, only string is allowed.
        sequenceId:
          type: string
          description: >
            A `sequenceId` is a unique and arbitrary wallet identifier applied
            to transfers and transactions at creation. It is optional but highly
            recommended. With a `sequenceId` you can easily reference transfers
            and transactions&mdash;for example, to safely retry sending. Because
            the system only confirms one send request per `sequenceId` (and
            fails all subsequent attempts), you can retry sending without the
            risk of double spending. The `sequenceId` is only visible to users
            on the wallet and is not shared publicly.
        nonce:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
          description: >
            (DOT only) A nonce ID is a number used to protect private
            communications by preventing replay attacks.

            This is an advanced option where users can manually input a new
            nonce value

            in order to correct or fill in a missing nonce ID value.
        noSplitChange:
          type: boolean
          description: |
            Set `true` to disable automatic change splitting.

            Also see: `targetWalletUnspents`
          default: false
        unspents:
          type: array
          items:
            example: 12b147dd8b4f73c01f72bdbf5b589eea614f3de609ffdbdac84852d6505cf8a3:1
            type: string
          description: >
            Used to explicitly specify the unspents to be used in the input set
            in the transaction. Each unspent should be in the form
            `prevTxId:nOutput`.
        changeAddress:
          allOf:
            - $ref: '#/components/schemas/AddressString3'
          description: >-
            Specifies a custom destination address for the transaction's change
            output(s)
        txFormat:
          $ref: '#/components/schemas/UtxoTransactionFormat'
        instant:
          type: boolean
          description: >-
            (DASH only) Specifies whether or not to use Dash's "InstantSend"
            feature when sending a transaction.
        memo:
          type: object
          properties:
            type:
              type: string
            value:
              type: string
          description: >
            Extra transaction information for CSPR, EOS, HBAR, RUNE, STX, TON,
            XLM, and XRP. Required for XLM transactions.


            Note: For XRP this is the destination tag (DT), for CSPR this is the
            transfer ID and for ALGO this is the message field.
        comment:
          type: string
          description: >
            Optional metadata (only persisted in BitGo) to be applied to the
            transaction. Use this to add transaction-specific information such
            as the transaction's purpose or another identifier that you want to
            reference later. The value is shown in the UI in the transfer
            listing page.
          maxLength: 256
        destinationChain:
          type: string
          description: >-
            (AVAXC and AVAXP only) Destination chain for an AVAX import/export
            transaction. One of [P, C].
        sourceChain:
          type: string
          description: >-
            (AVAXC and AVAXP only) Source chain for an AVAX import/export
            transaction. One of [P, C].
        addressType:
          type: string
          deprecated: true
          description: >-
            DEPRECATED - use `changeAddressType`.

            The type of address to create for change. One of `p2sh`,
            `p2shP2wsh`, `p2wsh`, or `p2tr`.
        changeAddressType:
          anyOf:
            - $ref: '#/components/schemas/AddressType1'
            - $ref: '#/components/schemas/ChangeAddressTypes'
          description: >-
            The address type for the change address. One of `p2sh`, `p2shP2wsh`,
            `p2wsh`, `p2tr` or `p2trMusig2`.
        startTime:
          type: string
          description: >-
            Unix timestamp in seconds.nanoseconds format, denoting the start of
            the validity window. Only for HBAR transactions.
          example: 1714067129.1020603
        consolidateId:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: >-
            (ALGO/TEZOS only) Consolidation ID of this consolidation
            transaction.
        lastLedgerSequence:
          type: integer
          description: >-
            (XRP only) Absolute max ledger the transaction should be accepted
            in, whereafter it will be rejected
        ledgerSequenceDelta:
          type: integer
          description: >-
            (XRP only) Relative ledger height (in relation to the current
            ledger) that the transaction should be accepted in, whereafter it
            will be rejected
        rbfTxIds:
          type: array
          items:
            type: string
          description: >-
            The list of transactions to accelerate using Replace-By-Fee (RBF)
            for UTXO coins (currently accelerating only one tx is supported).
        isReplaceableByFee:
          type: boolean
          description: >-
            It is used to mark an UTXO transaction eligible for Replace-By-Fee
            (RBF) later.
        validFromBlock:
          type: integer
          description: Optional block this transaction is valid from
        validToBlock:
          type: integer
          description: Optional block this transaction is valid until
        trustlines:
          type: array
          items:
            $ref: '#/components/schemas/Trustline'
          description: List of trustlines to manage on the account. Available for Stellar.
        stakingOptions:
          anyOf:
            - $ref: '#/components/schemas/CSPRStakingOptions'
            - $ref: '#/components/schemas/STXStakingOptions'
          description: Required object for staking. Only for CSPR and STX.
        messageKey:
          type: string
          description: >-
            Optional parameter that takes a hexadecimal value to set
            `messagekey` for an XRP `accountSet` transaction. Recipients field
            should be empty when `messageKey` is set.
        reservation:
          type: object
          properties:
            expireTime:
              type: string
              format: date-time
              description: Required. The time that the unspent reservations should expire.
          description: >-
            Optional parameter for UTXO coins to automatically reserve the
            unspents that are used in the build. Useful for Cold wallets. If
            using, must set expireTime.
    CSPRStakingOptions:
      title: CSPR
      type: object
      properties:
        amount:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Required for CSPR. String representation of the amount to stake or
            unstake in base units (motes).
        validator:
          allOf:
            - $ref: '#/components/schemas/AddressString3'
          description: >-
            Required for CSPR. The validator address used to delegate or
            undelegate.
    CaasOrganizationInviteInviterInfo:
      title: CaasOrganizationInviteInviterInfo
      type: object
      description: >-
        Inviter snapshot on CaaS org add-invite `inviterInfo` and enterprise
        invite `invitedBy`. Not used for UMS `genericRequest`.
      properties:
        id:
          type: string
        email:
          type: string
        fullName:
          type: string
      required:
        - id
        - email
        - fullName
    CantonAllocationAllocateIntent:
      title: Canton Allocation Allocate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - allocationAllocate
            txRequestId:
              type: string
          required:
            - intentType
            - txRequestId
        - $ref: '#/components/schemas/BaseIntent'
    CantonAllocationOfferWithdrawnIntent:
      title: Canton Allocation Offer Withdrawn Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - allocationOfferWithdrawn
            transferOfferId:
              type: string
            token:
              type: string
          required:
            - intentType
            - transferOfferId
        - $ref: '#/components/schemas/BaseIntent'
    CantonAllocationRejectIntent:
      title: Canton Allocation Reject Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - allocationReject
            txRequestId:
              type: string
          required:
            - intentType
            - txRequestId
        - $ref: '#/components/schemas/BaseIntent'
    CantonAllocationRequestIntent:
      title: Canton Allocation Request Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - allocationRequest
            updateId:
              type: string
            operatorId:
              type: string
            contractId:
              nullable: true
              type: string
            tradeId:
              type: string
            transferLegId:
              type: string
            senderPartyId:
              type: string
            receiverPartyId:
              type: string
            amount:
              type: string
            token:
              type: string
            receiveToken:
              type: string
            receiveAmount:
              type: string
            allocateBefore:
              type: string
            settleBefore:
              type: string
            comment:
              type: string
            requestedAt:
              type: string
          required:
            - intentType
            - updateId
            - operatorId
            - contractId
            - tradeId
            - transferLegId
            - senderPartyId
            - receiverPartyId
            - amount
            - token
            - receiveToken
            - receiveAmount
            - allocateBefore
            - settleBefore
        - $ref: '#/components/schemas/BaseIntent'
    CantonCommand:
      title: CantonCommand
      oneOf:
        - $ref: '#/components/schemas/CreateCommand'
        - $ref: '#/components/schemas/ExerciseCommand'
    CantonCommandIntent:
      title: CantonCommandIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - cantonCommand
            cantonCommandParams:
              $ref: '#/components/schemas/CantonCommandParams'
            token:
              type: string
              description: >-
                Optional registered coin/token identifier for the command target
                (e.g. "tcanton:stgusd1").

                This is not an auth/session token.
          required:
            - intentType
            - cantonCommandParams
        - $ref: '#/components/schemas/BaseIntent'
    CantonCommandParams:
      title: CantonCommandParams
      type: object
      properties:
        command:
          $ref: '#/components/schemas/CantonCommand'
        actAs:
          type: array
          items:
            type: string
        readAs:
          type: array
          items:
            type: string
        resolveContracts:
          type: array
          items:
            type: object
            properties:
              templateId:
                type: string
              actAs:
                type: array
                items:
                  type: string
              injectAs:
                type: string
              readAs:
                type: array
                items:
                  type: string
              resolveAll:
                type: boolean
            required:
              - templateId
              - actAs
              - injectAs
      required:
        - command
        - actAs
    CantonCosignDelegationAcceptIntent:
      title: Canton Cosign Delegation Accept Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - cosignDelegationAccept
            txRequestId:
              type: string
          required:
            - intentType
            - txRequestId
        - $ref: '#/components/schemas/BaseIntent'
    CantonCosignDelegationProposalIntent:
      title: Canton Cosign Delegation Proposal Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - cosignDelegationProposal
            contractId:
              type: string
            operatorId:
              type: string
            updateId:
              type: string
            packageName:
              type: string
          required:
            - intentType
            - contractId
            - operatorId
            - updateId
        - $ref: '#/components/schemas/BaseIntent'
    CantonEndInvestorOnboardingAcceptIntent:
      title: Canton End Investor Onboarding Accept Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - cantonEndInvestorOnboardingAccept
            txRequestId:
              type: string
          required:
            - intentType
            - txRequestId
        - $ref: '#/components/schemas/BaseIntent'
    CantonEndInvestorOnboardingOfferIntent:
      title: Canton End Investor Onboarding Offer Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - cantonEndInvestorOnboardingOffer
            endInvestorPartyId:
              type: string
            comment:
              type: string
          required:
            - intentType
            - endInvestorPartyId
        - $ref: '#/components/schemas/BaseIntent'
    CantonEndInvestorOnboardingRejectIntent:
      title: Canton End Investor Onboarding Reject Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - cantonEndInvestorOnboardingReject
            txRequestId:
              type: string
            reason:
              type: string
          required:
            - intentType
            - txRequestId
            - reason
        - $ref: '#/components/schemas/BaseIntent'
    CantonParticipantOnboardingRequestIntent:
      title: Canton Participant Onboarding Request Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - cantonParticipantOnboardingRequest
            operator:
              type: string
            provider:
              type: string
            compliance:
              type: string
            registrar:
              type: string
            clientOnboarder:
              type: string
            expirationIso:
              type: string
            comment:
              type: string
          required:
            - intentType
            - operator
            - provider
            - compliance
            - registrar
            - clientOnboarder
        - $ref: '#/components/schemas/BaseIntent'
    CantonPaymentIntent:
      title: CANTON Payment Intent
      allOf:
        - type: object
          properties:
            memo:
              $ref: '#/components/schemas/optionalString'
            isConsolidate:
              type: boolean
            numberOfSplits:
              type: number
            unspents:
              $ref: '#/components/schemas/optionalStringArray'
          required:
            - unspents
        - $ref: '#/components/schemas/PaymentIntent'
    CantonTransferAcceptIntent:
      title: Canton Transfer Accept Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - transferAccept
            txRequestId:
              type: string
            token:
              type: string
            expiry:
              type: number
          required:
            - intentType
            - txRequestId
        - $ref: '#/components/schemas/BaseIntent'
    CantonTransferAcknowledgeIntent:
      title: Canton Transfer Acknowledge Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - transferAcknowledge
            contractId:
              type: string
            senderPartyId:
              type: string
            updateId:
              type: string
            amount:
              type: string
              format: number
            expiry:
              type: number
            memoId:
              type: string
            token:
              type: string
          required:
            - intentType
            - contractId
            - senderPartyId
            - updateId
            - amount
            - expiry
        - $ref: '#/components/schemas/BaseIntent'
    CantonTransferOfferWithdrawnIntent:
      title: Canton Transfer Offer Withdrawn Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - transferOfferWithdrawn
            transferOfferId:
              type: string
            token:
              type: string
          required:
            - intentType
            - transferOfferId
        - $ref: '#/components/schemas/BaseIntent'
    CantonTransferRejectIntent:
      title: Canton Transfer Reject Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - transferReject
            txRequestId:
              type: string
            token:
              type: string
            expiry:
              type: number
          required:
            - intentType
            - txRequestId
        - $ref: '#/components/schemas/BaseIntent'
    Chain:
      type: integer
      example: 1
      enum:
        - 0
        - 1
        - 10
        - 11
        - 20
        - 21
        - 30
        - 31
        - 40
        - 41
    ChangeAddressTypes:
      type: array
      items:
        $ref: '#/components/schemas/AddressType1'
      description: >-
        The address types for the change address. Order by preference and BitGo
        uses the first available. Any subset of `p2sh`, `p2shP2wsh`, `p2wsh`,
        `p2tr` or `p2trMusig2`.
    ChangeType:
      title: ChangeType
      type: string
      enum:
        - create
        - update
        - delete
        - unlock
        - bulkUnlock
        - bulkArchive
        - duplicate
    ClaimIntent:
      title: Claim Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - claim
              description: Must be "claim".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
      description: |-
        Claim unstaked or unbonded funds from an EVM validator after the
        undelegation cooldown period. Requires a staking request ID from the
        BitGo staking service.
    Coin:
      title: Coin
      description: A cryptocurrency or token ticker symbol.
      type: string
      example: btc
    CoinString:
      title: CoinString
      type: string
      description: A cryptocurrency symbol or token ticker symbol
      example: btc
    CommitmentShare:
      type: object
      properties:
        from:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The source of the commitment share.
        to:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The recipient of the commitment share.
        share:
          type: string
          description: The commitment share.
        type:
          allOf:
            - $ref: '#/components/schemas/CommitmentType'
            - default: commitment
          description: The type of the commitment share.
      required:
        - from
        - to
        - share
        - type
    CommitmentType:
      type: string
      enum:
        - commitment
      example: commitment
    ConsolidateTokenIntent1:
      title: Consolidate Token
      allOf:
        - $ref: '#/components/schemas/BaseIntent2'
        - $ref: '#/components/schemas/EthBuildOptions1'
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - consolidateToken
            recipients:
              type: array
              items:
                $ref: '#/components/schemas/RecipientEntry1'
            consolidateId:
              type: string
              description: Consolidation ID of this consolidation transaction
            keepAlive:
              type: string
              description: >-
                True, if excluding the minimum-funding amounts in an address
                during consolidation.
          required:
            - intentType
            - recipients
    CoreDaoClaimIntent:
      title: CoreDAO Claim Rewards Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stakeClaimRewards
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntentWithCalldata'
    CoreDaoDelegateIntent:
      title: CoreDAO Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            validatorAddress:
              type: string
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseStakeIntentWithCalldata'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    CoreDaoUndelegateIntent:
      title: CoreDAO Undelegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            validatorAddress:
              type: string
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseStakeIntentWithCalldata'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    CosmosContractCallIntent:
      title: Cosmos Contract Call Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - contractCall
              description: Must be "contractCall"
            contract:
              type: string
              description: Bech32 contract address to execute
            msgHex:
              type: string
              description: >-
                Hex-encoded binary message to pass to the contract Execute
                entrypoint
            feeGranter:
              type: string
              description: >-
                Optional Bech32 address paying transaction fees on behalf of the
                submitter (fee-grant). Supported on hash chain; passed through
                for any chain.
          required:
            - intentType
            - contract
            - msgHex
        - $ref: '#/components/schemas/BaseIntent'
      description: |-
        Execute a Wasm smart contract on a Cosmos-family chain. Supported on all
        Cosmos-family chains. The hash chain additionally supports fee-grant via
        the optional feeGranter field.
    CosmosContractCallIntent1:
      title: Cosmos Contract Call
      allOf:
        - $ref: '#/components/schemas/BaseIntent2'
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - contractCall
            contract:
              type: string
              description: The address of the contract to call.
            msgHex:
              type: string
              description: The binary message data to send to the contract in hex format.
          required:
            - intentType
            - contract
            - msgHex
    CosmosPaymentIntent:
      title: Cosmos Payment Intent
      allOf:
        - type: object
          properties:
            memo:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                Optional memo string attached to the transaction, used for
                routing or identification by exchanges.
          required:
            - memo
        - $ref: '#/components/schemas/PaymentIntent'
      description: |-
        Transfer tokens from a Cosmos-family wallet to one or more recipient
        addresses. Supported on all Cosmos-family chains. An optional memo may
        be included for exchange routing or identification.
    CosmosStakeClaimRewardsIntent:
      title: Cosmos Stake Claim Rewards Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stakeClaimRewards
              description: Must be "stakeClaimRewards"
            validatorAddress:
              type: string
              description: >-
                Bech32 validator address to withdraw accumulated staking rewards
                from (e.g. cosmosvaloper1...)
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
      description: >-
        Claim accumulated staking rewards from a validator on a Cosmos-family
        chain.

        Supported on all Cosmos-family chains. Submit with intentType
        stakeClaimRewards.
    CosmosStakeIntent:
      title: Cosmos Stake Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            validatorAddress:
              type: string
              description: >-
                Bech32 validator address to delegate tokens to (e.g.
                cosmosvaloper1...).
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
                description: >-
                  Optional list of validator–amount pairs for multi-validator
                  delegation. When provided, overrides validatorAddress and
                  amount.
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Delegate (stake) tokens to one or more validators on a Cosmos-family
        chain. Use `validatorAddress` and `amount` for a single validator, or
        `recipients` for multi-validator delegation in a single transaction.
    CosmosSwitchValidatorIntent:
      title: Cosmos Switch Validator Intent
      allOf:
        - $ref: '#/components/schemas/StakeSwitchValidatorIntent'
      description: |-
        Atomically move a delegation from one validator to another (redelegate)
        on a Cosmos-family chain. The redelegation is subject to the chain's
        redelegation cooldown rules.
    CosmosUnstakeIntent:
      title: Cosmos Unstake Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            validatorAddress:
              type: string
              description: >-
                Bech32 validator address to undelegate tokens from (e.g.
                cosmosvaloper1...).
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
                description: >-
                  Optional list of validator–amount pairs for multi-validator
                  undelegation. When provided, overrides validatorAddress and
                  amount.
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Undelegate (unstake) tokens from one or more validators on a
        Cosmos-family chain. Tokens enter the chain's unbonding period and are
        not immediately available. Use `validatorAddress` and `amount` for a
        single validator, or `recipients` for multi-validator undelegation.
    CreateCommand:
      title: Canton Command Intent
      type: object
      properties:
        CreateCommand:
          type: object
          properties:
            templateId:
              type: string
            createArguments:
              type: object
              additionalProperties: {}
          required:
            - templateId
            - createArguments
      required:
        - CreateCommand
    CustodialWalletSubType:
      title: CustodialWalletSubType
      type: string
      enum:
        - custodialCold
        - custodialHot
        - lightningCustody
    CustomChangeKeySignatures:
      type: object
      properties:
        user:
          type: string
        backup:
          type: string
        bitgo:
          type: string
      description: >
        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.
    DOTBuildOptions:
      allOf:
        - $ref: '#/components/schemas/AccountBaseBuildOptions2'
        - type: object
          properties:
            fee:
              $ref: '#/components/schemas/DOTFeeOptions'
    DOTClaimIntent:
      title: Dot Claim Unstake
      allOf:
        - $ref: '#/components/schemas/DOTBuildOptions'
        - $ref: '#/components/schemas/WithdrawIntent2'
    DOTFeeOptions:
      type: object
      properties:
        amount:
          type: string
        unit:
          type: string
          enum:
            - baseUnit
            - cpu
            - ram
        formula:
          type: string
          enum:
            - fixed
            - feeRate
            - perKB
            - custom
        type:
          type: string
          enum:
            - base
            - max
            - tip
      required:
        - amount
    DateTime:
      type: string
      format: date-time
      example: {}
    DefaultChangeAddressType:
      type: string
      example: p2wsh
      nullable: true
      enum:
        - p2sh
        - p2shP2wsh
        - p2wsh
        - p2tr
        - p2trMusig2
        - default
      description: >
        (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`.
    DefiDepositIntent:
      title: DefiDepositIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - defi-deposit
            vaultId:
              type: string
            amount:
              type: string
            operationId:
              type: string
            clientIdempotencyKey:
              type: string
          required:
            - intentType
            - vaultId
            - amount
            - operationId
        - $ref: '#/components/schemas/BaseIntent'
    DefiRedeemIntent:
      title: DefiRedeemIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - defi-redeem
            protocol:
              type: string
            amount:
              type: string
          required:
            - intentType
            - protocol
            - amount
        - $ref: '#/components/schemas/BaseIntent'
    DelegateIntent:
      title: DelegateIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
              description: Must be "delegate".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
      description: >-
        Delegate staked assets to a validator on EVM-compatible chains that
        support

        delegated proof-of-stake (e.g. BSC). Requires a staking request ID from
        the

        BitGo staking service.
    DotAccountBaseBuildOptions:
      title: DotAccountBaseBuildOptions
      allOf:
        - type: object
          properties:
            fee:
              type: object
              properties:
                amount:
                  oneOf:
                    - type: string
                    - type: number
                formula:
                  type: string
                  enum:
                    - fixed
                    - feeRate
                    - perKB
                    - custom
                type:
                  type: string
                  enum:
                    - base
                    - max
                    - tip
                unit:
                  type: string
                  enum:
                    - baseUnit
                    - cpu
                    - ram
              required:
                - amount
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    DotAccountBaseBuildOptions1:
      title: DotAccountBaseBuildOptions
      allOf:
        - type: object
          properties:
            fee:
              type: object
              properties:
                amount:
                  oneOf:
                    - type: string
                    - type: number
                formula:
                  type: string
                  enum:
                    - fixed
                    - feeRate
                    - perKB
                    - custom
                type:
                  type: string
                  enum:
                    - base
                    - max
                    - tip
                unit:
                  type: string
                  enum:
                    - baseUnit
                    - cpu
                    - ram
              required:
                - amount
        - $ref: '#/components/schemas/AccountBaseBuildOptions1'
    DotConsolidateIntent:
      title: DOT Consolidate Intent
      allOf:
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
    DotCreateAccountIntent:
      title: DOT Create Account Intent
      allOf:
        - type: object
          properties:
            delayBlocks:
              type: string
            proxyType:
              type: string
            index:
              $ref: '#/components/schemas/optionalNumber'
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - delayBlocks
            - proxyType
        - $ref: '#/components/schemas/AccountBaseCreateAccountIntent'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions'
    DotPaymentIntent:
      title: DOT Payment Intent
      allOf:
        - type: object
          properties:
            proxy:
              $ref: '#/components/schemas/DotProxy'
            owner:
              $ref: '#/components/schemas/optionalString'
          required:
            - proxy
            - owner
        - $ref: '#/components/schemas/PaymentIntent'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions'
    DotPaymentIntent1:
      title: DOT Payment Intent
      allOf:
        - type: object
          properties:
            proxy:
              $ref: '#/components/schemas/DotProxy'
            owner:
              $ref: '#/components/schemas/optionalString'
          required:
            - proxy
            - owner
        - $ref: '#/components/schemas/PaymentIntent1'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions1'
    DotProxy:
      title: DotProxy
      type: object
      properties:
        name:
          $ref: '#/components/schemas/optionalString'
        addressString:
          $ref: '#/components/schemas/optionalString'
        asset:
          $ref: '#/components/schemas/optionalString'
        amountString:
          $ref: '#/components/schemas/optionalString'
    DotStakingIntent:
      title: DOT Staking Intent
      allOf:
        - type: object
          properties:
            stakingProxy:
              type: string
            addToStake:
              $ref: '#/components/schemas/optionalBoolean'
            addProxy:
              $ref: '#/components/schemas/optionalBoolean'
          required:
            - stakingProxy
        - $ref: '#/components/schemas/StakeIntent'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    DotStakingIntent1:
      title: DOT Staking Intent
      allOf:
        - type: object
          properties:
            amount:
              $ref: '#/components/schemas/Amount1'
            stakingProxy:
              type: string
            addToStake:
              $ref: '#/components/schemas/optionalBoolean'
            addProxy:
              $ref: '#/components/schemas/optionalBoolean'
          required:
            - amount
            - stakingProxy
        - $ref: '#/components/schemas/StakeIntent1'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions1'
    DotUnstakingIntent:
      title: DOT Unstaking Intent
      allOf:
        - type: object
          properties:
            stakingProxy:
              type: string
            stopStaking:
              $ref: '#/components/schemas/optionalBoolean'
          required:
            - stakingProxy
        - $ref: '#/components/schemas/UnstakeIntent'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    DotUnstakingIntent1:
      title: DOT Unstaking Intent
      allOf:
        - type: object
          properties:
            amount:
              $ref: '#/components/schemas/Amount1'
            stakingProxy:
              type: string
            stopStaking:
              $ref: '#/components/schemas/optionalBoolean'
          required:
            - amount
            - stakingProxy
        - $ref: '#/components/schemas/UnstakeIntent1'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions1'
    DotWithdrawStakeIntent:
      title: DOT Withdraw Stake Intent
      allOf:
        - $ref: '#/components/schemas/WithdrawIntent'
        - $ref: '#/components/schemas/DotAccountBaseBuildOptions'
    EIP1559FeeOptions:
      title: EIP1559FeeOptions
      type: object
      properties:
        gasLimit:
          $ref: '#/components/schemas/optionalNumber'
        maxFeePerGas:
          $ref: '#/components/schemas/optionalNumber'
        maxPriorityFeePerGas:
          $ref: '#/components/schemas/optionalNumber'
    ETHSignMessageIntent:
      title: Eth sign message
      allOf:
        - $ref: '#/components/schemas/BaseIntent2'
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - signMessage
          required:
            - intentType
    Email:
      type: string
      format: email
      example: user@example.com
    EnableTokenIntent:
      title: EnableTokenIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - enableToken
              description: Must be "enableToken".
            enableTokens:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  address:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - name
                description: One or more token entries specifying which tokens to enable.
          required:
            - intentType
            - enableTokens
        - $ref: '#/components/schemas/BaseIntent'
    EnableTokenIntent1:
      title: EnableTokenIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - enableToken
            enableTokens:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  address:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - name
          required:
            - intentType
            - enableTokens
        - $ref: '#/components/schemas/BaseIntent1'
    EnterpriseIdString:
      title: EnterpriseIdString
      type: string
      example: 59cd72485007a239fb00282ed480da1f
      pattern: ^[0-9a-f]{32}$
    EntryFunctionABI:
      title: EntryFunctionABI
      type: object
      properties:
        typeParameters:
          type: array
          items: {}
        parameters:
          type: array
          items: {}
      required:
        - typeParameters
        - parameters
    Error1:
      required:
        - error
        - errorName
        - reqId
      type: object
      properties:
        error:
          type: string
        errorName:
          type: string
        reqId:
          type: string
        context:
          $ref: '#/components/schemas/ErrorContext'
      example:
        error: invalid permission
        errorName: backend:common:forbidden
        reqId: unk-nqo97l23l2ofpvgkbb8z
    ErrorContext:
      type: object
      description: |
        Optional structured metadata for REST validation failures.
        The schema is fixed for client contract stability.
      required:
        - errorName
      properties:
        errorName:
          type: string
          description: Same value as the top-level errorName.
        field:
          type: string
          description: Request field associated with the validation failure.
        message:
          type: string
          description: Human-readable field-level validation message.
    ErrorResponse:
      title: ErrorResponse
      type: object
      properties:
        error:
          type: string
          description: The error name
        details:
          type: string
          description: Error details
      required:
        - error
        - details
    EthAccelerationIntent:
      title: ETH Acceleration Intent
      allOf:
        - type: object
          properties:
            feeOptions:
              oneOf:
                - $ref: '#/components/schemas/FeeOption'
                - $ref: '#/components/schemas/EIP1559FeeOptions'
              description: >-
                New fee settings (must be higher than the original transaction).
                Use EIP1559FeeOptions for London-compatible chains.
          required:
            - feeOptions
        - $ref: '#/components/schemas/AccelerationIntent'
        - $ref: '#/components/schemas/EthBuildOptionsWithoutFeeOptions'
      description: |-
        Replace a stuck pending EVM transaction with a higher-fee version to
        accelerate confirmation. Supply the original transaction's txid and new
        feeOptions that exceed the original.
    EthAccelerationIntent1:
      title: ETH Acceleration Intent
      allOf:
        - type: object
          properties:
            feeOptions:
              oneOf:
                - $ref: '#/components/schemas/FeeOption'
                - $ref: '#/components/schemas/EIP1559FeeOptions'
          required:
            - feeOptions
        - $ref: '#/components/schemas/AccelerationIntent1'
        - $ref: '#/components/schemas/EthBuildOptionsWithoutFeeOptions1'
    EthBuildOptions:
      title: EthBuildOptions
      allOf:
        - type: object
          properties:
            feeOptions:
              oneOf:
                - $ref: '#/components/schemas/FeeOption'
                - $ref: '#/components/schemas/EIP1559FeeOptions'
              description: >-
                Override gas estimation. Provide EIP1559FeeOptions for EIP-1559
                chains or FeeOption for legacy.
            hopParams:
              type: object
              description: >-
                Parameters for BitGo Hop transactions (cross-chain bridging via
                the Hop protocol).
              properties:
                gasPriceMax:
                  $ref: '#/components/schemas/optionalNumber'
                paymentId:
                  $ref: '#/components/schemas/optionalString'
                userReqSig:
                  $ref: '#/components/schemas/optionalString'
              required:
                - gasPriceMax
                - paymentId
                - userReqSig
            receiveAddress:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                Target receive address override. Defaults to wallet's primary
                receive address.
            senderAddressIndex:
              allOf:
                - $ref: '#/components/schemas/optionalNumber'
              description: Index of the wallet address to use as the sender.
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    EthBuildOptions1:
      title: EthBuildOptions
      allOf:
        - type: object
          properties:
            feeOptions:
              oneOf:
                - $ref: '#/components/schemas/FeeOption'
                - $ref: '#/components/schemas/EIP1559FeeOptions'
            hopParams:
              type: object
              properties:
                gasPriceMax:
                  $ref: '#/components/schemas/optionalNumber'
                paymentId:
                  $ref: '#/components/schemas/optionalString'
                userReqSig:
                  $ref: '#/components/schemas/optionalString'
              required:
                - gasPriceMax
                - paymentId
                - userReqSig
            receiveAddress:
              $ref: '#/components/schemas/optionalString'
            senderAddressIndex:
              $ref: '#/components/schemas/optionalNumber'
        - $ref: '#/components/schemas/AccountBaseBuildOptions1'
    EthBuildOptionsWithoutFeeOptions:
      title: EthBuildOptionsWithoutFeeOptions
      allOf:
        - type: object
          properties:
            hopParams:
              type: object
              description: >-
                Parameters for BitGo Hop transactions (cross-chain bridging via
                the Hop protocol).
              properties:
                gasPriceMax:
                  $ref: '#/components/schemas/optionalNumber'
                paymentId:
                  $ref: '#/components/schemas/optionalString'
                userReqSig:
                  $ref: '#/components/schemas/optionalString'
              required:
                - gasPriceMax
                - paymentId
                - userReqSig
            receiveAddress:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                Target receive address override. Defaults to wallet's primary
                receive address.
            senderAddressIndex:
              allOf:
                - $ref: '#/components/schemas/optionalNumber'
              description: Index of the wallet address to use as the sender.
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    EthBuildOptionsWithoutFeeOptions1:
      title: EthBuildOptionsWithoutFeeOptions
      allOf:
        - type: object
          properties:
            hopParams:
              type: object
              properties:
                gasPriceMax:
                  $ref: '#/components/schemas/optionalNumber'
                paymentId:
                  $ref: '#/components/schemas/optionalString'
                userReqSig:
                  $ref: '#/components/schemas/optionalString'
              required:
                - gasPriceMax
                - paymentId
                - userReqSig
            receiveAddress:
              $ref: '#/components/schemas/optionalString'
            senderAddressIndex:
              $ref: '#/components/schemas/optionalNumber'
        - $ref: '#/components/schemas/AccountBaseBuildOptions1'
    EthConsolidateIntent:
      title: ETH Consolidate Intent
      allOf:
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
        - $ref: '#/components/schemas/EthBuildOptions'
      description: |-
        Consolidate ETH from multiple receive addresses into the wallet's main
        address on EVM-compatible chains. Used for wallet housekeeping. Provide
        receiveAddress as the sweep destination.
    EthConsolidateTokenIntent:
      title: ETH Consolidate Token Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - consolidateToken
              description: Must be "consolidateToken".
            recipients:
              type: array
              items:
                allOf:
                  - type: object
                    properties:
                      tokenData:
                        $ref: '#/components/schemas/TokenData'
                  - $ref: '#/components/schemas/RecipientEntry'
                description: >-
                  Array of token recipients. Each entry specifies the token
                  contract and amount via tokenData.
            consolidateId:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: Opaque identifier to correlate consolidation requests.
            keepAlive:
              allOf:
                - $ref: '#/components/schemas/optionalBoolean'
              description: When true, leaves a minimal token balance in the source address.
          required:
            - intentType
            - recipients
            - consolidateId
            - keepAlive
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/EthBuildOptions'
      description: |-
        Consolidate ERC-20 tokens from receive addresses into the wallet's main
        address on EVM-compatible chains. Supply token details in the
        recipients[].tokenData field.
    EthFillNonceBuildOptions:
      title: EthFillNonceBuildOptions
      type: object
      properties:
        feeOptions:
          oneOf:
            - $ref: '#/components/schemas/FeeOption'
            - $ref: '#/components/schemas/EIP1559FeeOptions'
          description: Override gas estimation for the fill-nonce transaction.
        receiveAddress:
          allOf:
            - $ref: '#/components/schemas/optionalString'
          description: >-
            Target receive address override. Defaults to wallet's primary
            receive address.
        senderAddressIndex:
          allOf:
            - $ref: '#/components/schemas/optionalNumber'
          description: Index of the wallet address to use as the sender.
    EthFillNonceBuildOptions1:
      title: EthFillNonceBuildOptions
      type: object
      properties:
        feeOptions:
          oneOf:
            - $ref: '#/components/schemas/FeeOption'
            - $ref: '#/components/schemas/EIP1559FeeOptions'
        receiveAddress:
          $ref: '#/components/schemas/optionalString'
        senderAddressIndex:
          $ref: '#/components/schemas/optionalNumber'
    EthFillNonceIntent:
      title: ETH Fill Nonce Intent
      allOf:
        - $ref: '#/components/schemas/FillNonceIntent'
        - $ref: '#/components/schemas/EthFillNonceBuildOptions'
      description: >-
        Submit a zero-value self-send to consume a specific nonce on

        EVM-compatible chains. Used to unblock transaction queues when a nonce
        gap

        has formed.
    EthFillNonceIntent1:
      title: ETH Fill Nonce Intent
      allOf:
        - type: object
          properties: {}
        - $ref: '#/components/schemas/FillNonceIntent1'
        - $ref: '#/components/schemas/EthFillNonceBuildOptions1'
    EthLikeStakeIntent:
      title: EthLike Stake Intent
      allOf:
        - type: object
          properties:
            intentType:
              $ref: '#/components/schemas/IntentType'
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
    EthPaymentIntent:
      title: ETH Payment Intent
      allOf:
        - type: object
          properties:
            selfSend:
              allOf:
                - $ref: '#/components/schemas/optionalBoolean'
              description: When true, sends to the wallet's own receive address.
          required:
            - selfSend
        - $ref: '#/components/schemas/PaymentIntent'
        - $ref: '#/components/schemas/EthBuildOptions'
      description: >-
        Transfer ETH or ERC-20 tokens to one or more recipients on
        EVM-compatible

        chains. Specify recipients with their address and amount. Optionally

        override fee settings via feeOptions.
    EthPaymentIntent1:
      title: ETH Payment Intent
      allOf:
        - type: object
          properties:
            selfSend:
              $ref: '#/components/schemas/optionalBoolean'
          required:
            - selfSend
        - $ref: '#/components/schemas/PaymentIntent1'
        - $ref: '#/components/schemas/EthBuildOptions1'
    EthStakingIntent:
      title: ETH Staking Intent
      allOf:
        - type: object
          properties:
            pubkey:
              type: string
              description: >-
                BLS public key of the validator (hex-encoded, provided by the
                staking service).
            withdrawalCredentials:
              type: string
              description: >-
                Withdrawal credentials for the validator (provided by the
                staking service).
            signature:
              type: string
              description: >-
                BLS signature over the deposit data (provided by the staking
                service).
            depositDataRoot:
              type: string
              description: >-
                SHA-256 hash of the deposit data (provided by the staking
                service).
          required:
            - pubkey
            - withdrawalCredentials
            - signature
            - depositDataRoot
        - $ref: '#/components/schemas/StakeIntent'
        - $ref: '#/components/schemas/EthBuildOptions'
      description: >-
        Submit an ETH 2.0 validator staking deposit on Ethereum. Requires a

        pre-created staking request from the BitGo staking service. All
        validator

        fields (pubkey, withdrawalCredentials, signature, depositDataRoot) are

        provided by the staking service.
    EthStakingIntent1:
      title: ETH Staking Intent
      allOf:
        - type: object
          properties:
            pubkey:
              type: string
            withdrawalCredentials:
              type: string
            signature:
              type: string
            depositDataRoot:
              type: string
          required:
            - pubkey
            - withdrawalCredentials
            - signature
            - depositDataRoot
        - $ref: '#/components/schemas/StakeIntent1'
        - $ref: '#/components/schemas/EthBuildOptions1'
    EthTransferTokenIntent:
      title: ETH Transfer Token Intent
      allOf:
        - $ref: '#/components/schemas/TransferTokenIntent'
        - $ref: '#/components/schemas/EthBuildOptions'
      description: >-
        Transfer ERC-20 tokens to one or more recipients on EVM-compatible
        chains.

        Each recipient entry must include tokenData specifying the token
        contract

        and amount.
    EvaluatedPolicyActionStatus:
      title: EvaluatedPolicyActionStatus
      type: string
      enum:
        - SKIPPED
        - PENDING
        - NOT_NEEDED
        - COMPLETE
        - CANCELLED
        - FAILED
        - AUTO_CANCELLED
    ExerciseCommand:
      title: ExerciseCommand
      type: object
      properties:
        ExerciseCommand:
          type: object
          properties:
            templateId:
              type: string
            choice:
              type: string
            choiceArgument:
              type: object
              additionalProperties: {}
            contractId:
              type: string
          required:
            - templateId
            - choice
      required:
        - ExerciseCommand
    ExpressAccelerateTxRequest:
      type: object
      properties:
        cpfpTxIds:
          type: array
          description: >
            txids of the transactions to bump


            **Notes**:

            Each target unconfirmed transaction must be sending funds to the
            calling wallet.

            Accepts only a single txid at this stage.
          items:
            $ref: '#/components/schemas/TxId'
        cpfpFeeRate:
          type: integer
          description: >-
            Desired effective feerate of the bumped transactions and the CPFP
            transaction in satoshi per kilobyte
        maxFee:
          type: integer
          description: >
            Maximum allowed fee for the CPFP transaction in satoshi


            **Note**:

            A CPFP transaction accelerates the target transactions and all of
            the unconfirmed transactions the target transactions depends on.

            As it can be difficult to discern the complete transaction ancestry
            at times, we recommend limiting the total fee for each CPFP attempt
            as a safety net to prevent CPFP transactions that exceed your cost
            expectations.
        rbfTxIds:
          type: array
          items:
            type: string
          description: >-
            The list of transactions to accelerate using Replace-By-Fee (RBF)
            for UTXO coins (currently accelerating only one tx is supported).
        feeMultiplier:
          allOf:
            - type: number
              minimum: 1
            - example: 1.5
          description: >
            (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`.
        walletPassphrase:
          type: string
          description: >-
            (Hot wallet only) Passphrase to decrypt the user key on the wallet
            to sign the transaction.
    ExpressAcceptShareRequest:
      type: object
      properties:
        userPassword:
          type: string
          description: >-
            User's password to decrypt the shared wallet (required if the wallet
            was shared with spend permission)
        newWalletPassphrase:
          type: string
          description: >-
            New wallet passphrase for saving the shared wallet private key If
            not provided and the wallet was shared with spend permission, then
            the userPassword is used
        overrideEncryptedPrv:
          type: string
          description: Encrypted private key received out-of-band
    ExpressAcceptShareResponse:
      type: object
      properties:
        state:
          type: string
          allOf:
            - $ref: '#/components/schemas/WalletShareState1'
          description: State of the share
        changed:
          type: boolean
          description: Indicates if the share changed
    ExpressCalculateMinerFeeInfoRequest:
      type: object
      properties:
        feeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrString'
            - example: 10000
          description: >
            Custom minimum fee rate in a coin's base unit per kilobyte (or
            virtual kilobyte)--for example, satoshis per kvByte or microAlgos
            per kByte. If the applied `feeRate` does not meet a coin's required
            minimum transaction fee amount, the minimum is still applied (for
            example, 1000 sat/kvByte or a flat 1000 microAlgos).
        nP2shInputs:
          type: integer
          description: Number of P2SH (multi-signature) inputs
          example: 2
        nP2pkhInputs:
          type: integer
          description: Number of P2PKH (single-signature) inputs
          example: 0
        nP2shP2wshInputs:
          type: integer
          description: Number of P2SH_P2WSH (wrapped segwit multi-signature) inputs
          example: 1
        nOutputs:
          type: integer
          description: Number of outputs
          example: 2
      required:
        - nOutputs
    ExpressCalculateMinerFeeInfoResponse:
      type: object
      properties:
        size:
          type: integer
          description: Estimated size of the transaction in bytes
          example: 776
        fee:
          type: integer
          description: Estimated fee in base units for the transaction
          example: 38800
        feeRate:
          type: integer
          description: >-
            The fee rate in base units per kB used to estimate the fee for the
            transaction
          example: 50000
    ExpressCanonicalAddressRequest:
      type: object
      properties:
        address:
          type: string
          description: Address to canonicalize
        version:
          oneOf:
            - type: string
              default: base58
              description: Version of the desired BCH address.
              enum:
                - base58
                - bech32
            - type: integer
              description: Version of the desired LTC address.
              enum:
                - 1
                - 2
    ExpressConsolidateAccountRequest:
      type: object
      properties:
        consolidateAddresses:
          description: >
            Optional: restrict the consolidation to the specified receive
            addresses. If not provided, will consolidate the

            funds from all receive addresses up to 500 addresses.
          type: array
          items:
            type: string
        walletPassphrase:
          description: |
            Passphrase to decrypt the user key on the wallet.
            Required if External Signer is not used to sign the transactions.
          type: string
        prv:
          description: >
            The un-encrypted user private key in string form.

            If the key is a JSON object it must be stringified.

            Required if `walletPassphrase` is not available or encrypted private
            key is not stored by BitGo.
          type: string
        apiVersion:
          description: |
            The Trasaction Request API version to use for MPC EdDSA Hot Wallets.
            Defaults based on the wallet type and asset curve.
          type: string
          enum:
            - full
            - lite
    ExpressConsolidateUnspentsRequest:
      type: object
      properties:
        walletPassphrase:
          type: string
          description: Passphrase to decrypt the user key on the wallet
        xprv:
          type: string
          description: Private key in string form, if walletPassphrase is not available
        feeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrString'
            - example: 10000
          description: >
            Custom fee rate (in base units) per kilobyte (or virtual kilobyte).
            For example, satoshis per kvByte.


            If the `feeRate` is less than the minimum required network fee, then
            the minimum fee applies. For example, 1000 sat/kvByte, a flat 1000
            microAlgos, or a flat 10 drops of xrp. For XRP, the actual fee is
            usually 4.5 times the open ledger fee.


            Note: The `feeRate` overrides the `maxFeeRate` and `minFeeRate`.
        maxFeeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
            - example: 20000
          description: >
            (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 `feeRate` overrides the `maxFeeRate`.
        maxFeePercentage:
          type: integer
          description: Maximum relative portion that can be spent towards fees
        feeTxConfirmTarget:
          type: integer
          description: Block target for fee estimation
        bulk:
          type: boolean
          description: >-
            Build multiple transactions at the same time. This enables you to
            increase the maximum number of unspents on the `limit` parameter up
            to 2,000. If true, you must pass the `txFormat` as `psbt` and you
            can't pass the `targetAddress` or `numUnspentsToMake` parameters.
        minValue:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Minimum value of unspents to use in base units (e.g. satoshis). Can
            be used to skip very small unspents when consolidating at higher fee
            rates. For doge, only string is allowed.
        maxValue:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >
            Maximum value of unspents to use in base units (e.g. satoshis).
            Should be used to prevent larger unspents from being consolidated
            needlessly, and that some funds remain available for spending while
            the consolidation transactions are in flight. For doge, only string
            is allowed.
        minHeight:
          type: integer
          description: Minimum height of unspents on the block chain to use
        minConfirms:
          type: integer
          description: Minimum confirmation threshold for external inputs
        enforceMinConfirmsForChange:
          type: boolean
          description: Flag for enforcing minConfirms for change inputs
        limit:
          type: integer
          description: Maximum number of unspents to use in the transaction
        numUnspentsToMake:
          type: integer
          description: Number of new unspents to make
        targetAddress:
          type: string
          description: address to use for generated outputs. Must be wallet address.
        txFormat:
          $ref: '#/components/schemas/UtxoTransactionFormat'
    ExpressCreateKeychainResponse:
      type: object
      description: Generated key pair
      properties:
        prv:
          type: string
          description: Private key
          example: >-
            xprv9s21ZrQH143K2Y4th5Bn8sCRCMNjVr3sm9TLj9yw9SRKxYbJdB18bpc7cZFHKKWKuWZUBATfbDVE26u7w2iUhmWD8Gsp8UkaemhLEfopC35
        pub:
          $ref: '#/components/schemas/Pub'
    ExpressDecryptRequest:
      type: object
      properties:
        input:
          type: string
          description: Ciphertext to decrypt
        password:
          type: string
          description: Key which is used for decryption
    ExpressDecryptResponse:
      type: object
      properties:
        decrypted:
          type: string
    ExpressEncryptRequest:
      type: object
      properties:
        input:
          type: string
          description: Plaintext message which should be encrypted
        password:
          type: string
          description: Password which should be used to encrypt message
    ExpressEncryptResponse:
      type: object
      properties:
        encrypted:
          type: string
    ExpressFanOutUnspentsRequest:
      type: object
      properties:
        walletPassphrase:
          type: string
          description: Passphrase to decrypt the user key on the wallet
        xprv:
          type: string
          description: Private key in string form, if walletPassphrase is not available
        feeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrString'
            - example: 10000
          description: >
            Custom fee rate (in base units) per kilobyte (or virtual kilobyte).
            For example, satoshis per kvByte.


            If the `feeRate` is less than the minimum required network fee, then
            the minimum fee applies. For example, 1000 sat/kvByte, a flat 1000
            microAlgos, or a flat 10 drops of xrp. For XRP, the actual fee is
            usually 4.5 times the open ledger fee.


            Note: The `feeRate` overrides the `maxFeeRate` and `minFeeRate`.
        maxFeeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
            - example: 20000
          description: >
            (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 `feeRate` overrides the `maxFeeRate`.
        maxFeePercentage:
          type: integer
          description: Maximum relative portion that can be spent towards fees
        feeTxConfirmTarget:
          type: integer
          description: Block target for fee estimation
        minValue:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Minimum value of unspents to use in base units (e.g. satoshis). For
            doge, only string is allowed.
        maxValue:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
          description: >-
            Maximum value of unspents to use in base units (e.g. satoshis). For
            doge, only string is allowed.
        minHeight:
          type: integer
          description: Minimum height of unspents on the block chain to use
        minConfirms:
          type: integer
          description: Minimum confirmation threshold for external inputs
        enforceMinConfirmsForChange:
          type: boolean
          description: Flag for enforcing minConfirms for change inputs
        unspents:
          type: array
          items:
            type: string
          description: >-
            Unspents to fan out in the transaction. Mutually exclusive with
            maxNumInputsToUse.
        maxNumInputsToUse:
          type: integer
          description: >-
            Maximum number of unspents to use in the transaction. Mutually
            exclusive with unspents.
        numUnspentsToMake:
          type: integer
          description: Number of new unspents to make
        targetAddress:
          type: string
          description: address to use for generated outputs. Must be wallet address.
        txFormat:
          $ref: '#/components/schemas/UtxoTransactionFormat'
    ExpressGenerateWalletBackupKeychain:
      title: ExpressGenerateWalletBackupKeychain
      type: object
      properties:
        id:
          type: string
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        prv:
          type: string
        pub:
          type: string
          description: public part of a key pair
          example: >-
            xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH
        source:
          type: string
          description: Party that created the key
          example: backup
        ethAddress:
          type: string
          description: Ethereum address corresponding to this keychain
          example: '0xf5b7cca8621691f9dde304cb7128b6bb3d409363'
        coinSpecific:
          type: object
          additionalProperties: {}
    ExpressGenerateWalletBitgoKeychain:
      title: ExpressGenerateWalletBitgoKeychain
      type: object
      properties:
        id:
          type: string
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        pub:
          type: string
          description: public part of a key pair
          example: >-
            xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH
        isBitGo:
          type: boolean
          description: Flag for identifying keychain as created by BitGo
          example: true
        source:
          type: string
          description: Party that created the key
          example: bitgo
        ethAddress:
          type: string
          description: Ethereum address corresponding to this keychain
          example: '0xa487900d0de75107b1cc7ade0e2662980e5ce940'
        coinSpecific:
          type: object
          additionalProperties: {}
    ExpressGenerateWalletResponse:
      oneOf:
        - $ref: '#/components/schemas/ExpressWallet'
        - title: Wallet (including keychains)
          type: object
          description: >-
            Wallet with user, bitgo and backup keychains (when
            `includeKeychains` query param is `true`).
          properties:
            wallet:
              $ref: '#/components/schemas/ExpressWallet'
            encryptedWalletPassphrase:
              type: string
              description: >-
                Encrypted wallet passphrase. Used only with
                `passcodeEncryptionCode`. You can use the encrypted wallet
                passphrase in the BitGo web app during password recovery for the
                wallet.
              example: >-
                "{\"iv\":\"IpwAFi0+TDsLJCV4pg8T6w==\",\"v\":1,\"iter\":10000,\"ks\":256,\"ts\":64,\"mode\":\"ccm\",\"adata\":\"\",\"cipher\":\"aes\",\"salt\":\"3lkIc47rjzo=\",\"ct\":\"/m6JL/ttTJWXNmHm+dzI\"}"
            userKeychain:
              type: object
              description: User keychain
              properties:
                id:
                  $ref: '#/components/schemas/Id'
                encryptedPrv:
                  type: string
                  description: User private key encrypted with the user passphrase
                  example: >-
                    {"iv":"TEd5eouui6hKashuVi5WHQ==","v":1,"iter":10000,"ks":256,"ts":64,"mode":"ccm","adata":"","cipher":"aes","salt":"dHu4PWoX2M8=","ct":"fYr9Y/6kU40AosONkV0xi+fWsyhpYSew0L2YKH/qEZjOlxeDjpC2aTJ0Yc/KdmXheUGolcAxGSx93ykN21Zim1DGc/UGa25IUA/3ARgX7gBsYnYEy5e5Ol0YZYb9pa7KFeaDZSLMXrxxoahg5zL4AJsUx90Pwcg="}
                prv:
                  type: string
                  description: User private key
                  example: >-
                    xprv9s21ZrQH143K3e1981rUcbKjJ9G57SDCDZ9HY4Sqhx5ZqMoyK1j49kAf1vuM1G9nhRr6kzqbUQb3gj5zuzrsvNRQ84tYf32EcyapRgBNpp4
                pub:
                  $ref: '#/components/schemas/Pub'
                ethAddress:
                  type: string
                  description: Ethereum address corresponding to this keychain
                  example: '0xf5b7cca8621691f9dde304cb7128b6bb3d409363'
                source:
                  type: string
                  description: Party that created the key
                  example: user
                coinSpecific:
                  type: object
                  description: Coin specific key data
            backupKeychain:
              type: object
              description: Backup keychain
              properties:
                id:
                  $ref: '#/components/schemas/Id'
                prv:
                  type: string
                  description: Backup private key
                  example: >-
                    xprv9s21ZrQH143K47iEnAFZRJz36E5ZxuEDBJETFYxJTsTVxuPc9z7oGWADUK6icX5P3ruoe244yxMt9uZ2LjWhddvnJJ4zB7zK93qBtxYrmN6
                pub:
                  $ref: '#/components/schemas/Pub'
                source:
                  type: string
                  description: Party that created the key
                  example: backup
                ethAddress:
                  type: string
                  description: Ethereum address corresponding to this keychain
                  example: '0xf5b7cca8621691f9dde304cb7128b6bb3d409363'
                coinSpecific:
                  type: object
                  description: Coin specific key data
            bitgoKeychain:
              type: object
              description: BitGo keychain
              properties:
                id:
                  $ref: '#/components/schemas/Id'
                pub:
                  $ref: '#/components/schemas/Pub'
                isBitGo:
                  type: boolean
                  description: Flag for identifying keychain as created by BitGo
                  example: true
                source:
                  type: string
                  description: Party that created the key
                  example: bitgo
                ethAddress:
                  type: string
                  description: Ethereum address corresponding to this keychain
                  example: '0xa487900d0de75107b1cc7ade0e2662980e5ce940'
                coinSpecific:
                  type: object
                  description: Coin specific key data
            warning:
              type: string
              description: >-
                If the backup key is held by the user, this is a message warning
                the user to securely backup their backup keychain.
              example: >-
                Be sure to backup the backup keychain -- it is not stored
                anywhere else!
    ExpressGenerateWalletResponse1:
      title: ExpressGenerateWalletResponse
      oneOf:
        - $ref: '#/components/schemas/ExpressGenerateWalletWithKeychains'
        - $ref: '#/components/schemas/ExpressWalletDirectResponse'
    ExpressGenerateWalletUserKeychain:
      title: ExpressGenerateWalletUserKeychain
      type: object
      properties:
        id:
          type: string
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        encryptedPrv:
          type: string
        prv:
          type: string
        pub:
          type: string
          description: public part of a key pair
          example: >-
            xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH
        ethAddress:
          type: string
          description: Ethereum address corresponding to this keychain
          example: '0xf5b7cca8621691f9dde304cb7128b6bb3d409363'
        source:
          type: string
          description: Party that created the key
          example: user
        coinSpecific:
          type: object
          additionalProperties: {}
    ExpressGenerateWalletWithKeychains:
      title: ExpressGenerateWalletWithKeychains
      type: object
      description: >-
        Wallet with user, bitgo and backup keychains (when includeKeychains
        query param is true).
      properties:
        wallet:
          $ref: '#/components/schemas/ExpressWallet1'
        encryptedWalletPassphrase:
          type: string
        userKeychain:
          $ref: '#/components/schemas/ExpressGenerateWalletUserKeychain'
        backupKeychain:
          $ref: '#/components/schemas/ExpressGenerateWalletBackupKeychain'
        bitgoKeychain:
          $ref: '#/components/schemas/ExpressGenerateWalletBitgoKeychain'
        warning:
          type: string
          description: >-
            If the backup key is held by the user, this is a message warning the
            user to securely backup their backup keychain.
          example: >-
            Be sure to backup the backup keychain -- it is not stored anywhere
            else!
      required:
        - wallet
    ExpressInitWalletRequest:
      type: object
      properties:
        passphrase:
          type: string
          description: Passphrase to encrypt the admin macaroon of the signer node.
    ExpressIsWalletAddressRequest:
      type: object
      description: Request body for verifying if an address belongs to a wallet
      required:
        - address
        - keychains
      properties:
        address:
          type: string
          description: The address to verify
        keychains:
          type: array
          items:
            type: object
            description: |
              Keychains for cryptographic verification
              Can be retrieved from GET /api/v2/{coin}/key/{id}
            properties:
              pub:
                type: string
              ethAddress:
                type: string
                description: >-
                  Ethereum address (required for V1, V2, V4 ETH wallets base
                  address verification)
              commonKeychain:
                type: string
                description: Common keychain (required for  wallets version 3, 5, 6)
            required:
              - pub
        baseAddress:
          type: string
          description: Base address of the wallet (wallet.coinSpecific.baseAddress)
        walletVersion:
          type: number
          description: Wallet version (wallet.coinSpecific.walletVersion)
        index:
          oneOf:
            - type: number
            - type: string
          description: |
            Address derivation index
            For Base Address verification, set index to 0
        coinSpecific:
          type: object
          description: Coin-specific address data
          properties:
            baseAddress:
              type: string
              description: Base address (wallet.coinSpecific.baseAddress)
            feeAddress:
              type: string
              description: Fee address for v4 forwarders (wallet.coinSpecific.feeAddress)
            forwarderVersion:
              type: number
              description: >-
                Forwarder version (address.coinSpecific.forwarderVersion,
                required for forwarder addresses only)
            salt:
              type: string
              description: |
                Salt for address derivation
                ForwarderAddress: address.coinSpecific.salt
                BaseAddress: wallet.coinSpecific.salt
        impliedForwarderVersion:
          type: number
          description: Implied forwarder version
        format:
          type: string
          description: Format for the address
        rootAddress:
          type: string
          description: Root address for coins that use root address
    ExpressIsWalletAddressResponse:
      type: boolean
      description: Returns true if the address belongs to the wallet
    ExpressLightningNodeStateResponse:
      type: object
      properties:
        state:
          description: Current state of the node
          type: string
          enum:
            - NON_EXISTING
            - LOCKED
            - UNLOCKED
            - RPC_ACTIVE
            - SERVER_ACTIVE
            - WAITING_TO_START
    ExpressOnchainWithdrawRequest:
      type: object
      properties:
        passphrase:
          type: string
          description: The wallet passphrase.
        recipients:
          type: array
          description: A list of on-chain recipients with their withdrawal amounts.
          items:
            type: object
            properties:
              amountSat:
                type: string
                description: The amount to send in satoshis.
              address:
                type: string
                description: The on-chain Bitcoin address of the recipient.
        satsPerVbyte:
          type: string
          description: >-
            Optional fee rate for the transaction in satoshis per virtual byte.
            Cannot be used with `numBlocks`.
        numBlocks:
          type: integer
          description: >
            The number of blocks required to confirm a transaction. You can use
            `numBlocks` to estimate the fee rate by targeting confirmation
            within a given number of blocks. If both `satsPerVbyte` and
            `numBlocks` are absent, the transaction defaults to 2 blocks for
            confirmation.
          minimum: 2
          maximum: 1000
        sequenceId:
          type: string
          description: Optional sequence ID for the withdrawal transfer.
        comment:
          type: string
          description: Optional comment for the withdrawal transfer.
      required:
        - passphrase
        - recipients
    ExpressOnchainWithdrawResponse:
      type: object
      properties:
        txRequestId:
          type: string
          description: Transaction request identifier.
        txRequestState:
          $ref: '#/components/schemas/TransactionRequestState1'
        pendingApproval:
          $ref: '#/components/schemas/PendingApproval1'
        withdrawStatus:
          type: object
          description: The status of the on-chain withdrawal transaction.
          properties:
            status:
              type: string
              enum:
                - delivered
                - failed
              description: State of the withdrawal.
            txid:
              type: string
              description: The transaction ID on the blockchain.
            failureReason:
              type: string
              description: The reason for failure, if any.
    ExpressPayInvoiceRequest:
      type: object
      properties:
        invoice:
          type: string
          description: The BOLT 11 invoice to pay
        passphrase:
          type: string
          description: The wallet passphrase
        amountMsat:
          type: string
          description: >-
            The amount to pay in millisatoshis. This is required if you're
            paying a zero value invoice.
        feeLimitMsat:
          type: string
          description: Optional maximum fee to pay in millisatoshis
        feeLimitRatio:
          type: number
          description: Optional maximum fee expressed as a ratio of the payment amount
          example: 0.1
        sequenceId:
          type: string
          description: Optional sequence ID for the payment transfer
        comment:
          type: string
          description: Optional comment for the payment transfer
      required:
        - invoice
        - passphrase
    ExpressPayInvoiceResponse:
      type: object
      properties:
        txRequestId:
          type: string
          description: Transaction request identifier
        txRequestState:
          $ref: '#/components/schemas/TransactionRequestState1'
        pendingApproval:
          $ref: '#/components/schemas/PendingApproval1'
        paymentStatus:
          type: object
          properties:
            status:
              type: string
              enum:
                - in_flight
                - settled
                - failed
              description: State of the lightning payment
            paymentHash:
              type: string
              description: >-
                Hash of the lightning payment, unique identifier used when doing
                transfer lookup
            paymentPreimage:
              type: string
              description: Optional preimage of the payment
            amountMsat:
              type: string
              description: Amount in millisatoshis
            feeMsat:
              type: string
              description: Fee in millisatoshis
            failureReason:
              $ref: '#/components/schemas/LightningPaymentFailureReason'
    ExpressPingResponse:
      type: object
      properties:
        status:
          type: string
    ExpressResolvePendingApprovalRequest:
      type: object
      properties:
        state:
          type: string
          description: New state for the pending approval
          enum:
            - approved
            - rejected
        walletPassphrase:
          type: string
          description: Passphrase to decrypt the user key on the wallet
        xprv:
          type: string
          description: Private key in string form, if walletPassphrase is not available
        otp:
          $ref: '#/components/schemas/Otp'
    ExpressSendCoinsRequest:
      allOf:
        - type: object
          properties:
            address:
              allOf:
                - $ref: '#/components/schemas/AddressString3'
              description: Destination address
            amount:
              allOf:
                - $ref: '#/components/schemas/IntegerOrIntegerString'
              description: >-
                Amount in base units (e.g. satoshi, wei, drops, stroops). For
                doge, only string is allowed.
            walletPassphrase:
              type: string
              description: Passphrase to decrypt the user key on the wallet
            prv:
              type: string
              description: >-
                Optional, private key in string form, if `walletPassphrase` is
                not available or encrypted private key is not stored by BitGo.
        - $ref: '#/components/schemas/BuildParams'
        - type: object
          properties:
            data:
              type: string
              description: (ETH only) Optional data to pass to the transaction
            hop:
              type: boolean
              description: >-
                (ETH, AVAXC and POLYGON) Set to true if funds to destination
                need to come from single sig address
            tokenName:
              type: string
              description: Token name, defined in the BitGoJS Statics package.
    ExpressSendCoinsResponse:
      anyOf:
        - $ref: '#/components/schemas/ExpressSendCoinsResponseMultisig'
        - $ref: >-
            #/components/schemas/ExpressSendCoinsResponseMultisigWithPendingApproval
        - $ref: '#/components/schemas/ExpressSendCoinsResponseTxRequest'
        - $ref: >-
            #/components/schemas/ExpressSendCoinsResponseTxRequestWithPendingApproval
    ExpressSendCoinsResponseMultisig:
      description: >-
        Multisig wallet send coins response when no pending approval is
        required.
      allOf:
        - $ref: '#/components/schemas/ExpressSendCoinsResponseTransfer'
    ExpressSendCoinsResponseMultisigWithPendingApproval:
      description: Multisig wallet send coins response when pending approval is required.
      allOf:
        - $ref: '#/components/schemas/PendingApproval1'
    ExpressSendCoinsResponseTransfer:
      type: object
      properties:
        transfer:
          $ref: '#/components/schemas/Transfer'
        txid:
          type: string
          description: Unique transaction identifier
        tx:
          oneOf:
            - type: string
              description: Encoded transaction hex (or base64 for XLM)
            - $ref: '#/components/schemas/PsbtHex'
        status:
          type: string
          description: Transfer status
          enum:
            - signed
            - signed (suppressed)
            - pendingApproval
    ExpressSendCoinsResponseTxRequest:
      description: >-
        Wallet send coins response when no pending approval is required for MPC
        wallets and lightning wallets.
      allOf:
        - type: object
          properties:
            txRequest:
              $ref: '#/components/schemas/TransactionRequestFull1'
        - $ref: '#/components/schemas/ExpressSendCoinsResponseTransfer'
    ExpressSendCoinsResponseTxRequestWithPendingApproval:
      description: >-
        Wallet send coins response when pending approval is required for MPC
        wallets and lightning wallets.
      type: object
      properties:
        txRequest:
          $ref: '#/components/schemas/TransactionRequestFull1'
        pendingApproval:
          $ref: '#/components/schemas/PendingApproval1'
    ExpressSendConsolidationResponse:
      type: object
      properties:
        success:
          description: An Array of TransactionRequest or Transfers.
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/TransactionRequestLite1'
              - $ref: '#/components/schemas/TransactionRequestFull1'
              - $ref: '#/components/schemas/Transfer'
        failure:
          type: array
          description: An Array of Error messages.
          items:
            type: string
      required:
        - success
        - failure
    ExpressSendManyRequest:
      allOf:
        - type: object
          properties:
            recipients:
              type: array
              items:
                type: object
                description: List of recipient addresses and amounts to send
                properties:
                  address:
                    allOf:
                      - $ref: '#/components/schemas/AddressString3'
                    description: Destination address
                  amount:
                    allOf:
                      - $ref: '#/components/schemas/IntegerOrIntegerString'
                    description: >-
                      The amount in base units (e.g. satoshis) to send. For
                      doge, only string is allowed.
                  tokenName:
                    type: string
                    description: >-
                      The token name. Required for MPC wallets token
                      transactions.
                    example: sol:natix
                  tokenData:
                    allOf:
                      - $ref: '#/components/schemas/RecipientTokenData'
                    description: >-
                      Data set to build a transaction that involves a token
                      interaction.
              description: >-
                A list of recipient addresses and amounts. Must be present but
                empty for CPFP transactions.
            otp:
              type: string
              description: >-
                Two factor auth code to enable sending the transaction. Not
                necessary if using a long lived access token within the spending
                limit.
            walletPassphrase:
              type: string
              description: >
                Passphrase to decrypt the user key on the wallet.

                Required if External Signer is not used to sign the
                transactions.
            prv:
              type: string
              description: >
                The un-encrypted user private key in string form.

                If the key is a JSON object it must be stringified.

                Required if `walletPassphrase` is not available or encrypted
                private key is not stored by BitGo.
        - $ref: '#/components/schemas/BuildParams'
        - type: object
          properties:
            data:
              type: string
              description: (ETH only) Optional data to pass to the transaction
    ExpressShareWalletRequest:
      type: object
      properties:
        email:
          type: string
          description: Email address of the user being invited
          example: foo@bar.com
        permissions:
          type: string
          allOf:
            - $ref: '#/components/schemas/WalletPermission'
        walletPassphrase:
          type: string
          description: Wallet passphrase of the user sharing the wallet
        message:
          type: string
          description: User readable message to display to the share recipient
        reshare:
          type: boolean
          description: >-
            Flag for reinviting a user to the wallet. This is required if the
            invitee has already been invited to the wallet, but has changed
            their password and needs a new invite
        skipKeychain:
          type: boolean
          description: >-
            If true, skips using a shared key (for when the wallet is shared
            without spend permission).
        disableEmail:
          type: boolean
          description: Flag for disabling invite notification email
      required:
        - email
        - permissions
    ExpressSignTssTx:
      anyOf:
        - $ref: '#/components/schemas/TransactionRequestLite1'
        - $ref: '#/components/schemas/ExpressSignTssTxFull'
    ExpressSignTssTxFull:
      title: Full
      type: object
      properties:
        txRequestId:
          description: |
            The transaction request ID.
            This is the ID returned by the Create Transaction Request API.
          type: string
        walletPassphrase:
          description: |
            The wallet passphrase.
            Required if External Signer is not used to sign the transactions.
          type: string
        prv:
          description: >
            The un-encrypted user private key of the wallet.

            If the key is a JSON object it must be stringified.

            Required for Self-Managed Cold wallets when External Signer is not
            used to sign the transactions.
          type: string
      required:
        - txRequestId
    ExpressSignTxRequest:
      type: object
      properties:
        prv:
          type: string
          description: user private key
          example: >-
            xprv9s21ZrQH143K3xQwj4yx3fHjDieEdqFDweBvFxn28qGvfQGvweUWuUuDRpepDu6opq3jiWHU9h3yYTKk5vvu4ykRuGA4i4Kz1vmFMPLTsoC
        txPrebuild:
          type: object
          properties:
            wallet:
              $ref: '#/components/schemas/Id'
            txHex:
              type: string
              description: Serialized transaction hex
            txBase64:
              type: string
              description: >-
                Serialized transaction base64 (applies to XLM only) The request
                must include this or a txHex
            txInfo:
              oneOf:
                - $ref: '#/components/schemas/UtxoTxInfo'
                - $ref: '#/components/schemas/XlmTxInfo'
            feeInfo:
              type: object
              properties:
                size:
                  type: integer
                  description: Estimated size of the transaction in bytes
                  example: 776
                fee:
                  type: integer
                  description: Estimated fee in base units for the transaction
                  example: 38800
                feeRate:
                  allOf:
                    - $ref: '#/components/schemas/IntegerOrString'
                    - example: 10000
                  description: >
                    Custom fee rate (in base units) per kilobyte (or virtual
                    kilobyte). For example, satoshis per kvByte.


                    If the `feeRate` is less than the minimum required network
                    fee, then the minimum fee applies. For example, 1000
                    sat/kvByte, a flat 1000 microAlgos, or a flat 10 drops of
                    xrp. For XRP, the actual fee is usually 4.5 times the open
                    ledger fee.


                    Note: The `feeRate` overrides the `maxFeeRate` and
                    `minFeeRate`.
                payGoFee:
                  type: integer
                  description: BitGo fee of the transaction (in base units)
                  example: 0
                payGoFeeString:
                  type: integer
                  description: >-
                    BitGo fee of the transaction (in base units) represented as
                    a String
                  example: '0'
        isLastSignature:
          type: boolean
          description: >-
            Should be set to true if you are signing the second time, attaching
            the final signature. Default to false.
        pubs:
          type: array
          description: Public Keys (user, backup, bitgo) for the wallet (UTXO coins only)
          items:
            type: string
          example:
            - string
            - string
            - string
    ExpressSignTxResponse:
      type: object
      properties:
        txInfo:
          oneOf:
            - title: Hex
              type: object
              properties:
                txHex:
                  $ref: '#/components/schemas/TxHex'
            - title: Base64
              type: object
              properties:
                halfSigned:
                  type: object
                  properties:
                    txBase64:
                      $ref: '#/components/schemas/TxBase64'
    ExpressSweepRequest:
      type: object
      properties:
        address:
          type: string
          description: The destination address for the sweep transaction
        walletPassphrase:
          type: string
          description: Passphrase to decrypt the user key on the wallet
        xprv:
          type: string
          description: Private key in string form, if walletPassphrase is not available
        otp:
          type: string
          description: Two factor auth code to enable sending the transaction
        feeTxConfirmTarget:
          type: string
          description: Number of blocks to wait to confirm the transaction
        feeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrString'
            - example: 10000
          description: >
            Custom fee rate (in base units) per kilobyte (or virtual kilobyte).
            For example, satoshis per kvByte.


            If the `feeRate` is less than the minimum required network fee, then
            the minimum fee applies. For example, 1000 sat/kvByte, a flat 1000
            microAlgos, or a flat 10 drops of xrp. For XRP, the actual fee is
            usually 4.5 times the open ledger fee.


            Note: The `feeRate` overrides the `maxFeeRate` and `minFeeRate`.
        maxFeeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrIntegerString'
            - example: 20000
          description: >
            (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 `feeRate` overrides the `maxFeeRate`.
        allowPartialSweep:
          type: boolean
          default: false
          description: >
            Use `allowPartialSweep: true` to sweep part of a wallet when there
            are too many unspents to empty the wallet in a

            single transaction. While the expected outcome of a single sweep
            call would usually be an empty wallet, using the

            allowPartialSweep option may leave some funds in the wallet. Making
            repeated calls with the allowPartialSweep

            option allows emptying wallets with many unspents without
            consolidating first.
        txFormat:
          $ref: '#/components/schemas/UtxoTransactionFormat'
    ExpressUnlockLightningWalletRequest:
      type: object
      properties:
        passphrase:
          type: string
          description: Passphrase to decrypt the unlock the node.
    ExpressUnlockLightningWalletResponse:
      type: object
      properties:
        message:
          type: string
          example: ok
    ExpressVerifyCoinAddressRequest:
      type: object
      properties:
        address:
          type: string
          allOf:
            - $ref: '#/components/schemas/AddressString3'
          description: Address which should be verified for correct format
    ExpressWallet:
      title: Wallet
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        users:
          type: array
          description: Ids of users with access to the wallet
          items:
            type: object
            properties:
              user:
                $ref: '#/components/schemas/Id'
              permissions:
                type: array
                description: Array of permissions for the user
                items:
                  type: string
                  example:
                    - admin
                    - view
                    - spend
        coin:
          type: string
          description: Name of the blockchain the wallet is on
          example: tbtc4
        label:
          type: string
          description: Name the user assigned to the wallet
          example: My TBTC4 Wallet
        m:
          type: integer
          description: Number of signatures required for the wallet to send
          example: 2
        'n':
          type: integer
          description: Number of signers on the wallet
          example: 3
        keys:
          type: array
          description: Ids of wallet keys
          items:
            $ref: '#/components/schemas/Id'
        keySignatures:
          type: object
          description: >-
            Signatures for the backup and BitGo public keys signed by the user
            key
          properties:
            backupPub:
              type: string
              description: Signature for the backup pub
              example: >-
                1fe81d0c91457d89993b01475bfb9e5809067ae046926faeab6e63beea009d8dd460387e0c3843034570798a9c2bcc1dbbea2988ee5a36979e0bbe6e02f7840af2
            bitgoPub:
              type: string
              description: Signature for the BitGo pub
              example: >-
                209d0e9a6d4352b66fae0a35ce62c1059bcc4db9e2883abc4f1b3d20481c5cebb7299c581efd9e0151abaf2496da7c6d75d276de36ed3de37c94e9cc5a2ea77e59
        tags:
          type: array
          description: Tags set on the wallet
          items:
            $ref: '#/components/schemas/Id'
        receiveAddress:
          $ref: '#/components/schemas/Address2'
        balance:
          type: integer
          description: Wallet balance as number
          example: 0
        balanceString:
          type: string
          description: Wallet balance as string
          example: '0'
        confirmedBalance:
          type: integer
          description: Confirmed wallet balance as number
          example: 0
        confirmedBalanceString:
          type: string
          description: Confirmed wallet balance as string
          example: '0'
        spendableBalance:
          type: integer
          description: Spendable wallet balance as number
          example: 0
        spendableBalanceString:
          type: string
          description: Spendable wallet balance as string
          example: '0'
        deleted:
          type: boolean
          description: Flag which indicates the wallet has been deleted
          example: false
        isCold:
          type: boolean
          description: Flag for identifying cold wallets
          example: false
        freeze:
          type: object
          description: Freeze state (used to stop the wallet from spending)
          properties:
            time:
              type: string
              format: date-time
              description: Time when the wallet becomes frozen
            expires:
              type: string
              format: date-time
              description: Time when the wallet is unfrozen and allowed to spend
          example: {}
        disableTransactionNotifications:
          type: boolean
          description: Flag for disabling wallet transaction notifications
          example: false
        admin:
          type: object
          description: Admin data (wallet policies)
          example: {}
        approvalsRequired:
          type: integer
          description: Number of admin approvals required for an action to fire
          example: 1
        pendingApprovals:
          type: array
          description: Pending approvals on the wallet
          items:
            $ref: '#/components/schemas/PendingApproval1'
          example: []
        allowBackupKeySigning:
          type: boolean
          description: Flag for allowing signing with backup key
          example: false
        coinSpecific:
          type: object
          description: Coin-specific data
        clientFlags:
          type: array
          items:
            type: string
        recoverable:
          type: boolean
          description: >-
            Flag indicating whether this wallet's user key is recoverable with
            the passphrase held by the user.
        startDate:
          type: string
          format: date-time
          description: Time when this wallet was created
        hasLargeNumberOfAddresses:
          type: boolean
          description: >
            Flag indicating that this wallet is large (more than 100,000
            addresses). If this is set, some APIs may omit

            properties which are expensive to calculate for wallets with many
            addresses (for example, the total address

            counts returned by the List Addresses API).
        config:
          type: object
          description: Custom configuration options for this wallet
    ExpressWallet1:
      title: ExpressWallet
      type: object
      properties:
        id:
          type: string
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        users:
          type: array
          items:
            type: object
            properties:
              user:
                type: string
                example: 59cd72485007a239fb00282ed480da1f
                pattern: ^[0-9a-f]{32}$
              permissions:
                type: array
                items:
                  type: string
        coin:
          allOf:
            - $ref: '#/components/schemas/CoinString'
          description: Name of the blockchain the wallet is on
          example: tbtc4
        label:
          type: string
          description: Name the user assigned to the wallet
          example: My TBTC4 Wallet
        m:
          type: number
          description: Number of signatures required for the wallet to send
          example: 2
        'n':
          type: number
          description: Number of signers on the wallet
          example: 3
        keys:
          type: array
          items:
            type: string
        keySignatures:
          type: object
          properties:
            backupPub:
              type: string
            bitgoPub:
              type: string
        tags:
          type: array
          items:
            type: string
        receiveAddress:
          $ref: '#/components/schemas/Address21'
        balance:
          type: number
          example: null
        balanceString:
          type: string
          example: 0 */
        confirmedBalance:
          type: number
          example: null
        confirmedBalanceString:
          type: string
          example: 0 */
        spendableBalance:
          type: number
          example: null
        spendableBalanceString:
          type: string
          example: 0 */
        deleted:
          type: boolean
          example: false
        isCold:
          type: boolean
          example: false
        freeze:
          allOf:
            - $ref: '#/components/schemas/ExpressWalletFreeze'
          description: Freeze state (used to stop the wallet from spending)
        disableTransactionNotifications:
          type: boolean
          example: false
        admin:
          allOf:
            - $ref: '#/components/schemas/ExpressWalletAdmin'
          description: Admin data (wallet policies)
        approvalsRequired:
          type: number
          example: null
        pendingApprovals:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                example: 59cd72485007a239fb00282ed480da1f
                pattern: ^[0-9a-f]{32}$
              coin:
                type: string
                description: A cryptocurrency or token ticker symbol.
                example: btc
              wallet:
                type: string
                example: 59cd72485007a239fb00282ed480da1f
                pattern: ^[0-9a-f]{32}$
              walletType:
                type: string
              walletSubType:
                type: string
                description: The subtype of the wallet (e.g., custodialHot)
              wallets:
                type: array
                items:
                  type: string
                  example: 59cd72485007a239fb00282ed480da1f
                  pattern: ^[0-9a-f]{32}$
                  description: The wallets of the pending approval
              enterprise:
                type: string
                example: 59cd72485007a239fb00282ed480da1f
                pattern: ^[0-9a-f]{32}$
              organization:
                type: string
                example: 59cd72485007a239fb00282ed480da1f
                pattern: ^[0-9a-f]{32}$
              organizationName:
                type: string
                description: The organization name
              bitgoOrg:
                type: string
                description: The BitGo organization
              creator:
                type: string
                example: 59cd72485007a239fb00282ed480da1f
                pattern: ^[0-9a-f]{32}$
              createDate:
                type: string
                description: The creation date of the pending approval
                format: date-time
                title: ISO Date String
              approvedDate:
                type: string
                description: The date when the approval was granted
                format: date-time
                title: ISO Date String
              updatedAt:
                type: string
                description: >-
                  The date when the approval was last updated (any update, not
                  just processing)
                format: date-time
                title: ISO Date String
              keyCurve:
                type: string
                enum:
                  - secp256k1
                  - ed25519
                  - bls12_381
                description: The key curve of the coin attached to this pending approval
              info:
                allOf:
                  - $ref: '#/components/schemas/PendingApprovalInfo'
                description: Information about the pending approval
              state:
                allOf:
                  - $ref: '#/components/schemas/PendingApprovalState'
                description: The state of the pending approval
              scope:
                type: string
                enum:
                  - enterprise
                  - wallet
                  - organization
                  - global
                description: What kind of entity the Pending Approval is tied to
              userIds:
                type: array
                items:
                  type: string
                  description: All the Users who should see this Pending Approval
              approvalsRequired:
                type: number
                example: 1
                minimum: 1
              walletLabel:
                type: string
                description: Label for the wallet
              addressLabels:
                type: array
                items:
                  type: object
                  properties:
                    address:
                      $ref: '#/components/schemas/AddressString'
                    label:
                      type: string
                      description: The label
                    walletLabel:
                      type: string
                      description: The wallet label
                  required:
                    - address
                    - label
                  description: Address labels of recipients in this Pending Approval
              resolvers:
                type: array
                items:
                  type: object
                  description: Resolvers for the pending approval
                  properties:
                    autoApproved:
                      type: boolean
                      description: Whether the resolution was auto approved
                    date:
                      type: string
                      description: The date of resolution
                      format: date-time
                      title: ISO Date String
                    resolutionAction:
                      type: string
                      enum:
                        - approve
                        - reject
                        - skip
                        - fail
                      description: Action taken during resolution
                    resolutionMemo:
                      type: string
                      description: Memo regarding the resolution
                    resolutionType:
                      allOf:
                        - $ref: '#/components/schemas/PendingApprovalStatePending'
                      description: The type of resolution
                    user:
                      type: string
                      description: The user who resolved the approval
                    videoApprover:
                      type: string
                      description: The approver of the video resolution
                    videoException:
                      type: string
                      description: Exception details for the video
                    videoLink:
                      type: string
                      description: Link to the resolution video
                  required:
                    - resolutionType
              approvers:
                type: array
                items:
                  type: string
                  description: List of approvers
              singleRunResults:
                type: array
                items:
                  type: object
                  properties:
                    ruleId:
                      type: string
                      description: The rule ID
                    triggered:
                      type: boolean
                      description: Whether the rule was triggered
                  description: Results from single run checks
              txRequestId:
                type: string
                description: Transaction request ID
                example: 123e4567-e89b-12d3-a456-426614174000
                format: uuid
              videoId:
                type: object
                description: ID for the video related to the approval
                properties:
                  date:
                    type: string
                    description: The date of the video ID
                    format: date-time
                    title: ISO Date String
                  user:
                    type: string
                    description: The user associated with the video ID
                  videoApprover:
                    type: string
                    description: The approver of the video
                  videoException:
                    type: string
                    description: The exception related to the video
                  videoLink:
                    type: string
                    description: The link to the video
              version:
                type: number
                description: Version of the pending approval
              policyEvaluationId:
                type: string
                description: ID for the policy evaluation
              actions:
                type: array
                items:
                  type: object
                  properties:
                    approvers:
                      type: array
                      items:
                        type: string
                        description: The approvers of the action
                    excludedApprovers:
                      type: array
                      items:
                        type: string
                        description: >-
                          Users that are eligible approvers but cannot approve
                          (e.g. already approved or the initiator)
                    id:
                      type: string
                      description: The ID of the action
                    name:
                      type: string
                      description: The name of the action
                    operator:
                      type: string
                      enum:
                        - AND
                        - OR
                      description: The operator of the action
                    parameters:
                      allOf:
                        - $ref: '#/components/schemas/PolicyActionParameters'
                      description: The parameters of the action
                    resolvers:
                      type: array
                      items:
                        type: object
                        description: The resolvers of the action
                        properties:
                          autoApproved:
                            type: boolean
                            description: Whether the resolution was auto approved
                          date:
                            type: string
                            description: The date of resolution
                            format: date-time
                            title: ISO Date String
                          resolutionAction:
                            type: string
                            enum:
                              - approve
                              - reject
                              - skip
                              - fail
                            description: Action taken during resolution
                          resolutionMemo:
                            type: string
                            description: Memo regarding the resolution
                          resolutionType:
                            allOf:
                              - $ref: >-
                                  #/components/schemas/PendingApprovalStatePending
                            description: The type of resolution
                          user:
                            type: string
                            description: The user who resolved the approval
                          videoApprover:
                            type: string
                            description: The approver of the video resolution
                          videoException:
                            type: string
                            description: Exception details for the video
                          videoLink:
                            type: string
                            description: Link to the resolution video
                        required:
                          - resolutionType
                    status:
                      allOf:
                        - $ref: '#/components/schemas/EvaluatedPolicyActionStatus'
                      description: The status of the action
                  required:
                    - id
                    - name
                    - parameters
                    - status
                  description: List of actions taken
              resolutionOrder:
                type: array
                items:
                  type: object
                  properties:
                    actions:
                      type: array
                      items:
                        type: string
                        minLength: 1
                  required:
                    - actions
                  description: Order of resolution
              useLegacyPolicyEngine:
                type: boolean
                description: Flag to use legacy policy engine
              videoCallId:
                type: string
                description: ID for the video call
              lastUpdated:
                type: string
                description: The last date the approval was processing
                format: date-time
                title: ISO Date String
              freeze:
                type: object
                description: The freeze state
                properties:
                  actions:
                    type: array
                    items:
                      type: object
                      properties:
                        reason:
                          type: string
                        state:
                          type: string
                          enum:
                            - frozen
                            - unFrozen
                        time:
                          type: string
                          format: date-time
                          title: ISO Date String
                        userId:
                          type: string
                        username:
                          type: string
                  state:
                    type: string
                    enum:
                      - frozen
                      - unFrozen
              memo:
                type: array
                items:
                  type: object
                  properties:
                    text:
                      type: string
                      description: The text of the memo
                    time:
                      type: string
                      description: The time the memo was created
                      format: date-time
                      title: ISO Date String
                    userId:
                      type: string
                      description: The user ID of the admin who created the memo
                    username:
                      type: string
                      description: The username of the admin who created the memo
                  required:
                    - text
                    - time
                    - userId
                    - username
                  description: Admin memos attached to this pending approval
              associatedInquiries:
                type: array
                items:
                  type: object
                  properties:
                    inquiryId:
                      type: string
                    inquiryStatus:
                      $ref: '#/components/schemas/InquiryStatus'
                    inquirySubType:
                      $ref: '#/components/schemas/InquirySubType'
                    inquiryType:
                      $ref: '#/components/schemas/InquiryType'
                  required:
                    - inquiryId
                    - inquiryStatus
                    - inquirySubType
                    - inquiryType
                  description: Associated inquiries
            required:
              - id
              - creator
              - createDate
              - info
              - state
              - scope
            description: Pending approvals on the wallet
        allowBackupKeySigning:
          type: boolean
          example: false
        userKeySigningRequired:
          type: boolean
        coinSpecific:
          allOf:
            - $ref: '#/components/schemas/ExpressWalletCoinSpecific'
          description: Coin-specific data
        clientFlags:
          type: array
          items:
            type: string
        recoverable:
          type: boolean
        startDate:
          type: string
        hasLargeNumberOfAddresses:
          type: boolean
        config:
          allOf:
            - $ref: '#/components/schemas/ExpressWalletConfig'
          description: Custom configuration options for this wallet
    ExpressWalletAdmin:
      title: ExpressWalletAdmin
      type: object
      additionalProperties: {}
      description: Admin data (wallet policies) (`ExpressWallet.admin` in platform.yaml).
    ExpressWalletCoinSpecific:
      title: ExpressWalletCoinSpecific
      type: object
      additionalProperties: {}
      description: Coin-specific data (`ExpressWallet.coinSpecific` in platform.yaml).
    ExpressWalletConfig:
      title: ExpressWalletConfig
      type: object
      additionalProperties: {}
      description: >-
        Custom configuration options for this wallet (`ExpressWallet.config` in
        platform.yaml).
    ExpressWalletDirectResponse:
      title: ExpressWalletDirectResponse
      allOf:
        - type: object
          properties:
            id:
              type: string
              example: 59cd72485007a239fb00282ed480da1f
              pattern: ^[0-9a-f]{32}$
          required:
            - id
        - $ref: '#/components/schemas/ExpressWallet1'
      description: Generated wallet returned directly when includeKeychains is false.
    ExpressWalletFreeze:
      title: ExpressWalletFreeze
      type: object
      description: >-
        Freeze state on an express wallet (`ExpressWallet.freeze` in
        platform.yaml).
      properties:
        time:
          type: string
          description: Time when the wallet becomes frozen
        expires:
          type: string
          description: Time when the wallet is unfrozen and allowed to spend
    ExpressWalletRecoverTokenRequest:
      type: object
      properties:
        tokenContractAddress:
          type: string
          description: Contract address of the unsupported token
        recipient:
          type: string
          description: Destination address recovered tokens should be sent to
        walletPassphrase:
          type: string
          description: Wallet passphrase
        prv:
          type: string
          description: User private key
        broadcast:
          type: boolean
          description: >-
            Whether to send to BitGo for cosigning and broadcast the
            transaction. If false, a half-siged transaction will be returned.
    ExpressWalletRecoverTokenResponse:
      type: object
      properties:
        halfSigned:
          type: object
          properties:
            contractSequenceId:
              type: integer
              example: 1101
            expireTime:
              type: integer
              example: 1550088020
            gasLimit:
              type: integer
              example: 500000
            gasPrice:
              type: integer
              example: 20000000000
            operationHash:
              type: string
              example: 9.44792020725999e+76
            recipient:
              type: object
              properties:
                address:
                  type: string
                  example: 4.7261295088313645e+47
                amount:
                  type: string
                  example: '2400'
            signature:
              type: string
              example: 1.9519588812712557e+156
            tokenContractAddress:
              type: string
              example: 3.8941146273864216e+46
            walletId:
              $ref: '#/components/schemas/Id'
    ExpressWalletSignTxRequest:
      type: object
      properties:
        keychain:
          type: object
          properties:
            encryptedPrv:
              type: string
              description: Encrypted user private key
          description: >
            The user's keychain object with an `encryptedPrv` property. The
            `walletPassphrase` parameter is required when using `keychain`. Any
            request must include either `keychain` or `prv`.
        prv:
          type: string
          description: |
            User private key

            Note: The request must include either `prv` or `keychain`
          example: >-
            xprv9s21ZrQH143K3xQwj4yx3fHjDieEdqFDweBvFxn28qGvfQGvweUWuUuDRpepDu6opq3jiWHU9h3yYTKk5vvu4ykRuGA4i4Kz1vmFMPLTsoC
        txPrebuild:
          type: object
          properties:
            wallet:
              $ref: '#/components/schemas/Id'
            txHex:
              type: string
              description: Serialized transaction hex
            txBase64:
              type: string
              description: >-
                Serialized transaction base64 (applies to XLM only). The request
                must include this or a txHex
            txInfo:
              oneOf:
                - $ref: '#/components/schemas/UtxoTxInfo'
                - $ref: '#/components/schemas/XlmTxInfo'
            feeInfo:
              oneOf:
                - $ref: '#/components/schemas/UtxoFeeInfo'
                - $ref: '#/components/schemas/XlmFeeInfo'
          description: The transaction description object as created by 'Build Transaction'
        coldDerivationSeed:
          type: string
          description: >
            A seed used to create a deterministic BIP-32 path which is then used
            to derive a private key. This is useful when one wants to create
            multiple BitGo cold wallets but only protect a single master private
            key. Using the seed one can create a child key for a specific
            wallet, for instance an Ethereum wallet could use the "eth" seed
            while an XRP wallet could use "xrp" as a seed. Both of these child
            keys would be derived from a single master key and so only the
            master key needs to be stored and protected.
        walletPassphrase:
          type: string
          description: >
            Passphrase to decrypt the user keychain. `walletPassphrase` is a
            required parameter when the parameter `keychain` is provided.
        recipients:
          type: array
          items:
            type: object
          description: >-
            Array of objects describing the recipients. See buildTransaction for
            more detail. Required on ETH.
    FeeAddressTransferIntent:
      title: Fee Address Transfer Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - feeAddressTransfer
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - intentType
            - recipients
        - $ref: '#/components/schemas/BaseIntent'
    FeeOption:
      title: FeeOption
      type: object
      properties:
        unit:
          type: string
          enum:
            - baseUnit
            - cpu
            - ram
        formula:
          type: string
          enum:
            - fixed
            - feeRate
            - perKB
            - custom
            - perVKB
        feeType:
          type: string
          enum:
            - base
            - max
            - tip
        gasLimit:
          $ref: '#/components/schemas/optionalNumber'
        gasPrice:
          $ref: '#/components/schemas/optionalNumber'
    FillNonceIntent:
      title: FillNonceIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - fillNonce
              description: Must be "fillNonce".
            nonce:
              oneOf:
                - type: string
                - type: number
              description: >-
                The nonce value to fill. The transaction will be a self-send
                that consumes this nonce.
            senderAddress:
              type: string
              description: >-
                Sender address with the stuck nonce. Defaults to the wallet's
                base address.
          required:
            - intentType
            - nonce
        - $ref: '#/components/schemas/BaseIntentWithoutNonce'
      description: >-
        Base codec for fill-nonce intents. Submits a zero-value self-send to
        consume

        a specific nonce on EVM-compatible chains. Used to unblock transaction
        queues

        when a nonce gap has formed.
    FillNonceIntent1:
      title: FillNonceIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - fillNonce
            nonce:
              oneOf:
                - type: string
                - type: number
          required:
            - intentType
            - nonce
        - $ref: '#/components/schemas/BaseIntentWithoutNonce1'
    GeneralError:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
        status:
          type: integer
    GoUnstakeIntent:
      title: GoUnstakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - goUnstake
              description: Must be "goUnstake".
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
                description: The recipients to send unstaked funds to.
          required:
            - intentType
            - recipients
        - $ref: '#/components/schemas/BaseIntent'
      description: >-
        Base intent for GO wallet unstaking operations. Chain-specific
        go-unstake

        intents (e.g. Sol, Sui) compose this and declare `goStakingRequestId`

        according to their own requirements (optional for Sol, required for
        Sui).
    HbarUpdateAccountIntent:
      title: HBAR Update Account Intent
      allOf:
        - type: object
          properties:
            stakedNodeId:
              $ref: '#/components/schemas/optionalNumber'
            stakedAccountId:
              $ref: '#/components/schemas/optionalString'
            declineStakingReward:
              $ref: '#/components/schemas/optionalBoolean'
        - $ref: '#/components/schemas/AccountBaseUpdateAccountIntent'
    HypeevmBridgeFundsIntent:
      title: Hypeevm Bridge Funds Intent
      allOf:
        - type: object
          properties:
            feeOptions:
              oneOf:
                - $ref: '#/components/schemas/FeeOption'
                - $ref: '#/components/schemas/EIP1559FeeOptions'
              description: Override gas estimation for the bridge transaction.
        - $ref: '#/components/schemas/BaseBridgeFundsIntent'
      description: |-
        Bridge funds between HypeEVM L2 and L1. Specify the amount and asset via
        the amount field. Used exclusively on the HypeEVM chain.
    HypeevmEnableBridgingIntent:
      title: Hypeevm Enable Bridging Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - enableBridging
            asset:
              type: string
            network:
              $ref: '#/components/schemas/optionalString'
          required:
            - intentType
            - asset
        - $ref: '#/components/schemas/BaseIntent'
    HypeevmSpotTransferIntent:
      title: Hypeevm Spot Transfer Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - spotTransfer
              description: Must be "spotTransfer".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithRecipients'
      description: >-
        Transfer assets via the HypeEVM spot trading mechanism. Provide
        recipients

        with their address and amount. Used exclusively on the HypeEVM chain.
    IcpPaymentIntent:
      title: ICP Payment Intent
      allOf:
        - type: object
          properties:
            memo:
              $ref: '#/components/schemas/optionalString'
        - $ref: '#/components/schemas/PaymentIntent'
    Id:
      title: ID
      type: string
      pattern: ^[0-9a-f]{32}$
      example: 59cd72485007a239fb00282ed480da1f
    IdArray:
      type: array
      items:
        $ref: '#/components/schemas/Id'
      example:
        - 585951a5df8380e0e3063e9f
        - 585951a5df8380e0e304a553
    InquiryStatus:
      title: InquiryStatus
      type: string
      enum:
        - completed
        - failed
    InquirySubType:
      title: InquirySubType
      type: string
      enum:
        - withdrawalLivenessCheck
        - managePolicyLivenessCheck
    InquiryType:
      title: InquiryType
      type: string
      enum:
        - livenessCheck
    IntegerOrIntegerString:
      oneOf:
        - type: string
          pattern: ^-?\d+$
          example: '2000000'
        - type: integer
    IntegerOrString:
      oneOf:
        - type: string
          example: '2000000'
        - type: integer
    IntegerString:
      type: string
      pattern: ^-?\d+$
      example: '2000000'
    IntentType:
      title: IntentType
      type: string
      enum:
        - payment
        - transferToken
        - consolidate
        - consolidateToken
        - fanout
        - stake
        - unstake
        - delegate
        - undelegate
        - switchValidator
        - claim
        - stakeClaimRewards
        - pledge
        - voteDelegation
        - vote
        - createAccount
        - updateAccount
        - addTrustLine
        - removeTrustLine
        - signMessage
        - signTypedStructuredData
        - enableToken
        - authorize
        - acceleration
        - fillNonce
        - walletRecovery
        - contractCall
        - deactivate
        - customTx
        - closeAssociatedTokenAccount
        - stakeWithCallData
        - unstakeWithCallData
        - switchValidatorWithCallData
        - feeAddressTransfer
        - tokenApproval
        - transferStake
        - validatorRegistration
        - increaseStake
        - decreaseStake
        - signalExit
        - withdrawStake
        - spotTransfer
        - bridgeFunds
        - enableBridging
        - goUnstake
        - createBtcDelegation
        - transferAccept
        - transferReject
        - transferAcknowledge
        - transferOfferWithdrawn
        - cosignDelegationProposal
        - cosignDelegationAccept
        - allocationRequest
        - cantonCommand
        - allocationAllocate
        - allocationOfferWithdrawn
        - allocationReject
        - cantonEndInvestorOnboardingOffer
        - cantonEndInvestorOnboardingAccept
        - cantonEndInvestorOnboardingReject
        - cantonParticipantOnboardingRequest
        - defi-deposit
        - defi-redeem
        - defi-approve
        - delegateResource
        - undelegateResource
        - export
        - import
        - importtoc
    IntentType1:
      title: IntentType
      type: string
      enum:
        - payment
        - transferToken
        - consolidate
        - consolidateToken
        - fanout
        - stake
        - unstake
        - delegate
        - undelegate
        - switchValidator
        - claim
        - stakeClaimRewards
        - pledge
        - vote
        - createAccount
        - updateAccount
        - addTrustLine
        - removeTrustLine
        - signMessage
        - signTypedStructuredData
        - enableToken
        - authorize
        - acceleration
        - fillNonce
        - walletRecovery
        - contractCall
        - deactivate
        - customTx
        - closeAssociatedTokenAccount
        - delegateResource
        - undelegateResource
    InvalidId:
      title: InvalidId
      allOf:
        - type: object
          properties:
            context:
              type: object
              properties:
                id:
                  type: string
                  example: 59cd72485007a239fb00282ed480da1f
                  pattern: ^[0-9a-f]{32}$
              required:
                - id
          required:
            - context
        - $ref: '#/components/schemas/PlatformErrorNoName'
    InvalidId1:
      allOf:
        - $ref: '#/components/schemas/PlatformErrorNoName3'
        - properties:
            context:
              type: object
              properties:
                id:
                  $ref: '#/components/schemas/Id'
          required:
            - context
    InvalidWalletId:
      title: Invalid wallet id
      allOf:
        - $ref: '#/components/schemas/InvalidId1'
        - properties:
            name:
              type: string
              description: Error code
              enum:
                - InvalidWalletId
          required:
            - name
    InvalidWalletId1:
      title: Invalid Wallet ID
      allOf:
        - type: object
          properties:
            name:
              type: string
              enum:
                - InvalidWalletId
          required:
            - name
        - $ref: '#/components/schemas/InvalidId'
    IotaBuildOptions:
      title: IOTA Build Options
      allOf:
        - type: object
          properties:
            feeOptions:
              $ref: '#/components/schemas/IotaFeeOptions'
            lockedAmount:
              $ref: '#/components/schemas/optionalString'
          required:
            - feeOptions
            - lockedAmount
        - $ref: '#/components/schemas/BaseIntent'
    IotaConsolidateIntent:
      title: IOTA Consolidate Intent
      allOf:
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
        - $ref: '#/components/schemas/IotaBuildOptions'
    IotaFeeOptions:
      title: IOTA Fee Options
      type: object
      properties:
        gasLimit:
          type: number
      required:
        - gasLimit
    IotaPaymentIntent:
      title: IOTA Payment Intent
      allOf:
        - type: object
          properties:
            unspents:
              $ref: '#/components/schemas/optionalStringArray'
          required:
            - unspents
        - $ref: '#/components/schemas/PaymentIntent'
        - $ref: '#/components/schemas/IotaBuildOptions'
    KeyShareSource:
      type: string
      enum:
        - user
        - backup
        - bitgo
      example: user
    Keys:
      type: array
      items:
        $ref: '#/components/schemas/Id'
      example:
        - 585951a5df8380e0e304a553
        - 585951a5df8380e0e30d645c
        - 585951a5df8380e0e30b6147
    LightningCoin:
      title: Coin
      description: A lightning coin name.
      type: string
      example: lnbtc
    LightningOnchainRequest:
      title: LightningOnchainRequest
      type: object
      properties:
        recipients:
          type: array
          items:
            type: object
            properties:
              amountSat:
                type: string
                format: number
              address:
                type: string
            required:
              - amountSat
              - address
        satsPerVbyte:
          type: string
          format: number
        numBlocks:
          type: number
      required:
        - recipients
    LightningPaymentFailureReason:
      type: string
      enum:
        - TIMEOUT
        - NO_ROUTE
        - ERROR
        - INCORRECT_PAYMENT_DETAILS
        - INSUFFICIENT_BALANCE
        - INSUFFICIENT_WALLET_BALANCE
        - EXCESS_WALLET_BALANCE
        - INVOICE_EXPIRED
        - CANCELED
      description: |
        Reason for payment failure:
        * TIMEOUT - Payment timed out
        * NO_ROUTE - No route found
        * ERROR - Non-recoverable error
        * INCORRECT_PAYMENT_DETAILS - Payment details are incorrect
        * INSUFFICIENT_BALANCE - Insufficient channel outbound capacity
        * INSUFFICIENT_WALLET_BALANCE - Insufficient custodial lightning balance
        * EXCESS_WALLET_BALANCE - Excess custodial lightning balance
        * INVOICE_EXPIRED - Invoice has expired
        * CANCELED - Payment was canceled
    LightningPaymentIntent:
      title: Lightning Payment Intent
      oneOf:
        - allOf:
            - type: object
              properties:
                intentType:
                  type: string
                  enum:
                    - payment
              required:
                - intentType
            - $ref: '#/components/schemas/BaseIntent'
            - $ref: '#/components/schemas/LightningPaymentRequestWithSig'
        - allOf:
            - type: object
              properties:
                intentType:
                  type: string
                  enum:
                    - payment
                onchainRequest:
                  $ref: '#/components/schemas/LightningOnchainRequest'
              required:
                - intentType
                - onchainRequest
            - $ref: '#/components/schemas/BaseIntent'
    LightningPaymentRequest:
      title: LightningPaymentRequest
      type: object
      properties:
        invoice:
          type: string
        amountMsat:
          type: string
          format: number
        feeLimitMsat:
          type: string
          format: number
        feeLimitRatio:
          type: number
      required:
        - invoice
    LightningPaymentRequestWithSig:
      title: LightningPaymentRequestWithSig
      type: object
      properties:
        signedRequest:
          $ref: '#/components/schemas/LightningPaymentRequest'
        signature:
          type: string
      required:
        - signedRequest
        - signature
    LimitRuleCondition:
      title: LimitRuleCondition
      type: object
      properties:
        amountString:
          type: string
          example: '2000000'
          pattern: ^-?\d+$
        timeWindow:
          type: number
          description: Time window in seconds for a velocity limit, between 1 and 30 days
          minimum: 0
          maximum: 2678400
        groupTags:
          type: array
          items:
            type: string
        startDate:
          type: string
          format: date-time
          title: ISO Date String
      required:
        - amountString
        - timeWindow
    ListRuleEntryType:
      type: string
      enum:
        - address
        - walletId
        - enterpriseId
        - linkAccountId
      description: the kind of resource a list rule entry refers to
    LivenessVerificationParameter:
      title: LivenessVerificationParameter
      type: string
      enum:
        - transactionInitiator
        - walletAdmins
        - videoIdUsers
        - enterpriseAdmin
    Message:
      type: object
      properties:
        coin:
          type: string
          description: The coin associated with the wallet.
        combineSigShare:
          type: string
        createdDate:
          description: The date the message was created.
          type: string
          format: date-time
        messageEncoded:
          description: The message encoded as a hex string.
          type: string
        messageRaw:
          description: The message as human readable text.
          type: string
        signatureShares:
          type: array
          items:
            $ref: '#/components/schemas/PlatformSignatureShare'
        state:
          $ref: '#/components/schemas/PlatformTransactionRequestState'
        txHash:
          type: string
          description: The signed hex of the message.
        updatedDate:
          description: The date when the message state was updated.
          type: string
          format: date-time
      required:
        - messageRaw
        - state
    Message1:
      type: object
      properties:
        coin:
          type: string
          description: The coin associated with the wallet.
        combineSigShare:
          type: string
        createdDate:
          description: The date the message was created.
          type: string
          format: date-time
        messageEncoded:
          description: The message encoded as a hex string.
          type: string
        messageRaw:
          description: The message as human readable text.
          type: string
        signatureShares:
          type: array
          items:
            $ref: '#/components/schemas/SignatureShare'
        state:
          $ref: '#/components/schemas/TransactionRequestState1'
        txHash:
          type: string
          description: The signed hex of the message.
        updatedDate:
          description: The date when the message state was updated.
          type: string
          format: date-time
      required:
        - messageRaw
        - state
    MmiSignMessageIntent:
      title: MMI Sign Message Intent
      allOf:
        - type: object
          properties:
            custodianMessageId:
              type: string
          required:
            - custodianMessageId
        - $ref: '#/components/schemas/SignMessageIntent'
    MmiSignTransactionIntent:
      title: MMI Sign Transaction Intent
      allOf:
        - type: object
          properties:
            custodianTransactionId:
              type: string
          required:
            - custodianTransactionId
        - $ref: '#/components/schemas/PaymentIntent'
    MultisigTypeVersion1:
      type: string
      enum:
        - MPCv2
    MutabilityConstraint1:
      type: string
      description: >
        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
      enum:
        - managed
        - permanent
    NearStakeIntent:
      title: Near Stake Intent
      allOf:
        - type: object
          properties:
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - recipients
        - $ref: '#/components/schemas/StakeIntent'
    NearStakeIntent1:
      title: Near Stake
      allOf:
        - $ref: '#/components/schemas/StakeIntent2'
        - type: object
          properties:
            recipients:
              type: array
              items:
                $ref: '#/components/schemas/RecipientEntry1'
          required:
            - recipients
    NearUnstakeIntent:
      title: Near Unstake Intent
      allOf:
        - type: object
          properties:
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - recipients
        - $ref: '#/components/schemas/UnstakeIntent'
    NearUnstakeIntent1:
      title: Near Unstake
      allOf:
        - $ref: '#/components/schemas/UnstakeIntent2'
        - type: object
          properties:
            recipients:
              type: array
              items:
                $ref: '#/components/schemas/RecipientEntry1'
          required:
            - recipients
    NearWithdrawIntent:
      title: Near Withdraw Intent
      allOf:
        - type: object
          properties:
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - recipients
        - $ref: '#/components/schemas/WithdrawIntent'
    NearWithdrawIntent1:
      title: Near Claim Unstake
      allOf:
        - $ref: '#/components/schemas/WithdrawIntent2'
        - type: object
          properties:
            recipients:
              type: array
              items:
                $ref: '#/components/schemas/RecipientEntry1'
          required:
            - recipients
    NumKeychains:
      description: |
        Number of keys provided.  This value must be 3 for hot wallets,
        1 for **ofc** wallets, and not specified for custodial wallets.
      type: integer
      example: 3
    NumSignatures:
      description: |
        Number of signatures required.  This value must be 2 for
        hot wallets, 1 for **ofc** wallets, and not specified for custodial
        wallets.
      type: integer
      example: 2
    NumberOrString:
      oneOf:
        - type: string
          pattern: ^-?[\d\.]+$
          example: '1.5'
        - type: number
    Otp:
      type: string
      example: '123456'
      description: Second factor authentication token
    ParsedTx:
      title: ParsedTx
      type: object
      properties:
        inputs:
          type: array
          items:
            type: object
            properties:
              valueString:
                type: string
              _id:
                type: string
              address:
                type: string
              chain:
                type: number
              derivationIndex:
                type: number
              index:
                type: number
              value:
                oneOf:
                  - type: number
                  - type: number
            required:
              - valueString
        minerFee:
          oneOf:
            - type: string
            - type: number
        outputs:
          type: array
          items:
            type: object
            properties:
              valueString:
                type: string
              address:
                type: string
              change:
                type: boolean
              coinName:
                type: string
              data:
                type: string
              isPayGo:
                type: boolean
              value:
                oneOf:
                  - type: number
                  - type: number
              wallet:
                type: string
              walletV1:
                type: string
              baseAddress:
                type: string
              enterprise:
                type: string
            required:
              - valueString
        spendAmount:
          oneOf:
            - type: string
            - type: number
        gasPrice:
          type: number
        hasUnvalidatedData:
          type: boolean
        payGoFee:
          oneOf:
            - type: string
            - type: number
        spendAmounts:
          type: array
          items:
            type: object
            additionalProperties: {}
        type:
          type: string
      required:
        - inputs
        - minerFee
        - outputs
        - spendAmount
    PaymentIntent:
      title: PaymentIntent
      allOf:
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithRecipients'
        - oneOf:
            - type: object
              properties:
                intentType:
                  type: string
                  enum:
                    - payment
                  description: Must be "payment".
              required:
                - intentType
            - type: object
              properties:
                intentType:
                  type: string
                  enum:
                    - payment
                  description: Must be "payment".
                isTestTransaction:
                  type: boolean
                  description: >-
                    When true, marks this as a test transaction (not broadcast
                    to the network).
              required:
                - intentType
                - isTestTransaction
    PaymentIntent1:
      title: PaymentIntent
      allOf:
        - type: object
          properties:
            intent:
              type: string
              enum:
                - payment
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address1'
                  amount:
                    $ref: '#/components/schemas/Amount1'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - intent
            - recipients
        - $ref: '#/components/schemas/BaseIntent1'
    PendingApproval1:
      title: Pending approval
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        coin:
          $ref: '#/components/schemas/Coin'
        wallet:
          $ref: '#/components/schemas/Id'
        enterprise:
          $ref: '#/components/schemas/Id'
        organization:
          $ref: '#/components/schemas/Id'
        creator:
          $ref: '#/components/schemas/Id'
        createDate:
          type: string
          format: date-time
        info:
          anyOf:
            - $ref: '#/components/schemas/PendingApprovalTransactionRequest'
            - $ref: '#/components/schemas/PendingApprovalTransactionRequestFull1'
            - $ref: '#/components/schemas/PendingApprovalUserChangeRequest'
            - $ref: '#/components/schemas/PendingApprovalPolicyRuleRequest'
            - $ref: >-
                #/components/schemas/PendingApprovalUpdateApprovalsRequiredRequest
            - $ref: >-
                #/components/schemas/PendingApprovalEnterpriseModificationResponse1
            - $ref: '#/components/schemas/PendingApprovalEnterpriseInviteRequest'
        state:
          $ref: '#/components/schemas/PendingApprovalState1'
        scope:
          description: What kind of entity the Pending Approval is tied to
          type: string
          enum:
            - enterprise
            - wallet
        userIds:
          description: All the Users who should see this Pending Approval
          type: array
          items:
            $ref: '#/components/schemas/Id'
        approvalsRequired:
          $ref: '#/components/schemas/ApprovalsRequired'
        walletLabel:
          type: string
        resolvers:
          type: array
          items:
            type: object
            properties:
              user:
                type: string
              date:
                type: string
              resolutionType:
                type: string
                enum:
                  - approved
                  - awaitingSignature
                  - pending
                  - pendingBitGoAdminApproval
                  - pendingCryptographicApproval
                  - pendingCustodianApproval
                  - pendingFinalApproval
                  - pendingIdVerification
                  - pendingVideoApproval
                  - processing
                  - rejected
              signatures:
                type: array
                items:
                  type: string
              videoApprover:
                type: string
              videoLink:
                type: string
              videoException:
                type: string
            required:
              - user
              - date
              - resolutionType
              - signatures
        addressLabels:
          type: array
          items:
            $ref: '#/components/schemas/PendingApprovalAddressLabel'
    PendingApprovalAddressLabel:
      description: Address labels of recipients in this Pending Approval
      type: object
      properties:
        address:
          $ref: '#/components/schemas/AddressString3'
        label:
          $ref: '#/components/schemas/AddressLabel'
        walletLabel:
          $ref: '#/components/schemas/WalletLabel'
      required:
        - address
        - label
    PendingApprovalEnterpriseInviteRequest:
      title: Enterprise Invite Request
      type: object
      properties:
        type:
          type: string
          enum:
            - enterpriseInviteRequest
        enterpriseInviteRequest:
          type: object
          properties:
            action:
              type: string
              enum:
                - add
            email:
              type: string
              description: The email address of the user being invited
            userId:
              $ref: '#/components/schemas/Id'
              description: The ID of the user being invited
            isVideoIdUser:
              type: boolean
            enterpriseInfo:
              type: object
              properties:
                id:
                  $ref: '#/components/schemas/Id'
                  description: The ID of the enterprise the user is being invited to
                name:
                  type: string
                  description: The name of the enterprise the user is being invited to
                requiredVerificationStep:
                  type: string
                  description: >-
                    The required verification step needed (if any) before the
                    user can join the enterprise
                invitedBy:
                  type: object
                  properties:
                    id:
                      $ref: '#/components/schemas/Id'
                      description: The ID of the user who invited the user
                    fullName:
                      type: string
                      description: The full name of the user who invited the user
                    email:
                      type: string
                      description: The email address of the user who invited the user
    PendingApprovalEnterpriseModificationResponse:
      title: Enterprise modification request
      type: object
      properties:
        policyRuleRequest:
          type: object
          properties:
            action:
              type: string
            updateEnterpriseRequest:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - updateEnterpriseRequest
                action:
                  type: string
                  enum:
                    - add
                    - remove
                permission:
                  type: string
                  enum:
                    - admin
                userId:
                  type: string
                email:
                  allOf:
                    - $ref: '#/components/schemas/PlatformEmail'
                  description: E-Mail address of newly added users
        type:
          type: string
          enum:
            - policyRuleRequest
    PendingApprovalEnterpriseModificationResponse1:
      title: Enterprise modification request
      type: object
      properties:
        policyRuleRequest:
          type: object
          properties:
            action:
              type: string
            updateEnterpriseRequest:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - updateEnterpriseRequest
                action:
                  type: string
                  enum:
                    - add
                    - remove
                permission:
                  type: string
                  enum:
                    - admin
                userId:
                  type: string
                email:
                  allOf:
                    - $ref: '#/components/schemas/Email'
                  description: E-Mail address of newly added users
        type:
          type: string
          enum:
            - policyRuleRequest
    PendingApprovalInfo:
      title: PendingApprovalInfo
      type: object
      properties:
        type:
          $ref: '#/components/schemas/PendingApprovalType'
        userChangeRequest:
          type: object
          properties:
            action:
              type: string
              description: The action taken
            permissions:
              type: array
              items:
                type: string
                description: The permissions associated with the change
            userChanged:
              type: string
              description: The user that changed
        transactionRequest:
          type: object
          properties:
            buildParams:
              description: The build parameters for the transaction
            coinSpecific:
              description: Coin-specific details
            comment:
              nullable: true
              type: string
              description: The comment for the transaction request
            fee:
              description: The fee for the transaction
            isUnsigned:
              nullable: true
              type: boolean
              description: Indicates if the transaction is unsigned
            policyUniqueId:
              description: The unique ID for the policy
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    type: string
                    description: The address of the recipient
                    example: 2MvrwRYBAuRtPTiZ5MyKg42Ke55W3fZJfZS
                    maxLength: 250
                  amount:
                    description: The amount to be transferred
                    example: '100000'
                  data:
                    type: string
                    description: Additional data for the transaction
                description: The recipients of the transaction
            requestedAmount:
              description: The requested amount
            sourceWallet:
              description: The source wallet
            triggeredPolicy:
              description: The triggered policy for the transaction
            validTransaction:
              type: string
              description: Indicates if the transaction is valid
            validTransactionHash:
              type: string
              description: The hash of the valid transaction
            verificationItems:
              nullable: true
              type: array
              items:
                type: string
              description: The verification items for the transaction
            verificationRuleId:
              nullable: true
              type: string
              description: The ID of the verification rule
            videoApprovers:
              type: array
              items:
                description: The video approvers for the transaction
        transactionRequestFull:
          type: object
          properties:
            intent:
              allOf:
                - $ref: '#/components/schemas/PaymentIntent'
              description: The intent of the transaction request
            policyUniqueId:
              type: string
              description: The unique ID for the policy
            txRequest:
              oneOf:
                - $ref: '#/components/schemas/TransactionRequestLite'
                - $ref: '#/components/schemas/TransactionRequestFull'
              description: The transaction request details
            txRequestId:
              allOf:
                - $ref: '#/components/schemas/TransactionRequestId'
              description: The ID of the transaction request
            verificationItems:
              type: array
              items:
                type: string
                description: The verification items for the transaction
            verificationRuleId:
              type: string
              description: The ID of the verification rule
            videoApprovers:
              type: array
              items:
                type: string
                description: The video approvers for the transaction
            walletRebalanceEventId:
              type: string
              description: The ID of the wallet rebalance event
          required:
            - txRequestId
        policyRuleRequest:
          type: object
          properties:
            action:
              type: string
              description: The action of the policy rule request
            update:
              type: object
              description: The update details of the policy rule request (single-wallet)
              properties:
                action:
                  allOf:
                    - $ref: '#/components/schemas/PolicyRuleAction'
                  description: The action of the policy rule
                coin:
                  $ref: '#/components/schemas/CoinString'
                condition:
                  allOf:
                    - $ref: '#/components/schemas/PolicyRuleUpdateCondition'
                  description: The condition of the policy rule
                generatePolicy:
                  type: boolean
                  description: >-
                    Should generate new whitelist policy when generatePolicy is
                    undefined *
                id:
                  type: string
                  description: The ID of the policy rule
                lockDate:
                  type: string
                  format: date
                  title: Date String
                type:
                  allOf:
                    - $ref: '#/components/schemas/ApiRuleType'
                  description: The type of the API rule
                walletId:
                  type: string
                  description: Optional walletId field for multi-wallet updates
            updates:
              type: array
              items:
                type: object
                properties:
                  action:
                    allOf:
                      - $ref: '#/components/schemas/PolicyRuleAction'
                    description: The action of the policy rule
                  coin:
                    $ref: '#/components/schemas/CoinString'
                  condition:
                    allOf:
                      - $ref: '#/components/schemas/PolicyRuleUpdateCondition'
                    description: The condition of the policy rule
                  generatePolicy:
                    type: boolean
                    description: >-
                      Should generate new whitelist policy when generatePolicy
                      is undefined *
                  id:
                    type: string
                    description: The ID of the policy rule
                  lockDate:
                    type: string
                    format: date
                    title: Date String
                  type:
                    allOf:
                      - $ref: '#/components/schemas/ApiRuleType'
                    description: The type of the API rule
                  walletId:
                    type: string
                    description: Optional walletId field for multi-wallet updates
                description: >-
                  The update details for multi-wallet operations (bulk
                  whitelist)
        updateApprovalsRequiredRequest:
          type: object
          properties:
            requestedApprovalsRequired:
              type: number
              description: The number of requested approvals required
        updateEnterpriseRequest:
          type: object
          properties:
            action:
              type: string
              enum:
                - add
                - update
                - remove
            email:
              type: string
              description: The email of the user
            isVideoIdUser:
              type: boolean
              description: Indicates if the user is a video ID user
            permissions:
              type: string
              enum:
                - admin
                - auditor
              description: The permissions associated with the update
            userId:
              type: string
              description: The ID of the user
        updateOrganizationRequest:
          type: object
          properties:
            action:
              type: string
              enum:
                - add
                - update
                - remove
            email:
              type: string
              description: The email of the user
            inviterInfo:
              type: object
              description: >-
                CaaS org add-invite only (`POST
                /api/v2/organization/{orgId}/user`); UMS org user changes use
                `genericRequest`.
              properties:
                email:
                  type: string
                fullName:
                  type: string
                id:
                  type: string
              required:
                - email
                - fullName
                - id
            role:
              type: string
              enum:
                - serviceUser
                - admin
                - member
                - customer
              description: The role of the user in the organization
              example: admin
            userId:
              type: string
              description: The ID of the user
        genericRequest:
          type: object
          properties:
            anchors:
              type: array
              items:
                type: object
                properties:
                  anchorType:
                    allOf:
                      - $ref: '#/components/schemas/AnchorType'
                    description: The type of the anchor
                  key:
                    type: string
                    description: The key of the anchor
                  value:
                    type: string
                    description: The value of the anchor
                required:
                  - anchorType
                  - key
                  - value
                description: The anchors associated with the request
            changeType:
              allOf:
                - $ref: '#/components/schemas/ChangeType'
              description: The type of change requested
            currentId:
              type: string
              description: The current ID associated with the request
            description:
              type: string
              description: The description of the request
            metadata:
              type: object
              additionalProperties:
                oneOf:
                  - type: string
                  - type: number
                  - type: boolean
                  - type: array
                    items:
                      type: string
              description: The metadata of the request
            proposedId:
              type: string
              description: The proposed ID associated with the request
            resources:
              type: array
              items:
                type: object
                properties:
                  currentId:
                    type: string
                  metadata:
                    type: object
                    additionalProperties:
                      oneOf:
                        - type: string
                        - type: number
                        - type: boolean
                        - type: array
                          items:
                            type: string
                  proposedId:
                    type: string
                description: The resources associated with the request
            resourceType:
              type: string
              description: The resource type of the request
        enterpriseInviteRequest:
          type: object
          properties:
            action:
              type: string
              enum:
                - add
                - update
                - remove
            email:
              type: string
              description: The email of the user
            enterpriseInfo:
              type: object
              description: Additional info used by the client accepting the invite
              properties:
                id:
                  type: string
                invitedBy:
                  $ref: '#/components/schemas/CaasOrganizationInviteInviterInfo'
                name:
                  type: string
                requiredVerificationStep:
                  type: string
                userKycState:
                  type: string
              required:
                - id
                - invitedBy
                - name
                - requiredVerificationStep
            isVideoIdUser:
              type: boolean
              description: Indicates if the user is a video ID user
            permissions:
              type: string
              enum:
                - admin
                - auditor
              description: The permissions associated with the invite
            userId:
              type: string
              description: The ID of the user
        updateWalletSettingRequest:
          type: object
          properties:
            userKeySigningRequired:
              type: object
              properties:
                newValue:
                  type: boolean
                oldValue:
                  type: boolean
              required:
                - newValue
                - oldValue
      required:
        - type
    PendingApprovalPolicyRuleRequest:
      title: Policy rule request
      type: object
      properties:
        policyRuleRequest:
          type: object
          properties:
            action:
              type: string
            update:
              type: object
              properties:
                action:
                  $ref: '#/components/schemas/PolicyRuleActions'
                coin:
                  $ref: '#/components/schemas/Coin'
                condition:
                  type: object
                  properties:
                    excludeTags:
                      $ref: '#/components/schemas/IdArray'
                    groupTags:
                      $ref: '#/components/schemas/IdArray'
                  additionalProperties: true
                id:
                  type: string
                  description: the id of the rule that is being updated
                type:
                  $ref: '#/components/schemas/PolicyRuleTriggers'
        type:
          type: string
          enum:
            - policyRuleRequest
    PendingApprovalState:
      title: PendingApprovalState
      oneOf:
        - $ref: '#/components/schemas/PendingApprovalStatePending'
        - $ref: '#/components/schemas/PendingApprovalStateResolved'
        - $ref: '#/components/schemas/PendingApprovalStateTrust'
        - $ref: '#/components/schemas/PendingApprovalStateProtected'
    PendingApprovalState1:
      anyOf:
        - $ref: '#/components/schemas/PendingApprovalStatePending1'
        - $ref: '#/components/schemas/PendingApprovalStateResolved'
    PendingApprovalStatePending:
      title: Pending
      type: string
      enum:
        - pending
        - awaitingSignature
        - pendingFinalApproval
        - pendingCustodianApproval
        - pendingVideoApproval
        - pendingIdVerification
        - pendingLivenessVerification
        - pendingManualTrustReview
        - pendingManualSupportReview
        - pendingVideoApprovalFromSupport
    PendingApprovalStatePending1:
      title: Pending
      type: string
      enum:
        - pending
        - awaitingSignature
        - pendingFinalApproval
        - pendingCustodianApproval
        - pendingVideoApproval
        - pendingIdVerification
    PendingApprovalStateProtected:
      title: Pending Protected
      type: string
      enum:
        - pendingVideoApproval
        - pendingIdVerification
        - awaitingSignature
        - pendingCustodianApproval
        - pendingManualTrustReview
    PendingApprovalStateResolved:
      title: Resolved
      type: string
      enum:
        - approved
        - processing
        - rejected
    PendingApprovalStateTrust:
      title: Pending Trust
      type: string
      enum:
        - pendingVideoApproval
        - pendingIdVerification
        - awaitingSignature
        - pendingCustodianApproval
        - pendingManualTrustReview
    PendingApprovalTransactionRequest:
      title: Transaction request (lite)
      type: object
      properties:
        transactionRequest:
          type: object
          properties:
            buildParams:
              type: object
            coinSpecific:
              type: object
            comment:
              type: string
            fee:
              $ref: '#/components/schemas/IntegerOrString'
            isUnsigned:
              type: boolean
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/AddressString3'
                  amount:
                    $ref: '#/components/schemas/IntegerOrIntegerString'
                  data:
                    type: string
            requestedAmount:
              $ref: '#/components/schemas/IntegerOrIntegerString'
            sourceWallet:
              $ref: '#/components/schemas/Id'
            triggeredPolicy:
              $ref: '#/components/schemas/Id'
            validTransaction:
              type: string
            validTransactionHash:
              type: string
        type:
          type: string
          enum:
            - transactionRequest
    PendingApprovalTransactionRequestFull:
      title: Transaction request (full)
      type: object
      properties:
        transactionRequestFull:
          type: object
          properties:
            txRequestId:
              type: string
            policyUniqueId:
              $ref: '#/components/schemas/Id'
            verificationItems:
              type: array
              items:
                type: string
            verificationRuleId:
              type: string
            videoApprovers:
              $ref: '#/components/schemas/IdArray'
            walletRebalanceEventId:
              $ref: '#/components/schemas/Id'
            txRequest:
              $ref: '#/components/schemas/PlatformTransactionRequest'
          required:
            - txRequestId
        type:
          type: string
          enum:
            - transactionRequestFull
    PendingApprovalTransactionRequestFull1:
      title: Transaction request (full)
      type: object
      properties:
        transactionRequestFull:
          type: object
          properties:
            txRequestId:
              type: string
            policyUniqueId:
              $ref: '#/components/schemas/Id'
            verificationItems:
              type: array
              items:
                type: string
            verificationRuleId:
              type: string
            videoApprovers:
              $ref: '#/components/schemas/IdArray'
            walletRebalanceEventId:
              $ref: '#/components/schemas/Id'
            txRequest:
              $ref: '#/components/schemas/TransactionRequest'
          required:
            - txRequestId
        type:
          type: string
          enum:
            - transactionRequestFull
    PendingApprovalType:
      title: PendingApprovalType
      type: string
      enum:
        - userChangeRequest
        - transactionRequest
        - transactionRequestFull
        - policyRuleRequest
        - updateApprovalsRequiredRequest
        - updateEnterpriseRequest
        - updateOrganizationRequest
        - genericRequest
        - enterpriseInviteRequest
        - updateWalletSettingRequest
    PendingApprovalUpdateApprovalsRequiredRequest:
      title: Update approvals required request
      type: object
      properties:
        type:
          type: string
          enum:
            - updateApprovalsRequiredRequest
        updateApprovalsRequiredRequest:
          type: object
          properties:
            requestedApprovalsRequired:
              type: number
    PendingApprovalUserChangeRequest:
      title: User change request
      type: object
      properties:
        type:
          type: string
          enum:
            - userChangeRequest
        userChangeRequest:
          type: object
          properties:
            action:
              type: string
            permissions:
              type: string
            userChanged:
              $ref: '#/components/schemas/Id'
    PingResponseType:
      title: PingResponseType
      type: object
      properties:
        status:
          type: string
        timestamp:
          type: string
      required:
        - status
        - timestamp
    PlatformCommitmentShare:
      type: object
      properties:
        from:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The source of the commitment share.
        to:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The recipient of the commitment share.
        share:
          type: string
          description: The commitment share.
        type:
          allOf:
            - $ref: '#/components/schemas/CommitmentType'
            - default: commitment
          description: The type of the commitment share.
      required:
        - from
        - to
        - share
        - type
    PlatformEmail:
      type: string
      format: email
      example: user@example.com
    PlatformPendingApproval:
      title: Pending approval
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        coin:
          $ref: '#/components/schemas/Coin'
        wallet:
          $ref: '#/components/schemas/Id'
        enterprise:
          $ref: '#/components/schemas/Id'
        organization:
          $ref: '#/components/schemas/Id'
        creator:
          $ref: '#/components/schemas/Id'
        createDate:
          type: string
          format: date-time
        info:
          anyOf:
            - $ref: '#/components/schemas/PendingApprovalTransactionRequest'
            - $ref: '#/components/schemas/PendingApprovalTransactionRequestFull'
            - $ref: '#/components/schemas/PendingApprovalUserChangeRequest'
            - $ref: '#/components/schemas/PendingApprovalPolicyRuleRequest'
            - $ref: >-
                #/components/schemas/PendingApprovalUpdateApprovalsRequiredRequest
            - $ref: >-
                #/components/schemas/PendingApprovalEnterpriseModificationResponse
            - $ref: '#/components/schemas/PendingApprovalEnterpriseInviteRequest'
        state:
          $ref: '#/components/schemas/PlatformPendingApprovalState'
        scope:
          description: What kind of entity the Pending Approval is tied to
          type: string
          enum:
            - enterprise
            - wallet
        userIds:
          description: All the Users who should see this Pending Approval
          type: array
          items:
            $ref: '#/components/schemas/Id'
        approvalsRequired:
          $ref: '#/components/schemas/ApprovalsRequired'
        walletLabel:
          type: string
        resolvers:
          type: array
          items:
            type: object
            properties:
              user:
                type: string
              date:
                type: string
              resolutionType:
                type: string
                enum:
                  - approved
                  - awaitingSignature
                  - pending
                  - pendingBitGoAdminApproval
                  - pendingCryptographicApproval
                  - pendingCustodianApproval
                  - pendingFinalApproval
                  - pendingIdVerification
                  - pendingVideoApproval
                  - processing
                  - rejected
              signatures:
                type: array
                items:
                  type: string
              videoApprover:
                type: string
              videoLink:
                type: string
              videoException:
                type: string
            required:
              - user
              - date
              - resolutionType
              - signatures
        addressLabels:
          type: array
          items:
            $ref: '#/components/schemas/PendingApprovalAddressLabel'
    PlatformPendingApprovalState:
      anyOf:
        - $ref: '#/components/schemas/PlatformPendingApprovalStatePending'
        - $ref: '#/components/schemas/PlatformPendingApprovalStateResolved'
    PlatformPendingApprovalStatePending:
      title: Pending
      type: string
      enum:
        - pending
        - awaitingSignature
        - pendingFinalApproval
        - pendingCustodianApproval
        - pendingVideoApproval
        - pendingIdVerification
    PlatformPendingApprovalStateResolved:
      title: Resolved
      type: string
      enum:
        - approved
        - processing
        - rejected
    PlatformSignatureShare:
      type: object
      properties:
        from:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The source of the signature share.
        to:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The recipient of the signature share.
        share:
          type: string
          description: The signature share.
      required:
        - from
        - to
        - share
    PlatformTransaction:
      type: object
      properties:
        state:
          $ref: '#/components/schemas/PlatformTransactionState'
        unsignedTx:
          allOf:
            - $ref: '#/components/schemas/TransactionRequestUnsignedTransaction'
          description: Holds the unsigned transaction for this transaction in a tx-request.
        signatureShares:
          type: array
          description: >-
            Only used for MPC coins. This is used to collect signature shares
            from and exchange them with the user. Holds the signature shares for
            this transaction in a tx-request.
          items:
            $ref: '#/components/schemas/PlatformSignatureShare'
        commitmentShares:
          type: array
          description: >-
            Only used for MPC coins on EdDSA curve. This is used to collect
            commitment shares from and exchange them with the user. Holds the
            commitment shares for this transaction in a tx-request.
          items:
            $ref: '#/components/schemas/PlatformCommitmentShare'
        txHash:
          type: string
          description: >-
            The hash of the transaction from the TxRequest that has been signed
            and is pending broadcast.
        bitgoPaillierChallenge:
          description: >-
            BitGo-to-user paillier challenge. Required when signing with ECDSA
            MPC wallets.
          type: object
          properties:
            p:
              type: array
              items:
                type: string
      required:
        - state
        - unsignedTx
    PlatformTransactionRequest:
      anyOf:
        - $ref: '#/components/schemas/PlatformTransactionRequestLite'
        - $ref: '#/components/schemas/PlatformTransactionRequestFull'
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - userId
        - intent
    PlatformTransactionRequestBase:
      type: object
      properties:
        txRequestId:
          type: string
          description: >-
            A unique ID for the TxRequest document across all wallets. The
            combination of the txRequestId and version will always be unique.
        version:
          type: number
          description: >-
            The version of the document. Data changes are done only with inserts
            and incrementing the version.
        latest:
          type: boolean
          description: >-
            A boolean flag that indicates whether the document is the latest
            version of the TxRequest.
        walletId:
          type: string
          description: The id of the Wallet the TxRequest is for.
        walletType:
          allOf:
            - $ref: '#/components/schemas/WalletTypePublic'
          description: >-
            The type describes who owns the keys to the wallet associated to the
            TxRequest.
        enterpriseId:
          type: string
          description: >-
            If the wallet that owns the TxRequest is owned by an enterprise then
            this is the Id of said enterprise.
        state:
          $ref: '#/components/schemas/PlatformTransactionRequestState'
        date:
          allOf:
            - $ref: '#/components/schemas/DateTime'
          description: >-
            The date and time this version of the TxRequest document was
            created.
        createdDate:
          allOf:
            - $ref: '#/components/schemas/DateTime'
          description: The date and time the version 1 TxRequest document was created.
        userId:
          type: string
          description: >-
            The Id of the User that produced this version of the TxRequest
            document. Could have created a new document or updated an existing
            document.
        initiatedBy:
          type: string
          description: >-
            The Id of the User that originally created the TxRequest document
            (initiated the TxRequest).
        updatedBy:
          type: string
          description: >-
            The Id of the User that last updated the TxRequest document. This is
            an alias for the userId field.
        intent:
          $ref: '#/components/schemas/TransactionRequestIntent'
        intents:
          type: array
          items:
            $ref: '#/components/schemas/TransactionRequestIntent'
        pendingApprovalId:
          type: string
          description: >-
            The id of the Pending Approval that was created for the TxRequest if
            one was required.
        isCanceled:
          type: boolean
          description: True, if the transaction request is canceled.
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - createdDate
        - userId
        - initiatedBy
        - updatedBy
        - intents
    PlatformTransactionRequestFull:
      title: Full
      allOf:
        - $ref: '#/components/schemas/PlatformTransactionRequestBase'
        - type: object
          properties:
            transactions:
              description: Transaction information.
              type: array
              items:
                $ref: '#/components/schemas/PlatformTransaction'
            messages:
              description: Messages for the transaction request.
              type: array
              items:
                $ref: '#/components/schemas/Message'
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - userId
        - intent
        - transactions
    PlatformTransactionRequestLite:
      title: Lite
      allOf:
        - $ref: '#/components/schemas/PlatformTransactionRequestBase'
        - type: object
          properties:
            unsignedTxs:
              type: array
              description: >-
                Holds all unsigned transactions that will be used to fulfill the
                TxRequest for MPC wallets.
              items:
                $ref: '#/components/schemas/TransactionRequestUnsignedTransaction'
            signatureShares:
              type: array
              description: >-
                Only used for MPC coins. This is used to collect signature
                shares from and exchange them with the user.
              items:
                $ref: '#/components/schemas/PlatformSignatureShare'
            commitmentShares:
              type: array
              description: >-
                Only used for MPC coins on EdDSA curve. This is used to collect
                commitment shares from and exchange them with the user.
              items:
                $ref: '#/components/schemas/PlatformCommitmentShare'
            txHashes:
              type: array
              items:
                type: string
                description: >-
                  The hashes of all transactions from the TxRequest that have
                  been signed and are pending broadcast.
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - userId
        - intent
    PlatformTransactionRequestState:
      type: string
      enum:
        - initialized
        - pendingApproval
        - pendingUserCommitment
        - pendingUserRShare
        - pendingUserGShare
        - readyToSend
        - pendingUserSignature
        - pendingDelivery
        - signed
        - delivered
        - canceled
        - rejected
        - failed
    PlatformTransactionState:
      type: string
      enum:
        - initialized
        - pendingSignature
        - eddsaPendingCommitment
        - eddsaPendingRShare
        - eddsaPendingGShare
        - readyToCombineShares
        - signed
        - held
        - delivered
        - invalidSignature
        - rejected
        - ecdsaMPCv2Round1
        - ecdsaMPCv2Round2
        - ecdsaMPCv2Round3
    Policy1:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        date:
          type: string
          format: date-time
        label:
          type: string
        latest:
          type: boolean
        rules:
          type: array
          items:
            $ref: '#/components/schemas/PolicyRule'
        version:
          type: integer
      required:
        - id
        - latest
        - rules
        - version
    PolicyActionParameters:
      title: PolicyActionParameters
      type: object
      properties:
        minRequired:
          oneOf:
            - type: string
              minLength: 1
            - type: number
        userIds:
          type: array
          items:
            type: string
            minLength: 1
        initiatorIsAllowedToApprove:
          type: boolean
        webhookURL:
          type: string
          minLength: 1
        livenessCheckUser:
          $ref: '#/components/schemas/LivenessVerificationParameter'
        isFallback:
          type: boolean
        walletSubtype:
          $ref: '#/components/schemas/CustodialWalletSubType'
        userRoleIds:
          type: array
          items:
            type: string
            minLength: 1
    PolicyRule:
      type: object
      properties:
        id:
          type: string
        lockDate:
          type: string
          description: The time at which this rule becomes immutable
          format: date-time
        mutabilityConstraint:
          $ref: '#/components/schemas/MutabilityConstraint1'
        coin:
          $ref: '#/components/schemas/Coin'
        type:
          $ref: '#/components/schemas/PolicyRuleTriggers'
        condition:
          $ref: '#/components/schemas/PolicyRuleConditions'
        action:
          $ref: '#/components/schemas/PolicyRuleActions'
      required:
        - id
        - lockDate
        - type
        - action
    PolicyRuleAction:
      title: PolicyRuleAction
      type: object
      properties:
        type:
          allOf:
            - $ref: '#/components/schemas/ActionType'
          description: The type of the action
        userIds:
          type: array
          items:
            type: string
            description: The user IDs associated with the action
      required:
        - type
    PolicyRuleActions:
      description: What happens when this rule is triggered
      type: object
      properties:
        type:
          type: string
          enum:
            - deny
            - getApproval
            - getFinalApproval
            - getCustodianApproval
            - getIdVerification
        userIds:
          description: For a final approver action, who can approve
          type: array
          items:
            $ref: '#/components/schemas/Id'
      required:
        - type
    PolicyRuleConditions:
      title: Type
      description: Parameters for the type
      oneOf:
        - title: Velocity limit
          type: object
          properties:
            amountString:
              $ref: '#/components/schemas/IntegerString'
            timeWindow:
              type: integer
              minimum: 0
              maximum: 2678400
              description: >-
                Time window in seconds for a velocity limit, between 1 and a
                month
        - title: USD velocity limit
          type: object
          properties:
            amountString:
              $ref: '#/components/schemas/IntegerString'
            timeWindow:
              type: integer
              minimum: 0
              maximum: 2678400
              description: >-
                Time window in seconds for a velocity limit, between 1 and 30
                days
        - title: Whitelist
          type: object
          properties:
            addresses:
              description: Addresses allowed/restricted for a whitelist/blacklist
              type: array
              items:
                oneOf:
                  - type: string
                  - $ref: '#/components/schemas/Id'
        - title: Advanced whitelist
          type: object
          properties:
            entries:
              description: >-
                Entries specifying which addresses/ wallets/ enterprises are on
                the whitelist
              type: array
              items:
                $ref: '#/components/schemas/AdvancedListRuleEntry1'
        - title: Webhook
          type: object
          properties:
            url:
              type: string
              description: the url to query for the webhook
    PolicyRuleTriggers:
      type: string
      enum:
        - advancedWhitelist
        - allTx
        - bitcoinAddressWhitelist
        - coinAddressWhitelist
        - coinAddressBlacklist
        - transactionLimit
        - velocityLimit
        - webhook
      description: What causes this rule to trigger
    PolicyRuleUpdateCondition:
      title: PolicyRuleUpdateCondition
      oneOf:
        - $ref: '#/components/schemas/AddressListRuleUpdateCondition'
        - $ref: '#/components/schemas/AdvancedListRuleUpdateCondition'
        - $ref: '#/components/schemas/TxUsdThresholdRuleCondition'
        - $ref: '#/components/schemas/LimitRuleCondition'
        - $ref: '#/components/schemas/WebhookRuleCondition'
    PolyxBaseIntent:
      title: POLYX Base Intent
      allOf:
        - type: object
          properties:
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
          required:
            - recipients
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    PolyxCreateAccountIntent:
      title: POLYX Create Account Intent
      allOf:
        - type: object
          properties:
            memo:
              $ref: '#/components/schemas/optionalString'
            index:
              $ref: '#/components/schemas/optionalNumber'
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
        - $ref: '#/components/schemas/AccountBaseCreateAccountIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    PolyxPreApproveAssetIntent:
      title: POLYX Pre-Approve Asset Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - enableToken
            enableTokens:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  address:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - name
            memo:
              $ref: '#/components/schemas/optionalString'
          required:
            - intentType
            - enableTokens
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    PolyxStakeIntent:
      title: POLYX Stake Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stake
            addToStake:
              $ref: '#/components/schemas/optionalBoolean'
            validators:
              type: array
              items:
                type: string
          required:
            - intentType
        - $ref: '#/components/schemas/PolyxBaseIntent'
    PolyxSwitchValidatorIntent:
      title: POLYX Switch Validator Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - switchValidator
            validators:
              type: array
              items:
                type: string
          required:
            - intentType
            - validators
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    PolyxUnstakeIntent:
      title: POLYX Unstake Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - unstake
            stopStaking:
              $ref: '#/components/schemas/optionalBoolean'
          required:
            - intentType
        - $ref: '#/components/schemas/PolyxBaseIntent'
    PolyxWithdrawIntent:
      title: POLYX Withdraw Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - claim
          required:
            - intentType
        - $ref: '#/components/schemas/PolyxBaseIntent'
    PsbtHex:
      type: string
      description: BIP174 serialization of a PSBT
      example: >-
        70736274ff0100530100000001ccf3d1b853dcff06a939afef91d8b178d74028516bb831d77fcfd5b1ce6715f00000000000ffffffff01f0b9f5050000000017a914567cd7b44f9f3a07c3138f37bf984b60fbbaf24387000000004f010488b21e0000000000000000003a922e29f0c8eb0db2a60484cbdcb631f6b107c9caae3ffdcf3e7d2ec1f6bcd00312148715f361dab685a669d42431e5d6d3f973404dab9c9fd1b950b279ad763404cc18ae084f010488b21e0000000000000000006d1d656d3ddd91c194c04565a3603702a21016ced14a265f38982d6275e67b6403d3bac2313a7c6b21cbb11b14b0d10341f922c0a403a8bd8c87f0dc820f35af6e04f65cd8694f010488b21e000000000000000000cb04fd63ab34d90fe6466b880e2a02ccf8a863374312991af8911b1aaab443340336ef228ffe9b8efffba052c32d334660dd1f8366cf8fe44ae5aa672b6b62909504f2ef0389000100c00100000000010101010101010101010101010101010101010101010101010101010101010101010000000000ffffffff0100e1f5050000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87024730440220360d495738071ed6930084713724262ef55d710e06d85f90b56727ab83c91b5702200ae452a812717ef0ac8866989ffc963d88c14f9694fa57ef046dd699bea1d5da01210247496797efe8b56780cd9bee19ac3d916624829cacd3f1236fa608000193e54d0000000001012000e1f5050000000017a914d909474404c124a3d04c3fbff61faa49cf43c58b87010469522102cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b42092102d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab210344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f153ae220602cc4d0fa411cac244486f8eb2c08e035ff7410f460a359ca7f8810991bd3b420914f2ef038900000000000000000000000000000000220602d72fd0d0d90293434ad5fca160f278e03c614497aa4e425cf454e2c1330f96ab14cc18ae080000000000000000000000000000000022060344d884136df550202865ffbc6218c7f9c88fe6ce39c945798190badb38a752f114f65cd8690000000000000000000000000000000000010069522103f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f21035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf22103e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b53ae2202035ffb7abc70159e0469f4b989a6d5e1785a2904169ff050b2f468fe5d3d5dbbf214cc18ae0800000000000000000100000000000000220203e1524d7f6fc57ab3eacbb659b787106780a475d1db483952c2310b7e9a38975b14f65cd86900000000000000000100000000000000220203f6f40764bd5d63f200a2778883acf75e96f15095c998263c087270d0c97e7e7f14f2ef03890000000000000000010000000000000000
    Pub:
      type: string
      description: public part of a key pair
      example: >-
        xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH
    RecipientEntry:
      title: RecipientEntry
      type: object
      properties:
        address:
          $ref: '#/components/schemas/Address'
        amount:
          $ref: '#/components/schemas/Amount'
        data:
          $ref: '#/components/schemas/optionalString'
      required:
        - address
        - amount
    RecipientEntry1:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/TxAddress'
        amount:
          $ref: '#/components/schemas/Amount2'
        data:
          type: string
        tokenData:
          $ref: '#/components/schemas/TokenData1'
      required:
        - address
        - amount
    RecipientTokenData:
      type: object
      properties:
        tokenName:
          type: string
          description: Name of token, as represented in BitGoJS Statics package.
        tokenContractAddress:
          type: string
          description: >-
            Address of token or smart contract. Required if token is unsupported
            by BitGo. Not required if passing "tokenName".
        decimalPlaces:
          type: integer
          description: >-
            Relevant for fungible tokens. Not required if passing "tokenName".
            Defaults to smallest base unit.
        tokenType:
          type: string
          description: Token standard
          enum:
            - ERC20
            - ERC721
            - ERC1155
        tokenId:
          type: string
          description: >-
            ID of token to use when constructing transaction or calldata.
            Required for NFTs.
        tokenQuantity:
          type: string
          description: >-
            Quantity of token to use when constructing calldata (amount to
            transfer).
    STXStakingOptions:
      title: STX
      type: object
      properties:
        contractName:
          type: string
          description: The STX staking contract name. Use pox-3.
          default: pox-3
        functionName:
          type: string
          description: STX staking contract function.
          oneOf:
            - type: string
              description: Function name used to delegate funds.
              default: delegate-stx
            - type: string
              description: Function name used to revoke delegated funds.
              default: revoke-delegate-stx
        functionArgs:
          type: array
          description: The 4 Objects are required and in the order expressed.
          items:
            anyOf:
              - title: uint128
                type: object
                properties:
                  type:
                    type: string
                    default: uint128
                    description: Type of argument. Use the default.
                  val:
                    type: string
                    description: Amount in micro-stx
              - title: principal
                type: object
                properties:
                  type:
                    type: string
                    default: principal
                    description: Type of argument. Use the default.
                  val:
                    type: string
                    description: Address of the validator
              - title: optional
                type: object
                properties:
                  type:
                    type: string
                    default: optional
                    description: Type of argument. Use the default.
                  val:
                    type: string
                    description: >-
                      The number of cycles that the delegation will last. This
                      is a mandatory field that must be greater than 1.
              - title: optional
                type: object
                properties:
                  type:
                    type: string
                    default: optional
                    description: Type of argument. Use the default.
                  val:
                    type: object
                    properties:
                      type:
                        type: string
                        default: tuple
                        description: Type of argument. Use the default.
                      val:
                        type: array
                        description: The 2 objects are required and in the order expressed.
                        items:
                          anyOf:
                            - title: hash
                              type: object
                              properties:
                                key:
                                  type: string
                                  default: hashbytes
                                  description: Type of argument. Use the default.
                                type:
                                  type: string
                                  default: buffer
                                  description: Type of argument. Use the default.
                                val:
                                  type: string
                                  description: The BTC Address hash.
                            - title: version
                              type: object
                              properties:
                                key:
                                  type: string
                                  default: version
                                  description: Type of argument. Use the default.
                                type:
                                  type: string
                                  default: buffer
                                  description: Type of argument. Use the default.
                                val:
                                  type: string
                                  description: The BTC Address version.
    ShareType:
      title: ShareType
      type: string
      enum:
        - encryptedSignerShare
        - encryptedRShare
    ShareWalletResponse:
      type: object
      description: Wallet share object
      properties:
        id:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: Wallet share id
        coin:
          allOf:
            - $ref: '#/components/schemas/Coin'
          description: Coin of the wallet
        wallet:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: Wallet id
        walletLabel:
          $ref: '#/components/schemas/WalletLabel'
        fromUser:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: Id of the user sharing the wallet
        toUser:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: Id of the user receiving the share
        permissions:
          type: string
          allOf:
            - $ref: '#/components/schemas/WalletPermission'
        message:
          type: string
          description: Message for the user receiving the share
        state:
          type: string
          allOf:
            - $ref: '#/components/schemas/WalletShareState1'
          description: State of the share
        enterprise:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: If the wallet belongs to an enterprise, the id of that enterprise
        pendingApprovalId:
          allOf:
            - $ref: '#/components/schemas/Id'
          description: >-
            If the share generated a pending approval, the id of that pending
            approval
        keychain:
          $ref: '#/components/schemas/WalletShareKeychain'
    SignMessageIntent:
      title: SignMessageIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - signMessage
            messageRaw:
              type: string
              description: A plain text message
              example: 'for EVM: test message'
            messageEncoded:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: An encoded string
              example: 'for EVM: \x19Ethereum Signed Message:\n12test message'
            messageStandardType:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                The type of message standard, e.g. 'EIP191', 'EIP712', 'CIP8'
                etc.
              example: 'for EVM: EIP191'
            signerAddress:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                The address of the signer, could be the root address or a
                receive address of the wallet
          required:
            - intentType
            - messageRaw
            - messageEncoded
            - messageStandardType
            - signerAddress
        - $ref: '#/components/schemas/BaseIntent'
    SignatureShare:
      type: object
      properties:
        from:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The source of the signature share.
        to:
          allOf:
            - $ref: '#/components/schemas/KeyShareSource'
          description: The recipient of the signature share.
        share:
          type: string
          description: The signature share.
      required:
        - from
        - to
        - share
    SignatureShareType:
      title: SignatureShareType
      type: string
      enum:
        - user
        - backup
        - bitgo
    SignatureShareWithoutVssProof:
      title: SignatureShareWithoutVssProof
      type: object
      properties:
        from:
          allOf:
            - $ref: '#/components/schemas/SignatureShareType'
          description: The source of the signature share.
        to:
          allOf:
            - $ref: '#/components/schemas/SignatureShareType'
          description: The recipient of the signature share.
        share:
          type: string
          description: The signature share
      required:
        - from
        - to
        - share
    SimpleCreateResponse:
      title: SimpleCreateResponse
      type: object
      properties:
        wallet:
          type: object
          additionalProperties: {}
          description: >-
            Newly created wallet model object with balance, label, keychains
            array, and other wallet properties
        userKeychain:
          type: object
          additionalProperties: {}
          description: >-
            User keychain with xpub and encryptedXprv (encrypted with
            passphrase, stored on BitGo)
        backupKeychain:
          type: object
          additionalProperties: {}
          description: >-
            Backup keychain with xpub (and xprv if created locally - must be
            backed up immediately)
        bitgoKeychain:
          type: object
          additionalProperties: {}
          description: BitGo-managed keychain with xpub (BitGo holds this key)
        warning:
          type: string
          description: >-
            Warning message present only when backup keychain was created
            locally (has xprv) - reminds you to back it up
      required:
        - wallet
        - userKeychain
        - backupKeychain
        - bitgoKeychain
    SolAuthorizeIntent:
      title: SOL Authorize Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - authorize
              description: Must be "authorize".
            transactionMessage:
              type: string
              description: >-
                The pre-signed serialized transaction message, validated by the
                platform against the provided address fields.
            stakeAccount:
              type: string
              description: The on-chain stake account whose authority is being transferred.
            oldWithdrawPublicKey:
              type: string
              description: The current withdrawal authority public key.
            newWithdrawPublicKey:
              type: string
              description: The new withdrawal authority public key.
            lockupPublicKey:
              type: string
              description: The lockup authority public key.
            nonceAccount:
              type: string
              description: The durable nonce account used for this transaction.
            nonceAuthority:
              type: string
              description: The authority of the nonce account.
            blockhash:
              type: string
              description: The recent blockhash used in the transaction message.
          required:
            - intentType
            - transactionMessage
            - stakeAccount
            - oldWithdrawPublicKey
            - newWithdrawPublicKey
            - lockupPublicKey
            - nonceAccount
            - nonceAuthority
            - blockhash
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Transfer the withdrawal and lockup authority of a SOL stake account to
        new public keys on Solana. The transactionMessage must be a pre-signed
        serialized transaction validated by the platform against all provided
        address fields. Spending policy is not evaluated for this intent.
        Requires the solStakingAuthorize enterprise feature flag.
    SolBuildOptions:
      title: SolBuildOptions
      allOf:
        - type: object
          properties:
            memo:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                Memo string for the transaction. The key must be present; pass
                an empty string (or omit the value) if unused.
          required:
            - memo
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
      description: >-
        Solana build fragment intersected by **every** Sol intent codec that
        composes

        `SolBuildOptions` (e.g. payment, stake, consolidate, close-ATA, etc.).


        **`memo` is part of the legacy wire contract:** `t.type({ memo:
        optionalString })`

        keeps the **`memo` key structurally present** for `.is()` / `decode`
        (value may

        be a string or `undefined` per `optionalString`). Payloads that omit
        `memo`

        entirely are not accepted by this codec.


        Upstream services (for example wallet-platform when persisting

        `closeAssociatedTokenAccount` intents) may normalize a missing `memo` to

        `""` before validation so stored objects match this shape. Other Sol
        flows

        should send `memo` or apply the same normalization if they share this
        path.
    SolBuildOptions1:
      title: SolBuildOptions
      allOf:
        - type: object
          properties:
            memo:
              $ref: '#/components/schemas/optionalString'
          required:
            - memo
        - $ref: '#/components/schemas/AccountBaseBuildOptions1'
    SolClaimIntent:
      title: SOL Claim Intent
      allOf:
        - type: object
          properties:
            stakingAddress:
              type: string
              description: The on-chain stake account address to withdraw from.
          required:
            - stakingAddress
        - $ref: '#/components/schemas/WithdrawIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Withdraw the balance from a deactivated SOL stake account back to the
        wallet on Solana. The stake account must have been deactivated
        (unstaked) before claiming. Spending policy is not evaluated for this
        intent.
    SolClaimIntent1:
      title: SOL Claim Intent
      allOf:
        - type: object
          properties:
            stakingAddress:
              type: string
            amount:
              $ref: '#/components/schemas/Amount1'
          required:
            - stakingAddress
            - amount
        - $ref: '#/components/schemas/WithdrawIntent1'
        - $ref: '#/components/schemas/SolBuildOptions1'
    SolCloseAssociatedTokenAccountIntent:
      title: SOL Close Associated Token Account Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - closeAssociatedTokenAccount
              description: Must be "closeAssociatedTokenAccount".
            recipients:
              allOf:
                - $ref: >-
                    #/components/schemas/solCloseAssociatedTokenAccountRecipients
              description: >-
                One or more zero-balance ATAs to close. Each entry must have
                amount.value === "0", must not carry tokenName or tokenData, and
                all entries must share the same on-chain owner. Maximum 27 ATAs
                per transaction.
          required:
            - intentType
            - recipients
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Close one or more zero-balance SPL Associated Token Accounts (ATAs) on
        Solana and recover their rent lamports to the wallet root address. All
        ATAs must have a zero token balance (consolidate tokens first), share
        the same on-chain owner, and be owned by this wallet. Maximum 27
        distinct ATAs per transaction. Spending policy is not evaluated for this
        intent.
    SolCloseAssociatedTokenAccountIntent1:
      title: SOL Close Associated Token Account Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - closeAssociatedTokenAccount
            recipients:
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/RecipientEntry1'
          required:
            - intentType
            - recipients
        - $ref: '#/components/schemas/BaseIntent1'
        - $ref: '#/components/schemas/SolBuildOptions1'
    SolConsolidateIntent:
      title: SOL Consolidate Intent
      allOf:
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
      description: >-
        Sweep native SOL and SPL token balances from a receive address into the
        wallet's root address on Solana. The platform automatically calculates
        transferable amounts, reserving rent-exempt minimums and transaction
        fees.
    SolCreateAssociatedTokenAccountIntent:
      title: SOL Create Associated Token Account Intent
      allOf:
        - $ref: '#/components/schemas/EnableTokenIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Initialize one or more Associated Token Accounts (ATAs) on Solana so the
        wallet can receive SPL tokens. All entries in enableTokens must target
        the same wallet address. Spending policy is not evaluated for this
        intent.
    SolCreateAssociatedTokenAccountIntent1:
      title: SOL Create Associated Token Account Intent
      allOf:
        - type: object
          properties: {}
        - $ref: '#/components/schemas/EnableTokenIntent1'
        - $ref: '#/components/schemas/SolBuildOptions1'
    SolCustomTxIntent:
      title: SOL Custom Transaction Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - customTx
              description: >-
                Must be "customTx". For legacy (non-versioned) transactions
                only; use SolVersionedCustomTxIntent for versioned transactions.
            solInstructions:
              type: array
              items:
                type: object
                properties:
                  programId:
                    type: string
                    description: The program ID to invoke.
                  keys:
                    type: array
                    items:
                      type: object
                      properties:
                        pubkey:
                          type: string
                          description: The account public key.
                        isSigner:
                          type: boolean
                          description: Whether this account is a signer.
                        isWritable:
                          type: boolean
                          description: Whether this account is writable.
                      required:
                        - pubkey
                        - isSigner
                        - isWritable
                      description: Account keys referenced by this instruction.
                  data:
                    type: string
                    description: Instruction data encoded as base58 or hex.
                required:
                  - programId
                  - keys
                  - data
                description: >-
                  Array of raw Solana program instructions to include in the
                  transaction. Use for legacy (non-versioned) transactions only.
          required:
            - intentType
            - solInstructions
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Submit a custom Solana transaction using raw legacy program
        instructions. Use this intent for legacy (non-versioned) transactions;
        for versioned transactions (address lookup tables, v0 messages) use the
        customTx intent with solVersionedTransactionData instead. Wallets
        without the enableSolCustomTx flag require a second admin approval
        before the transaction is processed.
    SolDeactivateIntent:
      title: SOL Deactivate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - deactivate
              description: Must be "deactivate".
            stakingAddresses:
              allOf:
                - $ref: '#/components/schemas/optionalStringArray'
              description: >-
                Batch of stake account addresses to deactivate. Provide either
                this or stakingAddress.
            stakingAddress:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                A single stake account address to deactivate. Provide either
                this or stakingAddresses.
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Deactivate one or more SOL stake accounts on Solana to begin the
        cooldown period before funds can be claimed. No value is transferred.
        Provide either stakingAddress (single account) or stakingAddresses
        (batch). After cooldown completes, use the claim intent to withdraw.
        Spending policy is not evaluated for this intent. Requires the
        solStakingAuthorize enterprise feature flag.
    SolDelegateIntent:
      title: SOL Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
              description: Must be "delegate".
            validatorAddress:
              type: string
              description: The validator vote account address to delegate to.
            stakingAddresses:
              allOf:
                - $ref: '#/components/schemas/optionalStringArray'
              description: >-
                Batch of stake account addresses to delegate. Provide either
                this or stakingAddress.
            stakingAddress:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                A single stake account address to delegate. Provide either this
                or stakingAddresses.
          required:
            - intentType
            - validatorAddress
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Delegate one or more deactivated SOL stake accounts to a validator on
        Solana. No value is transferred; this intent re-activates an existing
        stake account under a new or the same validator. Provide either
        stakingAddress (single account) or stakingAddresses (batch). Spending
        policy is not evaluated for this intent. Requires the
        solStakingAuthorize enterprise feature flag.
    SolGoUnstakeIntent:
      title: SOL Go Unstake Intent
      allOf:
        - type: object
          properties:
            goStakingRequestId:
              allOf:
                - $ref: '#/components/schemas/optionalString'
              description: >-
                Internal coordination identifier for the GO staking request.
                Accepted by the schema but only processed on admin/internal
                routes — external API consumers should omit this field.
        - $ref: '#/components/schemas/GoUnstakeIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Unstake SOL via the GO wallet program on Solana and transfer the
        proceeds to the specified recipients. This intent uses the same transfer
        path as the payment intent.
    SolPaymentIntent:
      title: SOL Payment Intent
      allOf:
        - $ref: '#/components/schemas/PaymentIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Transfer native SOL or SPL tokens to one or more recipients on Solana.
        For token transfers, the recipient amount symbol must use the
        "sol:tokenName" format (e.g. "sol:usdc"). Native SOL recipients must not
        be Associated Token Account (ATA) addresses.
    SolStakeIntent:
      title: SOL Stake Intent
      allOf:
        - type: object
          properties:
            validatorAddress:
              type: string
              description: The validator vote account address to stake SOL with.
            isMarinade:
              type: boolean
              deprecated: true
            stakingType:
              type: string
              enum:
                - NATIVE
                - MARINADE
                - JITO
              description: >-
                The staking provider type. Accepted values: "NATIVE",
                "MARINADE", "JITO". Supersedes the deprecated isMarinade field.
          required:
            - validatorAddress
        - $ref: '#/components/schemas/StakeIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Stake SOL to a validator on Solana by creating a new stake account. The
        platform generates an ephemeral keypair for the stake account and
        whitelists it on the wallet. Requires the enterprise to have staking
        permissions. Supports native, Marinade liquid, and Jito staking via the
        stakingType field.
    SolStakeIntent1:
      title: SOL Stake Intent
      allOf:
        - type: object
          properties:
            validatorAddress:
              type: string
            amount:
              $ref: '#/components/schemas/Amount1'
          required:
            - validatorAddress
            - amount
        - $ref: '#/components/schemas/StakeIntent1'
        - $ref: '#/components/schemas/SolBuildOptions1'
    SolUnstakeIntent:
      title: SOL Unstake Intent
      allOf:
        - type: object
          properties:
            stakingAddress:
              type: string
              description: The stake account address to deactivate.
            amount:
              type: object
              description: >-
                For partial unstake: the amount to remove from the stake
                account. Must be provided together with remainingStakingAmount.
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
            remainingStakingAmount:
              type: object
              description: >-
                For partial unstake: the amount to keep in the existing stake
                account after the split. Must be provided together with amount.
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
            isMarinade:
              type: boolean
              deprecated: true
            stakingType:
              type: string
              enum:
                - NATIVE
                - MARINADE
                - JITO
              description: >-
                The staking provider type. Accepted values: "NATIVE",
                "MARINADE", "JITO". Supersedes the deprecated isMarinade field.
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
                description: >-
                  Required for Marinade unstaking: the recipient address to
                  receive the unstaked SOL.
          required:
            - stakingAddress
        - $ref: '#/components/schemas/UnstakeIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Begin deactivating a SOL stake account on Solana. For native staking,
        the stake account enters a cooldown period before funds can be claimed.
        For partial unstakes, provide both amount and remainingStakingAmount to
        split the stake account. Supports native, Marinade liquid, and Jito
        staking via the stakingType field. Requires the enterprise to have
        staking permissions.
    SolUnstakeIntent1:
      title: SOL Unstake Intent
      allOf:
        - type: object
          properties:
            stakingAddress:
              type: string
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
            remainingStakingAmount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
          required:
            - stakingAddress
        - $ref: '#/components/schemas/UnstakeIntent1'
        - $ref: '#/components/schemas/SolBuildOptions1'
    SolVersionedCustomTxIntent:
      title: SOL Versioned Custom Transaction Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - customTx
              description: >-
                Must be "customTx". Presence of solVersionedTransactionData
                distinguishes this from legacy SolCustomTxIntent at runtime.
            solVersionedTransactionData:
              type: object
              description: >-
                Versioned transaction data in Solana v0 message format. Presence
                of this field indicates a versioned transaction.
              properties:
                versionedInstructions:
                  type: array
                  items:
                    type: object
                    properties:
                      programIdIndex:
                        type: number
                        description: >-
                          Index into the staticAccountKeys array identifying the
                          program to invoke.
                      accountKeyIndexes:
                        type: array
                        items:
                          type: number
                          description: >-
                            Indexes into the combined account keys (static +
                            lookup) for this instruction.
                      data:
                        type: string
                        description: Instruction data encoded as base58 or hex.
                    required:
                      - programIdIndex
                      - accountKeyIndexes
                      - data
                    description: The program instructions for this versioned transaction.
                addressLookupTables:
                  type: array
                  items:
                    type: object
                    properties:
                      accountKey:
                        type: string
                        description: The on-chain address of the lookup table account.
                      writableIndexes:
                        type: array
                        items:
                          type: number
                          description: Indexes of writable accounts in the lookup table.
                      readonlyIndexes:
                        type: array
                        items:
                          type: number
                          description: Indexes of read-only accounts in the lookup table.
                    required:
                      - accountKey
                      - writableIndexes
                      - readonlyIndexes
                    description: >-
                      Address lookup tables to extend the number of accounts
                      beyond the static limit. Required when using account
                      lookup tables in a v0 transaction.
                staticAccountKeys:
                  type: array
                  items:
                    type: string
                    description: The static account keys referenced by this transaction.
                messageHeader:
                  type: object
                  description: >-
                    Solana message header specifying the number of required
                    signers and read-only accounts.
                  properties:
                    numRequiredSignatures:
                      type: number
                      description: Number of signatures required for this transaction.
                    numReadonlySignedAccounts:
                      type: number
                      description: Number of read-only accounts that require signatures.
                    numReadonlyUnsignedAccounts:
                      type: number
                      description: >-
                        Number of read-only accounts that do not require
                        signatures.
                  required:
                    - numRequiredSignatures
                    - numReadonlySignedAccounts
                    - numReadonlyUnsignedAccounts
                recentBlockhash:
                  type: string
                  description: >-
                    Optional recent blockhash; when provided the platform uses
                    it instead of fetching a durable nonce.
              required:
                - versionedInstructions
                - addressLookupTables
                - staticAccountKeys
                - messageHeader
          required:
            - intentType
            - solVersionedTransactionData
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SolBuildOptions'
      description: >-
        Submit a custom Solana versioned (v0) transaction with optional address
        lookup tables. Use this intent for versioned transactions; for legacy
        instruction-based transactions use the customTx intent with
        solInstructions instead. When recentBlockhash is provided, the platform
        uses it directly without fetching a durable nonce. Wallets without the
        enableSolCustomTx flag require a second admin approval before the
        transaction is processed.
    StakeClaimRewardsIntent:
      title: StakeClaimRewardsIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stakeClaimRewards
              description: Must be "stakeClaimRewards".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Claim accumulated staking rewards on EVM-compatible chains. Specify the
        amount of rewards to claim. Requires a staking request ID from the BitGo
        staking service.
    StakeIntent:
      title: StakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stake
              description: Must be "stake".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
    StakeIntent1:
      title: StakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stake
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent1'
    StakeIntent2:
      allOf:
        - $ref: '#/components/schemas/BaseStakeIntent2'
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stake
          required:
            - intentType
    StakeSwitchValidatorIntent:
      title: StakeSwitchValidatorIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - switchValidator
            validatorAddress:
              type: string
              description: >-
                Bech32 source validator address to redelegate from (e.g.
                cosmosvaloper1...).
            destValidatorAddress:
              type: string
              description: >-
                Bech32 destination validator address to redelegate to (e.g.
                cosmosvaloper1...).
          required:
            - intentType
            - validatorAddress
            - destValidatorAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    StakeWithCallDataIntent:
      title: Stake With CallData Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stakeWithCallData
              description: Must be "stakeWithCallData".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntentWithCalldata'
      description: >-
        Submit an EVM staking transaction using pre-computed calldata provided
        by

        the BitGo staking service. Used when the staking protocol requires
        custom

        calldata that cannot be derived from standard deposit parameters.
    StakingError:
      title: Staking Error
      type: object
      properties:
        error:
          type: string
        errorName:
          type: string
        reqId:
          type: string
        context:
          type: object
    StakingRequestSource:
      title: StakingRequestSource
      type: string
      enum:
        - MANUAL
        - AUTO_STAKE
        - EXTERNAL
    SubstrateAccountBaseBuildOptions:
      title: SubstrateAccountBaseBuildOptions
      allOf:
        - type: object
          properties:
            fee:
              type: object
              properties:
                amount:
                  oneOf:
                    - type: string
                    - type: number
                formula:
                  type: string
                  enum:
                    - fixed
                    - feeRate
                    - perKB
                    - custom
                type:
                  type: string
                  enum:
                    - base
                    - max
                    - tip
                unit:
                  type: string
                  enum:
                    - baseUnit
                    - cpu
                    - ram
              required:
                - amount
        - $ref: '#/components/schemas/AccountBaseBuildOptions'
    SubstrateConsolidateIntent:
      title: Substrate Consolidate Intent
      allOf:
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
    SubstratePaymentIntent:
      title: Substrate Payment Intent
      allOf:
        - type: object
          properties:
            memo:
              $ref: '#/components/schemas/optionalString'
        - $ref: '#/components/schemas/PaymentIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    SuiBuildOptions:
      title: SuiBuildOptions
      allOf:
        - type: object
          properties:
            feeOptions:
              $ref: '#/components/schemas/SuiFeeOptions'
            lockedAmount:
              $ref: '#/components/schemas/optionalString'
          required:
            - feeOptions
            - lockedAmount
        - $ref: '#/components/schemas/BaseIntent'
    SuiConsolidateIntent:
      title: SUI Consolidate Intent
      allOf:
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
        - $ref: '#/components/schemas/SuiBuildOptions'
    SuiCustomTxIntent:
      title: SUI Custom Tx Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - customTx
            rawTx:
              type: string
          required:
            - intentType
            - rawTx
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/SuiBuildOptions'
    SuiFeeOptions:
      title: SuiFeeOptions
      type: object
      properties:
        gasLimit:
          type: number
      required:
        - gasLimit
    SuiGoUnstakeIntent:
      title: SuiGoUnstakeIntent
      allOf:
        - $ref: '#/components/schemas/GoUnstakeIntent'
        - $ref: '#/components/schemas/BaseGoStakeIntent'
        - $ref: '#/components/schemas/SuiBuildOptions'
    SuiPaymentIntent:
      title: SUI Payment Intent
      allOf:
        - $ref: '#/components/schemas/PaymentIntent'
        - $ref: '#/components/schemas/SuiBuildOptions'
    SuiStakingIntent:
      title: SUI Stake Intent
      allOf:
        - type: object
          properties:
            validatorAddress:
              $ref: '#/components/schemas/optionalString'
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
            recipients:
              type: array
              items:
                type: object
                properties:
                  address:
                    $ref: '#/components/schemas/Address'
                  amount:
                    $ref: '#/components/schemas/Amount'
                  data:
                    $ref: '#/components/schemas/optionalString'
                required:
                  - address
                  - amount
        - $ref: '#/components/schemas/StakeIntent'
    SuiUnstakingIntent:
      title: SUI Unstaking Intent
      allOf:
        - type: object
          properties:
            stakedSuiObjectId:
              type: string
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
          required:
            - stakedSuiObjectId
        - $ref: '#/components/schemas/WithdrawIntent'
    SupportedTokenRecipientEntryItem:
      title: SupportedTokenRecipientEntryItem
      type: object
      properties:
        tokenName:
          type: string
      required:
        - tokenName
    SwitchValidatorWithCallDataIntent:
      title: Switch Validator With CallData Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - switchValidatorWithCallData
              description: Must be "switchValidatorWithCallData".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntentWithCalldata'
      description: >-
        Switch validators on EVM-compatible chains using pre-computed calldata.

        Supply the staking service's stakingRequestId and the pre-computed
        calldata

        for the validator switch.
    TaoStakeIntent:
      title: Tao Stake Intent
      allOf:
        - type: object
          properties:
            amountStaked:
              type: string
          required:
            - amountStaked
        - $ref: '#/components/schemas/StakeIntent'
        - $ref: '#/components/schemas/TaoStakingBaseIntent'
    TaoStakingBaseIntent:
      title: Tao Staking Base Intent
      allOf:
        - type: object
          properties:
            hotkey:
              type: string
            netuid:
              type: string
          required:
            - hotkey
            - netuid
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    TaoSwitchValidatorIntent:
      title: Tao Switch Validator Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - switchValidator
            originHotkey:
              type: string
            destinationHotkey:
              type: string
            originNetuid:
              type: string
            destinationNetuid:
              type: string
            alphaAmount:
              type: string
          required:
            - intentType
            - originHotkey
            - destinationHotkey
            - originNetuid
            - destinationNetuid
            - alphaAmount
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    TaoTransferStakeIntent:
      title: Tao Transfer Stake Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - transferStake
            originColdkey:
              $ref: '#/components/schemas/optionalString'
            destinationColdkey:
              type: string
            hotkey:
              type: string
            originNetuid:
              type: string
            destinationNetuid:
              type: string
            alphaAmount:
              type: string
          required:
            - intentType
            - originColdkey
            - destinationColdkey
            - hotkey
            - originNetuid
            - destinationNetuid
            - alphaAmount
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/SubstrateAccountBaseBuildOptions'
    TaoUnstakeIntent:
      title: Tao Unstake Intent
      allOf:
        - type: object
          properties:
            amountUnstaked:
              type: string
          required:
            - amountUnstaked
        - $ref: '#/components/schemas/WithdrawIntent'
        - $ref: '#/components/schemas/TaoStakingBaseIntent'
    TokenApprovalIntent:
      title: Intent for approving tokens for spending by a batcher contract
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - tokenApproval
              description: Must be "tokenApproval".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithTokenName'
      description: |-
        Approve an ERC-20 token for spending by the BitGo batcher contract on
        EVM-compatible chains. Required before sending a token that has not been
        previously approved. Provide tokenName to identify the token.
    TokenData:
      title: TokenData
      allOf:
        - $ref: '#/components/schemas/TokenRecipientEntryItem'
        - $ref: '#/components/schemas/SupportedTokenRecipientEntryItem'
        - $ref: '#/components/schemas/UnsupportedTokenRecipientEntryItem'
    TokenData1:
      type: object
      properties:
        tokenType:
          type: string
          description: The type of standard of the token.
          example: ERC721
        tokenQuantity:
          type: string
          description: The quantity of token to transfer (should be 1 for ERC721).
          example: '101'
        tokenContractAddress:
          type: string
          description: >-
            Address of the token contract which is necessary if the token is not
            supported on WP.
          example: '0x3d8e90d5F403a0A18dfeeAd36E30EF95D5E1ad3a'
        tokenName:
          type: string
          description: Name of the token as it is supported on WP.
          example: tpolygon:name
        tokenId:
          type: string
          description: Id of the token to be transferred which is required for NFTs.
          example: '123'
        decimalPlaces:
          type: number
          description: >-
            Number of decimal places the token uses (for fungible tokens
            unsupported in WP).
          example: 18
    TokenRecipientEntryItem:
      title: TokenRecipientEntryItem
      type: object
      properties:
        tokenQuantity:
          type: string
        tokenType:
          type: string
        tokenId:
          $ref: '#/components/schemas/optionalString'
      required:
        - tokenQuantity
        - tokenType
    TonConsolidateIntent:
      title: TON Consolidate Intent
      allOf:
        - $ref: '#/components/schemas/AccountBaseConsolidateIntent'
    TonDelegateIntent:
      title: TON Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            validatorAddress:
              type: string
            useSingleNominator:
              type: boolean
            ownerAddress:
              $ref: '#/components/schemas/optionalString'
            tonStakingType:
              $ref: '#/components/schemas/TonStakingType'
          required:
            - intentType
            - validatorAddress
            - useSingleNominator
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    TonMultiNominatorDelegateIntent:
      title: TON Multi Nominator Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            validatorAddress:
              type: string
            tonStakingType:
              type: string
              enum:
                - MULTI_NOMINATOR
          required:
            - intentType
            - validatorAddress
            - tonStakingType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    TonMultiNominatorUndelegateIntent:
      title: TON Multi Nominator Undelegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            validatorAddress:
              type: string
            tonStakingType:
              type: string
              enum:
                - MULTI_NOMINATOR
          required:
            - intentType
            - validatorAddress
            - tonStakingType
        - $ref: '#/components/schemas/BaseIntent'
    TonPaymentIntent:
      title: TON Payment Intent
      allOf:
        - type: object
          properties:
            memo:
              $ref: '#/components/schemas/optionalString'
        - $ref: '#/components/schemas/PaymentIntent'
    TonSingleNominatorDelegateIntent:
      title: TON Single Nominator Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            validatorAddress:
              type: string
            ownerAddress:
              type: string
            tonStakingType:
              type: string
              enum:
                - SINGLE_NOMINATOR
          required:
            - intentType
            - validatorAddress
            - ownerAddress
            - tonStakingType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    TonSingleNominatorUndelegateIntent:
      title: TON Single Nominator Undelegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            validatorAddress:
              type: string
            tonStakingType:
              type: string
              enum:
                - SINGLE_NOMINATOR
          required:
            - intentType
            - validatorAddress
            - tonStakingType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    TonStakingType:
      title: TonStakingType
      type: string
      enum:
        - SINGLE_NOMINATOR
        - MULTI_NOMINATOR
        - TON_WHALES
    TonUndelegateIntent:
      title: TON Undelegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            validatorAddress:
              type: string
            useSingleNominator:
              type: boolean
            singleNominatorAmount:
              $ref: '#/components/schemas/Amount'
            tonStakingType:
              $ref: '#/components/schemas/TonStakingType'
          required:
            - intentType
            - validatorAddress
            - useSingleNominator
            - singleNominatorAmount
        - $ref: '#/components/schemas/BaseIntent'
    TonWhalesDelegateIntent:
      title: TON Whales Delegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegate
            validatorAddress:
              type: string
            tonStakingType:
              type: string
              enum:
                - TON_WHALES
          required:
            - intentType
            - validatorAddress
            - tonStakingType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    TonWhalesUndelegateIntent:
      title: TON Whales Undelegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            validatorAddress:
              type: string
            withdrawalAmount:
              $ref: '#/components/schemas/Amount'
            tonStakingType:
              type: string
              enum:
                - TON_WHALES
          required:
            - intentType
            - validatorAddress
            - withdrawalAmount
            - tonStakingType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    Transaction:
      type: object
      properties:
        state:
          $ref: '#/components/schemas/TransactionState1'
        unsignedTx:
          allOf:
            - $ref: '#/components/schemas/TransactionRequestUnsignedTransaction'
          description: Holds the unsigned transaction for this transaction in a tx-request.
        signatureShares:
          type: array
          description: >-
            Only used for MPC coins. This is used to collect signature shares
            from and exchange them with the user. Holds the signature shares for
            this transaction in a tx-request.
          items:
            $ref: '#/components/schemas/SignatureShare'
        commitmentShares:
          type: array
          description: >-
            Only used for MPC coins on EdDSA curve. This is used to collect
            commitment shares from and exchange them with the user. Holds the
            commitment shares for this transaction in a tx-request.
          items:
            $ref: '#/components/schemas/CommitmentShare'
        txHash:
          type: string
          description: >-
            The hash of the transaction from the TxRequest that has been signed
            and is pending broadcast.
        bitgoPaillierChallenge:
          description: >-
            BitGo-to-user paillier challenge. Required when signing with ECDSA
            MPC wallets.
          type: object
          properties:
            p:
              type: array
              items:
                type: string
      required:
        - state
        - unsignedTx
    TransactionIntent:
      title: TransactionIntent
      oneOf:
        - $ref: '#/components/schemas/AdaConsolidateIntent'
        - $ref: '#/components/schemas/AdaPaymentIntent'
        - $ref: '#/components/schemas/AdaStakeClaimRewardsIntent'
        - $ref: '#/components/schemas/AdaStakeIntent'
        - $ref: '#/components/schemas/AdaUnstakeIntent'
        - $ref: '#/components/schemas/AdaVoteDelegationIntent'
        - $ref: '#/components/schemas/AptCustomTxIntent'
        - $ref: '#/components/schemas/AtomPaymentIntent'
        - $ref: '#/components/schemas/AtomStakeIntent'
        - $ref: '#/components/schemas/AtomUnstakeIntent'
        - $ref: '#/components/schemas/BabyCreateBtcDelegationIntent'
        - $ref: '#/components/schemas/BabyWithdrawRewardIntent'
        - $ref: '#/components/schemas/BscDelegateIntent'
        - $ref: '#/components/schemas/BscUnDelegateIntent'
        - $ref: '#/components/schemas/BscWithdrawUndelegateIntent'
        - $ref: '#/components/schemas/CantonAllocationAllocateIntent'
        - $ref: '#/components/schemas/CantonAllocationOfferWithdrawnIntent'
        - $ref: '#/components/schemas/CantonAllocationRejectIntent'
        - $ref: '#/components/schemas/CantonAllocationRequestIntent'
        - $ref: '#/components/schemas/CantonCosignDelegationAcceptIntent'
        - $ref: '#/components/schemas/CantonCosignDelegationProposalIntent'
        - $ref: '#/components/schemas/CantonCommandIntent'
        - $ref: '#/components/schemas/CantonPaymentIntent'
        - $ref: '#/components/schemas/CantonTransferAcceptIntent'
        - $ref: '#/components/schemas/CantonTransferAcknowledgeIntent'
        - $ref: '#/components/schemas/CantonTransferOfferWithdrawnIntent'
        - $ref: '#/components/schemas/CantonTransferRejectIntent'
        - $ref: '#/components/schemas/CantonEndInvestorOnboardingOfferIntent'
        - $ref: '#/components/schemas/CantonEndInvestorOnboardingAcceptIntent'
        - $ref: '#/components/schemas/CantonEndInvestorOnboardingRejectIntent'
        - $ref: '#/components/schemas/CantonParticipantOnboardingRequestIntent'
        - $ref: '#/components/schemas/ClaimIntent'
        - $ref: '#/components/schemas/CosmosContractCallIntent'
        - $ref: '#/components/schemas/CosmosPaymentIntent'
        - $ref: '#/components/schemas/CosmosStakeClaimRewardsIntent'
        - $ref: '#/components/schemas/CosmosStakeIntent'
        - $ref: '#/components/schemas/CosmosSwitchValidatorIntent'
        - $ref: '#/components/schemas/CosmosUnstakeIntent'
        - $ref: '#/components/schemas/DefiDepositIntent'
        - $ref: '#/components/schemas/DefiRedeemIntent'
        - $ref: '#/components/schemas/DotConsolidateIntent'
        - $ref: '#/components/schemas/DotCreateAccountIntent'
        - $ref: '#/components/schemas/DotPaymentIntent'
        - $ref: '#/components/schemas/DotStakingIntent'
        - $ref: '#/components/schemas/DotUnstakingIntent'
        - $ref: '#/components/schemas/DotWithdrawStakeIntent'
        - $ref: '#/components/schemas/DelegateIntent'
        - $ref: '#/components/schemas/EthAccelerationIntent'
        - $ref: '#/components/schemas/EthConsolidateIntent'
        - $ref: '#/components/schemas/EthConsolidateTokenIntent'
        - $ref: '#/components/schemas/EthFillNonceIntent'
        - $ref: '#/components/schemas/FillNonceIntent'
        - $ref: '#/components/schemas/EthPaymentIntent'
        - $ref: '#/components/schemas/EthStakingIntent'
        - $ref: '#/components/schemas/EthTransferTokenIntent'
        - $ref: '#/components/schemas/StakeClaimRewardsIntent'
        - $ref: '#/components/schemas/UndelegateIntent'
        - $ref: '#/components/schemas/FeeAddressTransferIntent'
        - $ref: '#/components/schemas/HbarUpdateAccountIntent'
        - $ref: '#/components/schemas/HypeevmBridgeFundsIntent'
        - $ref: '#/components/schemas/HypeevmSpotTransferIntent'
        - $ref: '#/components/schemas/HypeevmEnableBridgingIntent'
        - $ref: '#/components/schemas/IcpPaymentIntent'
        - $ref: '#/components/schemas/IotaConsolidateIntent'
        - $ref: '#/components/schemas/IotaPaymentIntent'
        - $ref: '#/components/schemas/LightningPaymentIntent'
        - $ref: '#/components/schemas/MmiSignMessageIntent'
        - $ref: '#/components/schemas/MmiSignTransactionIntent'
        - $ref: '#/components/schemas/NearStakeIntent'
        - $ref: '#/components/schemas/NearUnstakeIntent'
        - $ref: '#/components/schemas/NearWithdrawIntent'
        - $ref: '#/components/schemas/PolyxCreateAccountIntent'
        - $ref: '#/components/schemas/PolyxPreApproveAssetIntent'
        - $ref: '#/components/schemas/PolyxStakeIntent'
        - $ref: '#/components/schemas/PolyxSwitchValidatorIntent'
        - $ref: '#/components/schemas/PolyxUnstakeIntent'
        - $ref: '#/components/schemas/PolyxWithdrawIntent'
        - $ref: '#/components/schemas/SolAuthorizeIntent'
        - $ref: '#/components/schemas/SolClaimIntent'
        - $ref: '#/components/schemas/SolCloseAssociatedTokenAccountIntent'
        - $ref: '#/components/schemas/SolConsolidateIntent'
        - $ref: '#/components/schemas/SolCreateAssociatedTokenAccountIntent'
        - $ref: '#/components/schemas/SolCustomTxIntent'
        - $ref: '#/components/schemas/SolDeactivateIntent'
        - $ref: '#/components/schemas/SolDelegateIntent'
        - $ref: '#/components/schemas/SolGoUnstakeIntent'
        - $ref: '#/components/schemas/SolPaymentIntent'
        - $ref: '#/components/schemas/SolStakeIntent'
        - $ref: '#/components/schemas/SolUnstakeIntent'
        - $ref: '#/components/schemas/SolVersionedCustomTxIntent'
        - $ref: '#/components/schemas/SubstrateConsolidateIntent'
        - $ref: '#/components/schemas/SubstratePaymentIntent'
        - $ref: '#/components/schemas/SuiConsolidateIntent'
        - $ref: '#/components/schemas/SuiCustomTxIntent'
        - $ref: '#/components/schemas/SuiGoUnstakeIntent'
        - $ref: '#/components/schemas/SuiPaymentIntent'
        - $ref: '#/components/schemas/SuiStakingIntent'
        - $ref: '#/components/schemas/SuiUnstakingIntent'
        - $ref: '#/components/schemas/TaoStakeIntent'
        - $ref: '#/components/schemas/TaoSwitchValidatorIntent'
        - $ref: '#/components/schemas/TaoTransferStakeIntent'
        - $ref: '#/components/schemas/TaoUnstakeIntent'
        - $ref: '#/components/schemas/TokenApprovalIntent'
        - $ref: '#/components/schemas/TonConsolidateIntent'
        - $ref: '#/components/schemas/TonDelegateIntent'
        - $ref: '#/components/schemas/TonMultiNominatorDelegateIntent'
        - $ref: '#/components/schemas/TonMultiNominatorUndelegateIntent'
        - $ref: '#/components/schemas/TonPaymentIntent'
        - $ref: '#/components/schemas/TonSingleNominatorDelegateIntent'
        - $ref: '#/components/schemas/TonSingleNominatorUndelegateIntent'
        - $ref: '#/components/schemas/TonUndelegateIntent'
        - $ref: '#/components/schemas/TonWhalesDelegateIntent'
        - $ref: '#/components/schemas/TonWhalesUndelegateIntent'
        - $ref: '#/components/schemas/TrxClaimRewardsIntent'
        - $ref: '#/components/schemas/TrxDelegateResourceIntent'
        - $ref: '#/components/schemas/TrxFreezeIntent'
        - $ref: '#/components/schemas/TrxUndelegateResourceIntent'
        - $ref: '#/components/schemas/TrxUnfreezeIntent'
        - $ref: '#/components/schemas/TrxVoteIntent'
        - $ref: '#/components/schemas/TrxWithdrawExpireUnfreezeIntent'
        - $ref: '#/components/schemas/VetStakingIntent'
        - $ref: '#/components/schemas/VetDelegateIntent'
        - $ref: '#/components/schemas/VetExitDelegationIntent'
        - $ref: '#/components/schemas/VetBurnNFTIntent'
        - $ref: '#/components/schemas/VetStakeClaimRewardsIntent'
        - $ref: '#/components/schemas/VetValidatorRegistrationIntent'
        - $ref: '#/components/schemas/VetIncreaseStakeIntent'
        - $ref: '#/components/schemas/VetDecreaseStakeIntent'
        - $ref: '#/components/schemas/VetSignalExitIntent'
        - $ref: '#/components/schemas/VetWithdrawStakeIntent'
        - $ref: '#/components/schemas/WalletRecoveryIntent'
        - $ref: '#/components/schemas/BaseStakeIntentWithCalldata'
        - $ref: '#/components/schemas/StakeWithCallDataIntent'
        - $ref: '#/components/schemas/SwitchValidatorWithCallDataIntent'
        - $ref: '#/components/schemas/CoreDaoDelegateIntent'
        - $ref: '#/components/schemas/CoreDaoUndelegateIntent'
        - $ref: '#/components/schemas/CoreDaoClaimIntent'
        - $ref: '#/components/schemas/EthLikeStakeIntent'
        - $ref: '#/components/schemas/BeraDelegateIntent'
        - $ref: '#/components/schemas/WalrusStakingIntent'
        - $ref: '#/components/schemas/WalrusUndelegateIntent'
        - $ref: '#/components/schemas/WalrusWithdrawIntent'
        - $ref: '#/components/schemas/XdcUploadKycIntent'
        - $ref: '#/components/schemas/XdcProposeIntent'
        - $ref: '#/components/schemas/XdcResignIntent'
        - $ref: '#/components/schemas/XdcWithdrawIntent'
        - $ref: '#/components/schemas/BaseIntent'
    TransactionRequest:
      anyOf:
        - $ref: '#/components/schemas/TransactionRequestLite1'
        - $ref: '#/components/schemas/TransactionRequestFull1'
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - userId
        - intent
    TransactionRequestBase:
      title: TransactionRequestBase
      type: object
      properties:
        apiVersion:
          type: string
          enum:
            - lite
            - full
          description: The API version of the transaction request
        txRequestId:
          allOf:
            - $ref: '#/components/schemas/TransactionRequestId'
          description: >-
            A unique ID for the TxRequest document across all wallets. The
            combination of the txRequestId and version will always be unique.
        idempotencyKey:
          type: string
          description: The idempotency key of the transaction request
        walletId:
          allOf:
            - $ref: '#/components/schemas/WalletIdString'
          description: The id of the Wallet the TxRequest is for.
        walletType:
          type: string
          enum:
            - backing
            - cold
            - custodial
            - custodialPaired
            - hot
            - advanced
            - trading
          description: >-
            The type describes who owns the keys to the wallet associated to the
            TxRequest.
        version:
          type: number
          description: The version of the transaction request
        enterpriseId:
          type: string
          description: >-
            If the wallet that owns the TxRequest is owned by an enterprise then
            this is the Id of said enterprise.
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        state:
          $ref: '#/components/schemas/TransactionRequestState'
        date:
          type: string
          description: >-
            The date and time this version of the TxRequest document was
            created.
          example: '2021-01-01T00:00:00.000Z'
          format: date-time
          title: ISO Date String
        createdDate:
          type: string
          description: The date and time the version 1 TxRequest document was created.
          example: '2021-01-01T00:00:00.000Z'
          format: date-time
          title: ISO Date String
        userId:
          type: string
          description: >-
            The Id of the User that produced this version of the TxRequest
            document. Could have created a new document or updated an existing
            document.
        initiatedBy:
          type: string
          description: >-
            The Id of the User that originally created the TxRequest document
            (initiated the TxRequest).
        updatedBy:
          type: string
          description: >-
            The Id of the User that last updated the TxRequest document. This is
            an alias for the userId field.
        intent:
          description: The intent of the transaction request
        intents:
          type: array
          items: {}
        pendingApprovalId:
          type: string
          description: >-
            The id of the Pending Approval that was created for the TxRequest if
            one was required.
        policiesChecked:
          type: boolean
        latest:
          type: boolean
          description: Indicates if this is the latest transaction request
        isCanceled:
          type: boolean
          description: True, if the transaction request is canceled.
      required:
        - txRequestId
        - walletId
        - version
        - state
        - date
        - createdDate
        - userId
        - initiatedBy
        - updatedBy
        - intents
        - latest
    TransactionRequestBase1:
      type: object
      properties:
        txRequestId:
          type: string
          description: >-
            A unique ID for the TxRequest document across all wallets. The
            combination of the txRequestId and version will always be unique.
        version:
          type: number
          description: >-
            The version of the document. Data changes are done only with inserts
            and incrementing the version.
        latest:
          type: boolean
          description: >-
            A boolean flag that indicates whether the document is the latest
            version of the TxRequest.
        walletId:
          type: string
          description: The id of the Wallet the TxRequest is for.
        walletType:
          allOf:
            - $ref: '#/components/schemas/WalletTypePublic'
          description: >-
            The type describes who owns the keys to the wallet associated to the
            TxRequest.
        enterpriseId:
          type: string
          description: >-
            If the wallet that owns the TxRequest is owned by an enterprise then
            this is the Id of said enterprise.
        state:
          $ref: '#/components/schemas/TransactionRequestState1'
        date:
          allOf:
            - $ref: '#/components/schemas/DateTime'
          description: >-
            The date and time this version of the TxRequest document was
            created.
        createdDate:
          allOf:
            - $ref: '#/components/schemas/DateTime'
          description: The date and time the version 1 TxRequest document was created.
        userId:
          type: string
          description: >-
            The Id of the User that produced this version of the TxRequest
            document. Could have created a new document or updated an existing
            document.
        initiatedBy:
          type: string
          description: >-
            The Id of the User that originally created the TxRequest document
            (initiated the TxRequest).
        updatedBy:
          type: string
          description: >-
            The Id of the User that last updated the TxRequest document. This is
            an alias for the userId field.
        intent:
          $ref: '#/components/schemas/TransactionRequestIntent'
        intents:
          type: array
          items:
            $ref: '#/components/schemas/TransactionRequestIntent'
        pendingApprovalId:
          type: string
          description: >-
            The id of the Pending Approval that was created for the TxRequest if
            one was required.
        isCanceled:
          type: boolean
          description: True, if the transaction request is canceled.
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - createdDate
        - userId
        - initiatedBy
        - updatedBy
        - intents
    TransactionRequestFull:
      title: TransactionRequestFull
      allOf:
        - type: object
          properties:
            transactions:
              type: array
              items:
                type: object
                properties:
                  state:
                    $ref: '#/components/schemas/TransactionState'
                  unsignedTx:
                    $ref: '#/components/schemas/UnsignedTransaction'
                  signatureShares:
                    type: array
                    items:
                      allOf:
                        - type: object
                          properties:
                            privateShareProof:
                              type: string
                              description: The private share proof
                            publicShare:
                              type: string
                              description: The public share
                            vssProof:
                              type: string
                              description: The VSS proof of the signature share
                        - $ref: '#/components/schemas/SignatureShareWithoutVssProof'
                  commitmentShares:
                    type: array
                    items:
                      allOf:
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - commitment
                              description: The type of the commitment share
                          required:
                            - type
                        - $ref: '#/components/schemas/BaseShare'
                  txHash:
                    type: string
                  updatedDate:
                    type: string
                    format: date-time
                    title: ISO Date String
                  createdDate:
                    type: string
                    format: date-time
                    title: ISO Date String
                required:
                  - state
                  - unsignedTx
                description: The transactions associated with the transaction request
            messages:
              type: array
              items:
                type: object
                description: The messages associated with the transaction request
                properties:
                  state:
                    allOf:
                      - $ref: '#/components/schemas/TransactionState'
                    description: The current state of the message
                  signatureShares:
                    type: array
                    items:
                      allOf:
                        - type: object
                          properties:
                            privateShareProof:
                              type: string
                              description: The private share proof
                            publicShare:
                              type: string
                              description: The public share
                            vssProof:
                              type: string
                              description: The VSS proof of the signature share
                        - $ref: '#/components/schemas/SignatureShareWithoutVssProof'
                      description: Signature shares for the message
                  privateSignatureShares:
                    type: array
                    items:
                      allOf:
                        - type: object
                          properties:
                            privateShareProof:
                              type: string
                              description: The private share proof
                            publicShare:
                              type: string
                              description: The public share
                            vssProof:
                              type: string
                              description: The VSS proof of the signature share
                        - $ref: '#/components/schemas/SignatureShareWithoutVssProof'
                      description: Private signature shares for the message
                  commitmentShares:
                    type: array
                    items:
                      allOf:
                        - type: object
                          properties:
                            type:
                              type: string
                              enum:
                                - commitment
                              description: The type of the commitment share
                          required:
                            - type
                        - $ref: '#/components/schemas/BaseShare'
                      description: Commitment shares for the message (used for EdDSA)
                  encryptedShares:
                    type: array
                    items:
                      allOf:
                        - type: object
                          properties:
                            type:
                              $ref: '#/components/schemas/ShareType'
                          required:
                            - type
                        - $ref: '#/components/schemas/BaseShare'
                      description: Encrypted shares for the message
                  txHash:
                    type: string
                    description: Transaction hash
                  updatedDate:
                    type: string
                    description: Date when the message was last updated
                    format: date-time
                    title: ISO Date String
                  createdDate:
                    type: string
                    description: Date when the message was created
                    format: date-time
                    title: ISO Date String
                  messageRaw:
                    type: string
                    description: The raw message to be signed
                  messageEncoded:
                    type: string
                    description: The encoded message
                  messageBroadcastable:
                    type: string
                    description: The broadcastable message
                  messageStandardType:
                    type: string
                    description: The encoded message
                  derivationPath:
                    type: string
                    description: Derivation path for the message
                  combineSigShare:
                    type: string
                    description: Combined signature share
                  coin:
                    type: string
                    description: Coin type for the message
                  bitgoPaillierChallenge:
                    description: BitGo's Paillier challenge for ECDSA
                  encryptedChallenge:
                    type: string
                    description: BitGo's encrypted challenge for ECDSA with Range Proofs
                required:
                  - state
                  - messageRaw
        - $ref: '#/components/schemas/TransactionRequestBase'
    TransactionRequestFull1:
      title: Full
      allOf:
        - $ref: '#/components/schemas/TransactionRequestBase1'
        - type: object
          properties:
            transactions:
              description: Transaction information.
              type: array
              items:
                $ref: '#/components/schemas/Transaction'
            messages:
              description: Messages for the transaction request.
              type: array
              items:
                $ref: '#/components/schemas/Message1'
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - userId
        - intent
        - transactions
    TransactionRequestId:
      title: TransactionRequestId
      type: string
      example: 123e4567-e89b-12d3-a456-426614174000
      format: uuid
    TransactionRequestIntent:
      anyOf:
        - $ref: '#/components/schemas/AdaStakeIntent1'
        - $ref: '#/components/schemas/ConsolidateTokenIntent1'
        - $ref: '#/components/schemas/CosmosContractCallIntent1'
        - $ref: '#/components/schemas/DOTClaimIntent'
        - $ref: '#/components/schemas/DotPaymentIntent1'
        - $ref: '#/components/schemas/DotStakingIntent1'
        - $ref: '#/components/schemas/DotUnstakingIntent1'
        - $ref: '#/components/schemas/EthAccelerationIntent1'
        - $ref: '#/components/schemas/EthFillNonceIntent1'
        - $ref: '#/components/schemas/EthPaymentIntent1'
        - $ref: '#/components/schemas/ETHSignMessageIntent'
        - $ref: '#/components/schemas/EthStakingIntent1'
        - $ref: '#/components/schemas/NearStakeIntent1'
        - $ref: '#/components/schemas/NearUnstakeIntent1'
        - $ref: '#/components/schemas/NearWithdrawIntent1'
        - $ref: '#/components/schemas/SolClaimIntent1'
        - $ref: '#/components/schemas/SolCloseAssociatedTokenAccountIntent1'
        - $ref: '#/components/schemas/SolCreateAssociatedTokenAccountIntent1'
        - $ref: '#/components/schemas/SolStakeIntent1'
        - $ref: '#/components/schemas/SolUnstakeIntent1'
        - $ref: '#/components/schemas/TransferTokenIntent1'
        - $ref: '#/components/schemas/TrxDelegateResourceIntent1'
        - $ref: '#/components/schemas/TrxUndelegateResourceIntent1'
        - $ref: '#/components/schemas/UnstakeIntent2'
        - $ref: '#/components/schemas/WalletRecoveryIntent1'
        - $ref: '#/components/schemas/WithdrawIntent2'
    TransactionRequestLite:
      title: TransactionRequestLite
      allOf:
        - type: object
          properties:
            intent:
              allOf:
                - $ref: '#/components/schemas/TransactionIntent'
              description: The intent of the transaction request
            unsignedTxs:
              type: array
              items:
                type: object
                properties:
                  parsedTx:
                    $ref: '#/components/schemas/ParsedTx'
                  serializedTxHex:
                    type: string
                    description: The unsigned transaction as a hex string.
                  signableHex:
                    type: string
                    description: >-
                      The portion of a transaction used to generate a signature
                      (may or may not be the same as serializedTxHex) as a hex
                      string.
                  derivationPath:
                    type: string
                    description: A bip32 path.
                  coinSpecific:
                    allOf:
                      - type: object
                        properties:
                          nonceAddress:
                            type: string
                          stakingAddress:
                            type: string
                          signature:
                            type: string
                      - type: object
                        additionalProperties: {}
                    description: Coin specific information.
                  feeInfo:
                    type: object
                    properties:
                      fee:
                        oneOf:
                          - type: string
                          - type: number
                      feeString:
                        type: string
                    required:
                      - fee
                      - feeString
                required:
                  - parsedTx
                  - serializedTxHex
                  - signableHex
                description: >-
                  Holds all unsigned transactions that will be used to fulfill
                  the TxRequest for MPC wallets.
            signatureShares:
              type: array
              items:
                allOf:
                  - type: object
                    properties:
                      vssProof:
                        type: string
                        description: The VSS proof of the signature share
                      privateShareProof:
                        type: string
                        description: The private share proof
                      publicShare:
                        type: string
                        description: The public share
                  - $ref: '#/components/schemas/SignatureShareWithoutVssProof'
                description: >-
                  Only used for MPC coins. This is used to collect signature
                  shares from and exchange them with the user.
            commitmentShares:
              type: array
              items:
                allOf:
                  - type: object
                    properties:
                      type:
                        type: string
                        enum:
                          - commitment
                        description: The type of the commitment share
                    required:
                      - type
                  - $ref: '#/components/schemas/BaseShare'
                description: >-
                  Only used for MPC coins on EdDSA curve. This is used to
                  collect commitment shares from and exchange them with the
                  user.
            txHashes:
              type: array
              items:
                type: string
                description: >-
                  The hashes of all transactions from the TxRequest that have
                  been signed and are pending broadcast.
        - $ref: '#/components/schemas/TransactionRequestBase'
    TransactionRequestLite1:
      title: Lite
      allOf:
        - $ref: '#/components/schemas/TransactionRequestBase1'
        - type: object
          properties:
            unsignedTxs:
              type: array
              description: >-
                Holds all unsigned transactions that will be used to fulfill the
                TxRequest for MPC wallets.
              items:
                $ref: '#/components/schemas/TransactionRequestUnsignedTransaction'
            signatureShares:
              type: array
              description: >-
                Only used for MPC coins. This is used to collect signature
                shares from and exchange them with the user.
              items:
                $ref: '#/components/schemas/SignatureShare'
            commitmentShares:
              type: array
              description: >-
                Only used for MPC coins on EdDSA curve. This is used to collect
                commitment shares from and exchange them with the user.
              items:
                $ref: '#/components/schemas/CommitmentShare'
            txHashes:
              type: array
              items:
                type: string
                description: >-
                  The hashes of all transactions from the TxRequest that have
                  been signed and are pending broadcast.
      required:
        - txRequestId
        - version
        - latest
        - walletId
        - state
        - date
        - userId
        - intent
    TransactionRequestState:
      title: TransactionRequestState
      type: string
      enum:
        - pendingApproval
        - canceled
        - rejected
        - initialized
        - pendingDelivery
        - delivered
        - pendingUserSignature
        - pendingUserCommitment
        - pendingUserRShare
        - pendingUserGShare
        - readyToSend
        - signed
        - failed
    TransactionRequestState1:
      type: string
      enum:
        - initialized
        - pendingApproval
        - pendingUserCommitment
        - pendingUserRShare
        - pendingUserGShare
        - readyToSend
        - pendingUserSignature
        - pendingDelivery
        - signed
        - delivered
        - canceled
        - rejected
        - failed
    TransactionRequestUnsignedTransaction:
      type: object
      properties:
        serializedTxHex:
          type: string
          description: The unsigned transaction as a hex string.
        signableHex:
          type: string
          description: >-
            The portion of a transaction used to generate a signature (may or
            may not be the same as serializedTxHex) as a hex string.
        derivationPath:
          type: string
          description: A bip32 path.
        feeInfo:
          type: object
          properties:
            feeString:
              type: string
            fee:
              type: number
          required:
            - fee
            - feeString
        coinSpecific:
          description: Coin specific information.
          type: object
        parsedTx:
          description: The parsed transaction information.
          type: object
          properties:
            minerFee:
              type: string
            spendAmount:
              type: string
            spendAmounts:
              type: array
              items:
                type: object
                properties:
                  coinName:
                    type: string
                  amountString:
                    type: string
            payGoFee:
              type: string
            outputs:
              type: array
              items:
                type: object
                properties:
                  address:
                    type: string
                  isPayGo:
                    type: boolean
                  value:
                    type: number
                  wallet:
                    type: string
                  walletV1:
                    type: string
                  baseAddress:
                    type: string
                  enterprise:
                    type: string
                  valueString:
                    type: string
                  data:
                    type: string
                  change:
                    type: boolean
                  coinName:
                    type: string
                required:
                  - address
                  - valueString
            inputs:
              type: array
              items:
                type: object
                properties:
                  derivationIndex:
                    type: number
                  value:
                    type: number
                  address:
                    type: string
                  valueString:
                    type: string
                  chain:
                    type: number
                  index:
                    type: number
                required:
                  - valueString
                  - value
            type:
              type: string
            memo:
              type: string
          required:
            - minerFee
            - outputs
            - inputs
      required:
        - serializedTxHex
        - signableHex
    TransactionState:
      title: TransactionState
      type: string
      enum:
        - initialized
        - pendingSignature
        - eddsaPendingCommitment
        - eddsaPendingRShare
        - eddsaPendingGShare
        - ecdsaMPCv2Round1
        - ecdsaMPCv2Round2
        - ecdsaMPCv2Round3
        - eddsaMPCv2Round1
        - eddsaMPCv2Round2
        - eddsaMPCv2Round3
        - readyToCombineShares
        - signed
        - held
        - delivered
        - invalidSignature
        - rejected
      description: >-
        If supplied, only transaction request transaction state changes from the
        provided

        list will trigger notifications. If not provided, all transaction
        request

        transaction state changes will trigger notifications.
    TransactionState1:
      type: string
      enum:
        - initialized
        - pendingSignature
        - eddsaPendingCommitment
        - eddsaPendingRShare
        - eddsaPendingGShare
        - readyToCombineShares
        - signed
        - held
        - delivered
        - invalidSignature
        - rejected
        - ecdsaMPCv2Round1
        - ecdsaMPCv2Round2
        - ecdsaMPCv2Round3
    Transfer:
      type: object
      properties:
        coin:
          $ref: '#/components/schemas/Coin'
        id:
          $ref: '#/components/schemas/Id'
        wallet:
          $ref: '#/components/schemas/Id'
        enterprise:
          $ref: '#/components/schemas/Id'
        txid:
          $ref: '#/components/schemas/TxId'
        normalizedTxHash:
          type: string
          description: >
            A normalized form of `txid` used for deduplication. For most coins
            this is

            identical to `txid`. For account-model coins (e.g. ETH and its
            tokens) it may

            differ from `txid` when the transaction is regenerated. For
            lightning

            transfers, `normalizedTxHash` is identical to `txid` (no
            transformation is

            applied).


            **Go Account / OFC withdrawals:** Like `txid`, this field holds the
            internal

            front-transfer hash, not the on-chain hash. Use
            `metadata[].onChainTxId` for

            the on-chain transaction hash.
          example: b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26
        txidType:
          type: string
          description: The type of the transaction id
          enum:
            - transactionHash
            - blockHash
        height:
          type: integer
          description: >-
            The height of the block this Transfer was confirmed in (999999999 if
            unconfirmed)
        heightId:
          type: string
          description: The unique height id of the block
        date:
          type: string
          format: date-time
          description: The date this Transfer was last updated
        confirmations:
          type: integer
          description: >-
            The number of blocks that have been confirmed since this Transfer's
            block was confirmed
        type:
          type: string
          description: >-
            Defines whether or not this Transfer was sent or received by the
            user
          enum:
            - send
            - receive
        value:
          type: integer
          description: >-
            The total value (in base units) sent by this Transfer (may be
            approximate for ETH and other coins where amounts in base units can
            exceed 2^53 - 1)
        valueString:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
          description: >-
            The total value (in base units) sent by this Transfer represented as
            a String
        intendedValueString:
          description: >-
            A string representation (in base units) of the initial value for the
            transfer. This is present because when a transaction fails on chain,
            its value is mutated to be zero. This string is immutable and will
            always be the intended value of the initial transfer regardless of
            the final state of the transaction.
          allOf:
            - $ref: '#/components/schemas/IntegerString'
        baseValue:
          type: integer
          description: >-
            The value (in base units) sent by this transfer, excluding network
            fees. BitGo is deprecating this field in the future. Instead, use
            baseValueWithoutFees.
        baseValueString:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
          description: >-
            The value (in base units) sent by this transfer, excluding network
            fees represented as a string. BitGo is deprecating this field in the
            future. Instead, use baseValueWithoutFees.
        baseValueWithoutFees:
          type: integer
          description: >-
            The value (in base units) sent by this transfer excluding network
            fees.
        baseValueWithoutFeesString:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
          description: >-
            The value (in base units) sent by this transfer, excluding network
            fees, represented as a string
        feeString:
          type: string
          description: The Transfer's fee (in base units) represented as a String
        payGoFee:
          type: integer
          description: The Transfer's BitGo fee (in base units)
        payGoFeeString:
          type: string
          description: The Transfer's BitGo fee (in base units) represented as a String
        usd:
          type: number
          description: The amount of USD of this Transfer (will be negative if it's a send)
        usdRate:
          type: number
          description: The USD price at the time this Transfer was created
        state:
          $ref: '#/components/schemas/TransferState'
        tags:
          type: array
          description: The tags to be used on this Transfer (used in Policies)
          items:
            $ref: '#/components/schemas/Id'
        history:
          type: array
          description: >-
            An audit log of events that have happened to the Transfer during its
            lifecycle
          items:
            type: object
            properties:
              date:
                type: string
                format: date-time
                description: The date of this history object
              user:
                $ref: '#/components/schemas/Id'
              action:
                type: string
                enum:
                  - created
                  - signed
                  - unconfirmed
                  - confirmed
                  - approved
                  - commented
                  - removed
                  - failed
                  - rejected
              comment:
                type: string
                description: >-
                  If this history object is of action `commented`, this is the
                  comment from the user
        comment:
          type: string
          description: A comment from the user
        vSize:
          type: integer
          description: The size of the transaction
        coinSpecific:
          type: object
          description: Transfer fields specific to each coin type
        sequenceId:
          type: string
          description: >
            A `sequenceId` is a unique and arbitrary wallet identifier applied
            to transfers and transactions at creation. It is optional but highly
            recommended. With a `sequenceId` you can easily reference transfers
            and transactions&mdash;for example, to safely retry sending. Because
            the system only confirms one send request per `sequenceId` (and
            fails all subsequent attempts), you can retry sending without the
            risk of double spending. The `sequenceId` is only visible to users
            on the wallet and is not shared publicly.
        consolidateId:
          $ref: '#/components/schemas/Id'
          description: Consolidation ID if this transfer is part of a consolidation
        txRequestId:
          type: string
          description: Associated transaction request ID
        goStakingRequestId:
          type: string
          description: Associated GO staking request ID
        subType:
          type: string
          description: Transfer subtype
          enum:
            - ofc_withdrawal
            - ofc_deposit
            - ofc_unstake
            - ofc_stake
            - ofc_book_transfer
        feeCoin:
          type: string
          description: The coin used to pay the fee (for cross-chain transactions)
        instant:
          type: boolean
          description: Whether this is an instant transaction
        instantId:
          type: string
          description: The instant transaction ID if applicable
        isFee:
          type: boolean
          description: Whether this transfer represents a fee
        isReward:
          type: boolean
          description: Whether this transfer represents a staking reward
        isUnlock:
          type: boolean
          description: Whether this transfer represents an unlock operation
        metadata:
          type: array
          description: >
            Key-value pairs carrying additional metadata about the transfer. The
            same key

            may appear more than once.


            Known keys (alphabetical). This list reflects all keys defined in

            the current server release; additional keys may be added in future

            releases without a breaking-change notice.


            - `backingTransferBroadcastTimestamp` — Timestamp (ISO 8601) at
            which
              the backing on-chain transaction was broadcast to the network.
            - `lightningPaymentHash` — **(OFC lightning transfers only)** The
              Lightning Network payment hash for the transfer. Present on both
              `ofc_withdrawal` and `ofc_deposit` lightning transfers; for
              `ofc_deposit` lightning transfers this key is used instead of
              `onChainTxId`.
            - `onChainTxId` — **(Go Account / OFC non-lightning transfers
            only)**
              The on-chain transaction hash of the backing transfer. For
              `ofc_withdrawal` transfers this key is absent while the transfer is
              in state `signed`; it is populated once the transfer reaches state
              `confirmed` (i.e. once the backing on-chain transaction is
              confirmed). Poll until `state === 'confirmed'` before reading this
              field. Use this value — not the top-level `txid` — when reconciling
              against a block explorer or external ledger. For standard
              `ofc_deposit` transfers (non-lightning) this value equals the
              top-level `txid`.
            - `replacedBy` — Transfer ID of the transfer that replaced this
            entry.

            - `replaces` — Transfer ID of the transfer this entry replaces.

            - `reversedBy` — Transfer ID of the transfer that reversed this
            entry.

            - `reverses` — Transfer ID of the transfer this entry reverses.

            - `rtId` — Internal routed-transaction ID linking a front transfer
            to its
              backing Go Account routed transaction.
            - `stablecoinTxType` — Transaction type for stablecoin transfers
            (e.g.
              `mint`, `reward`, `burn`).
            - `tokenizationUniquenessId` — **(Tokenization withdrawals only)**
              Internal identifier used to prevent double-spends on a tokenization
              withdrawal. Derived from the tokenization order ID; not guaranteed to
              equal the order ID in rare same-merchant/same-amount/same-instant
              collisions.
          items:
            type: object
            properties:
              key:
                type: string
                description: >-
                  The metadata key name. See the `metadata` array description
                  for documented values. Additional keys may be present.
                x-extensible-enum:
                  - backingTransferBroadcastTimestamp
                  - lightningPaymentHash
                  - onChainTxId
                  - replacedBy
                  - replaces
                  - reversedBy
                  - reverses
                  - rtId
                  - stablecoinTxType
                  - tokenizationUniquenessId
              value:
                type: string
        sendAccounting:
          type: array
          description: Accounting breakdown for send transactions
          items:
            type: object
            properties:
              type:
                type: string
              amountString:
                type: string
              nOuts:
                type: integer
              amount:
                type: integer
              id:
                type: string
        createdTime:
          type: string
          format: date-time
          description: The time this transfer was created
        approvedTime:
          type: string
          format: date-time
          description: The time this transfer was approved
        rejectedTime:
          type: string
          format: date-time
          description: The time this transfer was rejected
        signedTime:
          type: string
          format: date-time
          description: The time this transfer was signed
        unconfirmedTime:
          type: string
          format: date-time
          description: The time this transfer became unconfirmed
        confirmedTime:
          type: string
          format: date-time
          description: The time this transfer was confirmed
        removedTime:
          type: string
          format: date-time
          description: The time this transfer was removed
        commentedTime:
          type: string
          format: date-time
          description: The time this transfer was commented on
        failedTime:
          type: string
          format: date-time
          description: The time this transfer failed
        regeneratedTime:
          type: string
          format: date-time
          description: The time this transfer was regenerated
        replacedTime:
          type: string
          format: date-time
          description: The time this transfer was replaced
        replacingTime:
          type: string
          format: date-time
          description: The time this transfer started replacing another
        abandonedTime:
          type: string
          format: date-time
          description: The time this transfer was abandoned
        signedDate:
          type: string
          format: date-time
          description: The date this transfer was signed (legacy field)
        customerApprovedTime:
          type: string
          format: date-time
          description: >-
            The time this transfer was approved by the customer (trust
            transfers)
        idVerificationTime:
          type: string
          format: date-time
          description: The time identity verification was completed (trust transfers)
        trustSignedTime:
          type: string
          format: date-time
          description: The time this transfer was signed by trust (trust transfers)
        trustFinalApprovalTime:
          type: string
          format: date-time
          description: >-
            The time this transfer received final trust approval (trust
            transfers)
        walletLabel:
          type: string
          description: Label of the wallet associated with this transfer
        enterpriseName:
          type: string
          description: Name of the enterprise associated with this transfer
        elliptic:
          type: string
          description: Elliptic risk score information (trust transfers)
        senderInformationVerified:
          type: boolean
          description: Whether sender information has been verified (trust transfers)
        buildParams:
          type: object
          description: Parameters used to build the transaction
          additionalProperties: true
        entries:
          type: array
          description: >-
            An array of objects describing the change in address balances made
            as a result of this Transfer
          items:
            type: object
            properties:
              address:
                type: string
                description: An address affected by this Transfer
                example: 2NAUwNgXaoFj2VVnSEvNLGuez8CfdU2UCMZ
              wallet:
                allOf:
                  - $ref: '#/components/schemas/Id'
                description: Only visible when the user has access to the wallet
              value:
                type: integer
                description: The change (in base units) in the address's balance
              valueString:
                allOf:
                  - $ref: '#/components/schemas/IntegerString'
                description: >-
                  The change (in base units) in the address's balance
                  represented as a String
              isChange:
                type: boolean
                description: >-
                  True if this address is a change address (only exists for UTXO
                  coins) and if this is a `sent` Transfer
              isPayGo:
                type: boolean
                description: True if this address is the BitGo PayGo wallet
              token:
                type: string
                description: If this is a token entry, the token's symbol
                example: omg
              label:
                type: string
                description: Names of addresses given by the user.
              failed:
                type: boolean
                description: true if this entry is failed.
              associatedNativeCoinAddress:
                type: string
                description: >-
                  The native coin receive address associated with the solana ATA
                  address. This is currently present only for BitGo addresses.
              memo:
                type: string
                description: >-
                  Memo associated with this entry. Only available for STX, EOS,
                  SOL, NEAR, and POLYX. For other coins (XLM, XRP, Cosmos-based,
                  TON, Tempo), memo is stored at the transaction level or
                  appended to the address.
              type:
                type: string
                description: The type of this entry (e.g., transfer, fee, contract_call).
              nftId:
                type: string
                description: >-
                  NFT ID associated with this entry. Only present for NFT
                  transfers.
              nftSymbol:
                type: string
                description: >-
                  NFT symbol associated with this entry. Only present for NFT
                  transfers.
          required:
            - address
            - valueString
        usersNotified:
          type: boolean
          description: >-
            Whether BitGo already sent notifications to the users of the
            transfer wallet
        label:
          type: string
          description: Address labels (if any) from entries concatenated.
        replaces:
          type: array
          description: Transaction IDs that this transfer replaces.
          items:
            type: string
        replacedBy:
          type: array
          description: Transaction IDs that replace this transfer.
          items:
            type: string
        riskIndicators:
          type: array
          description: >-
            Risk indicators detected on this transfer (e.g. SELFDESTRUCT
            opcode). Transfers with risk indicators will not trigger webhook or
            email notifications.
          items:
            type: string
            enum:
              - SELFDESTRUCT
      required:
        - id
        - coin
        - wallet
        - txid
        - height
        - date
        - confirmations
        - type
        - valueString
        - usd
        - usdRate
        - state
        - tags
        - history
        - comment
        - coinSpecific
    TransferState:
      type: string
      description: >
        The state of the transfer. Includes the following:

        - `confirmed`: The transfer is confirmed on chain.

        - `failed`: BitGo failed to confirm the transfer on chain. You must
        retry the transaction.

        - `initialized`: The initial state when creating a transfer.

        - `pendingApproval`: The transfer requires admin approval to proceed.

        - `rejected`: The transfer was rejected by an admin.

        - `removed`: A network re-org occurred, causing the confirmed transfer
        to be removed from the blockchain.

        - `replaced`: The transfer was stuck due to having a low fee and was
        replaced by a new transfer with a higher fee.

        - `signed`: The transfer was approved by an admin (if required) and then
        signed by BitGo.

        - `unconfirmed`: The signed transaction was sent to the network, and is
        pending on-chain validation.
      example: confirmed
      enum:
        - confirmed
        - failed
        - initialized
        - pendingApproval
        - rejected
        - removed
        - replaced
        - signed
        - unconfirmed
    TransferTokenIntent:
      title: TransferTokenIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - transferToken
              description: Must be "transferToken".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
        - $ref: '#/components/schemas/BaseIntentWithTokenRecipients'
    TransferTokenIntent1:
      title: Transfer Token
      allOf:
        - $ref: '#/components/schemas/BaseIntent2'
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - transferToken
            recipients:
              type: array
              items:
                $ref: '#/components/schemas/RecipientEntry1'
    Trustline:
      type: object
      properties:
        token:
          type: string
          description: >-
            One of the supported coin types for Stellar tokens listed in
            [Coin-specific-implementation](#tag/Coin-specific-implementation)
          example: txlm:BST-GBQTIOS3XGHB7LVYGBKQVJGCZ3R4JL5E4CBSWJ5ALIJUHBKS6263644L
        action:
          enum:
            - add
            - remove
        limit:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
          description: String representation of the amount to limit in base units (stroops)
    TrxClaimRewardsIntent:
      title: TRX Claim Rewards Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stakeClaimRewards
              description: Must be `"stakeClaimRewards"`.
            ownerAddress:
              type: string
              description: >-
                Tron address of the wallet owner; must match the wallet's root
                address.
          required:
            - intentType
            - ownerAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Claim accumulated Tron staking rewards (WithdrawBalance) to the owner's

        address. The reward balance must be non-zero; the handler does not
        verify

        the amount before submitting the transaction. Valid on TRX and TTRX.
    TrxDelegateResourceIntent:
      title: TRX Delegate Resource Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegateResource
              description: Must be `"delegateResource"`.
            ownerAddress:
              type: string
              description: >-
                Tron address of the resource owner delegating their staked
                resources.
            receiverAddress:
              type: string
              description: >-
                Tron address of the account receiving the delegated resources;
                must be an active Tron account.
            resource:
              type: string
              enum:
                - BANDWIDTH
                - ENERGY
              description: 'The resource type to delegate: `BANDWIDTH` or `ENERGY`.'
          required:
            - intentType
            - ownerAddress
            - receiverAddress
            - resource
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Delegate staked BANDWIDTH or ENERGY resources to another Tron address
        (DelegateResourceContract). The owner must have sufficient staked
        resources; the receiver address must be an active Tron account; and the
        amount must be at least 1 TRX (1,000,000 sun). Valid on TRX and TTRX.
    TrxDelegateResourceIntent1:
      title: TRX Delegate Resource Intent
      description: >
        Delegates TRON ENERGY or BANDWIDTH from the wallet root address to a
        receiver address.

        For TRX (`trx`, `ttrx`) MPC (TSS) wallets only — use with [Create
        transaction request](/reference/v2wallettxrequestcreate).

        Minimum delegation amount is 1 TRX (1,000,000 sun).
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - delegateResource
            stakingRequestId:
              type: string
            ownerAddress:
              type: string
              description: >-
                TRON address delegating resources (typically the wallet root
                address)
            receiverAddress:
              type: string
              description: TRON address receiving the delegated ENERGY or BANDWIDTH
            amount:
              $ref: '#/components/schemas/Amount1'
            resource:
              type: string
              enum:
                - ENERGY
                - BANDWIDTH
          required:
            - intentType
            - stakingRequestId
            - ownerAddress
            - receiverAddress
            - amount
            - resource
        - $ref: '#/components/schemas/BaseIntent1'
    TrxFreezeIntent:
      title: TRX Freeze Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - stake
              description: Must be `"stake"`.
            validatorAddress:
              type: string
              description: >-
                Tron address of the Super Representative the user intends to
                vote for after freezing. Stored by the staking service to
                auto-construct the subsequent vote intent; not consumed by
                wallet-platform's freeze transaction builder.
            ownerAddress:
              type: string
              description: Tron address of the wallet owner staking the TRX.
            resource:
              type: string
              enum:
                - BANDWIDTH
                - ENERGY
              description: 'The resource type to obtain by staking: `BANDWIDTH` or `ENERGY`.'
          required:
            - intentType
            - validatorAddress
            - ownerAddress
            - resource
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Stake (freeze) TRX to obtain BANDWIDTH or ENERGY using the Tron Stake V2

        protocol (FreezeBalanceV2). The spendable balance must be greater than
        or

        equal to the freeze amount plus the transaction fee.

        Valid on TRX and TTRX.
    TrxUndelegateResourceIntent:
      title: TRX Undelegate Resource Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegateResource
              description: Must be `"undelegateResource"`.
            ownerAddress:
              type: string
              description: >-
                Tron address of the resource owner reclaiming the delegated
                resources.
            receiverAddress:
              type: string
              description: >-
                Tron address of the account from which the resources are being
                reclaimed.
            resource:
              type: string
              enum:
                - BANDWIDTH
                - ENERGY
              description: 'The resource type to reclaim: `BANDWIDTH` or `ENERGY`.'
          required:
            - intentType
            - ownerAddress
            - receiverAddress
            - resource
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Reclaim previously delegated BANDWIDTH or ENERGY resources from a
        receiver address (UnDelegateResourceContract). The undelegatable balance
        must be sufficient to cover the requested amount.
        Valid on TRX and TTRX.
    TrxUndelegateResourceIntent1:
      title: TRX Undelegate Resource Intent
      description: >
        Undelegates previously delegated TRON ENERGY or BANDWIDTH from the
        wallet root address.

        For TRX (`trx`, `ttrx`) MPC (TSS) wallets only — use with [Create
        transaction request](/reference/v2wallettxrequestcreate).
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegateResource
            stakingRequestId:
              type: string
            ownerAddress:
              type: string
              description: >-
                TRON address that delegated the resources (typically the wallet
                root address)
            receiverAddress:
              type: string
              description: TRON address from which resources are being undelegated
            amount:
              $ref: '#/components/schemas/Amount1'
            resource:
              type: string
              enum:
                - ENERGY
                - BANDWIDTH
          required:
            - intentType
            - stakingRequestId
            - ownerAddress
            - receiverAddress
            - amount
            - resource
        - $ref: '#/components/schemas/BaseIntent1'
    TrxUnfreezeIntent:
      title: TRX Unfreeze Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - unstake
              description: Must be `"unstake"`.
            ownerAddress:
              type: string
              description: Tron address of the wallet owner unstaking the TRX.
            resource:
              type: string
              enum:
                - BANDWIDTH
                - ENERGY
              description: 'The resource type to unstake: `BANDWIDTH` or `ENERGY`.'
          required:
            - intentType
            - ownerAddress
            - resource
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Unstake (unfreeze) previously staked TRX using the Tron Stake V2
        protocol (UnfreezeBalanceV2). Initiates the unstaking waiting period;
        use the `claim` intent to withdraw the TRX after the waiting period
        has elapsed. Valid on TRX and TTRX.
    TrxVoteIntent:
      title: TRX Vote Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - voteDelegation
              description: Must be `"voteDelegation"`.
            validatorAddress:
              type: string
              description: >-
                Tron address of the Super Representative selected during the
                freeze step. Carried forward by the staking service so the user
                does not need to re-select a validator; not consumed by
                wallet-platform's vote transaction builder (which reads the
                `votes` array instead).
            ownerAddress:
              type: string
              description: Tron address of the wallet owner casting the votes.
            votes:
              type: array
              items:
                type: object
                properties:
                  vote_address:
                    type: string
                    description: >-
                      Tron address of the Super Representative (SR) receiving
                      the votes.
                  vote_count:
                    type: string
                    description: >-
                      Number of votes to allocate to this SR, as a decimal
                      string.
                required:
                  - vote_address
                  - vote_count
                description: >-
                  List of vote allocations. Each entry specifies a Super
                  Representative address and the number of votes to assign.
                  Total votes must not exceed available Tron Power.
          required:
            - intentType
            - validatorAddress
            - ownerAddress
            - votes
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Cast votes for Tron Super Representatives (SR) using accumulated Tron

        Power (VoteWitnessContract). The total vote count across all entries
        must

        not exceed the available Tron Power. Each staked TRX provides 1 unit of

        Tron Power. Valid on TRX and TTRX.
    TrxWithdrawExpireUnfreezeIntent:
      title: TRX Withdraw Expire Unfreeze Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - claim
              description: Must be `"claim"`.
            ownerAddress:
              type: string
              description: Tron address of the wallet owner withdrawing the unstaked TRX.
          required:
            - intentType
            - ownerAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: |-
        Withdraw previously unstaked TRX after the Tron unstaking waiting period
        has elapsed (WithdrawExpireUnfreeze). The handler does not verify that
        the waiting period has passed before submitting the transaction. Use the
        `unstake` intent to begin the unstaking process. Valid on TRX and TTRX.
    TxAddress:
      type: object
      properties:
        address:
          type: string
        options:
          type: object
      required:
        - address
    TxBase64:
      type: string
      description: Serialized transaction base64 (applies to XLM only)
      example: >-
        AAAAAGRnXg19FteG/7zPd+jDC7LDvRlzgfFC+JrPhRep0kYiAAAAZAB/4cUAAAACAAAAAAAAAAAAAAABAAAAAQAAAABkZ14NfRbXhv+8z3fowwuyw70Zc4HxQviaz4UXqdJGIgAAAAEAAAAAmljT/+FedddnAHwo95dOC4RNy6eVLSehaJY34b9GxuYAAAAAAAAAAAehIAAAAAAAAAAAAUrgwAkAAABAOExcvVJIUJv9HuVfbV0y7lRPRARv4wDtcdhHG7QN40h5wQ2uwPF52OGQ8KY+66a1A/8lNKB75sgj2xj44s8lDQ==
    TxHex:
      type: string
      description: Serialized transaction hex
      example: >-
        01000000000101d58f82d996dd872012675adadf4606734906b25a413f6e2ee535c0c10aef96020000000000ffffffff028de888000000000017a914c91aa24f65827eecec775037d886f2952b73cbe48740420f000000000017a9149304d18497b9bfe9532778a0f06d9fff3b3befaf870500473044022023d7210ba6d8bbd7a28b8af226f40f7235caab79156f93f9c9969fc459ea7f73022050fbdca788fba3de686b66b3501853695ff9d6f375867470207d233b099576e001000069522103d4788cda52f91c1f6c82eb91491ca76108c9c5f0839bc4f02eccc55fedb3311c210391bcef9dcc89570a79ba3c7514e65cd48e766a8868eca2769fa9242fdcc796662102ef3c5ebac4b54df70dea1bb2655126368be10ca0462382fcb730e55cddd2dd6a53aec8b11400
    TxId:
      type: string
      description: >
        The on-chain transaction id.


        **Go Account / OFC wallets:** For `ofc_withdrawal` transfers the
        top-level `txid`

        (and `normalizedTxHash`) is the internal front-transfer hash, not the
        on-chain

        transaction hash. The on-chain hash is available in
        `metadata[].onChainTxId` once

        the transfer reaches state `confirmed`. For standard `ofc_deposit`
        transfers

        (non-lightning) all three values are identical. For OFC lightning
        deposits the

        payment hash is in `metadata[].lightningPaymentHash`; `onChainTxId` is
        absent.
      example: b8a828b98dbf32d9fd1875cbace9640ceb8c82626716b4a64203fdc79bb46d26
    TxUsdThresholdRuleCondition:
      title: TxUsdThresholdRuleCondition
      type: object
      properties:
        lowerBound:
          type: string
        upperBound:
          type: string
      required:
        - lowerBound
    UndelegateIntent:
      title: UndelegateIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
              description: Must be "undelegate".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
      description: >-
        Remove delegation of staked assets from a validator on EVM-compatible
        chains.

        Initiates the unbonding period. Requires a staking request ID from the
        BitGo

        staking service.
    UnsignedTransaction:
      title: UnsignedTransaction
      type: object
      properties:
        parsedTx:
          $ref: '#/components/schemas/ParsedTx'
        serializedTxHex:
          type: string
          description: The unsigned transaction as a hex string.
        signableHex:
          type: string
          description: >-
            The portion of a transaction used to generate a signature (may or
            may not be the same as serializedTxHex) as a hex string.
        derivationPath:
          type: string
          description: A bip32 path.
        coinSpecific:
          allOf:
            - type: object
              properties:
                nonceAddress:
                  type: string
                stakingAddress:
                  type: string
                signature:
                  type: string
            - type: object
              additionalProperties: {}
          description: Coin specific information.
        feeInfo:
          type: object
          properties:
            fee:
              oneOf:
                - type: string
                - type: number
            feeString:
              type: string
          required:
            - fee
            - feeString
      required:
        - parsedTx
        - serializedTxHex
        - signableHex
    Unspent:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/UnspentId'
        address:
          type: string
          description: The address of this unspent
          example: 2MsKxhhkDo5WaLaYRGA9Cr3iSQPyXsu6Fi2
        value:
          type: integer
        valueString:
          $ref: '#/components/schemas/IntegerString'
        blockHeight:
          type: integer
          description: The block this Unspent was created in
        date:
          type: string
          format: date-time
          description: The date this unspent was created
          example: '2017-03-25T23:01:40.248Z'
        coinbase:
          type: boolean
          description: True if this unspent came from the coinbase transaction
        wallet:
          $ref: '#/components/schemas/Id'
        fromWallet:
          $ref: '#/components/schemas/Id'
        chain:
          type: integer
          description: The type of this unspent's address (P2SH, P2WSH, etc...)
          example: 0
        index:
          type: integer
          description: A monotonic counter used when creating new addresses
        redeemScript:
          type: string
          description: >-
            The Script program used to cryptographically verify spending this
            unspent
          example: >-
            522102f1e990044d2a8be43d5b500bbdcb36277b97a4b07e01c5101ae8ec1568bfd6532103dab7dc82f2fc8c28200c1bdeca9c4cf181e0ca257395829cbd599395048afb57210205422e711827d8356f2fb75334d863941dd7eb45bd5788fa231dc5fa755135b653ae
        witnessScript:
          type: string
          description: >-
            The segwit Script program used to cryptographically verify spending
            this unspent
          example: >-
            52210351311cd81144e6cbdba561d24dfc22644cb02d053339d4beace03231b3be4f372103a8d0c1a375b9ee1a2411f9f8e18373be7f228b18260f63bbfca48809170ed08b2103c3bd8bd074657bbe9ee6714b31a4a54b6fd5b5cda0e1030122f9bf46b5034f6b53ae
        isSegwit:
          type: boolean
    UnspentId:
      type: string
      description: The id of the unspent in the form <txid>:<tx_index>
      example: 003f688cc349f1fca8ac5ffa21671ca911b6ef351085c60733ed8c2ebf162cb8:2
    UnstakeIntent:
      title: UnstakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - unstake
              description: Must be "unstake".
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
    UnstakeIntent1:
      title: UnstakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - unstake
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent1'
    UnstakeIntent2:
      title: Generic Unstake
      allOf:
        - $ref: '#/components/schemas/BaseStakeIntent2'
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - unstake
          required:
            - intentType
    UnsupportedTokenRecipientEntryItem:
      title: UnsupportedTokenRecipientEntryItem
      type: object
      properties:
        tokenContractAddress:
          $ref: '#/components/schemas/optionalString'
        decimals:
          $ref: '#/components/schemas/optionalNumber'
    UserKeychainType:
      title: UserKeychainType
      type: object
      properties:
        id:
          type: string
          description: Keychain ID
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        source:
          type: string
          description: Party that created the key
          example: user
        type:
          type: string
          description: Keychain type (e.g. "independent" for onchain, "tss" for MPC)
        pub:
          type: string
          description: Public part of a key pair (onchain wallets)
          example: >-
            xpub661MyMwAqRbcGMVhmc7wqQRYMtcX9LAvSj1pjB213y5TsrkV2uuzJjWnjBrT1FUeNWGPjaVm5p7o6jdNcQJrV1cy3a1R8NQ9m7LuYKA8RpH
        ethAddress:
          type: string
          description: Ethereum address corresponding to this keychain (onchain wallets)
          example: '0xf5b7cca8621691f9dde304cb7128b6bb3d409363'
        coin:
          type: string
          description: Asset ticker for this keychain (onchain wallets)
        commonKeychain:
          type: string
          description: Common keychain string (TSS wallets)
      required:
        - id
        - source
        - type
    UtxoFeeInfo:
      title: UTXO
      type: object
      description: feeInfo (UTXO)
      properties:
        size:
          type: integer
          description: Estimated size of the transaction in bytes
          example: 776
        fee:
          type: integer
          description: Estimated fee in base unit for the transaction
          example: 38800
        feeRate:
          allOf:
            - $ref: '#/components/schemas/IntegerOrString'
            - example: 10000
          description: >
            Custom minimum fee rate in a coin's base unit per kilobyte (or
            virtual kilobyte)--for example, satoshis per kvByte or microAlgos
            per kByte. If the applied `feeRate` does not meet a coin's required
            minimum transaction fee amount, the minimum is still applied (for
            example, 1000 sat/kvByte or a flat 1000 microAlgos).
        payGoFee:
          type: integer
          description: BitGo fee of the transaction (in base units)
          example: 0
        payGoFeeString:
          type: integer
          description: BitGo fee of the transaction (in base units) represented as a String
          example: '0'
    UtxoTransactionFormat:
      type: string
      description: >-
        [UTXO only] Format of the returned transaction hex serialization.

        `legacy` for serialized transaction in custom bitcoinjs-lib format.
        `psbt` for BIP174 serialized transaction
      enum:
        - legacy
        - psbt
        - psbt-lite
      default: legacy
      example: psbt
    UtxoTxInfo:
      title: UTXO
      type: object
      description: txInfo (UTXO)
      properties:
        changeAddresses:
          type: array
          items:
            $ref: '#/components/schemas/AddressString3'
        nOutputs:
          type: integer
          description: Number of outputs
          example: 2
        nP2SHInputs:
          type: integer
          example: 0
        nSegwitInputs:
          type: integer
          example: 1
        unspents:
          type: array
          items:
            $ref: '#/components/schemas/Unspent'
        walletAddressDetails:
          $ref: '#/components/schemas/Address2'
    ValidationError:
      allOf:
        - $ref: '#/components/schemas/GeneralError'
        - type: object
          properties:
            failedValidations:
              type: object
    ValidatorRegistrationIntent:
      title: ValidatorRegistrationIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - validatorRegistration
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
    VersionResponseType:
      title: VersionResponseType
      type: object
      properties:
        version:
          type: string
        name:
          type: string
      required:
        - version
        - name
    VetBurnNFTIntent:
      title: VetBurnNFTIntent
      allOf:
        - $ref: '#/components/schemas/UnstakeIntent'
        - $ref: '#/components/schemas/VetUnstakeCommonFields'
      description: >-
        Burn a VeChain staking NFT to complete the unstaking withdrawal and
        reclaim

        staked VET. This is the second (final) step in the basic unstaking flow
        —

        must be preceded by `undelegate`. No VET is spent by the sender; gas is
        paid

        by the enterprise gas tank (VTHO).
    VetDecreaseStakeIntent:
      title: VetDecreaseStakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - decreaseStake
              description: Must be "decreaseStake".
            validatorAddress:
              type: string
              description: Address of the validator whose staked position is being reduced.
              minLength: 1
            stakingContractAddress:
              type: string
              description: Address of the VeChain staking contract holding the position.
              minLength: 1
          required:
            - intentType
            - validatorAddress
            - stakingContractAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Withdraw a portion of VET staked with a VeChain validator, reducing the

        position size. The specified amount is returned to the sender's wallet.
        No

        VET is spent — gas is paid by the enterprise gas tank (VTHO).
    VetDelegateIntent:
      title: VetDelegateIntent
      allOf:
        - type: object
          properties:
            tokenId:
              type: string
              description: ID of the staking NFT to delegate to the validator.
              minLength: 1
            stakingContractAddress:
              type: string
              description: >-
                Address of the VeChain staking (Stargate) contract that holds
                the NFT.
              minLength: 1
            validatorAddress:
              type: string
              description: Address of the validator to delegate the staking NFT to.
              minLength: 1
          required:
            - tokenId
            - stakingContractAddress
            - validatorAddress
        - $ref: '#/components/schemas/DelegateIntent'
      description: >-
        Delegate a VeChain staking NFT to a validator, granting the validator
        voting

        and reward rights for that position. No VET is spent — this is an NFT

        assignment operation, not a financial transfer. Gas is paid by the
        enterprise

        gas tank (VTHO).
    VetExitDelegationIntent:
      title: VetExitDelegationIntent
      allOf:
        - $ref: '#/components/schemas/UndelegateIntent'
        - $ref: '#/components/schemas/VetUnstakeCommonFields'
      description: >-
        Remove validator delegation for a VeChain staking NFT, returning it to
        an

        undelegated state. This is the first step in the full unstaking flow —
        must

        precede `unstake` (burn NFT). No VET is spent; gas is paid by the
        enterprise

        gas tank (VTHO).
    VetIncreaseStakeIntent:
      title: VetIncreaseStakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - increaseStake
              description: Must be "increaseStake".
            validatorAddress:
              type: string
              description: >-
                Address of the validator whose staked position is being
                increased.
              minLength: 1
            stakingContractAddress:
              type: string
              description: >-
                Address of the VeChain staking contract holding the existing
                position.
              minLength: 1
          required:
            - intentType
            - validatorAddress
            - stakingContractAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Increase the VET staked with an existing VeChain validator by depositing

        additional VET into the staking contract. The sender must have
        sufficient VET

        balance. Gas is paid by the enterprise gas tank (VTHO).
    VetSignalExitIntent:
      title: VetSignalExitIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - signalExit
              description: Must be "signalExit".
            validatorAddress:
              type: string
              description: Address of the validator node whose position is being exited.
              minLength: 1
            stakingContractAddress:
              type: string
              description: >-
                Address of the VeChain staking contract where the validator
                position is held.
              minLength: 1
          required:
            - intentType
            - validatorAddress
            - stakingContractAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
      description: >-
        Signal the intent to exit a VeChain validator staking position,
        initiating

        the cooldown period. This is the first step in the validator unstake
        flow —

        must be followed by `withdrawStake` after the cooldown expires. No VET
        is

        spent; gas is paid by the enterprise gas tank (VTHO).
    VetStakeClaimRewardsIntent:
      title: VetStakeClaimRewardsIntent
      allOf:
        - type: object
          properties:
            tokenId:
              type: string
              description: >-
                ID of the staking NFT whose accumulated VTHO rewards will be
                claimed.
              minLength: 1
            stakingContractAddress:
              type: string
              description: >-
                Address of the VeChain staking (Stargate) contract that holds
                the NFT.
              minLength: 1
          required:
            - tokenId
            - stakingContractAddress
        - $ref: '#/components/schemas/StakeClaimRewardsIntent'
      description: >-
        Claim VTHO rewards accumulated by a VeChain staking NFT position.
        Rewards

        accrue in VTHO (VeChain's energy token) for each NFT held in the
        Stargate

        contract. Supply the NFT's token ID and the staking contract address.
        Gas is

        paid by the enterprise gas tank (VTHO).
    VetStakingIntent:
      title: VetStakingIntent
      allOf:
        - type: object
          properties:
            stakingContractAddress:
              type: string
              description: >-
                Address of the VeChain staking contract that will hold the
                staked VET.
              minLength: 1
            levelId:
              type: string
              description: >-
                Staking tier level in the VeChain contract. Determines reward
                rate and lock parameters.
              minLength: 1
          required:
            - stakingContractAddress
            - levelId
        - $ref: '#/components/schemas/StakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Activate a new VeChain staking position by depositing VET into the
        staking

        contract. Use `levelId` to select the staking tier. To add to an
        existing

        position, use `increaseStake` instead. All VeChain gas fees are paid by
        the

        enterprise gas tank (VTHO); the sender pays no gas.
    VetUnstakeCommonFields:
      title: VetUnstakeCommonFields
      type: object
      properties:
        tokenId:
          type: string
          description: ID of the staking NFT to operate on.
          minLength: 1
        stakingContractAddress:
          type: string
          description: >-
            Address of the VeChain staking (Stargate) contract that holds the
            NFT.
          minLength: 1
      required:
        - tokenId
        - stakingContractAddress
    VetValidatorRegistrationIntent:
      title: VetValidatorRegistrationIntent
      allOf:
        - type: object
          properties:
            validatorAddress:
              type: string
              description: >-
                Address of the validator node being registered. Must be a valid
                VeChain address.
              minLength: 1
            stakingPeriod:
              type: number
              enum:
                - 60480
                - 129600
                - 259200
              description: >-
                Duration of the staking lock period in blocks. Valid values:
                60480 (~7 days), 129600 (~15 days), 259200 (~30 days).
            stakingContractAddress:
              type: string
              description: >-
                Address of the VeChain staking contract to register the
                validator with.
              minLength: 1
          required:
            - validatorAddress
            - stakingPeriod
            - stakingContractAddress
        - $ref: '#/components/schemas/ValidatorRegistrationIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
      description: >-
        Register a new validator node in VeChain's staking contract by
        depositing a

        VET bond. The staking period determines the lock duration (60480,
        129600, or

        259200 blocks). Gas is paid by the enterprise gas tank (VTHO).
    VetWithdrawStakeIntent:
      title: VetWithdrawStakeIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - withdrawStake
              description: Must be "withdrawStake".
            validatorAddress:
              type: string
              description: >-
                Address of the validator node whose staked VET is being
                withdrawn.
              minLength: 1
            stakingContractAddress:
              type: string
              description: >-
                Address of the VeChain staking contract holding the exited
                position.
              minLength: 1
          required:
            - intentType
            - validatorAddress
            - stakingContractAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
      description: >-
        Withdraw a VeChain validator's staked VET after the cooldown period from
        a

        `signalExit` has completed. This is the second (final) step in the
        validator

        unstake flow. No VET is spent — staked VET is returned to the sender;
        gas is

        paid by the enterprise gas tank (VTHO).
    VoteDelegationIntent:
      title: Vote Delegation Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - voteDelegation
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
    Wallet1:
      type: object
      properties:
        admin:
          type: object
          properties:
            policy:
              $ref: '#/components/schemas/Policy1'
        allowBackupKeySigning:
          type: boolean
        approvalsRequired:
          $ref: '#/components/schemas/ApprovalsRequired'
        balanceString:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
          description: Total balance in base units (e.g. Satoshis)
        buildDefaults:
          $ref: '#/components/schemas/WalletBuildDefaults'
        coin:
          $ref: '#/components/schemas/Coin'
        coinSpecific:
          $ref: '#/components/schemas/WalletCoinSpecific'
        custodialWallet:
          type: object
          description: The associated custodial wallet object
        custodialWalletId:
          $ref: '#/components/schemas/Id'
        deleted:
          type: boolean
        disableTransactionNotifications:
          type: boolean
        enterprise:
          $ref: '#/components/schemas/Id'
        freeze:
          type: object
          properties:
            time:
              type: string
              format: dateTime
            expires:
              type: string
              format: dateTime
            reason:
              type: string
              description: Reason why the wallet was frozen
              enum:
                - TxIntentMismatch
                - TxIntentMismatchRecipient
                - TxIntentMismatchContract
                - TxIntentMismatchApproval
                - UserRequest
                - AdminRequest
            referenceId:
              type: string
              description: Optional reference ID for tracking purposes
            adminOrUserId:
              type: string
              description: The user who froze the wallet
        id:
          $ref: '#/components/schemas/Id'
        isCold:
          type: boolean
        keys:
          $ref: '#/components/schemas/Keys'
        label:
          $ref: '#/components/schemas/WalletLabel'
        m:
          $ref: '#/components/schemas/NumSignatures'
        'n':
          $ref: '#/components/schemas/NumKeychains'
        nodeId:
          $ref: '#/components/schemas/Id'
        receiveAddress:
          $ref: '#/components/schemas/Address2'
        recoverable:
          type: boolean
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Id'
        spendableBalanceString:
          allOf:
            - $ref: '#/components/schemas/IntegerString'
          description: Spendable balance in base units (e.g. Satoshis)
        unspentCount:
          type: number
          example: 100
          description: Number of unspent outputs present in the wallet
        startDate:
          allOf:
            - $ref: '#/components/schemas/DateTime'
          description: Wallet creation time
        type:
          $ref: '#/components/schemas/WalletTypePublic'
        users:
          type: array
          items:
            $ref: '#/components/schemas/WalletUser'
        customChangeKeySignatures:
          $ref: '#/components/schemas/CustomChangeKeySignatures'
        multisigType:
          $ref: '#/components/schemas/WalletMultisigType'
        multisigTypeVersion:
          $ref: '#/components/schemas/MultisigTypeVersion1'
      required:
        - approvalsRequired
        - coin
        - deleted
        - disableTransactionNotifications
        - id
        - label
    WalletBuildDefaults:
      type: object
      properties:
        minFeeRate:
          type: integer
          minimum: 1000
          nullable: true
          example: 12000
          description: >
            (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:
          type: integer
          minimum: 1000
          nullable: true
          example: 18000
          description: >
            (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:
          type: number
          minimum: 1
          nullable: true
          example: 1.2
          description: >
            (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:
          $ref: '#/components/schemas/DefaultChangeAddressType'
        txFormat:
          type: string
          example: psbt
          enum:
            - legacy
            - psbt
            - psbt-lite
          description: >
            (UTXO only) The default transaction format to use for this wallet.
            Per transaction, you can override the default with the `txFormat`
            parameter.
        autoReserveUnspentsOnBuildMins:
          type: number
          minimum: 1
          nullable: true
          example: 60
          description: >
            (UTXO only) Automatically reserve unspents when building a
            transaction.
    WalletCoinSpecific:
      oneOf:
        - title: Wallet
          type: object
          properties:
            creationFailure:
              type: array
              items:
                $ref: '#/components/schemas/TxId'
              description: Includes list of fail initialization txids
            pendingChainInitialization:
              type: boolean
              description: Whether the wallet needs to be initialized on the chain
        - $ref: '#/components/schemas/WalletCoinSpecificBtc'
        - $ref: '#/components/schemas/WalletCoinSpecificCosmos'
        - $ref: '#/components/schemas/WalletCoinSpecificOfc'
        - $ref: '#/components/schemas/WalletCoinSpecificXlm'
    WalletCoinSpecificBtc:
      title: BTC
      type: object
      properties:
        allowQuantumUnsafeAddresses:
          type: boolean
          description: >-
            If true, the wallet allows creation of addresses which are
            vulnerable to quantum attacks. Defaults to false.
    WalletCoinSpecificCosmos:
      title: ATOM
      type: object
      properties:
        rootAddress:
          type: string
          description: Wallet address to send or receive assets.
          example: cosmos1uvrgkp82dmeks368d7g2ejzm3axhapzveh5uek
        lastChainIndex:
          type: number
          description: Index of last address that was derived.
          example: 1
        lastMemoId:
          type: string
          description: A running counter of the last known memo id. The first one is 0.
          example: '0'
        pendingEcdsaTssInitialization:
          type: boolean
          description: >-
            If true, this wallet cannot sign transactions or messages as the
            enterprise has not finished MPC setup.
          example: false
      required:
        - rootAddress
        - lastMemoId
    WalletCoinSpecificOfc:
      title: OFC
      type: object
      description: Coin-specific data for OFC (Go Account) wallets.
      properties:
        needsKeyReshareAfterPasswordReset:
          type: boolean
          description: >
            True if all users need to recover the user key. Set to true after a
            successful

            password reset with support.
        pendingSystemInitialization:
          type: boolean
          description: >
            True if the wallet is still pending initialization. While true,
            users cannot

            create addresses or initiate withdrawals.
        userKeySigningRequired:
          type: boolean
          description: >
            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:
      title: XLM
      type: object
      properties:
        rootAddress:
          type: string
          description: Root address of the wallet
          example: GCTTCPH4IIDK7P72FFAEJ3ZFN6WDHJH6GGMRPHPM56ZWGIQ7B3XTIJAM
        stellarUsername:
          type: string
          description: Username for the user's Stellar address
          example: foo_bar@baz.com
        homeDomain:
          type: string
          description: Home domain of a Stellar account
          example: bitgo.com
        stellarAddress:
          type: string
          description: Email-like address associated to a Stellar account
          example: foo_bar@baz.com*bitgo.com
    WalletIdString:
      title: WalletIdString
      type: string
      example: 59cd72485007a239fb00282ed480da1f
      pattern: ^[0-9a-f]{32}$
    WalletLabel:
      type: string
      example: My Wallet
    WalletMultisigType:
      type: string
      enum:
        - onchain
        - tss
    WalletPermission:
      type: string
      description: |
        Comma-separated list of privileges for a wallet. Includes:

              - `admin` - Can manage wallet policies and users and approve or reject pending approvals.
              - `freeze` - Can freeze a wallet, disabling all withdrawals.
              - `spend` - Can initiate withdrawals and generate new receive addresses.
              - `trade` - Can initiate trades from a Go Account (`trading` wallet type).
              - `view` - Can view balances and transactions.

        Permissions don't overlap. Required parameter if 'reshare' is false.
      enum:
        - admin
        - spend
        - trade
        - view
      example: spend,view
    WalletRecoveryIntent:
      title: Wallet Recovery Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - walletRecovery
          required:
            - intentType
        - $ref: '#/components/schemas/BaseIntent'
    WalletRecoveryIntent1:
      title: Wallet Recovery
      type: object
      properties:
        intentType:
          type: string
        sequenceId:
          type: string
          description: >
            A `sequenceId` is a unique and arbitrary wallet identifier applied
            to transfers and transactions at creation. It is optional but highly
            recommended. With a `sequenceId` you can easily reference transfers
            and transactions&mdash;for example, to safely retry sending. Because
            BitGo only confirms one send request per `sequenceId` (and fails all
            subsequent attempts), you can retry sending without the risk of
            double spending. The `sequenceId` is only visible to users on the
            wallet and is not shared publicly. It is the responsibility of the
            caller to keep track of this ID.
          example: abc123
        comment:
          type: string
          description: >-
            The `comment` is only visible to users on the wallet and is not
            shared publicly.
      required:
        - intentType
    WalletShareKeychain:
      type: object
      description: >-
        Key passed to the receiving user, included if the wallet was shared with
        spend permission
      properties:
        pub:
          description: One of wallet pub (onchain) or commonKeychain (MPC)
          type: string
        encryptedPrv:
          description: >-
            Private key of the user sharing the wallet encrypted under their
            wallet passphrase
          type: string
        fromPubKey:
          description: Derived public key of the user sharing the wallet
          type: string
        toPubKey:
          description: Derived public key of the user receiving the share
          type: string
        path:
          description: BIP32 HD path of the derived public keys (fromPubKey and toPubKey)
          example: m/1234/1/1
          type: string
    WalletShareState1:
      type: string
      example: active
      enum:
        - pendingapproval
        - active
        - accepted
        - canceled
        - rejected
    WalletType1:
      title: WalletType
      type: object
      properties:
        id:
          type: string
          description: Wallet ID
          example: 59cd72485007a239fb00282ed480da1f
          pattern: ^[0-9a-f]{32}$
        users:
          type: array
          items:
            type: object
            properties:
              user:
                type: string
              permissions:
                type: array
                items:
                  type: string
            required:
              - user
              - permissions
            description: Ids of users with access to the wallet
        coin:
          type: string
          description: Name of the blockchain the wallet is on
          example: tbtc4
        label:
          type: string
          description: Name the user assigned to the wallet
          example: My TBTC4 Wallet
        m:
          type: number
          description: Number of signatures required for the wallet to send
          example: 2
        'n':
          type: number
          description: Number of signers on the wallet
          example: 3
        keys:
          type: array
          example:
            - 59cd72485007a239fb00282ed480da1f
          items:
            type: string
            description: Ids of wallet keys
        keySignatures:
          type: object
          additionalProperties: {}
          description: >-
            Signatures for the backup and BitGo public keys signed by the user
            key
        enterprise:
          type: string
        organization:
          type: string
        bitgoOrg:
          type: string
        tags:
          type: array
          example:
            - 59cd72485007a239fb00282ed480da1f
          items:
            type: string
            description: Tags set on the wallet
        disableTransactionNotifications:
          type: boolean
          description: Flag for disabling wallet transaction notifications
          example: false
        freeze:
          type: object
          additionalProperties: {}
          description: Freeze state (used to stop the wallet from spending)
          example: {}
        deleted:
          type: boolean
          description: Flag which indicates the wallet has been deleted
          example: false
        approvalsRequired:
          type: number
          description: Number of admin approvals required for an action to fire
          example: 1
        isCold:
          type: boolean
          description: Flag for identifying cold wallets
          example: false
        coinSpecific:
          type: object
          additionalProperties: {}
          description: Coin-specific data
        admin:
          type: object
          additionalProperties: {}
          description: Admin data (wallet policies)
          example: {}
        allowBackupKeySigning:
          type: boolean
          description: Flag for allowing signing with backup key
          example: false
        clientFlags:
          type: array
          items:
            type: string
        recoverable:
          type: boolean
          description: >-
            Flag indicating whether this wallet's user key is recoverable with
            the passphrase held by the user.
        startDate:
          type: string
          description: Time when this wallet was created
        hasLargeNumberOfAddresses:
          type: boolean
          description: >-
            Flag indicating that this wallet is large (more than 100,000
            addresses). If this is set, some APIs may omit properties which are
            expensive to calculate for wallets with many addresses (for example,
            the total address counts returned by the List Addresses API).
        config:
          type: object
          additionalProperties: {}
          description: Custom configuration options for this wallet
        balanceString:
          type: string
          description: Wallet balance as string
          example: '0'
        confirmedBalanceString:
          type: string
          description: Confirmed wallet balance as string
          example: '0'
        spendableBalanceString:
          type: string
          description: Spendable wallet balance as string
          example: '0'
        receiveAddress:
          type: object
          properties:
            id:
              type: string
            address:
              type: string
            chain:
              type: number
            index:
              type: number
            coin:
              type: string
            wallet:
              type: string
            coinSpecific:
              type: object
              additionalProperties: {}
          required:
            - id
            - address
            - chain
            - index
            - coin
            - wallet
            - coinSpecific
        balance:
          type: number
          description: Wallet balance as number
          example: 0
        rbfBalance:
          type: number
        rbfBalanceString:
          type: string
        reservedBalanceString:
          type: string
        lockedBalanceString:
          type: string
        stakedBalanceString:
          type: string
        unspentCount:
          type: number
        pendingChainInitialization:
          type: boolean
        pendingEcdsaTssInitialization:
          type: boolean
        pendingApprovals:
          type: array
          items:
            type: object
            additionalProperties: {}
        multisigType:
          type: string
        multisigTypeVersion:
          type: string
        type:
          type: string
        subType:
          type: string
        creator:
          type: string
        walletFullyCreated:
          type: boolean
      required:
        - id
        - users
        - coin
        - label
        - m
        - 'n'
        - keys
        - keySignatures
        - enterprise
        - organization
        - bitgoOrg
        - tags
        - disableTransactionNotifications
        - freeze
        - deleted
        - approvalsRequired
        - isCold
        - coinSpecific
        - admin
        - allowBackupKeySigning
        - clientFlags
        - recoverable
        - startDate
        - hasLargeNumberOfAddresses
        - config
        - balanceString
        - confirmedBalanceString
        - spendableBalanceString
        - receiveAddress
    WalletTypePublic:
      type: string
      description: >-
        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
      enum:
        - cold
        - custodial
        - custodialPaired
        - hot
        - trading
        - distributedCustody
        - advanced
    WalletUser:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/Id'
        permissions:
          type: array
          items:
            $ref: '#/components/schemas/WalletPermission'
      example:
        user: 55e8a1a5df8380e0e30e20c6
        permissions:
          - admin
          - view
          - spend
    WalrusStakingIntent:
      title: Walrus Stake Intent
      allOf:
        - type: object
          properties:
            sharedStakingObjectId:
              type: string
          required:
            - sharedStakingObjectId
        - $ref: '#/components/schemas/SuiStakingIntent'
    WalrusUndelegateIntent:
      title: Walrus Undelegate Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            stakedSuiObjectId:
              type: string
            sharedStakingObjectId:
              type: string
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
          required:
            - intentType
            - stakedSuiObjectId
            - sharedStakingObjectId
        - $ref: '#/components/schemas/BaseStakeIntent'
    WalrusWithdrawIntent:
      title: Walrus Withdraw Intent
      allOf:
        - type: object
          properties:
            sharedStakingObjectId:
              type: string
          required:
            - sharedStakingObjectId
        - $ref: '#/components/schemas/SuiUnstakingIntent'
    WebhookRuleCondition:
      title: WebhookRuleCondition
      type: object
      properties:
        url:
          type: string
          description: The url to query for the webhook
      required:
        - url
    WithdrawIntent:
      title: WithdrawIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - claim
              description: Must be "claim".
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent'
    WithdrawIntent1:
      title: WithdrawIntent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - claim
            amount:
              type: object
              properties:
                symbol:
                  type: string
                value:
                  type: string
              required:
                - symbol
                - value
          required:
            - intentType
        - $ref: '#/components/schemas/BaseStakeIntent1'
    WithdrawIntent2:
      title: Generic claim unstake
      allOf:
        - $ref: '#/components/schemas/BaseStakeIntent2'
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - claim
          required:
            - intentType
    WsError:
      type: object
      required:
        - error
        - errorName
        - reqId
      properties:
        error:
          type: string
        errorName:
          type: string
        reqId:
          type: string
    XdcProposeIntent:
      title: XDC Propose Intent
      allOf:
        - type: object
          properties:
            candidateAddress:
              type: string
              minLength: 1
            validatorContractAddress:
              type: string
              minLength: 1
          required:
            - candidateAddress
            - validatorContractAddress
        - $ref: '#/components/schemas/ValidatorRegistrationIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    XdcResignIntent:
      title: XDC Resign Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - undelegate
            candidateAddress:
              type: string
              minLength: 1
            validatorContractAddress:
              type: string
              minLength: 1
          required:
            - intentType
            - candidateAddress
            - validatorContractAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
    XdcUploadKycIntent:
      title: XDC Upload KYC Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - contractCall
            ipfsHash:
              type: string
              minLength: 1
            validatorContractAddress:
              type: string
              minLength: 1
          required:
            - intentType
            - ipfsHash
            - validatorContractAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
    XdcWithdrawIntent:
      title: XDC Withdraw Intent
      allOf:
        - type: object
          properties:
            intentType:
              type: string
              enum:
                - unstake
            blockNumber:
              type: string
              minLength: 1
            index:
              type: string
              minLength: 1
            validatorContractAddress:
              type: string
              minLength: 1
          required:
            - intentType
            - blockNumber
            - index
            - validatorContractAddress
        - $ref: '#/components/schemas/BaseStakeIntent'
        - $ref: '#/components/schemas/BaseIntentWithAmount'
    XlmFeeInfo:
      title: XLM
      type: object
      description: feeInfo (XLM)
      properties:
        height:
          type: integer
          description: Height of the ledger that provided the values
          example: 123456
        xlmBaseFee:
          type: string
          description: Base network fee per transaction operation
          example: '100'
        xlmBaseReserve:
          type: string
          description: >-
            Base reserve used to calculate the minimum balance required by the
            network
          example: '5000000'
    XlmTxInfo:
      title: XLM
      type: object
      description: txInfo (XLM)
      properties:
        fee:
          type: integer
          description: Network fee
          example: 100
        operations:
          type: array
          items:
            type: object
            properties:
              amount:
                type: string
                description: Amount in Lumens as string
                example: '10.5'
              asset:
                type: object
                properties:
                  code:
                    type: string
                    example: XLM
              destination:
                type: string
                example: GCNFRU774FPHLV3HAB6CR54XJYFYITOLU6KS2J5BNCLDPYN7I3DOMIPY
              type:
                type: string
                enum:
                  - payment
                  - createAccount
                example: payment
        sequence:
          type: string
          example: '35995558267060226'
        source:
          type: string
          example: GBSGOXQNPULNPBX7XTHXP2GDBOZMHPIZOOA7CQXYTLHYKF5J2JDCF7LT
    optionalBoolean:
      title: optionalBoolean
      type: boolean
    optionalNumber:
      title: optionalNumber
      type: number
    optionalString:
      title: optionalString
      type: string
    optionalStringArray:
      title: optionalStringArray
      type: array
      items:
        type: string
    optionalUnknownObject:
      title: optionalUnknownObject
      type: object
      additionalProperties: {}
    solCloseAssociatedTokenAccountRecipients:
      title: solCloseAssociatedTokenAccountRecipients
      type: array
      items:
        type: object
        description: >-
          Internal io-ts brand for one close-ATA recipient row (not exported).


          Uses {@link t.brand} instead of `t.refinement` so OpenAPI generation
          does not

          emit an unresolvable `#/components/schemas/refinement`. The brand
          predicate must be

          an inline function expression (not a bare identifier) so
          `@api-ts/openapi-generator`

          does not try to resolve it as a codec. The predicate is cast via
          `unknown` to

          satisfy `t.brand`'s `Branded<…>` predicate type because runtime checks
          match the

          brand, while `SolCloseAssociatedTokenAccountRecipient` is a plain
          structural alias.

          For the

          narrowed row shape after validation, use {@link
          SolCloseAssociatedTokenAccountRecipient}

          (see {@link SolCloseAssociatedTokenAccountIntent}’s exported type,
          which overrides

          `recipients` accordingly).
        properties:
          address:
            $ref: '#/components/schemas/Address'
          amount:
            $ref: '#/components/schemas/Amount'
          data:
            $ref: '#/components/schemas/optionalString'
        required:
          - address
          - amount
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: BitGo access token
x-tagGroups:
  - name: API reference
    tags:
      - Express
