openapi: 3.0.0
info:
  version: 2.0.0
  title: Anchorage Digital API Reference
  contact:
    email: api@anchorage.com
  description: |-
    # Introduction
    *CONFIDENTIAL: Please do not distribute this documentation externally without prior Anchorage Digital approval.*


    The Anchorage Digital REST API v2.0 provides a set of operations and resources that allow Anchorage Digital clients and partners to:
      - Programmatically transfer funds from an Anchorage Digital vault or wallet without human intervention
      - Create and list deposit addresses in a vault
      - Read and monitor vault balances
      - Query transaction history including deposits
      - Request quotes from and execute trades with the Anchorage Digital trading desk


    Want help or to share your opinion on how this API works for you? Please contact api@anchorage.com.


    # Authentication and Security

    The Anchorage Digital API performs authentication and authorization via a combination of:


    * An API key, which is a bearer token

    * A permission group signed by the user's organization, which is linked to the API key

    * An Ed25519 Signature, which comes from a user-generated key and is required for certain requests


    ## Permission Groups


    A permission group acts as a set of rules for how an organization and its resources can be accessed. Permission groups are created independently of API keys, and new permission groups must be created prior to making an API key.


    Each permission group has a name, a description and a set of permissions which can be applied to your organization's vaults. Updating, creating and deleting permissions groups require a quorum of approvals. After creation, a permission group can be freely assigned to an unlimited number of API keys.


    Each API key inherits its permissions from the associated permission group. When the permission group is updated, all API keys associated with it will inherit the updated permission set. If a permission group is deleted, all associated API keys will no longer work.


    Each organization is created with a default permission group that allows read-only access. This permission group may be modified or deleted at any time, and no API keys are created by default with this permission group.


    ### Permissions


    Possible vault permissions include the following:


    <table>
      <tr>
        <td><b>Read vault activity (READ)</b></td>
        <td>See an overview of your vault(s) and wallets. Read vault details, balances, asset types, transaction history and deposit addresses.</td>
      </tr>
      <tr>
        <td><b>Create address (CREATE_DEPOSIT_ADDRESS)</b></td>
        <td>Receive deposits in the vault from external sources. Create and read deposit addresses.</td>
      </tr>
      <tr>
        <td><b>Transfer funds (TRANSFER)</b></td>
        <td>This permission is configurable to enable an API key endowed with this permission to either 1) Transfer funds to any Anchorage Digital institutional account, including those outside of your organization or 2) Transfer funds to any blockchain address not custodied by Anchorage Digital that has gone through quorum approval.</td>
      </tr>
      <tr>
        <td><b>Propose and accept settlements (PROPOSE_ACCEPT_SETTLEMENTS)</b></td>
        <td>This is an Atlas specific permission for initiating settlements.</td>
      </tr>
      <tr>
        <td><b>Authorize settlements (AUTHORIZE_SETTLEMENTS)</b></td>
        <td>This is an Atlas specific permission for authorizing settlements after they've been proposed or accepted.</td>
      </tr>
    </table>


    There are also special vault permissions for enabled by Anchorage Digital on a per-organization basis:

    Additionally, there are global permissions which apply to the entire organization:


    <table>
      <tr>
        <td><b>Initiate withdrawals (INITIATE_WITHDRAWAL)</b></td>
        <td>Initiate withdrawals to external destinations. All withdrawals require quorum approval through the Anchorage Digital mobile app.</td>
      </tr>
      <tr>
        <td><b>Execute trades (TRADE)</b></td>
        <td>Request for quotes (RFQ) from the Anchorage Digital trading desk. Create and accept quotes. Read data of trades and settlements created by this key.</td>
      </tr>
      <tr>
        <td><b>Read trade activity (READ_TRADE)</b></td>
        <td>Read trade activity and trade settlements data of your organization.</td>
      </tr>
      <tr>
        <td><b>Read lending activity (LENDER_READ)</b></td>
        <td>Read lending activity of your organization.</td>
      </tr>
      <tr>
        <td><b>Read facility data (FACILITY_ONLY)</b></td>
        <td>Read lending facility data.</td>
      </tr>
      <tr>
        <td><b>Read deposit attribution activity (READ_DEPOSIT_ATTRIBUTION)</b></td>
        <td>Read deposit attribution activity of your organization.</td>
      </tr>
      <tr>
        <td><b>Manage deposit attributions (DEPOSIT_ATTRIBUTION)</b></td>
        <td>Read deposit attribution activity of your organization. Perform deposit attributions.</td>
      </tr>
      <tr>
        <td><b>Initiate Staking and Unstaking (STAKE)</b></td>
        <td>Initiate staking or unstaking operation. All operations require quorum approval through the Anchorage Digital mobile app.</td>
      </tr>
    </table>


    ### Example Workflow - Allow transfers from specific vaults

    To create an API key with the ability to transfer funds from an Anchorage Digital vaults or wallet, a permission group must first be created with the **Transfer funds** permission for the desired source vaults. Creating this permission group requires a quorum of approvals on the Anchorage Digital iOS app. Once the creation is confirmed, any number of API keys may be created with this permission group in the Anchorage Digital Web Dashboard under the API 2.0 section.

    To add additional permissions to the API key, update the associated permission group through the Anchorage Digital Web Dashboard. To revoke any permissions, the individual API key may be revoked, or the permission group may be updated or deleted to remove Transfer access.

    ## API Keys

    All API requests must be made over HTTPS and must include authentication using the following scheme.

    <!-- ReDoc-Inject: <security-definitions> -->

    ### Generating an API Key

    In order to make a valid API request, you must first create an API key. API keys can be created and managed in the Anchorage Digital Web Dashboard under the [API 2.0 tab](https://anchoragelogin.com/api). When you create an API key, there are 3 pieces of information you will need to remember:
      - API access key
      - Ed25519 public key (optional for read-only requests)
      - Ed25519 private/signing key (optional for read-only requests)

    You must generate an Ed25519 signing key pair and save the public portion in the Anchorage Digital Web Dashboard when creating the API access key. The signing key pair is used for added security with sensitive requests.

    Please note, Anchorage Digital cannot recover your API access key or private signing key if you forget them. You may generate a new access key and signing key at any time if you lose access.

    ### API Key Permissions

    Each API key is associated with a permission group. This permission group specifies the permitted actions for all associated API keys. Read more about permission groups [here](#section/Authentication-and-Security/Permission-Groups).

    ### Creating a request

    All requests must include the `Api-Access-Key` header, which contains your API access key as a string.

    Endpoints that require a signature must include the `Api-Signature` and `Api-Timestamp` headers. Read more about signatures [here](#section/Authentication-and-Security/Signatures).

    All request bodies must be valid JSON and have the content type `application/json`.

    ## Request Signatures

    Certain endpoints require an Ed25519 signature to be provided alongside the API key. These endpoints will specify the `Api-Signature` and `Api-Timestamp` headers as additional parameters.

    Signatures are optional unless explicitly required, but are encouraged for all requests. If a signature is provided, it will be verified.

    ### Signing Keys

    A signing key pair is generated by the user and the corresponding public key must be provided when creating an API key.

    When creating an API key, you will be prompted to provide an Ed25519 public key. You must use the associated Ed25519 signing key (private key) when creating signatures for requests from this API key.

    Please note that signing keys (Ed25519 private keys) should be stored securely by the user. The signing key should only be used to derive request signatures and should never be sent in a request. Anchorage Digital will never request you share your private key.

    ### Generating a Signing Key

    The user must securely generate an Ed25519 key pair on their own hardware and retain both the public and private portions. The Anchorage Digital API accepts a 64-character (32 bytes) hex-encoded Ed25519 public key when creating an API access key.


    #### Code sample (Python)

    *Generate a new signing key pair*

    ```python
    # https://pypi.org/project/PyNaCl/

    import nacl
    import nacl.signing
    import secrets

    seed = secrets.token_bytes(32)

    # Generate a new random signing key
    signing_key = nacl.signing.SigningKey(seed)

    # Obtain the hex-encoded signing key
    print('Signing key:')
    print(signing_key.encode().hex())

    # Obtain the hex-encoded verify key for the given signing key
    # Use this in the Anchorage Digital Web Dashboard when creating an API key
    print('Public key:')
    print(signing_key.verify_key.encode().hex())
    ```


    ### Signing a Request

    To sign a request, generate a request signature using the Ed25519 private (signing) key and provide it alongside the request in the `Api-Signature` header.

    To create a request signature, first concatenate the `timestamp`, `method`, `request path`, and `body` into a string. Then, create a signature of this message using the Ed25519 private key and hex-encode the output. Use this value as the `Api-Signature` header and use the `timestamp` value as the `Api-Timestamp` header.

    - The `method` is an uppercase HTTP method (ex. `GET`, `POST`, `DELETE`)
    - The `request path` should contain all query parameters (ex. `/v2/transfers?foo=bar&baz=bang`)
    - The `body` is a stringified HTTP request body
    - The `body` should be omitted if the request does not contain a body (ex. a `GET` or `DELETE` request)
    - The `timestamp` is the same as the `Api-Timestamp` header
    - The `timestamp` is a number of seconds since the Unix Epoch in UTC, and must be within one minute of the API service's time when the request is received

    ### Reference signature

    To verify your signature generation code is correct, generate a signature for the following request and timestamp using the provided signing key. If the generated signature matches the signature below, your signature generation code is correct.


    <table>
      <tr>
        <td>Timestamp</td>
        <td>1577880000</td>
      </tr>
      <tr>
        <td>HTTP Method (Uppercase)</td>
        <td>POST</td>
      </tr>
      <tr>
        <td>HTTP Path + query</td>
        <td>/v2/transfers?foo=bar&baz=bang</td>
      </tr>
      <tr>
        <td>HTTP Body</td>
        <td>{"source": {"id": "1c920f4241b78a1d483a29f3c24b6c4c", "type": "VAULT"}, "assetType": "ETH", "destination": {"id": "55e89d4a644d736b01533a2ea9b32a20", "type": "VAULT"}, "amount": "1000.00000000"}</td>
      </tr>
      <tr>
        <td>Signing Key (Ed25519 Private Key Seed)</td>
        <td>0101010101010101010101010101010101010101010101010101010101010101</td>
      </tr>
      <tr>
        <td>Public Key</td>
        <td>8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c</td>
      </tr>
      <tr>
        <td>Signature</td>
        <td>4bf42054bf7db1f8a2a2bc83d2a108502ee7a9d2ac7a2738adc2f932922446786fb9be1bd1eb475023296c6cba4ddbe28b04baca4b7521b1f1840a4ffd2b4d0d</td>
      </tr>
    </table>

    ## Reference clients

    ### Python (with `requests` library)

    *Authorize and sign requests*

    ```python

    # https://pypi.org/project/PyNaCl/

    from nacl import signing

    import time

    import requests


    class AnchorageAuth(requests.auth.AuthBase):
        ACCESS_KEY_HEADER = "Api-Access-Key"
        SIGNATURE_HEADER = "Api-Signature"
        TIMESTAMP_HEADER = "Api-Timestamp"

        access_key: str
        signing_key: signing.SigningKey

        def __init__(self, access_key: str, signing_key_seed: bytes):
            self.access_key = access_key
            self.signing_key = signing.SigningKey(signing_key_seed)

        def __call__(self, r: requests.PreparedRequest):
            r.headers[self.ACCESS_KEY_HEADER] = self.access_key

            timestamp = str(int(time.time()))
            method = r.method.upper() if r.method else "GET"
            body: bytes = bytes()
            if r.body and isinstance(r.body, bytes):
                body = r.body
            elif r.body and isinstance(r.body, str):
                body = bytearray(r.body, "utf-8")
            message = b"".join(
                [bytearray(timestamp, "utf-8"), bytearray(method, "utf-8"), bytearray(r.path_url, "utf-8"), body]
            )
            signature = self.signing_key.sign(message).signature.hex()
            r.headers[self.SIGNATURE_HEADER] = signature
            r.headers[self.TIMESTAMP_HEADER] = timestamp
            return r


    # load secrets

    # Use the API key generated in the Anchorage Digital Web Dashboard

    access_key = ...

    # Use the Ed25519 signing private key

    signing_key_str = ... # load the raw string

    signing_key = bytes(bytearray.fromhex(signing_key_str))

    data = {}

    anchorage_auth = AnchorageAuth(access_key, signing_key)

    r = requests.post("https://api.anchorage.com/v2/transfers", data=data, auth=anchorage_auth)

    ```

    ### Ruby - Reproduce reference signature
    ```ruby
      require "ed25519"
      require "net/http"
      require "time"

      def hex_to_bin(s)
          [s].pack('H*')
      end

      def bin_to_hex(s)
          s.unpack('H*').first
      end

      private_key_seed_hex = '0101010101010101010101010101010101010101010101010101010101010101'
      public_key_hex = '8a88e3dd7409f195fd52db2d3cba5d72ca6709bf1d94121bf3748801b40f6f5c'
      key_pair_hex = private_key_seed_hex + public_key_hex

      key_pair = hex_to_bin(key_pair_hex)

      signing_key = Ed25519::SigningKey.from_keypair(key_pair)

      timestamp = '1577880000' # Time.now.to_i.to_s

      req = Net::HTTP::Post.new('/v2/transfers?foo=bar&baz=bang')
      req.body = '{"source": {"id": "1c920f4241b78a1d483a29f3c24b6c4c", "type": "VAULT"}, "assetType": "ETH", "destination": {"id": "55e89d4a644d736b01533a2ea9b32a20", "type": VAULT"}, "amount": "1000.00000000"}'

      signature = signing_key.sign(timestamp + req.method + req.path + req.body)

      req['Api-Access-Key'] = 'YOUR_ACCESS_KEY'
      req['Api-Timestamp'] = timestamp
      req['Api-Signature'] = bin_to_hex(signature)

      puts bin_to_hex(signature)
    ```

    # Errors


    The Anchorage Digital API returns standard HTTP error codes for each API request.


    <table>
      <tr>
        <th style="width: 30%;">Response Code</th>
        <th>Description</th>
      <tr>
      <tr>
        <td>200 OK</td>
        <td>The request was successful.</td>
      </tr>
      <tr>
        <td>400 Bad Request</td>
        <td>The request was improperly formed and could not be understood by the server, often due to invalid syntax, insufficient funds, or a missing required parameter.</td>
      </tr>
      <tr>
        <td>401 Unauthorized</td>
        <td>The request was missing a valid API key.</td>
      </tr>
      <tr>
        <td>403 Forbidden</td>
        <td>The provided API key does not have permission to perform the requested action.</td>
      </tr>
      <tr>
        <td>404 Not Found</td>
        <td>The requested resource does not exist.</td>
      </tr>
      <tr>
        <td>409 Conflict</td>
        <td>The requested resource cannot proceed with the requested action because it is not in the required state.</td>
      </tr>
       <tr>
        <td>429 Too Many Requests</td>
        <td>Too many requests have been sent in a given amount of time.</td>
      </tr>
      <tr>
        <td>
          500 Internal Server Error
          <br />
          502 Bad Gateway
          <br />
          503 Service Unavailable
          <br />
          504 Gateway Timeout
        </td>
        <td>Something went wrong on Anchorage’s side. We have been alerted and are working on it.</td>
      </tr>
    </table>


    In addition to returning HTTP error codes for failed requests, the Anchorage Digital API includes a readable error message describing what went wrong in the response body.


    <SchemaDefinition schemaRef="#/components/schemas/ErrorDetails" showReadOnly={true} showWriteOnly={true} />


    # Idempotency


    Certain endpoints support idempotent requests so that a given request can be safely retried without performing the same operation twice. For example, if a request to transfer funds does not respond due to network issues, you can retry the request using the same idempotent ID to ensure that only one transfer is created.


    Endpoints that support idempotent requests have an optional `idempotentId` field that can be included in the body of the `POST` request. Provide a unique string using your method of choice (such as a v4 UUID).


    If a request is valid, Anchorage Digital will save the request indefinitely. If a subsequent request is received with the same `idempotentId` we will return the previously saved response for that `idempotentId`.


    # Rate Limits


    Keys provisioned by an Organization share one common rate limit. API requests are limited to 20 requests per second per Organization, allowing for bursts of up to 100 requests within a single second.


    # Pagination


    Cursor pagination is used for REST endpoints which return multiple data points. Pagination allows for fetching data after the current page and specifying how many records to return. The `next` cursor is available in responses with the `page` attribute. Requests should use the `next` cursor URL to query subsequent data. Query parameter `afterId` specifies the last record previously retrieved. Some endpoints instead use the `endDate` parameter to specify the end date and older for records to retrieve. Query parameter `limit` specifies the maximum number of records in a response.

    ## Parameters

    <table>
      <tr>
        <th style="width: 30%;">Parameter</th>
        <th>Description</th
      </tr>
      <tr>
        <td>afterId</td>
        <td>Request page after (older than) this pagination id.</td>
      </tr>
      <tr>
        <td>endDate</td>
        <td>Request records older than this date (YYYY-MM-DD format). Used for /trading/trades and /trading/settlements resources.</td>
      </tr>
      <tr>
        <td>limit</td>
        <td>Maximum number of results requested. Default usually 25, but varies depending on resource.</td>
      </tr>
    </table>

    ## Example

    `GET /v2/transfers?afterId=1968b94b09b8a1a8a381775d1f04978c424d891d50e517774bf984297985b471&limit=100`

    ## Next cursor

    The `next` cursor is a URL which references the last record in a set of records. When queried, the `next` cursor URL will return subsequent records, but otherwise using the same query parameters.
servers:
  - url: 'https://api.anchorage-staging.com/v3'
paths:
  /addresses:
    get:
      operationId: listAddresses
      summary: List Addresses
      description: |-
        Permissions required: **Read vault activity**

        List all addresses across wallets in the organization.
      parameters:
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: address
          in: query
          description: Filter by specific blockchain address
          required: false
          schema:
            type: string
        - name: networkId
          in: query
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          required: false
          schema:
            type: string
        - name: vaultId
          in: query
          description: Filter by vault ID
          required: false
          schema:
            type: string
        - name: walletId
          in: query
          description: Filter by wallet ID
          required: false
          schema:
            type: string
        - name: batchId
          in: query
          description: Filter by batch creation ID
          required: false
          schema:
            type: string
        - name: publicKey
          in: query
          description: Filter by public key string
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAddressesResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Addresses
  /aml/submit-info:
    post:
      operationId: submitAMLInfo
      summary: Submit AML information
      description: Submit structured AML information for a transaction.
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AMLSubmitInfoRequest'
      responses:
        '200':
          description: AML information submitted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AMLSubmitInfoResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - AML
  /asset-types:
    get:
      operationId: listAssetTypes
      summary: List Asset Types
      description: |-
        Permissions required: **None**

        List all supported asset types for your organization.
      parameters:
        - name: networkId
          in: query
          description: Filter by specific network ID. Returns only assets on the specified network.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAssetTypesResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Asset Types & Networks
  /atlas/settlements:
    post:
      operationId: proposeSNSettlement
      summary: Propose a settlement
      description: "Permissions required: **Propose and Accept settlements**\n\n\nPropose a settlement with a counterparty for a list of assets coming from and/or arriving into wallets owned by your participant.\n\nPositive amounts indicate funds to be received and negative amounts indicate funds to be sent.\n\n```json\n[\n\t{\n\t\t\"walletId\": \"d4578f401daadff65615236c5ad1e12c\",\n\t\t\"quantity\": \"-1.1\",\n\t\t\"assetType\": \"BTC\"\n\t},\n\t{\n\t\t\"walletId\": \"43a9aeac02c851f4868f9d89aabde494\",\n\t\t\"quantity\": \"20.62\",\n\t\t\"assetType\": \"ETH\"\n\t}\n]\n```\nFor example, the above wallet amounts indicate you will send 1.1 BTC from your wallet `d4578f401daadff65615236c5ad1e12c` and receive 20.62 ETH into your wallet `43a9aeac02c851f4868f9d89aabde494`.\n\nThe steps to create a settlement are:\n1. The proposer participant proposes it, selecting an acceptor, assets, amounts and wallets.\n2. The proposer authorizes it, either through the API or mobile app signing.\n3. The acceptor participant accepts it, selecting wallets to use.\n4. (optional) The acceptor authorizes it, either through the API or mobile app signing.\n5. The settlement is funded in the sending wallets.\n6. The assets are transferred on-chain, as directed by the settlement.\n\nSteps 2 or 3 can happen out of order.\nStep 4 is skipped if the acceptor is not sending any assets.\nThe settlement stays in the `ActionNeeded` state until it reaches step 6. Then it enters the `Executing` state and, after that, it enters one of the final states."
      parameters:
        - name: Api-Signature
          in: header
          description: |
            A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.



            Construction example:

              ```
              toHex(
                ed25519Sign(
                  signing_key,
                  '{}{}{}{}'.format(timestamp_epoch_seconds, toUpper(httpMethod), httpRequestPath, httpBody)
                )
              )
              ```
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Settlement proposal
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SNSettlementProposal'
      responses:
        '201':
          description: settlementId
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SNProposeSettlementResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
    get:
      operationId: getSNSettlements
      summary: List settlements
      description: |-
        Permissions required: **Read vault activity**


        Get settlements proposed by you or proposed to you.
      parameters:
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: limit
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 30
            maximum: 100
            minimum: 1
      responses:
        '200':
          description: settlements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SNSettlementsResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  '/atlas/settlements/{settlementId}/reject':
    post:
      operationId: rejectSNSettlement
      summary: Reject a settlement proposal
      description: |-
        Permissions required: **Propose and Accept settlements** or **Authorize Settlements**


        Rejects a proposed settlement for your Atlas participant. Proposed settlements cannot be rejected if they have already been authorized.
      parameters:
        - name: settlementId
          in: path
          description: ID of settlement to reject
          required: true
          schema:
            type: string
        - name: Api-Signature
          in: header
          description: |
            A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.



            Construction example:

              ```
              toHex(
                ed25519Sign(
                  signing_key,
                  '{}{}{}{}'.format(timestamp_epoch_seconds, toUpper(httpMethod), httpRequestPath, httpBody)
                )
              )
              ```
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: ''
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  '/atlas/settlements/{settlementId}/authorize':
    post:
      operationId: authorizeSNSettlement
      summary: Authorize a settlement
      description: |-
        Permissions required: **Authorize Settlements**


        After your participant has proposed a settlement or accepted a settlement proposal, the details of the settlement must be authorized.

        To authorize via API, the API key must have a special permission. Otherwise, authorization takes place in the app according to organization policy.
      parameters:
        - name: settlementId
          in: path
          description: ID of settlement to authorize
          required: true
          schema:
            type: string
        - name: participantId
          in: query
          description: ID of participant authorizing the settlement
          required: true
          schema:
            type: string
        - name: Api-Signature
          in: header
          description: |
            A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.



            Construction example:

              ```
              toHex(
                ed25519Sign(
                  signing_key,
                  '{}{}{}{}'.format(timestamp_epoch_seconds, toUpper(httpMethod), httpRequestPath, httpBody)
                )
              )
              ```
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Settlement proposal
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SNSettlementAuthorization'
      responses:
        '200':
          description: ''
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  '/atlas/settlements/{settlementId}/accept':
    post:
      operationId: acceptSNSettlement
      summary: Accept a settlement
      description: |-
        Permissions required: **Propose and Accept settlements** and **Read vault activity**


        Accept a proposed settlement and select wallets to receive funds to and/or send funds from.
      parameters:
        - name: settlementId
          in: path
          description: ID of settlement to authorize
          required: true
          schema:
            type: string
        - name: Api-Signature
          in: header
          description: |
            A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.



            Construction example:

              ```
              toHex(
                ed25519Sign(
                  signing_key,
                  '{}{}{}{}'.format(timestamp_epoch_seconds, toUpper(httpMethod), httpRequestPath, httpBody)
                )
              )
              ```
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SNAcceptSettlementRequest'
      responses:
        '200':
          description: ''
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  '/atlas/settlements/{settlementId}':
    get:
      operationId: getSNSettlement
      summary: Get a settlement by ID
      description: |-
        Permissions required: **Read vault activity**


        Get a single settlement by its ID.
      parameters:
        - name: settlementId
          in: path
          description: ID of settlement to fetch
          required: true
          schema:
            type: string
      responses:
        '200':
          description: settlement
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SNSettlementResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  /atlas/directory/counterparties:
    post:
      operationId: proposeSNTrustedCounterparty
      summary: Propose a trusted counterparty
      description: |-
        Permissions required: **Propose Trusted Counterparty**


        Propose adding a new trusted counterparty for a participant.
      parameters:
        - name: Api-Signature
          in: header
          description: |
            A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.



            Construction example:

              ```
              toHex(
                ed25519Sign(
                  signing_key,
                  '{}{}{}{}'.format(timestamp_epoch_seconds, toUpper(httpMethod), httpRequestPath, httpBody)
                )
              )
              ```
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        description: Trusted counterparty proposal
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SNTrustedCounterpartyProposal'
      responses:
        '201':
          description: ''
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
    get:
      operationId: getSNTrustedCounterparties
      summary: List trusted counterparties
      description: |-
        Permissions required: **Read vault activity**


        Get trusted counterparties.
      parameters:
        - name: participantId
          in: query
          description: ID of the participant this trusted counterparty is for
          required: true
          schema:
            type: string
        - name: limit
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 30
            maximum: 100
            minimum: 1
        - name: afterId
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
      responses:
        '200':
          description: counterparties
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SNTrustedCounterpartiesResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  '/atlas/directory/counterparties/{counterpartyId}':
    get:
      operationId: getSNTrustedCounterparty
      summary: Get a counterparty by ID
      description: |-
        Permissions required: **Read vault activity**


        Get a single trusted counterparty by its ID.
      parameters:
        - name: counterpartyId
          in: path
          description: ID of trusted counterparty to fetch
          required: true
          schema:
            type: string
        - name: participantId
          in: query
          description: ID of the participant this trusted counterparty is for
          required: true
          schema:
            type: string
      responses:
        '200':
          description: counterparty
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SNTrustedCounterpartyResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  '/atlas/directory/participants/{participantId}':
    get:
      operationId: getSNParticipant
      summary: Get a participant by ID
      description: |-
        Permissions required: **Read vault activity**

        Get a single participant by its ID.
      parameters:
        - name: participantId
          in: path
          description: ID of participant to fetch
          required: true
          schema:
            type: string
      responses:
        '200':
          description: participant
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SNParticipantResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  /atlas/directory/participants:
    get:
      operationId: getSNParticipants
      summary: List participants
      description: |-
        Permissions required: **Read vault activity**


        Get the list of participants you have access to.
      parameters:
        - name: limit
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 30
            maximum: 100
            minimum: 1
        - name: afterId
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
      responses:
        '200':
          description: participants
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SNParticipantsResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Atlas Settlement Network
  /batch/addresses:
    post:
      operationId: createAddressesBatch
      summary: Create Addresses Batch
      description: |-
        Permissions required: **Create addresses**

        Create multiple blockchain addresses in a single batch operation. This endpoint returns immediately with a batchId.
        Poll GET /batch/addresses/{batchId} to check the status and retrieve results once the batch is complete.
      parameters: []
      requestBody:
        description: Batch address creation request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAddressesBatchRequest'
      responses:
        '202':
          description: Batch address creation initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateBatchResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Addresses
  '/batch/addresses/{batchId}':
    get:
      operationId: getAddressesBatchStatus
      summary: Get Addresses Batch Status
      description: |-
        Permissions required: **Read vault activity**

        Get the status and results of a batch address creation operation.
      parameters:
        - name: batchId
          in: path
          description: The unique identifier for the batch operation
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchStatusResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Addresses
  /addresses/validate-destination:
    post:
      operationId: validateDestinationAddress
      summary: Validate Destination Address
      description: |-
        Permissions required: **None**

        Validate that a given address for a given networkId is valid as a transfer destination.
        Returns 200 if the address is valid, or an invalid request error if it is not.
      parameters: []
      requestBody:
        description: Destination address validation request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateDestinationAddressRequest'
      responses:
        '200':
          description: Address is valid as a transfer destination
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Addresses
  /fiat/banks/payments/wire:
    post:
      operationId: createWire
      summary: Create a wire transfer
      description: |-
        Permissions required: **Fiat Banking**

        Create a new wire transfer.

        Upon receiving a successful response, the payment immediately enters the approved state. At this point, the bank will attempt to process the payment, with status updates delivered via webhooks.
      parameters:
        - name: Api-Signature
          in: header
          description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WireCreateRequest'
      responses:
        '201':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WireCreateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '413':
          description: Payload Too Large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
    get:
      operationId: listWires
      summary: List wire transfers
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve a paginated list of wire transfers.
      parameters:
        - name: first
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 25
            maximum: 100
            minimum: 1
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: clientRefId
          in: query
          description: Filter by client reference ID
          required: false
          schema:
            type: string
        - name: effectiveDateStart
          in: query
          description: 'Filter payments with an effective date on or after this date (inclusive). Format: YYYY-MM-DD.'
          required: false
          schema:
            type: string
            format: date
        - name: effectiveDateEnd
          in: query
          description: 'Filter payments with an effective date on or before this date (inclusive). Format: YYYY-MM-DD.'
          required: false
          schema:
            type: string
            format: date
        - name: createdAtStart
          in: query
          description: 'Filter payments created at or after this datetime (inclusive). Format: RFC 3339 date-time.'
          required: false
          schema:
            type: string
            format: date-time
        - name: createdAtEnd
          in: query
          description: 'Filter payments created at or before this datetime (inclusive). Format: RFC 3339 date-time.'
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListWiresResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  '/fiat/banks/payments/wire/{id}':
    get:
      operationId: getWire
      summary: Get a wire transfer
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve details of a specific wire transfer by ID.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the wire transfer
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WireResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  /fiat/banks/payments/ach:
    post:
      operationId: createACH
      summary: Create an ACH transfer
      description: |-
        Permissions required: **Fiat Banking**

        Create a new ACH transfer.

        Upon receiving a successful response, the payment immediately enters the approved state. At this point, the bank will attempt to process the payment, with status updates delivered via webhooks.
      parameters:
        - name: Api-Signature
          in: header
          description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ACHCreateRequest'
      responses:
        '201':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ACHCreateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '413':
          description: Payload Too Large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
    get:
      operationId: listACHTransfers
      summary: List ACH transfers
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve a paginated list of ACH transfers.
      parameters:
        - name: first
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 25
            maximum: 100
            minimum: 1
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: clientRefId
          in: query
          description: Filter by client reference ID
          required: false
          schema:
            type: string
        - name: effectiveDateStart
          in: query
          description: 'Filter payments with an effective date on or after this date (inclusive). Format: YYYY-MM-DD.'
          required: false
          schema:
            type: string
            format: date
        - name: effectiveDateEnd
          in: query
          description: 'Filter payments with an effective date on or before this date (inclusive). Format: YYYY-MM-DD.'
          required: false
          schema:
            type: string
            format: date
        - name: createdAtStart
          in: query
          description: 'Filter payments created at or after this datetime (inclusive). Format: RFC 3339 date-time.'
          required: false
          schema:
            type: string
            format: date-time
        - name: createdAtEnd
          in: query
          description: 'Filter payments created at or before this datetime (inclusive). Format: RFC 3339 date-time.'
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListACHTransfersResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  '/fiat/banks/payments/ach/{id}':
    get:
      operationId: getACH
      summary: Get an ACH transfer
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve details of a specific ACH transfer by ID.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the ACH transfer
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ACHResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  /fiat/banks/payments/book:
    post:
      operationId: createBook
      summary: Create a book transfer
      description: |-
        Permissions required: **Fiat Banking**

        Create a new book transfer between two internal accounts.
      parameters:
        - name: Api-Signature
          in: header
          description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BookCreateRequest'
      responses:
        '201':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookCreateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '413':
          description: Payload Too Large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
    get:
      operationId: listBookTransfers
      summary: List book transfers
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve a paginated list of book transfers.
      parameters:
        - name: first
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 25
            maximum: 100
            minimum: 1
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: clientRefId
          in: query
          description: Filter by client reference ID
          required: false
          schema:
            type: string
        - name: effectiveDateStart
          in: query
          description: 'Filter payments with an effective date on or after this date (inclusive). Format: YYYY-MM-DD.'
          required: false
          schema:
            type: string
            format: date
        - name: effectiveDateEnd
          in: query
          description: 'Filter payments with an effective date on or before this date (inclusive). Format: YYYY-MM-DD.'
          required: false
          schema:
            type: string
            format: date
        - name: createdAtStart
          in: query
          description: 'Filter payments created at or after this datetime (inclusive). Format: RFC 3339 date-time.'
          required: false
          schema:
            type: string
            format: date-time
        - name: createdAtEnd
          in: query
          description: 'Filter payments created at or before this datetime (inclusive). Format: RFC 3339 date-time.'
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListBookTransfersResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  '/fiat/banks/payments/book/{id}':
    get:
      operationId: getBook
      summary: Get a book transfer
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve details of a specific book transfer by ID.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the book transfer
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BookResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  /fiat/banks/transactions:
    post:
      operationId: createIncomingTransaction
      summary: Create an incoming transaction
      description: |-
        Permissions required: **Fiat Banking**

        Create an incoming payment transaction to an internal account.

        **IMPORTANT:** This endpoint is designed for testing and simulation in non-production
        environments only. It allows you to simulate incoming fiat payments for integration
        testing purposes.

        This endpoint simulates receiving funds by creating a transaction that credits the
        specified account. It triggers webhooks for full end-to-end testing of incoming
        payment flows.
      parameters:
        - name: Api-Signature
          in: header
          description: |-
            A hex-encoded Ed25519 signature of `timestamp_epoch_seconds +
            uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionCreateRequest'
      responses:
        '201':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionCreateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  /fiat/banks/virtual-account-owners:
    post:
      operationId: createVirtualAccountOwner
      summary: Create a virtual account owner
      description: |-
        Permissions required: **Fiat Banking**

        Create a new virtual account owner to collect KYC information required by some banks.
      parameters:
        - name: Api-Signature
          in: header
          description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualAccountOwnerCreateRequest'
      responses:
        '201':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountOwnerCreateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  '/fiat/banks/virtual-account-owners/{id}':
    get:
      operationId: getVirtualAccountOwner
      summary: Get a bank virtual account owner
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve details of a specific virtual account owner by ID.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the virtual account owner
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountOwnerGetResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
    put:
      operationId: updateVirtualAccountOwner
      summary: Update a virtual account owner
      description: |-
        Permissions required: **Fiat Banking**

        Update details of a specific virtual account owner. All fields are optional - only provided fields will be updated.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the virtual account owner
          required: true
          schema:
            type: string
        - name: Api-Signature
          in: header
          description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualAccountOwnerUpdateRequest'
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountOwnerGetResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  /fiat/banks/virtual-accounts:
    post:
      operationId: createVirtualAccount
      summary: Create a bank virtual account
      description: |-
        Permissions required: **Fiat Banking**

        Create a new virtual account for sending or receiving funds.

        **Note:** For certain banks, a Virtual Account Owner must be created first to collect KYC information using the Create Virtual Account Owner,
        and returned ID included in this endpoint. Please contact Anchorage Digital about requirements for your specific correspondent bank.
      parameters:
        - name: Api-Signature
          in: header
          description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VirtualAccountCreateRequest'
      responses:
        '201':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountCreateResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '413':
          description: Payload Too Large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  '/fiat/banks/virtual-accounts/{id}':
    get:
      operationId: getVirtualAccount
      summary: Get a bank virtual account
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve details of a specific virtual account by ID.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the virtual account
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountGetResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
    delete:
      operationId: deleteVirtualAccount
      summary: Close a bank virtual account
      description: |-
        Permissions required: **Fiat Banking**

        Close a virtual account. Once closed, the account cannot be reopened or used for transactions.
        The closed account can still be retrieved via GET to view its details including the closure timestamp.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the virtual account
          required: true
          schema:
            type: string
        - name: Api-Signature
          in: header
          description: A hex-encoded Ed25519 signature of `timestamp_epoch_seconds + uppercase(http_method) + request_path + request_body`.
          required: true
          schema:
            type: string
            pattern: '^[0-9A-Fa-f]{128,160}$'
        - name: Api-Timestamp
          in: header
          description: 'Current timestamp, represented as unix epoch seconds'
          required: true
          schema:
            type: integer
            format: int64
        - name: Idempotency-Key
          in: header
          description: Client-provided idempotency key to ensure request is processed only once
          required: true
          schema:
            type: string
            maxLength: 128
      responses:
        '200':
          description: Virtual account successfully closed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VirtualAccountGetResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  '/fiat/banks/balance/{id}':
    get:
      operationId: getBalance
      summary: Get account balance
      description: |-
        Permissions required: **Fiat Banking**

        Retrieve the current balance for a specific account by ID.
      parameters:
        - name: id
          in: path
          description: The unique identifier of the account
          required: true
          schema:
            type: string
      responses:
        '200':
          description: successful
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BalanceResponse'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '502':
          description: Bad Gateway
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '503':
          description: Service Unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Fiat Banking Operations
  /networks:
    get:
      operationId: listNetworks
      summary: List Networks
      description: |-
        Permissions required: **None**

        List all blockchain networks supported by your organization.
      parameters:
        - name: includeCompatibleWith
          in: query
          description: 'Include the specified network and all networks compatible with it for wallet key sharing. For example, ?includeCompatibleWith=ETH returns Ethereum and all other networks that can share keys with it.'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListNetworksResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Asset Types & Networks
  /stablecoins/conversion:
    post:
      operationId: convertStablecoins
      summary: Create a Stablecoin Conversion
      description: |-
        Permissions required: **Convert Stablecoins**


        Create a stablecoin conversion, either issuance or redemption. Issuance is when USD is converted to the stablecoin. Redemption is when the stablecoin asset is converted to USD.
      parameters: []
      requestBody:
        description: Stablecoin Conversion
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StablecoinConversion'
      responses:
        '201':
          description: authorizationOperationId
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StablecoinConversionResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Stablecoins
  /stablecoins/history:
    get:
      operationId: getStablecoinHistory
      summary: Get Issue/Redeem History
      description: |-
        Permissions required: **Convert Stablecoins**


        Retrieve the history of stablecoin issuance and redemption operations for your organization.
        Results are paginated and ordered by creation time (newest first).
      parameters:
        - name: limit
          in: query
          description: 'Maximum number of results to return (default 100, max 100)'
          required: false
          schema:
            type: integer
            format: int32
            default: 100
            maximum: 100
            minimum: 1
        - name: lastCreatedAt
          in: query
          description: Cursor for pagination - timestamp of the last result from the previous page (RFC3339 format)
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Issue/redeem history
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueRedeemHistoryResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Stablecoins
  /stablecoins/reserves:
    get:
      operationId: getStablecoinReserves
      summary: Get Stablecoin Reserves History
      description: |-
        Permissions required: **Read vault activity**


        Retrieve the daily reserves reconciliation history for a stablecoin your organization is entitled to.
        Results are paginated and ordered by creation time (newest first).
      parameters:
        - name: stablecoin
          in: query
          description: Token symbol to query. Your organization must be entitled to read reserves for this token.
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          description: 'Return rows with reportDate on or after this date (inclusive), in `YYYY-MM-DD` format. Dates are always in UTC.'
          required: false
          schema:
            type: string
            format: date
        - name: endDate
          in: query
          description: 'Return rows with reportDate on or before this date (inclusive), in `YYYY-MM-DD` format. Dates are always in UTC.'
          required: false
          schema:
            type: string
            format: date
        - name: limit
          in: query
          description: 'Maximum number of results to return (default 100, max 100)'
          required: false
          schema:
            type: integer
            format: int32
            default: 100
            maximum: 100
            minimum: 1
        - name: lastCreatedAt
          in: query
          description: Cursor for pagination - timestamp of the last result from the previous page (RFC3339 format)
          required: false
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Reserves history
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReservesHistoryResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Stablecoins
  /stablecoins/reserves/entitled-stablecoins:
    get:
      operationId: getStablecoinReservesEntitledStablecoins
      summary: Get Stablecoin Reserves Entitled Stablecoins
      description: |-
        Permissions required: **Read vault activity**


        List the stablecoins whose reserves history your organization is entitled to view. Pass any returned symbol as the `stablecoin` query parameter to `GET /stablecoins/reserves` to retrieve that stablecoin's daily reserves reconciliation history. Returns an empty array when your organization cannot view reserves history for any stablecoin.
      parameters: []
      responses:
        '200':
          description: Entitled stablecoins
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StablecoinReservesEntitledStablecoinsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Stablecoins
  /wallet-operations/construct/asset-types:
    get:
      operationId: listConstructAssetTypes
      summary: List Construct Asset Types
      description: |-
        Permissions required: **None**

        List asset types supported for transaction construction.
      parameters:
        - name: networkId
          in: query
          description: Filter by specific network ID. Returns only assets on the specified network.
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAssetTypesResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Construction
  /wallet-operations/construct/transfer:
    post:
      operationId: constructTransferTransaction
      summary: Construct Transfer Transaction
      description: |-
        Permissions required: **Construct and sign transactions**

        Construct and sign a transfer transaction immediately.

        This endpoint signs the transaction right away. Use Propose Construct Transfer Transaction instead if you need
        an approval workflow before signing.

        Use Construct Transaction instead to construct another type of transaction.

        > Note: This endpoint does NOT broadcast the transaction to the blockchain.
        After construction and signing, the caller is responsible for broadcasting the transaction.

        This endpoint returns immediately with a `walletOperationId`. Poll `GET /wallet-operations/{walletOperationId}` to check
        the status and retrieve the signed transaction data once construction is complete. Use the signedTransaction
        field from the response to broadcast to the blockchain.
      parameters: []
      requestBody:
        description: Transfer transaction construction request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransferRequest'
      responses:
        '202':
          description: Transfer transaction construction request accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Construction
  /wallet-operations/construct/propose-transfer:
    post:
      operationId: proposeConstructTransferTransaction
      summary: Propose Construct Transfer Transaction
      description: |-
        Permissions required: **Propose constructed transactions**

        Construct a transfer transaction for approval workflow. The transaction will not be signed until it receives
        the required endorsements.

        This endpoint constructs the transaction but defers signing. The operation will enter PENDING_ENDORSEMENT status
        and require approval through your organization's workflow before signing occurs.

        Use Construct Transfer Transaction instead if you want to sign immediately without an approval workflow.

        Use Propose Construct Transaction instead to construct another type of transaction with deferred signing.

        > Note: This endpoint does NOT broadcast the transaction to the blockchain.
        After construction and signing, the caller is responsible for broadcasting the transaction.

        This endpoint returns immediately with a `walletOperationId` in `PENDING_ENDORSEMENT` status. The transaction
        will not be signed until it receives the required endorsements through your approval workflow. Poll
        `GET /wallet-operations/{walletOperationId}` to check the status. Once endorsed and signed, use the
        signedTransaction field from the response to broadcast to the blockchain.
      parameters: []
      requestBody:
        description: Transfer transaction construction request for approval workflow
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransferRequest'
      responses:
        '202':
          description: Transfer transaction construction request accepted for approval workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Construction
  /wallet-operations/construct/transaction:
    post:
      operationId: constructTransaction
      summary: Construct Transaction
      description: |-
        Permissions required: **Construct and sign transactions**

        Construct and sign a specialized transaction immediately.

        This endpoint signs the transaction right away. Use Propose Construct Transaction instead if you need
        an approval workflow before signing.

        Use Construct Transfer Transaction instead to construct a transfer transaction.

        > Note: This endpoint does NOT broadcast the transaction to the blockchain.
        After construction and signing, the caller is responsible for broadcasting the transaction.

        This endpoint returns immediately with a `walletOperationId`. Poll `GET /wallet-operations/{walletOperationId}` to check
        the status and retrieve the signed transaction data once construction is complete. Use the signedTransaction
        field from the response to broadcast to the blockchain.
      parameters: []
      requestBody:
        description: Transaction construction request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransactionRequest'
      responses:
        '202':
          description: Transaction construction request accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Construction
  /wallet-operations/construct/propose-transaction:
    post:
      operationId: proposeConstructTransaction
      summary: Propose Construct Transaction
      description: |-
        Permissions required: **Propose constructed transactions**

        Construct a specialized transaction for approval workflow. The transaction will not be signed until it receives
        the required endorsements.

        This endpoint constructs the transaction but defers signing. The operation will enter PENDING_ENDORSEMENT status
        and require approval through your organization's workflow before signing occurs.

        Use Construct Transaction instead if you want to sign immediately without an approval workflow.

        Use Propose Construct Transfer Transaction instead to construct a transfer transaction with deferred signing.

        > Note: This endpoint does NOT broadcast the transaction to the blockchain.
        After construction and signing, the caller is responsible for broadcasting the transaction.

        This endpoint returns immediately with a `walletOperationId` in `PENDING_ENDORSEMENT` status. The transaction
        will not be signed until it receives the required endorsements through your approval workflow. Poll
        `GET /wallet-operations/{walletOperationId}` to check the status. Once endorsed and signed, use the
        signedTransaction field from the response to broadcast to the blockchain.
      parameters: []
      requestBody:
        description: Transaction construction request for approval workflow
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConstructTransactionRequest'
      responses:
        '202':
          description: Transaction construction request accepted for approval workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConstructWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Construction
  /wallet-operations/create/transaction:
    post:
      operationId: createTransaction
      summary: Create Transaction
      description: |-
        Permissions required: **Create transaction**

        Create and sign a specialized transaction immediately with Anchorage-managed replay protection and fee selection.

        This endpoint signs the transaction right away. Use Propose Create Transaction instead if you need
        an approval workflow before signing.

        Use Create Transfer Transaction for simple asset transfers instead.

        This endpoint returns immediately with a `walletOperationId`. Poll `GET /wallet-operations/{walletOperationId}` to check
        the status and retrieve the signed transaction data once construction is complete. Use the signedTransaction
        field from the response to broadcast to the blockchain.

        For operations that create staking positions (create validator, create stake account, split and deactivate stake),
        query `GET /wallets/{walletId}/staking-positions?creatingWalletOperationId={walletOperationId}` after the operation
        completes to find the resulting staking position.
      parameters: []
      requestBody:
        description: Transaction creation request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTransactionRequest'
      responses:
        '202':
          description: Transaction request accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Creation
  /wallet-operations/create/propose-transaction:
    post:
      operationId: proposeCreateTransaction
      summary: Propose Create Transaction
      description: |-
        Permissions required: **Propose create transaction**

        Create a specialized transaction for approval workflow with Anchorage-managed replay protection and fee selection.
        The transaction will not be signed until it receives the required endorsements.

        This endpoint creates the transaction but defers signing. The operation will enter PENDING_ENDORSEMENT status
        and require approval through your organization's workflow before signing occurs.

        Use Create Transaction instead if you want to sign immediately without an approval workflow.

        Use Propose Create Transfer Transaction for simple asset transfers with deferred signing instead.

        This endpoint returns immediately with a `walletOperationId` in `PENDING_ENDORSEMENT` status. The transaction
        will not be signed until it receives the required endorsements through your approval workflow. Poll
        `GET /wallet-operations/{walletOperationId}` to check the status. Once endorsed and signed, use the
        signedTransaction field from the response to broadcast to the blockchain.

        For operations that create staking positions (create validator, create stake account, split and deactivate stake),
        query `GET /wallets/{walletId}/staking-positions?creatingWalletOperationId={walletOperationId}` after the operation
        completes to find the resulting staking position.
      parameters: []
      requestBody:
        description: Transaction creation request for approval workflow
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTransactionRequest'
      responses:
        '202':
          description: Transaction request accepted for approval workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Creation
  /wallet-operations/create/propose-raw-transaction:
    post:
      operationId: proposeRawTransaction
      summary: Propose Raw Transaction
      description: |-
        Permissions required: **Propose create transaction**

        Propose an off-chain signature or on-chain execution raw transaction for approval workflow.

        This endpoint creates a raw transaction but defers signing. The operation will enter PENDING_ENDORSEMENT status
        and require approval through your organization's workflow before signing occurs.

        Supported raw transaction types include Ethereum structured data signing (EIP-712), Ethereum personal message
        signing, Ethereum transaction execution, and Solana raw transaction execution.

        This endpoint returns immediately with a `walletOperationId` in `PENDING_ENDORSEMENT` status. The transaction
        will not be signed until it receives the required endorsements through your approval workflow. Poll
        `GET /wallet-operations/{walletOperationId}` to check the status.
      parameters: []
      requestBody:
        description: Raw transaction creation request for approval workflow
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProposeRawTransactionRequest'
      responses:
        '202':
          description: Raw transaction request accepted for approval workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateWalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Transaction Creation
  '/wallet-operations/{walletOperationId}':
    get:
      operationId: getWalletOperation
      summary: Get Wallet Operation
      description: |-
        Permissions required: **Read vault activity**

        Get details of a specific wallet operation by ID.

        Wallet operations represent transactions that your organization signed and broadcast on-chain,
        such as transfers and staking operations. To see the on-chain confirmation of a wallet operation or get information related to the specific action,
        query the blockchain-events endpoint using the walletOperationId filter.
      parameters:
        - name: walletOperationId
          in: path
          description: The unique identifier of the wallet operation
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletOperationResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallet Operations
  /wallet-operations:
    get:
      operationId: listWalletOperations
      summary: List Wallet Operations
      description: |-
        Permissions required: **Read vault activity**

        List wallet operations with optional filtering.

        Wallet operations represent transactions that your organization signed and broadcast on-chain.
        This includes transfers, staking operations, and other specialized transactions.

        To see the on-chain confirmation status and related events (such as fees) or get information related to the specific action, query the
        blockchain-events endpoint using the walletOperationId filter.
      parameters:
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: first
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 25
            maximum: 100
            minimum: 1
        - name: vaultId
          in: query
          description: Filter by vault ID
          required: false
          schema:
            type: string
        - name: walletId
          in: query
          description: Filter by wallet ID
          required: false
          schema:
            type: string
        - name: networkId
          in: query
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          required: false
          schema:
            type: string
        - name: status
          in: query
          description: 'Filter by wallet operation status (PENDING, COMPLETED, FAILED)'
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListWalletOperationsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallet Operations
  /wallets:
    get:
      operationId: listWallets
      summary: List Wallets
      description: |-
        Permissions required: **Read vault activity**

        List all wallets in the organization.
      parameters:
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: vaultId
          in: query
          description: Filter by vault ID
          required: false
          schema:
            type: string
        - name: networkId
          in: query
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          required: false
          schema:
            type: string
        - name: batchId
          in: query
          description: Filter by batch creation ID
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListWalletsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallets
  '/wallets/{walletId}':
    get:
      operationId: getWallet
      summary: Get Wallet
      description: |-
        Permissions required: **Read vault activity**

        Retrieve a wallet by ID. Use this endpoint to poll for wallet creation status after calling POST /wallets.
      parameters:
        - name: walletId
          in: path
          description: The unique identifier for the wallet
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletDetailsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallets
  /batch/wallets:
    post:
      operationId: createWalletsBatch
      summary: Create or Activate Wallets Batch
      description: |-
        Permissions required: **Create wallet**

        Create or activate multiple wallets in a single batch operation. A wallet exists on exactly one network.

        Supports three patterns:
        1. **Batch Create**: Create wallet sets across multiple networks. Creates `count` wallet sets, where each set contains one wallet per specified network, all sharing the same cryptographic keys. Total wallets created = count × number of networks.
        2. **Batch Activate (List)**: Activate specific wallets for new networks. For each source wallet and target network combination, creates a new wallet that shares keys with the source.
        3. **Batch Activate (Vault)**: Activate all wallets in a vault/network for new networks. For each wallet in the vault on the source network, creates new wallets on the target networks sharing the same keys.

        This endpoint returns immediately with a batchId. Poll GET /batch/wallets/{batchId} to check the status.
        Once complete, use GET /wallets?batchId={batchId} to retrieve the created/activated wallet details.

        For large batches (100k+ wallets), this endpoint supports best-effort processing:
        - COMPLETED status means at least some wallets succeeded
        - FAILED status means complete failure
        - Query results with batchId to see which wallets were created/activated
      parameters: []
      requestBody:
        description: Batch wallet creation or activation request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateWalletsBatchRequest'
      responses:
        '202':
          description: Batch wallet operation initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateBatchResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallets
  '/batch/wallets/{batchId}':
    get:
      operationId: getWalletsBatchStatus
      summary: Get Wallets Batch Status
      description: |-
        Permissions required: **Read vault activity**

        Get the status and results of a batch wallet creation operation.
      parameters:
        - name: batchId
          in: path
          description: The unique identifier for the batch operation
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchStatusResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallets
  '/wallets/{walletId}/balances':
    get:
      operationId: getWalletBalances
      summary: Get Wallet Balances
      description: |-
        Permissions required: **Read vault activity**

        Get current balances for a specific wallet. Returns all balance types including wallet-level balances and aggregated staking position balances.
      parameters:
        - name: walletId
          in: path
          description: The unique identifier of the wallet
          required: true
          schema:
            type: string
        - name: assetType
          in: query
          description: Filter balances by asset type.
          required: false
          schema:
            type: string
          example: ETH
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletBalancesResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Balances
  '/wallets/{walletId}/rewards':
    get:
      operationId: getWalletRewards
      summary: Get Wallet Rewards (Per-Event)
      description: |-
        Permissions required: **Read vault activity**

        Get individual reward events for a wallet over a specified date range.
      parameters:
        - name: walletId
          in: path
          description: The unique identifier of the wallet
          required: true
          schema:
            type: string
        - name: rewardType
          in: query
          description: |-
            The reward type to query.

            Solana reward types.

            * `DELEGATION_REWARDS` - Standard staking delegation rewards
            * `DELEGATION_MEV_REWARDS` - MEV rewards from staking delegation

            Ethereum reward types.

            * `EXECUTION_LAYER_REWARDS` - Execution layer rewards including transaction fees and MEV
            * `BLOCK_PROPOSER_REWARDS` - Block proposal rewards
            * `ATTESTATION_REWARDS` - Block attestation rewards
            * `SYNC_COMMITTEE_REWARDS` - Sync committee participation rewards
          required: true
          schema:
            type: string
            enum:
              - DELEGATION_MEV_REWARDS
              - DELEGATION_REWARDS
              - EXECUTION_LAYER_REWARDS
              - BLOCK_PROPOSER_REWARDS
              - ATTESTATION_REWARDS
              - SYNC_COMMITTEE_REWARDS
        - name: assetType
          in: query
          description: Filter rewards by asset type.
          required: true
          schema:
            type: string
          example: ETH
        - name: startDate
          in: query
          description: 'The start date (inclusive) in `YYYY-MM-DD` format. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) ''full-date''.'
          required: true
          schema:
            type: string
            format: date
          example: '2024-01-01'
        - name: endDate
          in: query
          description: 'The end date (inclusive) in `YYYY-MM-DD` format. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) ''full-date''.'
          required: true
          schema:
            type: string
            format: date
          example: '2024-01-31'
        - name: first
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 25
            maximum: 100
            minimum: 1
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletRewardsListResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallets
  '/wallets/{walletId}/daily-rewards':
    get:
      operationId: getDailyWalletRewards
      summary: Get Daily Wallet Rewards (Aggregated)
      description: |-
        Permissions required: **Read vault activity**

        Get daily aggregated rewards for a wallet over a specified date range (maximum 31 days).
      parameters:
        - name: walletId
          in: path
          description: The unique identifier of the wallet
          required: true
          schema:
            type: string
        - name: rewardTypes
          in: query
          description: |-
            Reward types to include. Only the specified types will be returned.

            **Note:** Do not query both an aggregate type and its component granular types in the same request to avoid double-counting.

            Solana reward types.

            * `DELEGATION_REWARDS` - Standard staking delegation rewards
            * `DELEGATION_MEV_REWARDS` - MEV rewards from staking delegation

            Ethereum reward types.

            **Aggregate types:**
            * `CONSENSUS_LAYER_REWARDS` - Sum of BLOCK_PROPOSER_REWARDS + ATTESTATION_REWARDS + SYNC_COMMITTEE_REWARDS
            * `EXECUTION_LAYER_REWARDS` - Execution layer rewards including transaction fees and MEV

            **Granular types:**
            * `BLOCK_PROPOSER_REWARDS` - Block proposal rewards
            * `ATTESTATION_REWARDS` - Block attestation rewards
            * `SYNC_COMMITTEE_REWARDS` - Sync committee participation rewards
          required: true
          schema:
            type: array
            items:
              type: string
              enum:
                - DELEGATION_MEV_REWARDS
                - DELEGATION_REWARDS
                - CONSENSUS_LAYER_REWARDS
                - EXECUTION_LAYER_REWARDS
                - BLOCK_PROPOSER_REWARDS
                - ATTESTATION_REWARDS
                - SYNC_COMMITTEE_REWARDS
            minItems: 1
          example:
            - DELEGATION_MEV_REWARDS
            - DELEGATION_REWARDS
        - name: assetType
          in: query
          description: Filter rewards by asset type.
          required: false
          schema:
            type: string
          example: ETH
        - name: startDate
          in: query
          description: 'The start date (inclusive) in `YYYY-MM-DD` format. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) ''full-date''.'
          required: true
          schema:
            type: string
            format: date
          example: '2024-01-01'
        - name: endDate
          in: query
          description: 'The end date (inclusive) in `YYYY-MM-DD` format. Maximum range is 31 days from startDate. Dates are always in UTC [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) ''full-date''.'
          required: true
          schema:
            type: string
            format: date
          example: '2024-01-31'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WalletRewardsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Wallets
  '/wallets/{walletId}/staking-positions/{positionId}/balances':
    get:
      operationId: getStakingPositionBalances
      summary: Get Staking Position Balances
      description: |-
        Permissions required: **Read vault activity**

        Get current balances for a specific staking position (e.g., validator, stake account).
      parameters:
        - name: walletId
          in: path
          description: The unique identifier for the wallet
          required: true
          schema:
            type: string
        - name: positionId
          in: path
          description: 'The unique identifier of the staking position (e.g., validator, stake account)'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StakingPositionBalancesResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Balances
  '/wallets/{walletId}/staking-positions':
    get:
      operationId: getWalletStakingPositions
      summary: Get Wallet Staking Positions
      description: |-
        Permissions required: **Read vault activity**

        Get staking positions for a specific wallet.
      parameters:
        - name: walletId
          in: path
          description: The unique identifier for the wallet
          required: true
          schema:
            type: string
        - name: after
          in: query
          description: When paginating this is used to provide the starting point for the page to fetch (retrieved from the previous response body)
          schema:
            type: string
        - name: first
          in: query
          description: Maximum number of results to return per query
          schema:
            type: integer
            format: int64
            default: 25
            maximum: 100
            minimum: 1
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StakingPositionsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '401':
          description: Unauthenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '429':
          description: Too Many Requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDetails'
      tags:
        - Balances
components:
  schemas:
    AMLSubmitInfoRequest:
      type: object
      properties:
        addressText:
          description: The blockchain address for this transaction.
          type: string
        answers:
          $ref: '#/components/schemas/AMLStructuredSubmission'
        assetTypeId:
          description: The asset type for this transaction.
          type: string
        intent:
          $ref: '#/components/schemas/AMLTxIntent'
        operationId:
          description: The operation associated with this submission.
          type: string
        organizationId:
          description: The organization submitting the AML information.
          type: string
        srcVaultId:
          description: 'Source vault unique ID (32-character hex identifier), required for withdrawal and external transfer intents.'
          type: string
        trustedDestinationSubId:
          description: 'Trusted destination sub ID. For TRUSTED_DESTINATION_ADD, indicates which trusted destination to add. For WITHDRAWAL and EXTERNAL_TRANSFER, indicates which trusted destination to auto-fill from.'
          type: string
      additionalProperties: false
      required:
        - intent
        - organizationId
        - operationId
        - assetTypeId
        - addressText
        - answers
      title: AMLSubmitInfoRequest
    AMLSubmitInfoResponse:
      type: object
      properties:
        submissionId:
          description: Unique identifier for this AML submission.
          type: string
      required:
        - submissionId
      title: AMLSubmitInfoResponse
    AMLTxIntent:
      description: The intent of the transaction.
      type: string
      enum:
        - TRUSTED_DESTINATION_ADD
        - WITHDRAWAL
        - EXTERNAL_TRANSFER
      title: AMLTxIntent
    AMLStructuredSubmission:
      description: Structured AML submission data. Required fields are enforced by the server based on the intent.
      type: object
      properties:
        beneficiary:
          $ref: '#/components/schemas/AMLBeneficiary'
        destination:
          $ref: '#/components/schemas/AMLDestination'
        originator:
          $ref: '#/components/schemas/AMLOriginator'
        purpose:
          $ref: '#/components/schemas/AMLPurpose'
      title: AMLStructuredSubmission
    AMLOriginator:
      description: The organization or client initiating the transaction.
      type: object
      properties:
        city:
          description: City.
          type: string
        countryCode:
          description: ISO 3166-1 alpha-2 country code.
          type: string
        extraInfo:
          $ref: '#/components/schemas/AMLOriginatorExtraInfo'
        isNaturalPerson:
          description: Whether the originator is a natural person.
          type: boolean
        name:
          description: Name of the originator.
          type: string
        postalCode:
          description: Postal code.
          type: string
        stateProvince:
          description: State or province.
          type: string
        street:
          description: Street address.
          type: string
        type:
          $ref: '#/components/schemas/AMLOriginatorType'
      required:
        - type
        - name
        - countryCode
        - isNaturalPerson
      title: AMLOriginator
    AMLOriginatorType:
      description: Type of originator.
      type: string
      enum:
        - MY_ORGANIZATION
        - MY_CLIENT
      title: AMLOriginatorType
    AMLOriginatorExtraInfo:
      description: Additional optional information about the originator.
      type: object
      properties:
        dateOfIncorporation:
          description: Date of incorporation.
          type: string
          format: date-time
        placeOfIncorporationCountryCode:
          description: ISO 3166-1 alpha-2 country code of incorporation.
          type: string
      title: AMLOriginatorExtraInfo
    AMLDestination:
      description: The Virtual Asset Service Provider (VASP) or self-hosted wallet receiving the funds.
      type: object
      properties:
        custodial:
          $ref: '#/components/schemas/AMLCustodialInfo'
        selfHosted:
          $ref: '#/components/schemas/AMLSelfHostedInfo'
        type:
          $ref: '#/components/schemas/AMLDestinationType'
      required:
        - type
      title: AMLDestination
    AMLDestinationType:
      description: Type of destination.
      type: string
      enum:
        - FINANCIAL_INSTITUTION
        - SELF_HOSTED_WALLET
      title: AMLDestinationType
    AMLCustodialInfo:
      description: Information about a custodial VASP destination.
      type: object
      properties:
        countryCode:
          description: ISO 3166-1 alpha-2 country code.
          type: string
        name:
          description: Name of the custodial institution.
          type: string
      required:
        - name
        - countryCode
      title: AMLCustodialInfo
    AMLSelfHostedInfo:
      description: Information about a self-hosted wallet destination.
      type: object
      properties:
        description:
          description: Description of the self-hosted wallet.
          type: string
        ownerType:
          $ref: '#/components/schemas/AMLWalletOwnerType'
      required:
        - description
      title: AMLSelfHostedInfo
    AMLWalletOwnerType:
      description: Indicates who owns the self-hosted wallet.
      type: string
      enum:
        - MY_ORGANIZATION
        - PERSON_OR_ENTITY
      title: AMLWalletOwnerType
    AMLBeneficiary:
      description: The recipient of the transaction.
      type: object
      properties:
        destination:
          $ref: '#/components/schemas/AMLBeneficiaryDestinationInfo'
        entity:
          $ref: '#/components/schemas/AMLBeneficiaryEntityInfo'
        individual:
          $ref: '#/components/schemas/AMLBeneficiaryIndividualInfo'
        type:
          $ref: '#/components/schemas/AMLBeneficiaryType'
      required:
        - type
      title: AMLBeneficiary
    AMLBeneficiaryType:
      description: Type of beneficiary.
      type: string
      enum:
        - PERSON
        - ENTITY
        - DESTINATION
        - MY_ORGANIZATION
      title: AMLBeneficiaryType
    AMLBeneficiaryDestinationInfo:
      description: Beneficiary information when the beneficiary is the destination VASP itself.
      type: object
      properties:
        countryCode:
          description: ISO 3166-1 alpha-2 country code.
          type: string
        name:
          description: Name of the destination.
          type: string
      required:
        - name
        - countryCode
      title: AMLBeneficiaryDestinationInfo
    AMLBeneficiaryEntityInfo:
      description: Beneficiary information when the beneficiary is an entity.
      type: object
      properties:
        city:
          description: City.
          type: string
        countryCode:
          description: ISO 3166-1 alpha-2 country code.
          type: string
        isNaturalPerson:
          description: Whether the entity is a natural person.
          type: boolean
        knowsFullAddress:
          description: Whether the full address is known.
          type: boolean
        name:
          description: Entity name.
          type: string
        postalCode:
          description: Postal code.
          type: string
        stateProvince:
          description: State or province.
          type: string
        street:
          description: Street address.
          type: string
      required:
        - name
        - countryCode
        - isNaturalPerson
      title: AMLBeneficiaryEntityInfo
    AMLBeneficiaryIndividualInfo:
      description: Beneficiary information when the beneficiary is a natural person.
      type: object
      properties:
        city:
          description: City.
          type: string
        countryCode:
          description: ISO 3166-1 alpha-2 country code.
          type: string
        firstName:
          description: First name.
          type: string
        knowsFullAddress:
          description: Whether the full address is known.
          type: boolean
        lastName:
          description: Last name.
          type: string
        postalCode:
          description: Postal code.
          type: string
        stateProvince:
          description: State or province.
          type: string
        street:
          description: Street address.
          type: string
      required:
        - firstName
        - lastName
        - countryCode
      title: AMLBeneficiaryIndividualInfo
    AMLPurpose:
      description: The purpose of the transaction.
      type: string
      enum:
        - TRADING_SETTLEMENT
        - LENDING
        - INVESTMENT
        - EXPENSES
        - FEE_PAYMENT
        - GRANT_PAYMENT
        - PRIZE_AWARD
        - GIFT
        - REIMBURSEMENT
        - REBALANCE
        - INTRA_COMPANY
        - REWARDS_DISTRIBUTION
      title: AMLPurpose
    ConstructTransferRequest:
      description: Request to construct a transfer transaction
      type: object
      properties:
        description:
          description: Optional free-form string describing the transfer
          type: string
          maxLength: 512
          nullable: true
        destinationAmounts:
          description: Multiple destinations and amounts are supported for some assets. Each entry specifies a destination and amount.
          type: array
          items:
            $ref: '#/components/schemas/CryptoDestinationAmount'
          minItems: 1
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        networkSpecific:
          description: Network-specific parameters for transaction construction. Use the 'mainnetNetworkId' field to discriminate between different blockchain types.
          allOf:
            - $ref: '#/components/schemas/TransferNetworkSpecific'
        sourceWalletId:
          description: Globally unique wallet identifier for the wallet that pays the gas fees and submits the transfer on-chain. The wallet which sends the assets can be different from this one. The separation of source and sender is available only for certain assets in the asset-specific parameters.
          type: string
      additionalProperties: false
      required:
        - sourceWalletId
        - destinationAmounts
        - networkSpecific
    CreateTransactionRequest:
      description: Request to create a specialized transaction with server-managed replay protection and fees
      type: object
      properties:
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        parameters:
          description: The details of the transaction to perform. Use the 'type' field to discriminate between different transaction types.
          discriminator:
            propertyName: type
            mapping:
              ETHEREUM_CREATE_VALIDATOR: '#/components/schemas/EthereumCreateValidatorRequest'
              ETHEREUM_ADD_STAKE: '#/components/schemas/EthereumAddStakeRequest'
              ETHEREUM_WITHDRAW_STAKE: '#/components/schemas/EthereumWithdrawStakeRequest'
              SOLANA_CREATE_AND_ACTIVATE_STAKE_ACCOUNT: '#/components/schemas/SolanaCreateAndActivateStakeAccountRequest'
              SOLANA_DEACTIVATE_STAKE: '#/components/schemas/SolanaDeactivateStakeRequest'
              SOLANA_WITHDRAW_STAKE: '#/components/schemas/SolanaWithdrawStakeRequest'
              SOLANA_SPLIT_AND_DEACTIVATE_STAKE: '#/components/schemas/SolanaSplitAndDeactivateStakeRequest'
              HYPERCORE_DELEGATE_STAKE: '#/components/schemas/HypercoreDelegateStakeRequest'
              HYPERCORE_SPOT_TO_STAKE: '#/components/schemas/HypercoreSpotToStakeRequest'
              HYPERCORE_UNDELEGATE_STAKE: '#/components/schemas/HypercoreUndelegateStakeRequest'
              HYPERCORE_STAKE_TO_SPOT: '#/components/schemas/HypercoreStakeToSpotRequest'
              HYPERCORE_BRIDGE: '#/components/schemas/HypercoreBridgeRequest'
              HYPEREVM_BRIDGE: '#/components/schemas/HyperevmBridgeRequest'
              HYPERCORE_LINK_ACCOUNTS: '#/components/schemas/HypercoreLinkAccountsRequest'
              AVALANCHE_PCHAIN_DELEGATE_STAKE: '#/components/schemas/AvalanchePChainDelegateStakeRequest'
              AVALANCHE_PCHAIN_STAKE: '#/components/schemas/AvalanchePChainStakeRequest'
              AVALANCHE_PCHAIN_EXPORT: '#/components/schemas/AvalanchePChainExportRequest'
              AVALANCHE_CCHAIN_EXPORT: '#/components/schemas/AvalancheCChainExportRequest'
              AVALANCHE_PCHAIN_IMPORT: '#/components/schemas/AvalanchePChainImportRequest'
              AVALANCHE_CCHAIN_IMPORT: '#/components/schemas/AvalancheCChainImportRequest'
          oneOf:
            - $ref: '#/components/schemas/EthereumCreateValidatorRequest'
            - $ref: '#/components/schemas/EthereumAddStakeRequest'
            - $ref: '#/components/schemas/EthereumWithdrawStakeRequest'
            - $ref: '#/components/schemas/SolanaCreateAndActivateStakeAccountRequest'
            - $ref: '#/components/schemas/SolanaDeactivateStakeRequest'
            - $ref: '#/components/schemas/SolanaWithdrawStakeRequest'
            - $ref: '#/components/schemas/SolanaSplitAndDeactivateStakeRequest'
            - $ref: '#/components/schemas/HypercoreDelegateStakeRequest'
            - $ref: '#/components/schemas/HypercoreSpotToStakeRequest'
            - $ref: '#/components/schemas/HypercoreUndelegateStakeRequest'
            - $ref: '#/components/schemas/HypercoreStakeToSpotRequest'
            - $ref: '#/components/schemas/HypercoreBridgeRequest'
            - $ref: '#/components/schemas/HyperevmBridgeRequest'
            - $ref: '#/components/schemas/HypercoreLinkAccountsRequest'
            - $ref: '#/components/schemas/AvalanchePChainDelegateStakeRequest'
            - $ref: '#/components/schemas/AvalanchePChainStakeRequest'
            - $ref: '#/components/schemas/AvalanchePChainExportRequest'
            - $ref: '#/components/schemas/AvalancheCChainExportRequest'
            - $ref: '#/components/schemas/AvalanchePChainImportRequest'
            - $ref: '#/components/schemas/AvalancheCChainImportRequest'
        sourceWalletId:
          description: Globally unique wallet identifier for the wallet that will pay transaction fees and sign the transaction
          type: string
      additionalProperties: false
      required:
        - parameters
        - sourceWalletId
    CreateWalletOperationResponse:
      description: 'Async response with wallet operation ID. Use the walletOperationId with the GET /wallet-operations/{walletOperationId} endpoint to poll for the operation status and retrieve the created transaction details.'
      type: object
      properties:
        walletOperationId:
          description: 'Wallet operation identifier. Poll the GET /wallet-operations/{walletOperationId} endpoint to check the status and retrieve the transaction data once creation is complete.'
          type: string
          example: op_550e8400-e29b-41d4-a716-446655440000
      required:
        - walletOperationId
    ErrorDetails:
      type: object
      properties:
        message:
          description: A human-readable message providing more details about the error.
          type: string
          example: Missing required field 'amount'.
      required:
        - message
      title: ErrorDetails
    EthereumCreateValidatorRequest:
      description: 'Request to create an 0x02 Ethereum validator by depositing ETH to the beacon chain deposit contract. In order to retain status as an active validator, it must maintain a minimum of 32 ETH. Validators cannot be merged, if you''d like to increase an existing position instead use ETHEREUM ADD STAKE REQUEST.'
      type: object
      properties:
        amount:
          description: Amount of ETH to deposit for the validator. Must be between 32 and 2048 ETH.
          type: string
          example: '33.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        stakingProvider:
          description: The entity running the validator infrastructure
          type: string
          enum:
            - FIGMENT
            - BLOCKDAEMON
        type:
          description: Discriminator field indicating this is an Ethereum create validator request
          type: string
          default: ETHEREUM_CREATE_VALIDATOR
          enum:
            - ETHEREUM_CREATE_VALIDATOR
      required:
        - type
        - stakingProvider
        - amount
      title: Ethereum Create Validator Request
    EthereumAddStakeRequest:
      description: Request to add stake to an existing 0x02 Ethereum validator by depositing additional ETH. Any validator balance above 2048 ETH will not earn rewards. Beyond that point it is recommended to create a new validator via ETHEREUM CREATE VALIDATOR REQUEST.
      type: object
      properties:
        amount:
          description: Amount of ETH to add as stake (decimal string)
          type: string
          example: '32.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is an Ethereum add stake request
          type: string
          default: ETHEREUM_ADD_STAKE
          enum:
            - ETHEREUM_ADD_STAKE
        validatorPublicKey:
          description: 'BLS12-381 public key of the validator to add stake to (48 bytes, hex encoded)'
          type: string
          example: 93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a
      required:
        - type
        - validatorPublicKey
        - amount
      title: Ethereum Add Stake Request
    EthereumWithdrawStakeRequest:
      description: Request to withdraw some or all stake from a 0x02 Ethereum validator
      type: object
      properties:
        amount:
          description: 'Amount of ETH to withdraw (decimal string), or ''ALL'' to withdraw everything and exit the validator. If amount is not ''ALL'' but it leaves less than 32 ETH behind, the API will return an error to prevent accidentally inactive stake.'
          type: string
          example: '1.5'
          pattern: '^(ALL|[0-9]\d*(\.\d+)?)$'
        type:
          description: Discriminator field indicating this is an Ethereum withdraw stake request
          type: string
          default: ETHEREUM_WITHDRAW_STAKE
          enum:
            - ETHEREUM_WITHDRAW_STAKE
        validatorPublicKey:
          description: 'BLS12-381 public key of the validator to add stake to (48 bytes, hex encoded)'
          type: string
          example: 93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a
      required:
        - type
        - validatorPublicKey
        - amount
      title: Ethereum Withdraw Stake Request
    ListAddressesResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/WalletAddress'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    ListAssetTypesResponse:
      description: Response containing a list of supported asset types
      type: object
      properties:
        data:
          description: Array of asset type details
          type: array
          items:
            $ref: '#/components/schemas/AssetType'
      required:
        - data
    AssetType:
      description: 'Details about a supported asset type, including its identifier, name, decimal precision, and blockchain network'
      type: object
      properties:
        assetType:
          description: 'A unique string identifying a specific asset on a specific blockchain and environment (testnet, mainnet).'
          type: string
          example: BTC
        decimals:
          description: 'Number of decimal places used to represent amounts of this asset. For example, Bitcoin has 8 decimals, so 1 BTC = 100000000 satoshis.'
          type: integer
          example: 8
        name:
          description: Human-readable name of the asset
          type: string
          example: Bitcoin
        networkId:
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          type: string
          example: BTC
        onchainIdentifier:
          description: 'On-chain identifier for the asset. For Ethereum, this is the contract address for token contracts (e.g., ERC-20 tokens). For Tendermint-based networks, this represents the denomination or asset identifier used on-chain. Omitted for native blockchain assets like BTC or ETH.'
          type: string
          example: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
          nullable: true
      required:
        - assetType
        - name
        - decimals
        - networkId
    ListNetworksResponse:
      description: Response containing a list of supported networks
      type: object
      properties:
        data:
          description: Array of network details
          type: array
          items:
            $ref: '#/components/schemas/Network'
      required:
        - data
    Network:
      description: 'Details about a blockchain network, including its key family identifier for wallet activation compatibility'
      type: object
      properties:
        keyFamily:
          description: 'Opaque identifier grouping networks that can share wallet private keys. This value has no semantic meaning and is only valid for equality comparison within a single API response. Do not cache, parse, or make assumptions about this value. Two networks can share keys if their keyFamily values match in the same response.'
          type: string
          example: '1'
        name:
          description: Human-readable name of the network
          type: string
          example: Ethereum Mainnet
        networkId:
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          type: string
          example: ETH
      required:
        - networkId
        - name
        - keyFamily
    Page:
      description: Pagination info
      type: object
      properties:
        endCursor:
          description: Submit this parameter in the "after" field to fetch the next page.
          type: string
          nullable: true
      title: Page
    SNSettlementProposal:
      type: object
      properties:
        acceptorId:
          type: string
        applyPostLock:
          description: 'Conditional. This parameter is only applicable for clients utilizing Atlas settlements integrated with "Anchorage Vesting". When set to true, it enables the automatic creation of post-settlement vesting schedules. Note: Enabling this will place indefinite holds on the acceptor''s destination wallets immediately following a successful settlement'
          type: boolean
        clientReferenceId:
          description: 'An ID, set by the proposer, visible to both sides, to uniquely identify the purpose of the settlement so that both sides can account for it correctly.'
          type: string
        idempotentId:
          type: string
          maxLength: 128
        proposerId:
          type: string
        useGasStation:
          description: Option to request to use Gas Station to cover fees for proposer.
          type: boolean
        vaultId:
          description: The vault ID of the proposer. It needs to match the vault that the wallets are in.
          type: string
        walletAmounts:
          description: 'In a proposal, each asset type can appear only once in the wallet amount list.'
          type: array
          items:
            $ref: '#/components/schemas/SNWalletAmount'
      required:
        - proposerId
        - acceptorId
        - idempotentId
        - vaultId
        - walletAmounts
    SNWalletAmount:
      type: object
      properties:
        assetType:
          description: |-
            A string representing a type of crypto-asset, which usually corresponds to the crypto asset's ticker symbol.
            Use `/asset-types` to list all of the supported asset types for your organization.
          type: string
          example: BTC
        quantity:
          description: 'The numeric value of this amount, excluding units. Use positive numbers for receiving and negative for sending assets. Amounts never include fees.'
          type: string
          example: '10.45234733'
        walletId:
          type: string
      required:
        - assetType
        - quantity
    SNProposeSettlementResponse:
      type: object
      properties:
        settlementId:
          type: string
      required:
        - settlementId
    SNSettlementAuthorization:
      type: object
      properties:
        acceptorId:
          type: string
        proposerId:
          type: string
        walletAmounts:
          description: 'In a proposal, each asset type can appear only once in the wallet amount list.'
          type: array
          items:
            $ref: '#/components/schemas/SNWalletAmount'
      required:
        - proposerId
        - acceptorId
        - walletAmounts
    SNAcceptSettlementRequest:
      type: object
      properties:
        useGasStation:
          description: Option to request to use Gas Station to cover fees for acceptor.
          type: boolean
        vaultId:
          description: ID of vault to use for the settlement
          type: string
        walletAmounts:
          description: 'The set of wallets to use for the requested walletAmounts. The assets must match exactly the list of assets in the proposal and the amounts must be exactly opposite the amounts in the proposal. Use positive numbers to describe assets to receive and negative to send. The sum of the amounts, by asset type, must match the negative of the sum of the amounts on the proposer''s side of the settlement. The special string `createWallet` can be used to indicate that a new wallet should be created for this asset for this settlement.'
          type: array
          items:
            $ref: '#/components/schemas/SNWalletAmount'
      required:
        - vaultId
        - walletAmounts
    SNSettlementsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/SNSettlement'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    SNSettlementResponse:
      type: object
      properties:
        settlement:
          $ref: '#/components/schemas/SNSettlement'
      required:
        - settlement
    SNSettlement:
      description: |-
        A settlement is a proposal to move assets between wallets owned by two participants.

        When the settlement status is `ActionNeeded`, refer to your participant's settlement side (`proposerSide` or `acceptorSide`) for more detailed information. Fields on the settlement side reflect the individual actions needed.
      type: object
      properties:
        acceptorSide:
          $ref: '#/components/schemas/SNSettlementSide'
        clientReferenceId:
          description: 'An ID, set by the proposer, visible to both sides, to uniquely identify the purpose of the settlement so that both sides can account for it correctly.'
          type: string
        pendingAcceptorReview:
          description: a flag indicating whether the settlement is awaiting acceptor selection
          type: boolean
        proposerSide:
          $ref: '#/components/schemas/SNSettlementSide'
        settlementId:
          type: string
        state:
          $ref: '#/components/schemas/SNSettlementState'
      required:
        - settlementId
        - proposerSide
        - acceptorSide
        - state
        - clientReferenceId
        - pendingAcceptorReview
    SNSettlementState:
      type: string
      enum:
        - ActionNeeded
        - CounterpartyActionNeeded
        - Executing
        - TimedOut
        - Rejected
        - Executed
        - Failed
    SNSettlementSide:
      type: object
      properties:
        authorized:
          description: This can be null if authorization is not required or if the caller doesn't have access to this information.
          type: boolean
        feesFunded:
          description: 'This can be null if the caller doesn''t have access to this information. Fees funded status is based on the same fee logic as transfers and is checked independently of any other settlements. It takes into account only the current available balance for the relevant wallet. If the primary amount and fee amount are the of same asset, the primary amount is also taken into account when calculating this.'
          type: boolean
        funded:
          description: This can be null if the caller doesn't have access to this information. The funded status does not include fees and is checked independently of any other settlements. It takes into account only the current available balance for the relevant wallet.
          type: boolean
        gasStationEnabled:
          description: Indicates the Gas Station is enabled to cover fees for this participant. This can be null if the caller doesn't have access to this information.
          type: boolean
        participantId:
          type: string
        walletAmounts:
          type: array
          items:
            $ref: '#/components/schemas/SNWalletAmount'
      required:
        - participantId
    SNTrustedCounterpartyProposal:
      type: object
      properties:
        counterpartyId:
          type: string
        description:
          type: string
        idempotentId:
          type: string
          maxLength: 128
        participantId:
          type: string
      required:
        - participantId
        - counterpartyId
        - idempotentId
    SNTrustedCounterpartyResponse:
      type: object
      properties:
        counterparty:
          $ref: '#/components/schemas/SNTrustedCounterparty'
      required:
        - counterparty
    SNTrustedCounterpartiesResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/SNTrustedCounterparty'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    SNTrustedCounterparty:
      type: object
      properties:
        counterpartyId:
          type: string
        counterpartyName:
          type: string
        description:
          type: string
        isActive:
          type: boolean
      required:
        - counterpartyId
        - counterpartyName
        - isActive
    SNParticipantResponse:
      type: object
      properties:
        participant:
          $ref: '#/components/schemas/SNParticipant'
      required:
        - participant
    SNParticipant:
      type: object
      properties:
        isActive:
          type: boolean
        participantId:
          type: string
        participantName:
          type: string
        tier:
          $ref: '#/components/schemas/SNParticipantTier'
      required:
        - participantId
        - participantName
        - isActive
    SNParticipantTier:
      type: string
      enum:
        - Basic
        - Advanced
    SNParticipantsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/SNParticipant'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    SolanaCreateAndActivateStakeAccountRequest:
      description: Request to create and delegate a new Solana stake account in a single operation. Minimum stake amount is 0.01 SOL.
      type: object
      properties:
        amount:
          description: Amount of SOL to deposit into the new stake account (decimal string). Minimum 0.01 SOL.
          type: string
          example: '2.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is a  Create Stake Account And Stake Request
          type: string
          default: SOLANA_CREATE_AND_ACTIVATE_STAKE_ACCOUNT
          enum:
            - SOLANA_CREATE_AND_ACTIVATE_STAKE_ACCOUNT
        voteAccountAddress:
          description: Vote account address corresponding with the validator to whom we want to stake
          type: string
          example: ANCVpxEySGWWLqqkVKw2xWYDE9UP4fmZWMCBr5t96jch
      required:
        - type
        - amount
        - voteAccountAddress
      title: Solana Create And Activate Stake Account Request
    SolanaDeactivateStakeRequest:
      description: 'Request to deactivate a Solana stake account, beginning the process to unstake. This deactivates the entire balance of the stake account. For partial unstaking, use SOLANA_SPLIT_AND_DEACTIVATE_STAKE instead.'
      type: object
      properties:
        stakeAccountAddress:
          description: Address of the stake account to deactivate. The entire balance will be deactivated.
          type: string
          example: 7NMw8RfMFLc6WZvyuJQbAF5yVhxFMkH9mKzPP2JVYKjL
        type:
          description: Discriminator field indicating this is a Solana deactivate stake request
          type: string
          default: SOLANA_DEACTIVATE_STAKE
          enum:
            - SOLANA_DEACTIVATE_STAKE
      required:
        - type
        - stakeAccountAddress
      title: Solana Deactivate Stake Request
    SolanaWithdrawStakeRequest:
      description: Request to withdraw inactive SOL from a Solana stake account. The stake account must be deactivated and cooldown period must have elapsed. Minimum withdrawal is 0.000000001 SOL (1 lamport). Partial withdrawals must leave at least 0.00228288 SOL (rent-exempt reserve) in the stake account.
      type: object
      properties:
        amount:
          description: 'Amount of SOL to withdraw (decimal string). Minimum 0.000000001 SOL. For partial withdrawals, must leave at least 0.00228288 SOL in the account.'
          type: string
          example: '1.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        stakeAccountAddress:
          description: Address of the stake account to withdraw from
          type: string
          example: 7NMw8RfMFLc6WZvyuJQbAF5yVhxFMkH9mKzPP2JVYKjL
        type:
          description: Discriminator field indicating this is a Solana withdraw stake request
          type: string
          default: SOLANA_WITHDRAW_STAKE
          enum:
            - SOLANA_WITHDRAW_STAKE
      required:
        - type
        - stakeAccountAddress
        - amount
      title: Solana Withdraw Stake Request
    SolanaSplitAndDeactivateStakeRequest:
      description: 'Request to split a Solana stake account and deactivate the new account in a single transaction. The specified amount will be split into a new stake account (with a server-generated address) and immediately deactivated. Minimum split amount is 0.01 SOL, and the original stake account must retain at least 0.01 SOL after the split.'
      type: object
      properties:
        amount:
          description: 'Amount of SOL to split into the new stake account, which will then be deactivated (decimal string). Minimum 1 SOL. The original account must retain at least 1.1 SOL.'
          type: string
          example: '1.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        stakeAccountAddress:
          description: Address of the source stake account to split from
          type: string
          example: 7NMw8RfMFLc6WZvyuJQbAF5yVhxFMkH9mKzPP2JVYKjL
        type:
          description: Discriminator field indicating this is a Solana split and deactivate stake request
          type: string
          default: SOLANA_SPLIT_AND_DEACTIVATE_STAKE
          enum:
            - SOLANA_SPLIT_AND_DEACTIVATE_STAKE
      required:
        - type
        - stakeAccountAddress
        - amount
      title: Solana Split And Deactivate Stake Request
    HypercoreDelegateStakeRequest:
      description: Request to delegate inactive stake balance to a validator on HyperCore. Currently only supports a single validator per wallet.
      type: object
      properties:
        amount:
          description: Amount of HYPE to delegate (decimal string)
          type: string
          example: '100.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is a HyperCore delegate stake request
          type: string
          default: HYPERCORE_DELEGATE_STAKE
          enum:
            - HYPERCORE_DELEGATE_STAKE
        validatorAddress:
          description: Address of the validator to delegate to (EVM 0x + 40 hex)
          type: string
          example: '0x393d4f2209abcacf57b75a51dafae777f9dd38bc'
          pattern: '^0x[0-9a-fA-F]{40}$'
      required:
        - type
        - validatorAddress
        - amount
      title: HyperCore Delegate Stake Request
    HypercoreSpotToStakeRequest:
      description: 'Request to move spot balance into the stake account as inactive stake, the prerequisite for delegating. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of HYPE to move from spot into the stake account (decimal string). An explicit amount greater than zero is required.
          type: string
          example: '100.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is a HyperCore spot-to-stake request
          type: string
          default: HYPERCORE_SPOT_TO_STAKE
          enum:
            - HYPERCORE_SPOT_TO_STAKE
      required:
        - type
        - amount
      title: HyperCore Spot To Stake Request
    HypercoreUndelegateStakeRequest:
      description: 'Request to undelegate funds from a validator on HyperCore, beginning the 1-day delegation lockup before the funds return to the idle stake account. Currently only supports a single validator per wallet.'
      type: object
      properties:
        amount:
          description: 'Amount of HYPE to undelegate (decimal string), or ''ALL'' to undelegate the full delegated balance at the validator'
          type: string
          example: '100.0'
          pattern: '^(ALL|[0-9]\d*(\.\d+)?)$'
        type:
          description: Discriminator field indicating this is a HyperCore undelegate stake request
          type: string
          default: HYPERCORE_UNDELEGATE_STAKE
          enum:
            - HYPERCORE_UNDELEGATE_STAKE
        validatorAddress:
          description: Address of the validator to undelegate from (EVM 0x + 40 hex)
          type: string
          example: '0x393d4f2209abcacf57b75a51dafae777f9dd38bc'
          pattern: '^0x[0-9a-fA-F]{40}$'
      required:
        - type
        - validatorAddress
        - amount
      title: HyperCore Undelegate Stake Request
    HypercoreStakeToSpotRequest:
      description: 'Request to move inactive stake balance back to spot balance. This is the withdraw-to-spot action; completion is subject to HyperCore''s 7-day unstaking queue. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of HYPE to move from the stake account back to spot (decimal string). An explicit amount greater than zero is required.
          type: string
          example: '100.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is a HyperCore stake-to-spot request
          type: string
          default: HYPERCORE_STAKE_TO_SPOT
          enum:
            - HYPERCORE_STAKE_TO_SPOT
      required:
        - type
        - amount
      title: HyperCore Stake To Spot Request
    HypercoreBridgeRequest:
      description: 'Request to bridge HyperCore spot balance out to the client''s HyperEVM wallet. An explicit amount is required (''all'' is not supported). This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of HYPE to bridge from HyperCore spot to HyperEVM (decimal string). An explicit amount greater than zero is required.
          type: string
          example: '100.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is a HyperCore bridge (outbound) request
          type: string
          default: HYPERCORE_BRIDGE
          enum:
            - HYPERCORE_BRIDGE
      required:
        - type
        - amount
      title: HyperCore Bridge to HyperEVM Request
    HyperevmBridgeRequest:
      description: 'Request to bridge HYPE from the client''s HyperEVM wallet into HyperCore spot balance, the funding step that precedes staking. This operation is initiated on the HyperEVM (HYPE_HYPEREVM) wallet. An explicit amount is required (''all'' is not supported). This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of HYPE to bridge from HyperEVM into HyperCore spot (decimal string). An explicit amount greater than zero is required.
          type: string
          example: '100.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: 'Discriminator field indicating this is a HyperEVM bridge (inbound, HyperEVM -> HyperCore) request'
          type: string
          default: HYPEREVM_BRIDGE
          enum:
            - HYPEREVM_BRIDGE
      required:
        - type
        - amount
      title: HyperEVM Bridge to HyperCore Request
    HypercoreLinkAccountsRequest:
      description: 'Request to link this HyperCore staking wallet to an external trading account. This is permanent and irreversible, and carries no amount. The operation only succeeds if the trading account has already initiated a linking request to this staking wallet. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        linkAddress:
          description: Address of the external trading account to link to this staking wallet (EVM 0x + 40 hex)
          type: string
          example: '0x393d4f2209abcacf57b75a51dafae777f9dd38bc'
          pattern: '^0x[0-9a-fA-F]{40}$'
        type:
          description: Discriminator field indicating this is a HyperCore link-accounts request
          type: string
          default: HYPERCORE_LINK_ACCOUNTS
          enum:
            - HYPERCORE_LINK_ACCOUNTS
      required:
        - type
        - linkAddress
      title: HyperCore Link Accounts Request
    AvalanchePChainDelegateStakeRequest:
      description: 'Request to delegate AVAX to a validator on the Avalanche P-Chain for a fixed duration. P-Chain staking is time-locked: there is no early exit, and funds are returned automatically at the end of the staking period. Duration bounds vary by network and change when Avalanche''s Helicon upgrade (ACP-273) activates; see the `duration` field.'
      type: object
      properties:
        amount:
          description: Amount of AVAX to delegate (decimal string)
          type: string
          example: '25.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        duration:
          description: 'Staking duration in whole days (e.g. ''14'' for 14 days). Bounds vary by network and are enforced when the request is submitted: 14–365 days on mainnet, 2–365 on the Fuji testnet. Avalanche''s Helicon upgrade (ACP-273) lowers the Primary Network minimum from 14 days to 2; it is active on Fuji, and the mainnet minimum will drop to 2 days once it activates there.'
          type: string
          example: '14'
          pattern: '^[1-9][0-9]*$'
        type:
          description: Discriminator field indicating this is an Avalanche P-Chain delegate stake request
          type: string
          default: AVALANCHE_PCHAIN_DELEGATE_STAKE
          enum:
            - AVALANCHE_PCHAIN_DELEGATE_STAKE
        validatorAddress:
          description: 'Avalanche NodeID of the validator to delegate to (format: NodeID-<base58check>)'
          type: string
          example: NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg
          pattern: '^NodeID-[1-9A-HJ-NP-Za-km-z]{33}$'
      required:
        - type
        - validatorAddress
        - amount
        - duration
      title: Avalanche P-Chain Delegate Stake Request
    AvalanchePChainStakeRequest:
      description: 'Request to create a new Avalanche P-Chain validator (self-stake). Requires BLS proof-of-possession (nodePublicKey + nodeSignature) to register the validator''s BLS key. The commission controls what percentage of delegation rewards are kept by the validator. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of AVAX to self-stake (decimal string)
          type: string
          example: '2000.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        commission:
          description: 'Delegation rewards commission percentage (2–100, up to 2 decimal places). E.g. ''5'' for 5%.'
          type: string
          example: '5'
          pattern: '^[0-9]\d*(\.\d{1,2})?$'
        delegatorRewardsAddress:
          description: P-Chain address to receive delegator staking rewards
          type: string
          example: P-avax1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
        duration:
          description: 'Staking duration in whole days (e.g. ''14''). Bounds vary by network and are enforced when the request is submitted: 14–365 days on mainnet, 2–365 on the Fuji testnet. Avalanche''s Helicon upgrade (ACP-273) lowers the Primary Network minimum from 14 days to 2; it is active on Fuji, and the mainnet minimum will drop to 2 days once it activates there.'
          type: string
          example: '14'
          pattern: '^[1-9][0-9]*$'
        nodeId:
          description: 'Avalanche NodeID of the new validator (format: NodeID-<base58check>)'
          type: string
          example: NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg
          pattern: '^NodeID-[1-9A-HJ-NP-Za-km-z]{33}$'
        nodePublicKey:
          description: 'BLS12-381 public key for proof-of-possession (48 bytes, 0x-prefixed hex, 96 hex chars)'
          type: string
          example: '0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a'
          pattern: '^0x[0-9a-fA-F]{96}$'
        nodeSignature:
          description: 'BLS12-381 proof-of-possession signature (96 bytes, 0x-prefixed hex, 192 hex chars)'
          type: string
          example: '0xb3a48349cf17e7c24b23a1b0e9469ebe1c03a4f4e52e5e80ce09caa5c7c7f4f2a5b34fe2e9a2b4c61d3f8e7a56821f8bb3a48349cf17e7c24b23a1b0e9469ebe1c03a4f4e52e5e80ce09caa5c7c7f4f2a5b34fe2e9a2b4c61d3f8e7a56821f8b'
          pattern: '^0x[0-9a-fA-F]{192}$'
        type:
          description: Discriminator field indicating this is an Avalanche P-Chain stake (validator creation) request
          type: string
          default: AVALANCHE_PCHAIN_STAKE
          enum:
            - AVALANCHE_PCHAIN_STAKE
        validatorRewardsAddress:
          description: P-Chain address to receive validator staking rewards
          type: string
          example: P-avax1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
      required:
        - type
        - nodeId
        - nodePublicKey
        - nodeSignature
        - commission
        - duration
        - amount
        - validatorRewardsAddress
        - delegatorRewardsAddress
      title: Avalanche P-Chain Stake Request
    AvalanchePChainExportRequest:
      description: 'Step 1 of a P→C transfer: export AVAX from a P-Chain wallet toward the C-Chain (on-chain p_to_c_export), initiated against the P-Chain wallet. Bridging is two steps with no auto-import — settle the funds on the C-Chain with a follow-up AVALANCHE_CCHAIN_IMPORT. The destination must be a C-Chain wallet you control. Explicit amount only — ''all'' is not supported. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of AVAX to export (decimal string). Explicit amount required.
          type: string
          example: '10.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        destination:
          description: C-Chain (EVM 0x) address to receive the exported AVAX. Must be an address of a wallet your organization controls.
          type: string
          example: '0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed'
        type:
          description: Discriminator field indicating this is an Avalanche P-Chain export request
          type: string
          default: AVALANCHE_PCHAIN_EXPORT
          enum:
            - AVALANCHE_PCHAIN_EXPORT
      required:
        - type
        - destination
        - amount
      title: Avalanche P-Chain Export Request
    AvalancheCChainExportRequest:
      description: 'Step 1 of a C→P transfer: export AVAX from a C-Chain (EVM) wallet toward the P-Chain (on-chain c_to_p_export), initiated against the C-Chain wallet. This is the funding step that precedes P-Chain staking; settle the funds on the P-Chain with a follow-up AVALANCHE_PCHAIN_IMPORT. The destination must be a P-Chain wallet you control. Explicit amount only — ''all'' is not supported. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of AVAX to export from the C-Chain (decimal string). Explicit amount required.
          type: string
          example: '10.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        destination:
          description: 'P-Chain address to receive the exported AVAX (format: P-avax1...). Must be an address of a wallet your organization controls.'
          type: string
          example: P-avax1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
        type:
          description: Discriminator field indicating this is an Avalanche C-Chain export request (initiated on the C-Chain wallet)
          type: string
          default: AVALANCHE_CCHAIN_EXPORT
          enum:
            - AVALANCHE_CCHAIN_EXPORT
      required:
        - type
        - destination
        - amount
      title: Avalanche C-Chain Export Request
    AvalanchePChainImportRequest:
      description: 'Step 2 of a C→P transfer: claim on the P-Chain the AVAX that was exported from the C-Chain (on-chain p_from_c_import), initiated against the P-Chain wallet. The import pulls the funds from shared atomic memory into the P-Chain wallet''s own address, so there is no destination. Explicit amount only — ''all'' is not supported. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of AVAX to claim on the P-Chain (decimal string). Explicit amount required.
          type: string
          example: '10.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is an Avalanche P-Chain import request (initiated on the P-Chain wallet)
          type: string
          default: AVALANCHE_PCHAIN_IMPORT
          enum:
            - AVALANCHE_PCHAIN_IMPORT
      required:
        - type
        - amount
      title: Avalanche P-Chain Import Request
    AvalancheCChainImportRequest:
      description: 'Step 2 of a P→C transfer: claim on the C-Chain the AVAX that was exported from the P-Chain (on-chain c_from_p_import), initiated against the C-Chain (EVM) wallet. The funds always credit the initiating wallet''s own C-Chain address, so no destination is supplied. Explicit amount only — ''all'' is not supported. This operation can''t be submitted to the create-transaction endpoint yet — it always requires quorum approval, so use the propose-transaction endpoint instead. (API-key endorsement / skip-quorum auto-execution for this and other generic operations is planned.)'
      type: object
      properties:
        amount:
          description: Amount of AVAX to claim on the C-Chain (decimal string). Explicit amount required.
          type: string
          example: '10.0'
          pattern: '^[0-9]\d*(\.\d+)?$'
        type:
          description: Discriminator field indicating this is an Avalanche C-Chain import request (initiated on the C-Chain wallet)
          type: string
          default: AVALANCHE_CCHAIN_IMPORT
          enum:
            - AVALANCHE_CCHAIN_IMPORT
      required:
        - type
        - amount
      title: Avalanche C-Chain Import Request
    ProposeRawTransactionRequest:
      description: Request to create a raw transaction for approval workflow
      type: object
      properties:
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        parameters:
          description: The raw transaction parameters. Use the 'type' field to discriminate between different raw transaction types.
          discriminator:
            propertyName: type
            mapping:
              EIP712_ETH_SIGNTYPEDDATA_V4: '#/components/schemas/EIP712SignTypedDataV4Request'
              ETH_PERSONAL_SIGN: '#/components/schemas/EthPersonalSignRequest'
              ETH_SEND_TRANSACTION: '#/components/schemas/EthSendTransactionRequest'
              SOLANA_RAW_TRANSACTION: '#/components/schemas/SolanaRawTransactionRequest'
          oneOf:
            - $ref: '#/components/schemas/EIP712SignTypedDataV4Request'
            - $ref: '#/components/schemas/EthPersonalSignRequest'
            - $ref: '#/components/schemas/EthSendTransactionRequest'
            - $ref: '#/components/schemas/SolanaRawTransactionRequest'
        sourceWalletId:
          description: Globally unique wallet identifier for the wallet that will pay transaction fees and sign the transaction
          type: string
      required:
        - sourceWalletId
        - parameters
    EIP712SignTypedDataV4Request:
      description: 'Ethereum structured data signing request following the EIP-712 specification, using the JSON-RPC method eth_signTypedData_v4. The chainId in the domain must match the chain ID of the source wallet''s network.'
      type: object
      properties:
        domain:
          description: 'EIP-712 domain separator containing fields like name, version, chainId, and verifyingContract'
          type: object
        message:
          description: 'The structured data to sign, conforming to the primaryType definition'
          type: object
        primaryType:
          description: 'The primary type name that the message conforms to, must be defined in the types field'
          type: string
          example: Permit
        type:
          description: Discriminator field indicating this is an EIP-712 sign typed data v4 request
          type: string
          default: EIP712_ETH_SIGNTYPEDDATA_V4
          enum:
            - EIP712_ETH_SIGNTYPEDDATA_V4
        types:
          description: EIP-712 type definitions. Must include the EIP712Domain type and any custom types referenced by primaryType.
          type: object
      required:
        - type
        - types
        - primaryType
        - domain
        - message
      title: EIP-712 Sign Typed Data V4 Request
    EthPersonalSignRequest:
      description: Ethereum personal message signing request using the eth_personalSign JSON-RPC method
      type: object
      properties:
        message:
          description: Human-readable message to sign
          type: string
          example: Please sign to verify wallet ownership
        type:
          description: Discriminator field indicating this is an Ethereum personal sign request
          type: string
          default: ETH_PERSONAL_SIGN
          enum:
            - ETH_PERSONAL_SIGN
      required:
        - type
        - message
      title: Ethereum Personal Sign Request
    EthSendTransactionRequest:
      description: Ethereum transaction execution request using the eth_sendTransaction JSON-RPC method. The from address must match the address associated with the source wallet.
      type: object
      properties:
        data:
          description: Contract calldata (hex encoded with 0x prefix)
          type: string
          example: '0xdb006a750000000000000000000000000000000000000000000000000000000000000001'
        from:
          description: Sender address (hex encoded with 0x prefix). Must match the address of the source wallet.
          type: string
          example: '0xc6690d013b615066edcaa102daa5346cf7587966'
        to:
          description: Recipient or contract address (hex encoded with 0x prefix)
          type: string
          example: '0x6982508145454ce325ddbe47a25d4ec3d2311933'
        type:
          description: Discriminator field indicating this is an Ethereum send transaction request
          type: string
          default: ETH_SEND_TRANSACTION
          enum:
            - ETH_SEND_TRANSACTION
        value:
          description: ETH value to send (hex encoded)
          type: string
          example: '0x00'
      required:
        - type
        - from
        - to
      title: Ethereum Send Transaction Request
    SolanaRawTransactionRequest:
      description: Solana raw transaction execution request. The transaction field contains a Base64-encoded Solana transaction.
      type: object
      properties:
        transaction:
          description: Base64-encoded Solana transaction that could be passed to the sendTransaction RPC method
          type: string
          example: AX9ymHgILTd01GtdBsbQZ9by5D4z4UWh+1Tsh6LDuPHuZk/Z8LrIwoKZRp3le2RTb5lywL1xcJGQ8u3M3U0tyAgBAAEDXCL+JarHftfP5QgsRxpEsr+/YiRWQeCz7PI3jfzeppEvUc61u+TNHri9ChQdLN2evWGx+1O3MwbPFKV5rIqlxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvOdVbvGn3R+uBkugNCq8C/Texc7ILBoYjbn4aVQV0OgBAgIAAQwCAAAAQEIPAAAAAAA=
        type:
          description: Discriminator field indicating this is a Solana raw transaction request
          type: string
          default: SOLANA_RAW_TRANSACTION
          enum:
            - SOLANA_RAW_TRANSACTION
      required:
        - type
        - transaction
      title: Solana Raw Transaction Request
    StablecoinConversion:
      type: object
      properties:
        amount:
          type: string
        destinationAssetType:
          description: |-
            A string representing the asset used for this operation. For issuance, this value must be the stablecoin asset. For redemptions, it must be USD.
            Use `/asset-types` to list all supported asset types for your organization.
          type: string
          example: USDX
        destinationWalletId:
          type: string
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        sourceAssetType:
          description: |-
            A string representing the asset used for this operation. For issuance, this value must be USD. For redemptions, it must be the asset being redeemed.
            Use `/asset-types` to list all supported asset types for your organization.
          type: string
          example: USD
        sourceWalletId:
          type: string
      required:
        - idempotencyKey
        - sourceWalletId
        - sourceAssetType
        - destinationWalletId
        - destinationAssetType
        - amount
    StablecoinConversionResponse:
      type: object
      properties:
        authorizationOperationId:
          type: string
      required:
        - authorizationOperationId
    IssueRedeemConversion:
      type: object
      properties:
        amount:
          description: Amount as a decimal string
          type: string
          example: '100.00'
        authorizationOperationId:
          description: Authorization operation ID (if present)
          type: string
          nullable: true
          x-omitempty: false
        createdAt:
          description: When the operation was created
          type: string
          format: date-time
        destinationAssetTypeId:
          description: Destination asset type
          type: string
          example: PYUSD
        destinationOperationId:
          description: 'Identifier of the destination-leg customer operation (if present). Pass to `GET /transactions/{transactionId}` for full details.'
          type: string
          nullable: true
          x-omitempty: false
        destinationWalletId:
          description: Destination wallet ID
          type: string
        id:
          description: Unique identifier for the issue/redeem operation
          type: string
        operationType:
          description: 'Type of operation (ISSUE, REDEEM, BRIDGE, or SWAP)'
          type: string
          example: ISSUE
        sourceAssetTypeId:
          description: Source asset type
          type: string
          example: USD
        sourceOperationId:
          description: 'Identifier of the source-leg customer operation (if present). Pass to `GET /transactions/{transactionId}` for full details.'
          type: string
          nullable: true
          x-omitempty: false
        sourceWalletId:
          description: Source wallet ID
          type: string
        status:
          description: |-
            Customer-facing conversion status.
            * `INITIATED` — conversion has started and is awaiting endorsements.
            * `EXECUTING` — endorsements approved; conversion is pending.
            * `COMPLETED` — conversion was fulfilled successfully.
            * `FAILED` — conversion failed (see `subStatus` when the customer can already observe the cause).
            * `UNKNOWN` — unrecognised internal state (forward-compatibility fallback).
          type: string
          example: EXECUTING
          enum:
            - INITIATED
            - EXECUTING
            - COMPLETED
            - FAILED
            - UNKNOWN
          x-enum-varnames:
            - IssueRedeemConversionStatusINITIATED
            - IssueRedeemConversionStatusEXECUTING
            - IssueRedeemConversionStatusCOMPLETED
            - IssueRedeemConversionStatusFAILED
            - IssueRedeemConversionStatusUNKNOWN
        subStatus:
          description: |-
            Optional sub-status that further qualifies the top-level `status`. Only set for outcomes
            the customer can independently observe; internal failure modes are not disclosed.
            * `REJECTED_BY_CUSTOMER` — the customer rejected the conversion before endorsement approval (paired with `status: FAILED`).
          type: string
          enum:
            - REJECTED_BY_CUSTOMER
          nullable: true
          x-enum-varnames:
            - IssueRedeemConversionSubStatusREJECTEDBYCUSTOMER
          x-omitempty: false
      required:
        - id
        - operationType
        - sourceWalletId
        - destinationWalletId
        - destinationAssetTypeId
        - sourceAssetTypeId
        - amount
        - status
        - createdAt
    IssueRedeemHistoryResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/IssueRedeemConversion'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    ReservesHistoryResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ReservesSnapshot'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    ReservesSnapshot:
      type: object
      properties:
        createdAt:
          description: RFC3339 row write time; pagination cursor field.
          type: string
          format: date-time
        inTransit:
          description: 'In-transit cash, as a decimal string. Already reflected in reserveComposition and totalReserves; broken out separately for visibility. Do not re-add to the total.'
          type: string
          example: '100.00'
        reportDate:
          description: Reconciliation date (YYYY-MM-DD).
          type: string
          format: date
        reserveComposition:
          $ref: '#/components/schemas/ReserveComposition'
        reserveRatio:
          description: 'totalReserves / totalStablecoinOnNetwork, as a decimal string.'
          type: string
          example: '1.00010'
        stablecoin:
          description: Token symbol.
          type: string
          example: USDX
        totalReserves:
          description: 'Total reserves, as a decimal string.'
          type: string
          example: '10000'
        totalStablecoinOnNetwork:
          description: 'Total supply on-network, as a decimal string.'
          type: string
          example: '9999'
      required:
        - reportDate
        - stablecoin
        - totalStablecoinOnNetwork
        - totalReserves
        - reserveRatio
        - reserveComposition
        - inTransit
        - createdAt
      title: Reserves Snapshot
    ReserveComposition:
      description: |-
        Reserve backing for the queried token, as a map of reserve-component key to balance.

        Each value is a decimal string. The set of keys is not fixed; it varies by token and may gain new keys over time, so iterate over whatever keys are present and ignore any you do not recognize. Existing keys are stable and will not be renamed or removed without a new API version.
      type: object
      example:
        cashDeposits: '5000.00'
        mmfXyz: '5000.00'
      additionalProperties:
        type: string
      title: Reserve Composition
    StablecoinReservesEntitledStablecoinsResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/EntitledStablecoins'
      required:
        - data
    EntitledStablecoins:
      type: object
      properties:
        stablecoins:
          description: Stablecoin token symbols your organization is entitled to query reserves history for.
          type: array
          items:
            type: string
      required:
        - stablecoins
    StakingPositionsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/StakingPosition'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    StakingPosition:
      description: High-level information about a staking position
      type: object
      properties:
        networkId:
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          type: string
        networkSpecific:
          description: Network-specific staking position details
          discriminator:
            propertyName: type
            mapping:
              ETHEREUM: '#/components/schemas/EthereumStakingPositionDetails'
              SOLANA: '#/components/schemas/SolanaStakingPositionDetails'
              HYPERCORE: '#/components/schemas/HyperCoreStakingPositionDetails'
              AVALANCHE_PCHAIN: '#/components/schemas/AvalanchePChainStakingPositionDetails'
          oneOf:
            - $ref: '#/components/schemas/EthereumStakingPositionDetails'
            - $ref: '#/components/schemas/SolanaStakingPositionDetails'
            - $ref: '#/components/schemas/HyperCoreStakingPositionDetails'
            - $ref: '#/components/schemas/AvalanchePChainStakingPositionDetails'
        positionId:
          description: Unique identifier for this staking position
          type: string
      required:
        - positionId
        - networkId
        - networkSpecific
    EthereumStakingPositionDetails:
      description: Ethereum-specific staking position information
      type: object
      properties:
        stakingProvider:
          description: The entity running the validator infrastructure
          type: string
          enum:
            - FIGMENT
            - BLOCKDAEMON
          nullable: true
        type:
          description: Discriminator field
          type: string
          default: ETHEREUM
          enum:
            - ETHEREUM
        validatorPublicKey:
          description: 'BLS12-381 public key of the validator (48 bytes, hex encoded)'
          type: string
          example: '0x93247f2209abcacf57b75a51dafae777f9dd38bc7053d1af526f220a7489a6d3a2753e5f3e8b1cfe39b56f43611df74a'
          nullable: true
      required:
        - type
      title: Ethereum Staking Position Details
    SolanaStakingPositionDetails:
      description: Solana-specific staking position information
      type: object
      properties:
        stakeAccountAddress:
          description: Address of the Solana stake account
          type: string
          example: 7NMw8RfMFLc6WZvyuJQbAF5yVhxFMkH9mKzPP2JVYKjL
        stakeAuthority:
          description: Address of the stake authority for the stake account
          type: string
          example: 8Y6tQ5yCjWm4LRa1kLzk5QyYa8sF3GMIeRkL4YrH8W9v
        stakingProvider:
          description: The entity running the validator infrastructure
          type: string
          example: Anchorage Digital
          nullable: true
        type:
          description: Discriminator field
          type: string
          default: SOLANA
          enum:
            - SOLANA
        validatorPublicKey:
          description: Public Key of the validator
          type: string
          example: E7RDqAkZrZ8agpxEWhy9Eeu2T3qwbmHLtaSwQZDz5y84
          nullable: true
        validatorVoteAccount:
          description: Vote address of the validator
          type: string
          example: CcaHc2L43ZWjwCHART3oZoJvHLAe9hzT2DJNUpBzoTN1
          nullable: true
        withdrawAuthority:
          description: Address of the withdraw authority for the stake account
          type: string
          example: 5Z7sP4xCiVj3KQzqkHzh4QxYZ7sE2FLHdQjK3XqG7V8u
      required:
        - type
        - stakeAccountAddress
        - withdrawAuthority
        - stakeAuthority
      title: Solana Staking Position Details
    HyperCoreStakingPositionDetails:
      description: 'HyperCore-specific staking position information. HyperCore delegates directly to validators (no third-party staking provider), so the validator address is the position identifier.'
      type: object
      properties:
        delegationUnlockAt:
          description: Timestamp (RFC 3339) until which this delegated position is locked — i.e. when it first becomes eligible to undelegate (HyperCore's ~1-day delegation lock). Present only for actively delegated positions; null for wallet-level UNBOND/UNBONDED positions or when the validator has not reported a lock.
          type: string
          format: date-time
          example: '2026-06-07T12:00:00Z'
          nullable: true
        type:
          description: Discriminator field
          type: string
          default: HYPERCORE
          enum:
            - HYPERCORE
        validatorAddress:
          description: 'Address of the validator this stake is delegated to. Empty for wallet-level positions in the unbonding (UNBOND) or unbonded (UNBONDED) states, which HyperCore does not associate with a specific validator.'
          type: string
          example: '0xa012b9d2a8b1f7b8f8b9b3a1f0c9d8e7f6a5b4c3'
          nullable: true
      required:
        - type
      title: HyperCore Staking Position Details
    AvalanchePChainStakingPositionDetails:
      description: Avalanche P-Chain-specific staking position information. P-Chain staking is time-locked with no early exit; funds are returned automatically at the end of the staking period.
      type: object
      properties:
        type:
          description: Discriminator field
          type: string
          default: AVALANCHE_PCHAIN
          enum:
            - AVALANCHE_PCHAIN
        validatorAddress:
          description: Node ID of the validator this stake is delegated to (e.g. NodeID-abc123). Null when the position cannot be correlated to a specific validator.
          type: string
          example: NodeID-CaBYJ9kzHvrQFiYCckne1QM8R9zMjgVzp
          nullable: true
      required:
        - type
      title: Avalanche P-Chain Staking Position Details
    TransferNetworkSpecific:
      description: Network-specific parameters for transfer transaction construction. Use the 'mainnetNetworkId' field to discriminate between different blockchain types.
      discriminator:
        propertyName: mainnetNetworkId
        mapping:
          BTC: '#/components/schemas/UTXONetworkSpecific'
          BCH: '#/components/schemas/UTXONetworkSpecific'
          LTC: '#/components/schemas/UTXONetworkSpecific'
          DOGE: '#/components/schemas/UTXONetworkSpecific'
          ETH: '#/components/schemas/ETHNetworkSpecific'
          AVALANCHE_CCHAIN: '#/components/schemas/ETHNetworkSpecific'
          BSC: '#/components/schemas/ETHNetworkSpecific'
          ARBITRUM: '#/components/schemas/ETHNetworkSpecific'
          BASE: '#/components/schemas/ETHNetworkSpecific'
          OPTIMISM: '#/components/schemas/ETHNetworkSpecific'
          ZKSYNC: '#/components/schemas/ETHNetworkSpecific'
          SEI_SEI: '#/components/schemas/ETHNetworkSpecific'
          HYPEREVM: '#/components/schemas/ETHNetworkSpecific'
          TRON: '#/components/schemas/TRXNetworkSpecific'
          SOL: '#/components/schemas/SOLNetworkSpecific'
          FOGO: '#/components/schemas/SOLNetworkSpecific'
          XLM: '#/components/schemas/XLMNetworkSpecific'
          XRP: '#/components/schemas/XRPNetworkSpecific'
          FLOW: '#/components/schemas/FLOWNetworkSpecific'
          APT: '#/components/schemas/APTNetworkSpecific'
          SUI: '#/components/schemas/SUINetworkSpecific'
          FIL: '#/components/schemas/FILNetworkSpecific'
          CARDANO: '#/components/schemas/ADANetworkSpecific'
          TIA: '#/components/schemas/TendermintNetworkSpecific'
          DYDX_CHAIN: '#/components/schemas/TendermintNetworkSpecific'
          HBAR: '#/components/schemas/HBARNetworkSpecific'
          NEAR: '#/components/schemas/NEARNetworkSpecific'
          POLKADOT: '#/components/schemas/DOTNetworkSpecific'
      oneOf:
        - $ref: '#/components/schemas/UTXONetworkSpecific'
        - $ref: '#/components/schemas/ETHNetworkSpecific'
        - $ref: '#/components/schemas/TRXNetworkSpecific'
        - $ref: '#/components/schemas/SOLNetworkSpecific'
        - $ref: '#/components/schemas/XLMNetworkSpecific'
        - $ref: '#/components/schemas/XRPNetworkSpecific'
        - $ref: '#/components/schemas/FLOWNetworkSpecific'
        - $ref: '#/components/schemas/APTNetworkSpecific'
        - $ref: '#/components/schemas/SUINetworkSpecific'
        - $ref: '#/components/schemas/FILNetworkSpecific'
        - $ref: '#/components/schemas/ADANetworkSpecific'
        - $ref: '#/components/schemas/TendermintNetworkSpecific'
        - $ref: '#/components/schemas/HBARNetworkSpecific'
        - $ref: '#/components/schemas/NEARNetworkSpecific'
        - $ref: '#/components/schemas/DOTNetworkSpecific'
      title: Transfer Network Specific
    ConstructWalletOperationResponse:
      description: 'Async response with wallet operation ID. Use the walletOperationId with the GET /wallet-operations/{walletOperationId} endpoint to poll for the operation status and retrieve the constructed transaction details.'
      type: object
      properties:
        walletOperationId:
          description: 'Wallet operation identifier. Poll the GET /wallet-operations/{walletOperationId} endpoint to check the status and retrieve the transaction data once construction is complete.'
          type: string
          example: op_550e8400-e29b-41d4-a716-446655440000
      required:
        - walletOperationId
    BlockchainDestination:
      description: Transfer destination specified as a blockchain address with optional memo
      type: object
      properties:
        address:
          description: A unique string identifying an account on a blockchain. This is sometimes dervied from a public key and sometimes decided by the blockchain.
          type: string
          example: '0x8b3192f5eEBD8579568A2Ed41E6FEB402f93f73F'
        memo:
          description: Optional memo/tag/destination tag (required by some blockchain networks)
          type: string
          maxLength: 256
          nullable: true
        type:
          description: Discriminator field indicating this is a blockchain destination
          type: string
          default: BLOCKCHAIN
          enum:
            - BLOCKCHAIN
      additionalProperties: false
      required:
        - type
        - address
      title: Blockchain Destination
    WalletAddressSignatureVersion:
      description: |-
        Version of the address signature scheme used.

        * `V1` - The original scheme. Verify the `signature` against your organization's fixed Ed25519 public key (provided by Anchorage Digital out-of-band).
        * `V2` - The newer scheme. Verify the `signature` against the leaf certificate's public key from the `certChain` field, and verify the certificate chain against the Anchorage Digital Address Signing Root CA.
      type: string
      enum:
        - V1
        - V2
    WalletAddress:
      description: |-
        A blockchain address in a wallet. Each address includes a cryptographic signature that proves the address was generated by Anchorage Digital for your organization.

        ## Signature Verification

        The signature allows you to verify that an address string is authentic before using it for sensitive operations (like withdrawals to that address).

        Check the `signatureVersion` field to determine which verification scheme applies. For complete verification steps, sample code, and Root CA values, see the Address verification guide docs.

        ### V1 Address Signatures

        The steps for verifying V1 address signatures are as follows:
        1. Check the validity of the signature
           - Decode the `signedJson` field from hex to bytes
           - Decode the `signature` field from hex to bytes
           - Using your organization's verification public key (provided by Anchorage Digital), verify that the signature bytes are a valid Ed25519 signature of the signedJson bytes
        2. Verify the address that was signed matches the one that will be used
           - Decode the `signedJson` field from hex to bytes
           - Parse the bytes as a JSON object (e.g., `{"TextAddress":"0x123..."}`)
           - Verify the address to be used matches the value of the `TextAddress` property from the JSON object

        **Important**: It is not sufficient to validate the signature without also validating that the address signed matches the address to be used.

        **Note**: The JSON object may contain additional properties in future versions. API clients must not use strict JSON parsers which disallow extra, unknown properties.

        **Verification Public Key**: Contact your Anchorage Digital representative to obtain the verification public key for your organization. This key is unique per organization and fixed for the lifetime of that organization.

        ### V2 Address Signatures

        Addresses with `signatureVersion` set to `V2` also include a `certChain` field containing an X.509 certificate chain in PEM format.

        The steps for verifying V2 address signatures are as follows:
        1. Verify the certificate chain:
           - Parse the `certChain` field as PEM-encoded X.509 certificates (leaf at index 0, then intermediates)
           - Verify the chain up to the hard-coded Anchorage Digital Address Signing Root CA (see Address verification guide docs)
           - Verify all certificates are valid at the current time (both notAfter and notBefore)
           - Verify the leaf certificate's Subject Alternative Names include `address-provider.anchorage.internal`
           - Verify the leaf certificate's KeyUsage includes both `digitalSignature` and `nonRepudiation` (also known as `contentCommitment`)
           - Extract the public key from the leaf certificate
        2. Verify the signature:
           - Decode the `signedJson` field from hex to bytes
           - Decode the `signature` field from hex to bytes
           - Using the public key from the leaf certificate, verify that `signature` is a valid signature of the `signedJson` bytes
        3. Verify the signed details:
           - Parse the `signedJson` bytes as JSON
           - Verify `SignatureExpiresAt` is greater than or equal to the current UTC Unix timestamp
           - Verify `TextAddress` matches the address to be used
           - Verify `VaultId` matches your expected Vault ID
           - Verify `NetworkId` matches the expected network for this address

        **Note**: API clients must not use strict JSON parsers which disallow unknown properties, as future versions may add new fields to the signed payload.

        **Note**: Anchorage Digital periodically refreshes V2 signatures and the certificate chain before expiration. The address itself does not change.
      type: object
      properties:
        address:
          description: A unique string identifying an account on a blockchain. This is sometimes dervied from a public key and sometimes decided by the blockchain.
          type: string
        certChain:
          description: 'PEM-encoded X.509 certificate chain used for V2 signature verification. The leaf certificate is at index 0, followed by zero or more intermediate certificates. The root CA is excluded and must be hard-coded by clients. Only present when `signatureVersion` is `V2`.'
          type: string
        networkId:
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          type: string
        publicKey:
          description: 'The public key that the blockchain address is derived from. Note: This is NOT the key used to verify the signature field - that requires a separate organization-wide verification public key provided by Anchorage Digital.'
          type: string
        signature:
          description: 'Hex-encoded Ed25519 signature of the `signedJson` bytes. For V1 signatures, verify against your organization''s fixed public key. For V2 signatures, verify against the leaf certificate''s public key from the `certChain` field.'
          type: string
          example: 1642000aa9cca8e8610981aefbdb204b361c9dca3fa067b88fdacfba7a0f620d721378a33f4bbadad3923e633a4d712646d1e8e314e9fcb4aa4102c0581f6503
        signatureVersion:
          description: Version of the address signature scheme used. Check this field to determine how to verify the `signature` field.
          allOf:
            - $ref: '#/components/schemas/WalletAddressSignatureVersion'
        signedJson:
          description: 'Hex-encoded bytes that were signed to produce the `signature`. Decode from hex to get the signed content. For V1 signatures, the content is a JSON object with a `TextAddress` field. For V2 signatures, the content is a JSON object with `TextAddress`, `VaultId`, `NetworkId`, `NetworkName`, and `SignatureExpiresAt` fields.'
          type: string
          example: 7b225465787441646472657373223a22307831323334227d
        walletId:
          description: The wallet ID containing this address.
          type: string
      required:
        - address
        - networkId
        - publicKey
        - signedJson
        - signature
        - walletId
        - signatureVersion
    CreateAddressesBatchRequest:
      description: Request to create multiple addresses in a batch within a single wallet
      type: object
      properties:
        count:
          description: Number of addresses to create
          type: integer
          minimum: 1
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        walletId:
          description: The wallet ID in which to create addresses
          type: string
      additionalProperties: false
      required:
        - walletId
        - count
    CreateBatchResponse:
      description: Response from creating a batch operation
      type: object
      properties:
        batchId:
          description: The unique identifier for the batch operation. Poll the corresponding batch status endpoint to retrieve results.
          type: string
          example: batch_abc123xyz
      required:
        - batchId
    BatchStatusResponse:
      description: Status of a batch operation
      type: object
      properties:
        batchId:
          description: The unique identifier for the batch operation
          type: string
        status:
          description: Overall status of the batch operation
          type: string
          enum:
            - PENDING
            - COMPLETED
            - FAILED
      required:
        - batchId
        - status
    ValidateDestinationAddressRequest:
      description: Request to validate an address as a transfer destination
      type: object
      properties:
        address:
          description: A unique string identifying an account on a blockchain. This is sometimes dervied from a public key and sometimes decided by the blockchain.
          type: string
        memo:
          description: Optional memo/tag/destination tag (required by some blockchain networks)
          type: string
          maxLength: 256
          nullable: true
        networkId:
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          type: string
      required:
        - address
        - networkId
    ListWalletsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Wallet'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    Wallet:
      description: A wallet containing blockchain addresses
      type: object
      properties:
        latestAddress:
          description: 'The most recently created address in this wallet, including signature for verification'
          allOf:
            - $ref: '#/components/schemas/WalletAddress'
        name:
          description: Human-readable name for the wallet
          type: string
        networkId:
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          type: string
        vaultId:
          description: The vault ID containing this wallet
          type: string
        walletId:
          description: The unique identifier for the wallet
          type: string
      required:
        - walletId
        - vaultId
        - networkId
        - name
        - latestAddress
    WalletBalancesResponse:
      description: Response containing wallet balance details
      type: object
      properties:
        balances:
          description: Array of balance entries for this wallet
          type: array
          items:
            $ref: '#/components/schemas/WalletBalanceEntry'
      required:
        - balances
    WalletBalanceEntry:
      description: A single balance entry with type and amount
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/Amount'
        balanceType:
          $ref: '#/components/schemas/WalletBalanceType'
      required:
        - balanceType
        - amount
    WalletBalanceType:
      description: |-
        The type of balance. Includes both wallet-level balances and aggregated staking position balances.

        * `AVAILABLE` - Balance available for withdrawal
        * `TOTAL` - Total balance including all states
        * `HELD` - Sum of all holds that apply to the primary address of the wallet, such as pending withdrawals and settlements. This balance is held and not available for withdrawal.
        * `ACTIVE_STAKE` - Sum of all active stake across staking positions
        * `INACTIVE_STAKE` - Sum of all inactive stake across staking positions
        * `ACTIVATING_STAKE` - Sum of all activating stake across staking positions
        * `DEACTIVATING_STAKE` - Sum of all deactivating stake across staking positions
      type: string
      enum:
        - AVAILABLE
        - TOTAL
        - HELD
        - ACTIVE_STAKE
        - INACTIVE_STAKE
        - ACTIVATING_STAKE
        - DEACTIVATING_STAKE
    StakingPositionBalancesResponse:
      description: Response containing staking position balance details
      type: object
      properties:
        balances:
          description: Array of balance entries for this staking position
          type: array
          items:
            $ref: '#/components/schemas/StakingPositionBalanceEntry'
      required:
        - balances
    StakingPositionBalanceEntry:
      description: A single balance entry for a staking position
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/Amount'
        balanceType:
          $ref: '#/components/schemas/StakingPositionBalanceType'
      required:
        - balanceType
        - amount
    StakingPositionBalanceType:
      description: |-
        The type of balance for a staking position.

        * `ACTIVE_STAKE` - Currently active stake
        * `INACTIVE_STAKE` - Inactive stake
        * `ACTIVATING_STAKE` - Stake that is in the process of activating
        * `DEACTIVATING_STAKE` - Stake that is in the process of deactivating
      type: string
      enum:
        - ACTIVE_STAKE
        - INACTIVE_STAKE
        - ACTIVATING_STAKE
        - DEACTIVATING_STAKE
    WalletDestination:
      description: Transfer destination specified by Anchorage wallet identifier
      type: object
      properties:
        type:
          description: Discriminator field indicating this is a wallet destination
          type: string
          default: WALLET
          enum:
            - WALLET
        walletId:
          description: Globally unique wallet identifier
          type: string
      additionalProperties: false
      required:
        - type
        - walletId
      title: Wallet Destination
    CryptoDestination:
      description: Identifies the target of a transfer. Use the 'type' field to discriminate between variants.
      discriminator:
        propertyName: type
        mapping:
          BLOCKCHAIN: '#/components/schemas/BlockchainDestination'
          WALLET: '#/components/schemas/WalletDestination'
      oneOf:
        - $ref: '#/components/schemas/BlockchainDestination'
        - $ref: '#/components/schemas/WalletDestination'
    Amount:
      description: Combines an asset identifier with a decimal string value
      type: object
      properties:
        amount:
          description: Amount as a decimal string. Amounts never include fees.
          type: string
          example: '10.45234733'
        assetType:
          description: 'A unique string identifying a specific asset on a specific blockchain and environment (testnet, mainnet).'
          type: string
          example: ETH
      required:
        - assetType
        - amount
    CryptoDestinationAmount:
      description: Specifies a destination and the amount to send to it
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/Amount'
        clientReferenceId:
          description: Client-provided reference ID to track this transaction in their internal systems
          type: string
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          nullable: true
        destination:
          $ref: '#/components/schemas/CryptoDestination'
      additionalProperties: false
      required:
        - destination
        - amount
    UTXO:
      description: An unspent transaction output that can be used as an input for a new transaction
      type: object
      properties:
        address:
          description: Identifies the key to use to sign the UTXO
          type: string
        amount:
          description: Amount in the native currency
          type: string
        txId:
          description: Hex encoded transaction ID
          type: string
        vout:
          description: Index of the output
          type: integer
      additionalProperties: false
      required:
        - txId
        - vout
        - amount
        - address
      title: Unspent Transaction Output
    UTXONetworkSpecific:
      description: 'UTXO-based blockchain network parameters for transaction construction (BTC, BCH, LTC, DOGE)'
      type: object
      properties:
        changeAddress:
          description: 'Address to send change to. If specified, any remainder after subtracting outputs and fee from UTXO inputs will be sent as change to this address.'
          type: string
          nullable: true
        changeAddressClientReferenceId:
          description: Client-provided reference ID to track the change output in their internal systems
          type: string
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
          nullable: true
        fee:
          description: Transaction fee in the native currency
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          enum:
            - BTC
            - BCH
            - LTC
            - DOGE
        utxos:
          description: 'Note: the fee is computed by subtracting the destination amounts from the UTXO amounts'
          type: array
          items:
            $ref: '#/components/schemas/UTXO'
      additionalProperties: false
      required:
        - mainnetNetworkId
        - utxos
        - fee
      title: UTXO Network Specific
    ETHNetworkSpecific:
      description: EVM-compatible network parameters for transaction construction. Supports Ethereum and other EVM-compatible chains including L2s.
      type: object
      properties:
        gasLimit:
          description: Maximum gas to use
          type: integer
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          enum:
            - ETH
            - AVALANCHE_CCHAIN
            - BSC
            - ARBITRUM
            - BASE
            - OPTIMISM
            - ZKSYNC
            - SEI_SEI
            - HYPEREVM
        maxFeePerGas:
          description: Maximum fee per gas in the native currency
          type: string
        maxPriorityFeePerGas:
          description: Maximum priority fee per gas in the native currency
          type: string
        nonce:
          description: Transaction nonce
          type: string
      additionalProperties: false
      required:
        - mainnetNetworkId
        - nonce
        - gasLimit
        - maxPriorityFeePerGas
        - maxFeePerGas
      title: EVM Network Specific
    TRXNetworkSpecific:
      description: Tron-specific network parameters for transaction construction. Tron uses block references and timestamps instead of nonces and gas fees.
      type: object
      properties:
        expiration:
          description: Transaction expiration timestamp in milliseconds since Unix epoch. Must be within 24 hours of the timestamp.
          type: integer
          format: int64
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: TRON
          enum:
            - TRON
        refBlockBytes:
          description: 'Reference block bytes (2 bytes, hex encoded) derived from the latest solidified block height. Extract bytes 6-8 of the block height.'
          type: string
        refBlockHash:
          description: 'Reference block hash (8 bytes, hex encoded) derived from the latest solidified block hash. Extract bytes 8-16 of the block hash.'
          type: string
        timestamp:
          description: Transaction creation timestamp in milliseconds since Unix epoch.
          type: integer
          format: int64
      additionalProperties: false
      required:
        - mainnetNetworkId
        - refBlockBytes
        - refBlockHash
        - expiration
        - timestamp
      title: Tron Network Specific
    SOLNonceReplayProtection:
      description: Solana nonce-based replay protection for durable transactions
      type: object
      properties:
        nonceAccount:
          description: Nonce account address
          type: string
        nonceValue:
          description: Current nonce value
          type: string
        replayProtection:
          type: string
          default: NONCE
          enum:
            - NONCE
      additionalProperties: false
      required:
        - replayProtection
        - nonceAccount
        - nonceValue
      title: Nonce-based Replay Protection
    SOLBlockhashReplayProtection:
      description: Solana blockhash-based replay protection for standard transactions
      type: object
      properties:
        recentBlockhash:
          description: Recent blockhash from the Solana network. Transaction must be submitted within approximately 2 minutes.
          type: string
        replayProtection:
          type: string
          default: BLOCKHASH
          enum:
            - BLOCKHASH
      additionalProperties: false
      required:
        - replayProtection
        - recentBlockhash
      title: Blockhash-based Replay Protection
    SOLReplayProtectionParams:
      description: Replay protection parameters for Solana transactions. Use 'replayProtection' field to discriminate between nonce-based and blockhash-based replay protection.
      discriminator:
        propertyName: replayProtection
        mapping:
          NONCE: '#/components/schemas/SOLNonceReplayProtection'
          BLOCKHASH: '#/components/schemas/SOLBlockhashReplayProtection'
      oneOf:
        - $ref: '#/components/schemas/SOLNonceReplayProtection'
        - $ref: '#/components/schemas/SOLBlockhashReplayProtection'
    SOLAccountMeta:
      description: Account metadata for Solana transfer hooks. Required for Token-2022 tokens with transfer hooks.
      type: object
      properties:
        isSigner:
          description: Whether this account must sign the transaction
          type: boolean
        isWritable:
          description: Whether this account's data may be modified
          type: boolean
        pubkey:
          description: Public key address of the additional account
          type: string
      required:
        - pubkey
        - isSigner
        - isWritable
      title: Solana Account Metadata
    SOLNetworkSpecific:
      description: Solana-specific network parameters for transaction construction
      type: object
      properties:
        additionalAccountMetas:
          description: Additional account metadata required for Token-2022 tokens with transfer hook extensions. These accounts are passed to the transfer hook program during token transfers. Only applicable when transferring SPL tokens that have transfer hooks configured.
          type: array
          items:
            $ref: '#/components/schemas/SOLAccountMeta'
          nullable: true
        computeUnitLimit:
          description: 'Maximum compute units the transaction can consume. If not specified, the runtime will compute a default value.'
          type: integer
          nullable: true
        computeUnitPrice:
          description: Price per compute unit in SOL. Used to prioritize transactions.
          type: string
          nullable: true
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          enum:
            - SOL
            - FOGO
        replayProtectionParams:
          $ref: '#/components/schemas/SOLReplayProtectionParams'
        sender:
          description: 'Address of the account that owns and sends the assets. Use this when the sender is different from the nonce authority account. If not specified, the nonce authority (derived from the source wallet) is used as both the signer for the nonce advance instruction and the sender of assets.'
          type: string
          nullable: true
      additionalProperties: false
      required:
        - mainnetNetworkId
        - replayProtectionParams
      title: Solana Network Specific
    WalletDetailsResponse:
      description: Detailed information about a wallet
      type: object
      properties:
        wallet:
          $ref: '#/components/schemas/Wallet'
      required:
        - wallet
    AddressGenerationType:
      description: |-
        Address format type for Bitcoin-like blockchains.

        * `DEFAULT` - Network's default format (P2SH-P2WPKH for most networks)
        * `BITCOINLIKE_P2PKH` - Legacy Pay-to-Public-Key-Hash addresses (starts with '1' for Bitcoin)
        * `BITCOINLIKE_P2SH_P2WPKH` - Wrapped SegWit addresses (starts with '3' for Bitcoin)
        * `BITCOINLIKE_P2TR` - Taproot addresses (starts with 'bc1p' for Bitcoin)
      type: string
      default: DEFAULT
      enum:
        - DEFAULT
        - BITCOINLIKE_P2PKH
        - BITCOINLIKE_P2SH_P2WPKH
        - BITCOINLIKE_P2TR
    BatchCreateWalletsRequest:
      description: Create wallet sets with fresh keys across multiple networks. A wallet exists on exactly one network.
      type: object
      properties:
        addressGenerationType:
          description: 'Address format type for the created wallets. Only applicable to Bitcoin-like networks (BTC, BCH, LTC, DOGE). Defaults to the network''s default address format if not specified.'
          allOf:
            - $ref: '#/components/schemas/AddressGenerationType'
        count:
          description: Number of wallet sets to create (not total wallets). Total wallets created = count × number of networkIds.
          type: integer
          minimum: 1
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        networkIds:
          description: 'Array of network IDs. Creates `count` wallet sets, where each set contains one wallet per network, all sharing the same cryptographic keys. Total wallets created = count × number of networks.'
          type: array
          items:
            type: string
          minItems: 1
        vaultId:
          description: The vault ID in which to create wallets
          type: string
        walletNamePrefix:
          description: Wallet name identifier. The wallet name prefix is directly used as wallet name if count = 1. If count is >1 then the wallet name prefix is appended with the batch_id and a index from 1 to count.
          type: string
      additionalProperties: false
      required:
        - vaultId
        - networkIds
        - count
      title: Batch Create Wallets Request
    BatchActivateWalletsFromListRequest:
      description: Activate specific wallets for new target networks. Creates new wallets (one per source × target combination) that share keys with the source wallets.
      type: object
      properties:
        addressGenerationType:
          description: Address format type for the activated wallets. Only applicable to Bitcoin-like networks. Defaults to the target network's default address format if not specified.
          allOf:
            - $ref: '#/components/schemas/AddressGenerationType'
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        sourceWalletIds:
          description: Array of existing wallet IDs to activate for the target networks. Each wallet's source network is implied by the wallet itself.
          type: array
          items:
            type: string
          minItems: 1
        targetNetworkIds:
          description: 'Array of target network IDs. For each source wallet, creates new wallets on all target networks sharing the source''s keys. Total wallets created = number of sourceWalletIds × number of targetNetworkIds.'
          type: array
          items:
            type: string
          minItems: 1
      additionalProperties: false
      required:
        - sourceWalletIds
        - targetNetworkIds
      title: Batch Activate Wallets From List Request
    BatchActivateWalletsFromVaultRequest:
      description: 'Activate all wallets in a vault/network for new target networks. For each wallet in the vault on the source network, creates new wallets on the target networks sharing the same keys.'
      type: object
      properties:
        addressGenerationType:
          description: Address format type for the activated wallets. Only applicable to Bitcoin-like networks. Defaults to the target network's default address format if not specified.
          allOf:
            - $ref: '#/components/schemas/AddressGenerationType'
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        sourceNetworkId:
          description: The source network ID. All wallets in the vault on this network will be activated for the target networks.
          type: string
        sourceVaultId:
          description: The vault ID containing the source wallets
          type: string
        targetNetworkIds:
          description: 'Array of target network IDs. For each source wallet in the vault, creates new wallets on all target networks sharing the source''s keys. Total wallets created = (number of wallets in vault on sourceNetworkId) × number of targetNetworkIds.'
          type: array
          items:
            type: string
          minItems: 1
      additionalProperties: false
      required:
        - sourceVaultId
        - sourceNetworkId
        - targetNetworkIds
      title: Batch Activate Wallets From Vault Request
    CreateWalletsBatchRequest:
      description: |-
        Request to create or activate multiple wallets in a batch operation. A wallet exists on exactly one network.

        Supports three mutually exclusive patterns:
        1. **Batch Create**: Create wallet sets across networks. Each set contains one wallet per network, all sharing keys.
        2. **Batch Activate (List)**: Activate specific wallets for new networks. Creates new wallets sharing keys with the specified sources.
        3. **Batch Activate (Vault)**: Activate all wallets in a vault/network for new networks. Creates new wallets sharing keys with each source.
      oneOf:
        - $ref: '#/components/schemas/BatchCreateWalletsRequest'
        - $ref: '#/components/schemas/BatchActivateWalletsFromListRequest'
        - $ref: '#/components/schemas/BatchActivateWalletsFromVaultRequest'
    WalletOperationResponse:
      type: object
      properties:
        walletOperation:
          $ref: '#/components/schemas/WalletOperation'
      required:
        - walletOperation
    WalletOperation:
      description: |-
        A wallet operation represents a transaction that your organization signed and broadcast on-chain.

        The operation progresses through multiple states from construction to signing to broadcast.
        Use the status field to determine the current state. To see the on-chain confirmation status,
        query the blockchain-events endpoint using the walletOperationId filter.
      type: object
      properties:
        createdAt:
          description: The timestamp when the wallet operation was created
          type: string
          format: date-time
          example: '2024-01-15T10:30:00Z'
        expectedTransactionHash:
          description: The predicted blockchain transaction hash before broadcast. This field is optional as some blockchains don't allow predicting the hash until after broadcast. May differ from the actual on-chain transaction hash.
          type: string
          example: '0xabcd1234567890abcdef1234567890abcdef1234567890abcdef1234567890ab'
          nullable: true
        failureReason:
          description: The reason for failure when status is FAILED. Null for non-failed operations.
          type: string
          nullable: true
        networkId:
          description: 'A unique string identifying a combination of blockchain and environment (testnet, mainnet).'
          type: string
          example: ETH
        signedTransaction:
          description: 'The signed transaction data, encoded as a hex string. This field is null until the transaction has been signed.'
          type: string
          nullable: true
        status:
          description: 'The current status of the wallet operation. PENDING: operation is being processed (signing, awaiting approvals). COMPLETED: operation has been signed and broadcast to the blockchain. FAILED: operation failed during signing or broadcast. Note: COMPLETED indicates the transaction was broadcast, not that it was confirmed on-chain. Query blockchain-events to see on-chain confirmation status.'
          type: string
          enum:
            - PENDING
            - COMPLETED
            - FAILED
        walletOperationId:
          description: The unique identifier for the wallet operation
          type: string
          example: op_550e8400-e29b-41d4-a716-446655440000
      required:
        - walletOperationId
        - networkId
        - status
        - createdAt
    ListWalletOperationsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/WalletOperation'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    WalletRewardsResponse:
      description: Response containing daily rewards over a date range for a specific reward type
      type: object
      properties:
        rewards:
          description: 'Array of daily reward entries, one per day in the requested range'
          type: array
          items:
            $ref: '#/components/schemas/DailyRewardEntry'
      required:
        - rewards
    DailyRewardEntry:
      description: Reward amount for a single day
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/Amount'
        date:
          description: The date for this reward entry in `YYYY-MM-DD` format (UTC)
          type: string
          format: date
          example: '2024-01-15'
        rewardType:
          description: The type of reward. Will be one of the reward types you specified in the rewardTypes query parameter.
          type: string
          example: CONSENSUS_LAYER_REWARDS
      required:
        - date
        - amount
    RewardEntry:
      description: 'A single reward entry with type, date, amount, and optional transaction and staking position references'
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/Amount'
        date:
          description: The date for this reward entry in `YYYY-MM-DD` format (UTC)
          type: string
          format: date
          example: '2024-01-15'
        rewardType:
          description: The type of reward. Will be one of the reward types you specified in the rewardTypes query parameter.
          type: string
          example: CONSENSUS_LAYER_REWARDS
        stakingPositionId:
          description: 'The unique identifier of the staking position that earned this reward, if applicable. May be null for rewards not associated with a specific staking position.'
          type: string
          example: pos_550e8400-e29b-41d4-a716-446655440000
          nullable: true
        transactionHash:
          description: 'The blockchain transaction hash associated with this reward, if available. May be null for rewards that don''t correspond to a specific on-chain transaction or for aggregated rewards spanning multiple transactions.'
          type: string
          example: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
          nullable: true
      required:
        - date
        - rewardType
        - amount
    WalletRewardsListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RewardEntry'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    WireCreateRequest:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        clientRefId:
          description: 'A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.'
          type: string
        originatingAccountId:
          description: Unique identifier of the originating account
          type: string
        receivingAccount:
          $ref: '#/components/schemas/WireReceivingAccount'
      required:
        - originatingAccountId
        - receivingAccount
        - amount
        - clientRefId
    WireCreateResponse:
      type: object
      properties:
        id:
          description: Unique identifier for the wire transfer
          type: string
      required:
        - id
    PaymentReturnInfo:
      type: object
      properties:
        code:
          description: 'Return code indicating the reason for the return (e.g., ''R01'', ''C01'')'
          type: string
        reason:
          description: Human-readable description of the return reason
          type: string
      required:
        - code
        - reason
    WireResponse:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        clientRefId:
          description: 'A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.'
          type: string
        createdAt:
          description: Timestamp when the wire transfer was created
          type: string
          format: date-time
        id:
          description: Unique identifier for the wire transfer
          type: string
        imad:
          description: Fedwire Input Message Accountability Data (IMAD) reference (when available)
          type: string
        omad:
          description: Fedwire Output Message Accountability Data (OMAD) reference (when available)
          type: string
        originatingAccountId:
          description: Unique identifier of the originating account
          type: string
        receivingAccount:
          $ref: '#/components/schemas/WireReceivingAccount'
        returnInfo:
          description: Return information if the wire was returned by the receiving bank
          type: object
          allOf:
            - $ref: '#/components/schemas/PaymentReturnInfo'
          nullable: true
        status:
          $ref: '#/components/schemas/PaymentStatus'
        swiftMir:
          description: SWIFT Message Identifier Reference (MIR) - unique identifier for SWIFT messages (when available)
          type: string
        swiftUetr:
          description: SWIFT Unique End-to-End Transaction Reference (UETR) - tracks payment lifecycle (when available)
          type: string
      required:
        - id
        - originatingAccountId
        - receivingAccount
        - amount
        - clientRefId
        - status
        - createdAt
    ACHCreateRequest:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        clientRefId:
          description: 'A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.'
          type: string
        originatingAccountId:
          description: Unique identifier of the originating account
          type: string
        receivingAccount:
          $ref: '#/components/schemas/ACHReceivingAccount'
        subtype:
          $ref: '#/components/schemas/ACHSubtype'
        type:
          $ref: '#/components/schemas/ACHType'
      required:
        - originatingAccountId
        - receivingAccount
        - amount
        - type
        - subtype
        - clientRefId
    ACHType:
      description: 'Type of ACH transaction - CREDIT for funds moving into an account, DEBIT for funds moving out of an account.'
      type: string
      enum:
        - CREDIT
        - DEBIT
    ACHSubtype:
      description: SEC (Standard Entry Class) code for ACH transactions.
      type: string
      enum:
        - WEB
        - CCD
    PaymentStatus:
      description: |-
        Status of a payment (wire, ACH, or book transfer). Payments flow through the following lifecycle:

        * `APPROVED` - The payment order has been approved and will be sent to the bank
        * `PROCESSING` - Brief transition state while the payment is prepared for bank submission
        * `SENT` - The payment order has been sent to the bank (may remain for a few days depending on payment type)
        * `COMPLETED` - The bank has accepted and executed the payment; funds posted to recipient's ledger
        * `RETURNED` - The payment was returned by the receiving bank (see associated Return object)
        * `FAILED` - Bank error or invalid parameters caused the payment to fail
        * `CANCELLED` - Terminal state - the payment order was cancelled
        * `OTHER` - Unexpected status received from the banking provider
      type: string
      enum:
        - APPROVED
        - PROCESSING
        - SENT
        - COMPLETED
        - RETURNED
        - FAILED
        - CANCELLED
        - OTHER
    VirtualAccountStatus:
      description: |-
        Status of a virtual account (internal account). Virtual accounts can be in the following states:

        * `ACTIVE` - Account is open and operational for payments
        * `CLOSED` - Account has been successfully closed
        * `PENDING_CLOSURE` - Account closure has been requested and is being processed
        * `OTHER` - Unexpected status received from the banking provider
      type: string
      enum:
        - ACTIVE
        - CLOSED
        - PENDING_CLOSURE
        - OTHER
    ACHCreateResponse:
      type: object
      properties:
        id:
          description: Unique identifier for the ACH transfer
          type: string
      required:
        - id
    ACHResponse:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        clientRefId:
          description: 'A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.'
          type: string
        createdAt:
          description: Timestamp when the ACH transfer was created
          type: string
          format: date-time
        id:
          description: Unique identifier for the ACH transfer
          type: string
        originatingAccountId:
          description: Unique identifier of the originating account
          type: string
        receivingAccount:
          $ref: '#/components/schemas/ACHReceivingAccount'
        returnInfo:
          description: Return information if the ACH payment was returned
          type: object
          allOf:
            - $ref: '#/components/schemas/PaymentReturnInfo'
          nullable: true
        status:
          $ref: '#/components/schemas/PaymentStatus'
        subtype:
          $ref: '#/components/schemas/ACHSubtype'
        type:
          $ref: '#/components/schemas/ACHType'
      required:
        - id
        - originatingAccountId
        - receivingAccount
        - amount
        - type
        - subtype
        - clientRefId
        - status
        - createdAt
    BookCreateRequest:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        clientRefId:
          description: 'A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.'
          type: string
        originatingAccountId:
          description: Unique identifier of the originating internal account
          type: string
        receivingAccountId:
          description: Unique identifier of the receiving internal account
          type: string
      required:
        - originatingAccountId
        - receivingAccountId
        - amount
        - clientRefId
    BookCreateResponse:
      type: object
      properties:
        id:
          description: Unique identifier for the book transfer
          type: string
      required:
        - id
    TransactionCreateRequest:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        asOfDate:
          description: 'Date the transaction settled, in YYYY-MM-DD format'
          type: string
          format: date
        direction:
          description: Direction of the transaction. Use 'credit' for incoming (deposit) and 'debit' for outgoing.
          type: string
          enum:
            - credit
            - debit
        internalAccountId:
          description: Unique identifier of the internal account to credit
          type: string
        posted:
          description: Whether the transaction has posted
          type: boolean
        type:
          description: Type of incoming transaction
          type: string
          enum:
            - ACH
            - WIRE
        vendorCode:
          description: Bank-specific code for the transaction
          type: string
        vendorCodeType:
          description: The type of vendor_code being reported. Required if type is not provided.
          type: string
        vendorDescription:
          description: Optional description for the transaction
          type: string
      required:
        - internalAccountId
        - amount
        - direction
        - asOfDate
        - posted
    TransactionCreateResponse:
      type: object
      properties:
        id:
          description: Unique identifier for the transaction
          type: string
      required:
        - id
    BookResponse:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        clientRefId:
          description: 'A user-defined unique identifier (up to 180 characters) for idempotency and client-side tracking. Submitting the same clientRefId multiple times will not create duplicate resources. Use a unique value (e.g., UUID) for each distinct request.'
          type: string
        createdAt:
          description: Timestamp when the book transfer was created
          type: string
          format: date-time
        id:
          description: Unique identifier for the book transfer
          type: string
        originatingAccountId:
          description: Unique identifier of the originating internal account
          type: string
        receivingAccountId:
          description: Unique identifier of the receiving internal account
          type: string
        returnInfo:
          description: Return information if the book transfer was returned
          type: object
          allOf:
            - $ref: '#/components/schemas/PaymentReturnInfo'
          nullable: true
        status:
          $ref: '#/components/schemas/PaymentStatus'
      required:
        - id
        - originatingAccountId
        - receivingAccountId
        - amount
        - clientRefId
        - status
        - createdAt
    PaymentAmount:
      type: object
      properties:
        amount:
          description: Payment amount in cents
          type: integer
          example: 10000
        currency:
          description: 'Currency code (e.g., USD)'
          type: string
          example: USD
      required:
        - currency
        - amount
    WireReceivingAccount:
      type: object
      properties:
        accountDetails:
          $ref: '#/components/schemas/AccountDetails'
        partyAddress:
          description: Address of the account holder or beneficiary
          type: object
          properties:
            country:
              description: 'Country code (e.g., US)'
              type: string
            line1:
              description: Street address line 1
              type: string
            line2:
              description: Street address line 2 (optional)
              type: string
              nullable: true
            locality:
              description: City or locality
              type: string
            postalCode:
              description: Postal code or ZIP code
              type: string
            region:
              description: State or region
              type: string
          required:
            - line1
            - locality
            - region
            - postalCode
            - country
        partyName:
          description: Name of the account holder or beneficiary
          type: string
        routingDetails:
          $ref: '#/components/schemas/WireRoutingDetails'
      required:
        - partyName
        - partyAddress
        - routingDetails
        - accountDetails
      title: Wire Instructions
    PartyAddress:
      description: Physical address of a party
      type: object
      properties:
        country:
          description: 'Country code (e.g., US)'
          type: string
        line1:
          description: Street address line 1
          type: string
        line2:
          description: Street address line 2 (optional)
          type: string
          nullable: true
        locality:
          description: City or locality
          type: string
        postalCode:
          description: Postal code or ZIP code
          type: string
        region:
          description: State or region
          type: string
      required:
        - line1
        - locality
        - region
        - postalCode
        - country
      title: Party Address
    WireRoutingDetails:
      type: object
      properties:
        routingNumber:
          description: 'Bank routing number (e.g., ABA routing number for US banks)'
          type: string
        routingNumberType:
          description: Type of routing number. ABA routing numbers are 9-digit codes used for US domestic bank transfers. SWIFT codes (also called BIC) are 8 or 11 character codes used for international wire transfers.
          type: string
          enum:
            - ABA
            - SWIFT
      required:
        - routingNumber
        - routingNumberType
      title: Wire Routing Details
    ACHRoutingDetails:
      type: object
      properties:
        routingNumber:
          description: Bank routing number (ABA routing number for US banks)
          type: string
        routingNumberType:
          description: Type of routing number. ACH transfers only support ABA routing numbers.
          type: string
          default: ABA
          enum:
            - ABA
      required:
        - routingNumber
        - routingNumberType
      title: ACH Routing Details
    AccountDetails:
      type: object
      properties:
        accountNumber:
          description: Bank account number
          type: string
      required:
        - accountNumber
      title: Account Details
    ACHReceivingAccount:
      type: object
      properties:
        achInstructions:
          discriminator:
            propertyName: type
            mapping:
              PLAID: '#/components/schemas/ACHPlaidToken'
              BANK: '#/components/schemas/ACHBankInstructions'
          oneOf:
            - $ref: '#/components/schemas/ACHPlaidToken'
            - $ref: '#/components/schemas/ACHBankInstructions'
      required:
        - achInstructions
      title: ACH Instructions
    ACHPlaidToken:
      type: object
      properties:
        plaidProcessorToken:
          description: Plaid processor token for the receiving account
          type: string
        type:
          description: Discriminator field indicating Plaid token type
          type: string
          default: PLAID
          enum:
            - PLAID
      required:
        - type
        - plaidProcessorToken
      title: ACH Plaid Token
    ACHBankInstructions:
      type: object
      properties:
        accountDetails:
          $ref: '#/components/schemas/AccountDetails'
        partyName:
          description: Name of the account holder or beneficiary
          type: string
        routingDetails:
          $ref: '#/components/schemas/ACHRoutingDetails'
        type:
          description: Discriminator field indicating bank account type
          type: string
          default: BANK
          enum:
            - BANK
      required:
        - type
        - partyName
        - accountDetails
        - routingDetails
      title: ACH Bank Instructions
    VirtualAccountOwnerIndividual:
      type: object
      properties:
        dateOfBirth:
          description: Individual's birth date in the form YYYY-MM-DD.
          type: string
          format: date
        firstName:
          description: Individual's first name.
          type: string
        lastName:
          description: Individual's last name.
          type: string
        middleName:
          description: Individual's middle name.
          type: string
        politicallyExposedPerson:
          description: Whether the individual is a politically exposed person.
          type: boolean
        regulationO:
          description: 'Pertains to loans issued to executive officers, directors, and principal shareholders of member banks.'
          type: boolean
        type:
          description: Discriminator field indicating individual owner type
          type: string
          default: INDIVIDUAL
          enum:
            - INDIVIDUAL
      required:
        - type
        - firstName
        - lastName
        - dateOfBirth
      title: Individual Owner
    VirtualAccountOwnerBusiness:
      type: object
      properties:
        businessName:
          description: Business's name.
          type: string
        dateOfFormation:
          description: Business's formation date in the form YYYY-MM-DD.
          type: string
          format: date
        type:
          description: Discriminator field indicating business owner type
          type: string
          default: BUSINESS
          enum:
            - BUSINESS
      required:
        - type
        - businessName
        - dateOfFormation
      title: Business Owner
    VirtualAccountOwnerCreateRequest:
      type: object
      properties:
        addressCity:
          description: Address city.
          type: string
        addressCountry:
          description: Address country code. Two letters from the ISO 3166-1 alpha-2 standard.
          type: string
          maxLength: 2
          minLength: 2
          pattern: '^[A-Z]{2}$'
        addressLine1:
          description: Address line 1.
          type: string
        addressLine2:
          description: Address line 2. Optional.
          type: string
        addressPostalCode:
          description: Address postal or zip code. Cannot contain dash or space characters.
          type: string
          maxLength: 10
          pattern: '^[A-Za-z0-9]+$'
        addressState:
          description: Address state or region.
          type: string
        bankCode:
          description: Bank this virtual account owner is for. Currently only `CRB` for Cross River Bank requires virtual account owners.
          type: string
          enum:
            - CRB
        ownerInfo:
          discriminator:
            propertyName: type
            mapping:
              INDIVIDUAL: '#/components/schemas/VirtualAccountOwnerIndividual'
              BUSINESS: '#/components/schemas/VirtualAccountOwnerBusiness'
          oneOf:
            - $ref: '#/components/schemas/VirtualAccountOwnerIndividual'
            - $ref: '#/components/schemas/VirtualAccountOwnerBusiness'
        riskRating:
          description: 'Can be `LOW`, `MEDIUM` or `HIGH`.'
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
        taxId:
          description: 'Must be 9-20 alphanumeric characters; cannot contain period, dash or space characters.'
          type: string
          maxLength: 20
          minLength: 9
          pattern: '^[A-Za-z0-9]+$'
        taxIdType:
          description: 'Can be `SSN`, `EIN`, `ITIN`, `VAT` or `FOREIGN`.'
          type: string
          enum:
            - SSN
            - EIN
            - ITIN
            - VAT
            - FOREIGN
      required:
        - bankCode
        - ownerInfo
        - taxIdType
        - taxId
        - addressLine1
        - addressCity
        - addressState
        - addressPostalCode
        - addressCountry
    VirtualAccountOwnerUpdateRequest:
      type: object
      properties:
        addressCity:
          description: Address city.
          type: string
        addressCountry:
          description: Address country code. Two letters from the ISO 3166-1 alpha-2 standard.
          type: string
          maxLength: 2
          minLength: 2
          pattern: '^[A-Z]{2}$'
        addressLine1:
          description: Address line 1.
          type: string
        addressLine2:
          description: Address line 2. Optional.
          type: string
        addressPostalCode:
          description: Address postal or zip code. Cannot contain dash or space characters.
          type: string
          maxLength: 10
          pattern: '^[A-Za-z0-9]+$'
        addressState:
          description: Address state or region.
          type: string
        bankCode:
          description: Bank this virtual account owner is for. Currently only `CRB` for Cross River Bank requires virtual account owners.
          type: string
          enum:
            - CRB
        ownerInfo:
          discriminator:
            propertyName: type
            mapping:
              INDIVIDUAL: '#/components/schemas/VirtualAccountOwnerIndividual'
              BUSINESS: '#/components/schemas/VirtualAccountOwnerBusiness'
          oneOf:
            - $ref: '#/components/schemas/VirtualAccountOwnerIndividual'
            - $ref: '#/components/schemas/VirtualAccountOwnerBusiness'
        riskRating:
          description: 'Can be `LOW`, `MEDIUM` or `HIGH`.'
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
        taxId:
          description: 'Must be 9-20 alphanumeric characters; cannot contain period, dash or space characters.'
          type: string
          maxLength: 20
          minLength: 9
          pattern: '^[A-Za-z0-9]+$'
        taxIdType:
          description: 'Can be `SSN`, `EIN`, `ITIN`, `VAT` or `FOREIGN`.'
          type: string
          enum:
            - SSN
            - EIN
            - ITIN
            - VAT
            - FOREIGN
    VirtualAccountOwnerCreateResponse:
      type: object
      properties:
        id:
          description: Unique identifier for the virtual account owner
          type: string
      required:
        - id
    VirtualAccountOwnerGetResponse:
      type: object
      properties:
        addressCity:
          description: Address city.
          type: string
        addressCountry:
          description: Address country code. Two letters from the ISO 3166-1 alpha-2 standard.
          type: string
        addressLine1:
          description: Address line 1.
          type: string
        addressLine2:
          description: Address line 2. Optional.
          type: string
        addressPostalCode:
          description: Address postal or zip code. Cannot contain dash or space characters.
          type: string
        addressState:
          description: Address state or region.
          type: string
        bankCode:
          description: Bank this virtual account owner is for. Currently only `CRB` for Cross River Bank requires virtual account owners.
          type: string
          enum:
            - CRB
        createdAt:
          type: string
          format: date-time
        discardedAt:
          type: string
          format: date-time
          nullable: true
        id:
          description: Unique identifier for the virtual account owner
          type: string
        liveMode:
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
          type: boolean
        object:
          type: string
        ownerInfo:
          discriminator:
            propertyName: type
            mapping:
              INDIVIDUAL: '#/components/schemas/VirtualAccountOwnerIndividual'
              BUSINESS: '#/components/schemas/VirtualAccountOwnerBusiness'
          oneOf:
            - $ref: '#/components/schemas/VirtualAccountOwnerIndividual'
            - $ref: '#/components/schemas/VirtualAccountOwnerBusiness'
        riskRating:
          description: 'Can be `LOW`, `MEDIUM` or `HIGH`.'
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
        taxId:
          description: 'Must be 9-20 alphanumeric characters; cannot contain period, dash or space characters.'
          type: string
        taxIdType:
          description: 'Can be `SSN`, `EIN`, `ITIN`, `VAT` or `FOREIGN`.'
          type: string
          enum:
            - SSN
            - EIN
            - ITIN
            - VAT
            - FOREIGN
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - object
        - liveMode
        - createdAt
        - updatedAt
        - discardedAt
        - bankCode
        - ownerInfo
        - taxIdType
        - taxId
        - addressLine1
        - addressCity
        - addressState
        - addressPostalCode
        - addressCountry
    BNYIndividual:
      type: object
      properties:
        firstName:
          description: Individual's first name.
          type: string
        lastName:
          description: Individual's last name.
          type: string
        middleName:
          description: Individual's middle name.
          type: string
        type:
          description: Discriminator field indicating individual entity type
          type: string
          default: INDIVIDUAL
          enum:
            - INDIVIDUAL
      required:
        - type
        - firstName
        - lastName
      title: BNY Individual
    BNYBusiness:
      type: object
      properties:
        businessName:
          description: Business's name.
          type: string
        type:
          description: Discriminator field indicating business entity type
          type: string
          default: BUSINESS
          enum:
            - BUSINESS
      required:
        - type
        - businessName
      title: BNY Business
    BNYBankInfo:
      type: object
      properties:
        bankCode:
          description: Discriminator field indicating Bank of New York Mellon
          type: string
          default: BNY
          enum:
            - BNY
        entityInfo:
          discriminator:
            propertyName: type
            mapping:
              INDIVIDUAL: '#/components/schemas/BNYIndividual'
              BUSINESS: '#/components/schemas/BNYBusiness'
          oneOf:
            - $ref: '#/components/schemas/BNYIndividual'
            - $ref: '#/components/schemas/BNYBusiness'
        partyAddress:
          $ref: '#/components/schemas/PartyAddress'
        partyName:
          description: 'Party name for this virtual account. If not provided, it will be populated automatically from the entityInfo fields.'
          type: string
      required:
        - bankCode
        - entityInfo
      title: BNY Bank Information
    CRBBankInfo:
      type: object
      properties:
        bankCode:
          description: Discriminator field indicating Cross River Bank
          type: string
          default: CRB
          enum:
            - CRB
        partyAddress:
          $ref: '#/components/schemas/PartyAddress'
        partyName:
          description: Party name for this virtual account.
          type: string
        virtualAccountOwnerId:
          description: Virtual account owner ID required by this bank.
          type: string
      required:
        - bankCode
        - partyName
        - partyAddress
        - virtualAccountOwnerId
      title: CRB Bank Information
    BNYBankInfoResponse:
      type: object
      properties:
        bankCode:
          description: Discriminator field indicating Bank of New York Mellon
          type: string
          default: BNY
          enum:
            - BNY
        partyAddress:
          $ref: '#/components/schemas/PartyAddress'
        partyName:
          description: 'Party name for this virtual account. Note: Individual name components (firstName, middleName, lastName) and business name are not returned as currently they cannot be changed after account creation.'
          type: string
      required:
        - bankCode
        - partyName
      title: BNY Bank Information Response
    CRBBankInfoResponse:
      type: object
      properties:
        bankCode:
          description: Discriminator field indicating Cross River Bank
          type: string
          default: CRB
          enum:
            - CRB
        partyAddress:
          $ref: '#/components/schemas/PartyAddress'
        partyName:
          description: Party name for this virtual account.
          type: string
        virtualAccountOwnerId:
          description: Virtual account owner ID (legal entity ID) associated with this virtual account.
          type: string
          nullable: true
      required:
        - bankCode
        - partyName
      title: CRB Bank Information Response
    VirtualAccountCreateRequest:
      type: object
      properties:
        bankKycInfo:
          description: Bank-specific KYC information for this virtual account.
          discriminator:
            propertyName: bankCode
            mapping:
              BNY: '#/components/schemas/BNYBankInfo'
              CRB: '#/components/schemas/CRBBankInfo'
          oneOf:
            - $ref: '#/components/schemas/BNYBankInfo'
            - $ref: '#/components/schemas/CRBBankInfo'
        currency:
          description: Currency code for permitted currency with this virtual account.
          type: string
          enum:
            - USD
        parentAccountId:
          description: The parent internal account ID at the bank provider. This is the main account under which this virtual account will be created.
          type: string
      required:
        - bankKycInfo
        - currency
        - parentAccountId
    VirtualAccountCreateResponse:
      type: object
      properties:
        id:
          description: Unique identifier for the virtual account
          type: string
      required:
        - id
    VirtualAccountGetResponse:
      type: object
      properties:
        accountDetails:
          description: Bank account details. Contains the account number and account number type.
          type: object
          allOf:
            - $ref: '#/components/schemas/AccountDetails'
          nullable: true
        achRoutingDetails:
          description: ACH routing details for this virtual account. Contains the ABA routing number used for ACH transfers.
          type: object
          allOf:
            - $ref: '#/components/schemas/ACHRoutingDetails'
          nullable: true
        bankKycInfo:
          description: 'Bank-specific KYC information for this virtual account. Note: Only fields returned by the applicable bank (bankCode and partyName) are included.'
          discriminator:
            propertyName: bankCode
            mapping:
              BNY: '#/components/schemas/BNYBankInfoResponse'
              CRB: '#/components/schemas/CRBBankInfoResponse'
          oneOf:
            - $ref: '#/components/schemas/BNYBankInfoResponse'
            - $ref: '#/components/schemas/CRBBankInfoResponse'
        bankName:
          description: Name of the financial institution. This field is specific to virtual accounts and not part of the standard routing schemas.
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        currency:
          description: Currency code for permitted currency with this virtual account.
          type: string
          enum:
            - USD
        id:
          description: Unique identifier for the virtual account
          type: string
        liveMode:
          description: This field will be true if this object exists in the live environment or false if it exists in the test environment.
          type: boolean
        object:
          type: string
        parentAccountId:
          description: The parent internal account ID at the bank provider. This is the main account under which this virtual account was created.
          type: string
          nullable: true
        status:
          $ref: '#/components/schemas/VirtualAccountStatus'
        updatedAt:
          type: string
          format: date-time
        wireRoutingDetails:
          description: 'Wire routing details for this virtual account. Contains the routing number (ABA or SWIFT) used for wire transfers. If routingNumberType is SWIFT, the routingNumber field contains the SWIFT code. If routingNumberType is ABA, the routingNumber may differ from the ACH routing number.'
          type: object
          allOf:
            - $ref: '#/components/schemas/WireRoutingDetails'
          nullable: true
      required:
        - id
        - object
        - liveMode
        - createdAt
        - updatedAt
        - status
        - bankKycInfo
        - currency
    BalanceType:
      description: Balance type returned from partner banks indicating the nature and timing of the balance.
      type: string
      enum:
        - CLOSING_AVAILABLE
        - CLOSING_LEDGER
        - CURRENT_AVAILABLE
        - CURRENT_LEDGER
        - OPENING_AVAILABLE
        - OPENING_AVAILABLE_NEXT_BUSINESS_DAY
        - OPENING_LEDGER
        - OTHER
        - PREVIOUSLY_CLOSED_BOOK
    BalanceObject:
      type: object
      properties:
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        asOfTime:
          description: The date and time when this balance became true for the account.
          type: string
          format: date-time
        type:
          $ref: '#/components/schemas/BalanceType'
      required:
        - type
        - amount
        - asOfTime
    BalanceResponse:
      type: object
      properties:
        accountId:
          description: Unique identifier of the account
          type: string
        balances:
          description: 'Array of balance objects. Partner banks return different balance types (current, closing, opening, ledger vs available).'
          type: array
          items:
            $ref: '#/components/schemas/BalanceObject'
      required:
        - accountId
        - balances
    ListWiresResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/WireResponse'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    ListACHTransfersResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ACHResponse'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    ListBookTransfersResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/BookResponse'
        page:
          $ref: '#/components/schemas/Page'
      required:
        - data
        - page
    XLMNetworkSpecific:
      description: Stellar-specific network parameters for transaction construction
      type: object
      properties:
        baseFee:
          description: Transaction base fee in XLM
          type: string
        createDestination:
          description: Whether to create the destination account. Set to true to create a new account with the payment. Set to false to send payment to an existing account. Only applies to native XLM transfers; Stellar classic asset (token) transfers require the destination account to already exist with an established trustline.
          type: boolean
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: XLM
          enum:
            - XLM
        sequenceNumber:
          description: Sequence number for the source account
          type: string
      additionalProperties: false
      required:
        - mainnetNetworkId
        - sequenceNumber
        - baseFee
        - createDestination
      title: Stellar Network Specific
    XRPNetworkSpecific:
      description: XRP Ledger-specific network parameters for transaction construction
      type: object
      properties:
        fee:
          description: Transaction fee in XRP
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: XRP
          enum:
            - XRP
        sequence:
          description: Sequence number for the source account
          type: string
      additionalProperties: false
      required:
        - mainnetNetworkId
        - sequence
        - fee
      title: Ripple Network Specific
    FLOWNetworkSpecific:
      description: Flow-specific network parameters for transaction construction
      type: object
      properties:
        gasLimit:
          description: Maximum amount of computation that can be done
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: FLOW
          enum:
            - FLOW
        proposer:
          description: 'The proposal key for the transaction. If not specified, the "source" wallet is the sender.'
          type: object
          additionalProperties: false
          properties:
            address:
              description: Address of the account proposing the transaction
              type: string
            keyIndex:
              description: Index of the key within the proposer account to use for signing
              type: integer
            sequenceNumber:
              description: Sequence number for the proposal key
              type: string
          required:
            - address
            - keyIndex
            - sequenceNumber
        referenceBlockId:
          description: ID of a recent block to reference. Transaction expires after ~10 minutes from this block.
          type: string
        sender:
          description: 'Address of the account sending the assets. If no specified, the "source" wallet is the sender.'
          type: string
          nullable: true
      additionalProperties: false
      required:
        - mainnetNetworkId
        - gasLimit
        - referenceBlockId
      title: Flow Network Specific
    APTNetworkSpecific:
      description: Aptos-specific network parameters for transaction construction
      type: object
      properties:
        expirationTimestampSecs:
          description: Unix timestamp in seconds after which the transaction expires and will be rejected by the network.
          type: string
        gasUnitPrice:
          description: Price per gas unit in APT. Higher values prioritize the transaction.
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: APT
          enum:
            - APT
        maxGasAmount:
          description: Maximum gas units the transaction can consume. The transaction fails if it exceeds this limit.
          type: string
        sequenceNumber:
          description: 'Sequence number for the source account. Each transaction from an account must have a unique, incrementing sequence number.'
          type: string
      additionalProperties: false
      required:
        - mainnetNetworkId
        - sequenceNumber
        - gasUnitPrice
        - maxGasAmount
        - expirationTimestampSecs
      title: Aptos Network Specific
    SUICoin:
      description: A Sui coin object to be used for gas payment
      type: object
      properties:
        digest:
          description: Base58-encoded digest of the object
          type: string
          example: E3c6ybzozYmN551iTadDtDecrdiviv55fwMtL6U1MfrB
        objectId:
          description: Hex-encoded object ID of the coin
          type: string
          example: '0x0037cf382dc39fef8fa3dea79b9425ea636186dba86808d028644f1bafbd84e9'
        version:
          description: Version (sequence number) of the object
          type: string
      additionalProperties: false
      required:
        - objectId
        - version
        - digest
      title: Sui Gas Coin
    SUINetworkSpecific:
      description: 'Sui-specific network parameters for transaction construction. Exactly one principal source must be specified: either payPrincipalFromBalance=true or a non-empty objectsForPrincipal array. Exactly one fee source must be specified: payFeeFromBalance=true, payFeeFromPrincipalObjects=true, or a non-empty objectsForFee array.'
      type: object
      properties:
        epoch:
          description: First epoch for the transaction validity window. Required when payFeeFromBalance is true.
          type: integer
          format: uint64
        gasBudget:
          description: Maximum gas budget in SUI. The transaction fails if execution cost exceeds this.
          type: string
        gasPrice:
          description: Gas price in SUI. Query the network for the current reference gas price.
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: SUI
          enum:
            - SUI
          x-go-type: apimodels.Network
          x-go-type-import:
            path: github.com/anchorlabsinc/anchorage/source/go/lib/restapi/apimodels
            name: apimodels
        nonce:
          description: Nonce for transaction replay protection. Required when payFeeFromBalance is true.
          type: integer
          format: uint32
        objectsForFee:
          description: Coin objects to use for fee payment. Must be empty when payFeeFromBalance or payFeeFromPrincipalObjects is true.
          type: array
          items:
            $ref: '#/components/schemas/SUICoin'
        objectsForPrincipal:
          description: Coin objects whose value funds the transfer principal. Must be empty when payPrincipalFromBalance is true. Required when payPrincipalFromBalance is false.
          type: array
          items:
            $ref: '#/components/schemas/SUICoin'
        payFeeFromBalance:
          description: 'When true, the transaction fee is paid from the sender''s address balance. Mutually exclusive with payFeeFromPrincipalObjects and objectsForFee.'
          type: boolean
        payFeeFromPrincipalObjects:
          description: 'When true, the principal coin objects are merged into the gas coin and the fee is paid from that merged coin. Requires objectsForPrincipal to be non-empty. Mutually exclusive with payFeeFromBalance and objectsForFee.'
          type: boolean
        payPrincipalFromBalance:
          description: 'When true, the principal amount is paid from the sender''s address balance. Mutually exclusive with objectsForPrincipal.'
          type: boolean
        sender:
          description: 'Address of the account that sends the assets. Use this when the sender is different from the source wallet. If not specified, the source wallet is used as both the gas sponsor and the sender of assets.'
          type: string
          nullable: true
        sendToBalance:
          description: 'When true, funds are deposited into the destination''s address balance (send_funds). When false, funds arrive as a coin object (transfer_objects).'
          type: boolean
      additionalProperties: false
      required:
        - mainnetNetworkId
        - payPrincipalFromBalance
        - sendToBalance
        - payFeeFromBalance
        - payFeeFromPrincipalObjects
        - gasPrice
        - gasBudget
      title: Sui Network Specific
    FILNetworkSpecific:
      description: Filecoin-specific network parameters for transaction construction
      type: object
      properties:
        gasFeeCap:
          description: Maximum price per gas unit in FIL. The total fee is capped at gasFeeCap * gasLimit.
          type: string
        gasLimit:
          description: Maximum gas units the message can consume.
          type: string
        gasPremium:
          description: Gas premium in FIL. This is the priority fee paid to miners.
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: FIL
          enum:
            - FIL
        nonce:
          description: 'Sequence number for the source account. Each message from an account must have a unique, incrementing nonce.'
          type: string
      additionalProperties: false
      required:
        - mainnetNetworkId
        - nonce
        - gasPremium
        - gasFeeCap
        - gasLimit
      title: Filecoin Network Specific
    ADANetworkSpecific:
      description: Cardano-specific network parameters for transaction construction
      type: object
      properties:
        changeAddress:
          description: 'Address to send change to. If specified, any remainder after subtracting outputs and fee from UTXO inputs will be sent as change to this address.'
          type: string
        changeAddressClientReferenceId:
          description: Client-provided reference ID to track the change output in their internal systems
          type: string
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        fee:
          description: Transaction fee in ADA
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: CARDANO
          enum:
            - CARDANO
        ttl:
          description: Time to live as an absolute slot number. The transaction is invalid after this slot.
          type: integer
          format: int64
        utxos:
          description: Unspent transaction outputs to use as inputs for the transaction
          type: array
          items:
            $ref: '#/components/schemas/UTXO'
      additionalProperties: false
      required:
        - mainnetNetworkId
        - utxos
        - fee
        - ttl
      title: Cardano Network Specific
    TendermintNetworkSpecific:
      description: 'Tendermint/Cosmos SDK-based network parameters for transaction construction. Supports Celestia (TIA), dYdX Chain (DYDX_CHAIN), and other Tendermint-based networks.'
      type: object
      properties:
        accountNumber:
          description: Account number on the chain
          type: string
        fee:
          description: Transaction fee in the native currency of the network
          type: string
        gas:
          description: Gas limit for the transaction
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          enum:
            - TIA
            - DYDX_CHAIN
        sequence:
          description: Account sequence number for replay protection
          type: string
        timeoutHeight:
          description: Block height after which the transaction is invalid
          type: integer
          format: int64
      additionalProperties: false
      required:
        - mainnetNetworkId
        - sequence
        - accountNumber
        - gas
        - fee
      title: Tendermint Network Specific
    HBARNetworkSpecific:
      description: 'Hedera-specific network parameters for transaction construction. Note: Transaction validity duration is hardcoded to 180 seconds (the maximum allowed by the Hedera network).'
      type: object
      properties:
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: HBAR
          enum:
            - HBAR
        maxTransactionFee:
          description: Maximum transaction fee in HBAR
          type: string
        nodeAccountId:
          description: 'Node account to submit the transaction to (e.g., "0.0.3")'
          type: string
          example: 0.0.3
        validStartTimestampNanos:
          description: Nanoseconds component (0-999999999) of the valid start timestamp.
          type: integer
          format: int32
          example: 123456789
        validStartTimestampSecs:
          description: Unix epoch seconds from which the transaction is valid. Must be greater than 0.
          type: integer
          format: int64
          example: 1234567890
      additionalProperties: false
      required:
        - mainnetNetworkId
        - validStartTimestampSecs
        - validStartTimestampNanos
        - maxTransactionFee
        - nodeAccountId
      title: Hedera Network Specific
    NEARNetworkSpecific:
      description: NEAR-specific network parameters for transaction construction
      type: object
      properties:
        blockHash:
          description: Recent block hash for replay protection (base58 encoded)
          type: string
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: NEAR
          enum:
            - NEAR
        nonce:
          description: Access key nonce for the sender
          type: string
      additionalProperties: false
      required:
        - mainnetNetworkId
        - nonce
        - blockHash
      title: NEAR Network Specific
    DOTNetworkSpecific:
      description: Polkadot-specific network parameters for transaction construction. Transactions are immortal by default. Provide mortalEra to make the transaction expire after a certain number of blocks.
      type: object
      properties:
        mainnetNetworkId:
          description: 'Discriminator field. Always set to the mainnet network ID, even when constructing transactions for testnets.'
          type: string
          default: POLKADOT
          enum:
            - POLKADOT
        mortalEra:
          description: 'If provided, the transaction expires after a certain number of blocks. If omitted, the transaction is immortal (never expires).'
          type: object
          additionalProperties: false
          properties:
            blockHash:
              description: Checkpoint block hash for the mortal era
              type: string
            blockNumber:
              description: 'Block number corresponding to the checkpoint block hash, used to compute the mortal era phase'
              type: integer
              format: uint64
            period:
              description: 'Number of blocks the transaction is valid for (must be a power of 2, between 4 and 65536)'
              type: integer
          required:
            - period
            - blockNumber
            - blockHash
        nonce:
          description: Account nonce for replay protection
          type: string
        specVersion:
          description: Runtime specification version. Query from the Polkadot node using state_getRuntimeVersion().
          type: integer
          format: uint32
        tip:
          description: Priority fee in DOT to incentivize inclusion
          type: string
      additionalProperties: false
      required:
        - mainnetNetworkId
        - nonce
        - specVersion
      title: Polkadot Network Specific
    SolanaCreateNonceAccountTemplate:
      description: Template for creating a Solana nonce account transaction
      type: object
      properties:
        authorityAddress:
          description: The public key address that will have authority over the nonce account
          type: string
          example: 3z9vL1zjN6qyAFHhHQdWYRTFAcy69pJydkZmSFBKHg1R
        computeUnitLimit:
          description: 'Maximum compute units the transaction can consume. If not specified, the runtime will compute a default value.'
          type: integer
          nullable: true
        computeUnitPrice:
          description: Price per compute unit in SOL. Used to prioritize transactions.
          type: string
          nullable: true
        nonceAccountAddress:
          description: The public key address of the nonce account to be created
          type: string
          example: 9aE476sH92Vz7DMPyq5WLPkrKWivxeuTKEFKd2sZZcde
        rent:
          description: Amount of SOL for rent exemption
          type: string
          example: '0.0015'
        replayProtectionParams:
          $ref: '#/components/schemas/SOLReplayProtectionParams'
        type:
          description: Discriminator field indicating this is a Solana nonce account creation template
          type: string
          default: SOLANA_CREATE_NONCE_ACCOUNT
          enum:
            - SOLANA_CREATE_NONCE_ACCOUNT
      additionalProperties: false
      required:
        - type
        - nonceAccountAddress
        - authorityAddress
        - rent
        - replayProtectionParams
      title: Solana Create Nonce Account Template
    StellarChangeTrustTemplate:
      description: Template for creating a Stellar ChangeTrust operation to establish a trustline. A trustline allows an account to hold and receive a non-native asset (any asset other than XLM).
      type: object
      properties:
        assetType:
          description: 'A unique string identifying a specific asset on a specific blockchain and environment (testnet, mainnet).'
          type: string
          example: USDC
        baseFee:
          description: 'Base fee in XLM (optional, defaults to network base fee)'
          type: string
          nullable: true
        limit:
          description: Maximum amount of the asset that the account can hold. Defaults to maximum possible if not specified. Set to '0' to remove the trustline.
          type: string
          example: '1000000.0000000'
          nullable: true
        sequenceNumber:
          description: Sequence number for the source account
          type: string
        type:
          description: Discriminator field indicating this is a Stellar ChangeTrust template
          type: string
          default: STELLAR_CHANGE_TRUST
          enum:
            - STELLAR_CHANGE_TRUST
      additionalProperties: false
      required:
        - type
        - assetType
        - sequenceNumber
      title: Stellar Change Trust Template
    RippleTrustSetTemplate:
      description: Template for creating a Ripple TrustSet transaction to establish a trustline. A trustline allows an account to hold and receive issued tokens (any asset other than XRP).
      type: object
      properties:
        assetType:
          description: 'A unique string identifying a specific asset on a specific blockchain and environment (testnet, mainnet).'
          type: string
          example: USDC
        fee:
          description: Transaction fee in XRP
          type: string
        limit:
          description: Maximum amount of the asset that the account can hold. Defaults to maximum possible if not specified. Set to '0' to remove the trustline.
          type: string
          example: '1000000'
          nullable: true
        sequence:
          description: Sequence number for the source account
          type: string
        type:
          description: Discriminator field indicating this is a Ripple TrustSet template
          type: string
          default: RIPPLE_TRUST_SET
          enum:
            - RIPPLE_TRUST_SET
      additionalProperties: false
      required:
        - type
        - assetType
        - sequence
        - fee
      title: Ripple Trust Set Template
    RippleRequireDestinationTagTemplate:
      description: |-
        Template for an AccountSet transaction that sets or clears the asfRequireDest flag.

        When enabled (asfRequireDest set), the account rejects incoming payments that do not specify a destination tag.
        When disabled (asfRequireDest cleared), the account accepts incoming payments regardless of whether a destination tag is present.
      type: object
      properties:
        enable:
          description: True to set the asfRequireDest flag (require destination tags on incoming payments). False to clear the flag (allow payments without destination tags).
          type: boolean
        fee:
          description: Transaction fee in XRP
          type: string
        sequence:
          description: Sequence number for the source account
          type: string
        type:
          description: Discriminator field indicating this is a Ripple Require Destination Tag template
          type: string
          default: RIPPLE_REQUIRE_DESTINATION_TAG
          enum:
            - RIPPLE_REQUIRE_DESTINATION_TAG
      additionalProperties: false
      required:
        - type
        - enable
        - sequence
        - fee
      title: Ripple Require Destination Tag Template
    ConstructTransactionRequest:
      description: Request to construct a transaction
      type: object
      properties:
        clientReferenceId:
          description: Client-provided reference ID to track this transaction in their internal systems
          type: string
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          nullable: true
        idempotencyKey:
          description: Client-provided idempotency key to ensure request is processed only once
          type: string
          example: e763a50d-aa82-4ec7-b5a3-89ad0462d248
          maxLength: 128
        sourceWalletId:
          description: Globally unique wallet identifier for the wallet that will pay transaction fees and sign the transaction
          type: string
        template:
          description: The transaction template specifying what transaction to construct. Use the 'type' field to discriminate between different transaction types.
          discriminator:
            propertyName: type
            mapping:
              SOLANA_CREATE_NONCE_ACCOUNT: '#/components/schemas/SolanaCreateNonceAccountTemplate'
              STELLAR_CHANGE_TRUST: '#/components/schemas/StellarChangeTrustTemplate'
              RIPPLE_TRUST_SET: '#/components/schemas/RippleTrustSetTemplate'
              RIPPLE_REQUIRE_DESTINATION_TAG: '#/components/schemas/RippleRequireDestinationTagTemplate'
          oneOf:
            - $ref: '#/components/schemas/SolanaCreateNonceAccountTemplate'
            - $ref: '#/components/schemas/StellarChangeTrustTemplate'
            - $ref: '#/components/schemas/RippleTrustSetTemplate'
            - $ref: '#/components/schemas/RippleRequireDestinationTagTemplate'
      additionalProperties: false
      required:
        - template
        - sourceWalletId
  securitySchemes:
    Api-Access-Key:
      type: apiKey
      name: Api-Access-Key
      in: header
      description: An API key associated with a security role
tags:
  - description: 'Operations for querying supported asset types, networks, and wallet key compatibility'
    name: Asset Types & Networks
  - description: Operations for creating and managing wallets
    name: Wallets
  - description: Operations for creating and managing blockchain addresses
    name: Addresses
  - description: Operations for creating and signing transactions that your organization broadcasts on-chain
    name: Wallet Operations
  - description: 'Query on-chain activity detected by Anchorage Digital, including deposits, confirmations, fees, and rewards'
    name: Blockchain Events
  - description: Operations for querying wallet balances and staking positions
    name: Balances
  - description: Operations for creating transactions with managed fees and replay protection
    name: Transaction Creation
  - description: Operations for constructing and signing transactions via the Construct API
    name: Transaction Construction
  - description: ''
    name: Atlas Settlement Network
  - description: Anti-Money Laundering compliance endpoints
    name: AML
  - description: Endpoints for stablecoin conversion operations including issuance and redemption
    name: Stablecoins
  - description: Operations for managing fiat bank payments and accounts
    name: Fiat Banking Operations
x-tagGroups:
  - name: Under Development
    tags:
      - Atlas Settlement Network
  - name: API Endpoints
    tags:
      - Addresses
      - Wallets
      - Stablecoins
      - Wallet Operations
      - Blockchain Events
      - Balances
      - Asset Types & Networks
      - Transaction Creation
      - Transaction Construction
      - Fiat Banking Operations
      - AML
security:
  - Api-Access-Key: []
