openapi: 3.1.0
info:
  title: Atto Node API
  description: >-
    Atto is a high-performance cryptocurrency focused on instant, feeless, and
    scalable digital cash; this interface is the entry point to the network,
    allowing clients to publish and receive blocks, query account data, and
    participate in the network.
  version: 1.30-live
externalDocs:
  description: Integration Docs
  url: https://atto.cash/docs/integration
servers:
  - url: http://localhost:8080
    description: Generated server url
tags:
  - name: Vote Weights
    description: Expose current vote weights per representative
  - name: Accounts
    description: >-
      Retrieve the latest state (snapshot) of an account. Since transactions
      mutate accounts, this reflects the result of all previous operations.
  - name: Instants
    description: >-
      Returns the time difference between the server and client. Useful for
      clients with unreliable or skewed clocks.
  - name: Receivables
    description: >-
      Displays pending incoming funds. When someone sends a transaction, it
      becomes a "receivable" until the recipient explicitly receives it.
  - name: Account Entries
    description: >-
      A user-friendly view of account activity. Recommended for displaying
      transaction history in UIs.
  - name: Transactions
    description: >-
      Submit or query raw transaction blocks. This endpoint handles the
      low-level building blocks of the ledger.
paths:
  /transactions/stream:
    get:
      tags:
        - Transactions
      summary: Stream all latest transactions
      operationId: stream
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoTransaction'
    post:
      tags:
        - Transactions
      description: Publish transaction and stream
      operationId: publishAndStream
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttoTransaction'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoTransaction'
  /transactions:
    post:
      tags:
        - Transactions
      summary: Publish a transaction
      operationId: publish
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AttoTransaction'
        required: true
      responses:
        '200':
          description: OK
          content: {}
  /accounts:
    post:
      tags:
        - Accounts
      summary: Get accounts for given addresses
      operationId: get
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountSearch'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/AttoAccount'
  /accounts/transactions/stream:
    post:
      tags:
        - Transactions
      summary: Stream transactions by account and height range
      operationId: streamMultiple
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HeightSearch'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoTransaction'
  /accounts/stream:
    get:
      tags:
        - Accounts
      summary: Stream all latest accounts
      operationId: stream_1
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoAccount'
    post:
      tags:
        - Accounts
      summary: Stream all accounts for the given addresses
      operationId: stream_2
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountSearch'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoAccount'
  /accounts/receivables/stream:
    post:
      tags:
        - Receivables
      summary: Stream all receivables for multiple addresses
      operationId: stream_3
      parameters:
        - name: minAmount
          in: query
          required: false
          schema:
            type: string
            description: Unsigned 64-bit amount in raw units (0..18000000000000000000U)
            example: '1000000000000000000'
            pattern: ^[0-9]{1,20}$
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountSearch'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoReceivable'
  /accounts/entries/stream:
    get:
      tags:
        - Account Entries
      summary: Stream all latest account entries
      operationId: stream_4
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoAccountEntry'
    post:
      tags:
        - Account Entries
      summary: Stream account entries by height range
      operationId: streamMultiple_1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/HeightSearch'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoAccountEntry'
  /vote-weights/{address}:
    get:
      tags:
        - Vote Weights
      summary: Get voter weight
      operationId: get_1
      parameters:
        - name: address
          in: path
          required: true
          schema:
            type: string
            description: >-
              Atto address URI. Format: `atto://` + 61 Base32 chars (lowercase,
              no padding). Encodes: 1 byte algorithm code + 32-byte public key +
              5-byte checksum (total 38 bytes).
            example: >-
              atto://aaferyy3quqiyugpambc452bu2oqh7hrcazz4vnvem2meaa6thwf4vkiuiwyw
            pattern: ^atto://[a-z2-7]{61}$
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                type: string
  /transactions/{hash}:
    get:
      tags:
        - Transactions
      summary: Get transaction
      operationId: get_2
      parameters:
        - name: hash
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte hash (hex)
            example: 9072A5DB95CF7866F9AF4CC4C12C01F8E1DF903A6A0660EF62986A4B6191BD0C
            maxLength: 64
            minLength: 64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/AttoTransaction'
  /transactions/{hash}/stream:
    get:
      tags:
        - Transactions
      summary: Stream a single transaction
      description: >-
        Allows clients to track the confirmation of a transaction in real-time
        by streaming a single transaction by hash. Useful when the transaction
        hash is shared ahead of time, like in payment protocols.
      operationId: stream_5
      parameters:
        - name: hash
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte hash (hex)
            example: 9072A5DB95CF7866F9AF4CC4C12C01F8E1DF903A6A0660EF62986A4B6191BD0C
            maxLength: 64
            minLength: 64
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoTransaction'
  /instants/{clientInstant}:
    get:
      tags:
        - Instants
      summary: Return time adjustment to send transactions
      operationId: get_3
      parameters:
        - name: clientInstant
          in: path
          required: true
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/TimeDifferenceResponse'
  /accounts/{publicKey}:
    get:
      tags:
        - Accounts
      summary: Get account
      operationId: get_4
      parameters:
        - name: publicKey
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte ed25519 public key (hex)
            example: 44C8865188D6FBE1C084436FF2E08D34538BA0FB2FCB1A8FA76F8127CCF6A281
            maxLength: 64
            minLength: 64
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/AttoAccount'
  /accounts/{publicKey}/transactions/stream:
    get:
      tags:
        - Transactions
      summary: Stream transactions by height
      operationId: stream_6
      parameters:
        - name: publicKey
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte ed25519 public key (hex)
            example: 44C8865188D6FBE1C084436FF2E08D34538BA0FB2FCB1A8FA76F8127CCF6A281
            maxLength: 64
            minLength: 64
        - name: fromHeight
          in: query
          required: false
          schema:
            type: string
            description: Block height as unsigned 64-bit integer (1..18446744073709551615)
            example: '1'
            pattern: ^[0-9]{1,20}$
        - name: toHeight
          in: query
          required: false
          schema:
            type: string
            description: Block height as unsigned 64-bit integer (1..18446744073709551615)
            example: '1'
            pattern: ^[0-9]{1,20}$
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoTransaction'
  /accounts/{publicKey}/stream:
    get:
      tags:
        - Accounts
      summary: Stream account
      operationId: stream_7
      parameters:
        - name: publicKey
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte ed25519 public key (hex)
            example: 44C8865188D6FBE1C084436FF2E08D34538BA0FB2FCB1A8FA76F8127CCF6A281
            maxLength: 64
            minLength: 64
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoAccount'
  /accounts/{publicKey}/receivables/stream:
    get:
      tags:
        - Receivables
      summary: Stream all receivables
      operationId: stream_8
      parameters:
        - name: publicKey
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte ed25519 public key (hex)
            example: 44C8865188D6FBE1C084436FF2E08D34538BA0FB2FCB1A8FA76F8127CCF6A281
            maxLength: 64
            minLength: 64
        - name: minAmount
          in: query
          required: false
          schema:
            type: string
            description: Unsigned 64-bit amount in raw units (0..18000000000000000000U)
            example: '1000000000000000000'
            pattern: ^[0-9]{1,20}$
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoReceivable'
  /accounts/{publicKey}/entries/stream:
    get:
      tags:
        - Account Entries
      summary: Stream account entries by height
      operationId: stream_9
      parameters:
        - name: publicKey
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte ed25519 public key (hex)
            example: 44C8865188D6FBE1C084436FF2E08D34538BA0FB2FCB1A8FA76F8127CCF6A281
            maxLength: 64
            minLength: 64
        - name: fromHeight
          in: query
          required: false
          schema:
            type: string
            description: Block height as unsigned 64-bit integer (1..18446744073709551615)
            example: '1'
            pattern: ^[0-9]{1,20}$
        - name: toHeight
          in: query
          required: false
          schema:
            type: string
            description: Block height as unsigned 64-bit integer (1..18446744073709551615)
            example: '1'
            pattern: ^[0-9]{1,20}$
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoAccountEntry'
  /accounts/entries/{hash}/stream:
    get:
      tags:
        - Account Entries
      summary: Stream a single account entry
      description: >-
        Allows clients to track the confirmation of a transaction in real-time
        by streaming a single account entry by hash. Useful when the transaction
        hash is shared ahead of time, like in payment protocols.
      operationId: stream_10
      parameters:
        - name: hash
          in: path
          required: true
          schema:
            type: string
            format: hex
            description: 32-byte hash (hex)
            example: 9072A5DB95CF7866F9AF4CC4C12C01F8E1DF903A6A0660EF62986A4B6191BD0C
            maxLength: 64
            minLength: 64
      responses:
        '200':
          description: OK
          content:
            application/x-ndjson:
              schema:
                $ref: '#/components/schemas/AttoAccountEntry'
components:
  schemas:
    AttoAddress:
      type: string
      description: >-
        Atto address URI. Format: `atto://` + 61 Base32 chars (lowercase, no
        padding). Encodes: 1 byte algorithm code + 32-byte public key + 5-byte
        checksum (total 38 bytes).
      example: atto://aaferyy3quqiyugpambc452bu2oqh7hrcazz4vnvem2meaa6thwf4vkiuiwyw
      pattern: ^atto://[a-z2-7]{61}$
    AttoAmount:
      type: string
      description: Unsigned 64-bit amount in raw units (0..18000000000000000000U)
      example: '1000000000000000000'
      pattern: ^[0-9]{1,20}$
    AttoBlock:
      type: object
      discriminator:
        propertyName: type
        mapping:
          SEND: '#/components/schemas/AttoSendBlock'
          RECEIVE: '#/components/schemas/AttoReceivable'
          OPEN: '#/components/schemas/AttoOpenBlock'
          CHANGE: '#/components/schemas/AttoChangeBlock'
      properties:
        balance:
          $ref: '#/components/schemas/AttoAmount'
        version:
          $ref: '#/components/schemas/AttoVersion'
        publicKey:
          $ref: '#/components/schemas/AttoPublicKey'
        algorithm:
          type: string
          enum:
            - V1
        timestamp:
          $ref: '#/components/schemas/AttoInstant'
        network:
          type: string
          enum:
            - LIVE
            - BETA
            - DEV
            - LOCAL
            - UNKNOWN
        height:
          $ref: '#/components/schemas/AttoHeight'
          description: Height of the block (unsigned 64-bit)
          example: '2'
        type:
          type: string
          enum:
            - UNKNOWN
            - OPEN
            - RECEIVE
            - SEND
            - CHANGE
        address:
          $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - algorithm
        - balance
        - height
        - network
        - publicKey
        - timestamp
        - type
        - version
    AttoChangeBlock:
      allOf:
        - $ref: '#/components/schemas/AttoBlock'
        - type: object
          properties:
            previous:
              $ref: '#/components/schemas/AttoHash'
              description: Hash of the previous block (hex)
            representativeAlgorithm:
              type: string
              description: Algorithm of the representative
              enum:
                - V1
              example: V1
            representativePublicKey:
              $ref: '#/components/schemas/AttoPublicKey'
              description: Public key of the representative (hex)
            representativeAddress:
              $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - algorithm
        - balance
        - height
        - network
        - previous
        - publicKey
        - representativeAddress
        - representativeAlgorithm
        - representativePublicKey
        - timestamp
        - type
        - version
    AttoHash:
      type: string
      format: hex
      description: 32-byte hash (hex)
      example: 9072A5DB95CF7866F9AF4CC4C12C01F8E1DF903A6A0660EF62986A4B6191BD0C
      maxLength: 64
      minLength: 64
    AttoHeight:
      type: string
      description: Block height as unsigned 64-bit integer (1..18446744073709551615)
      example: '1'
      pattern: ^[0-9]{1,20}$
    AttoInstant:
      type: integer
      format: int64
      description: Unix epoch time in milliseconds since 1970-01-01T00:00:00Z
      example: 1767390950976
      minimum: 0
    AttoOpenBlock:
      allOf:
        - $ref: '#/components/schemas/AttoBlock'
        - type: object
          properties:
            sendHashAlgorithm:
              type: string
              description: Algorithm of the send block
              enum:
                - V1
              example: V1
            sendHash:
              $ref: '#/components/schemas/AttoHash'
              description: Hash of the send block (hex)
            representativeAlgorithm:
              type: string
              description: Algorithm of the representative
              enum:
                - V1
              example: V1
            representativePublicKey:
              $ref: '#/components/schemas/AttoPublicKey'
              description: Public key of the representative (hex)
            representativeAddress:
              $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - algorithm
        - balance
        - height
        - network
        - publicKey
        - representativeAddress
        - representativeAlgorithm
        - representativePublicKey
        - sendHash
        - sendHashAlgorithm
        - timestamp
        - type
        - version
    AttoPublicKey:
      type: string
      format: hex
      description: 32-byte ed25519 public key (hex)
      example: 44C8865188D6FBE1C084436FF2E08D34538BA0FB2FCB1A8FA76F8127CCF6A281
      maxLength: 64
      minLength: 64
    AttoReceiveBlock:
      allOf:
        - $ref: '#/components/schemas/AttoBlock'
        - type: object
          properties:
            previous:
              $ref: '#/components/schemas/AttoHash'
              description: Hash of the previous block (hex)
            sendHashAlgorithm:
              type: string
              description: Algorithm of the send block
              enum:
                - V1
              example: V1
            sendHash:
              $ref: '#/components/schemas/AttoHash'
              description: Hash of the send block (hex)
      required:
        - address
        - algorithm
        - balance
        - height
        - network
        - previous
        - publicKey
        - sendHash
        - sendHashAlgorithm
        - timestamp
        - type
        - version
    AttoSendBlock:
      allOf:
        - $ref: '#/components/schemas/AttoBlock'
        - type: object
          properties:
            previous:
              $ref: '#/components/schemas/AttoHash'
              description: Hash of the previous block (hex)
            receiverAlgorithm:
              type: string
              description: Algorithm of the receiver
              enum:
                - V1
              example: V1
            receiverPublicKey:
              $ref: '#/components/schemas/AttoPublicKey'
              description: Public key of the receiver (hex)
            amount:
              $ref: '#/components/schemas/AttoAmount'
              description: Amount being sent (raw uint64)
              example: '1'
            receiverAddress:
              $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - algorithm
        - amount
        - balance
        - height
        - network
        - previous
        - publicKey
        - receiverAddress
        - receiverAlgorithm
        - receiverPublicKey
        - timestamp
        - type
        - version
    AttoSignature:
      type: string
      format: hex
      description: 64-byte ed25519 signature (hex)
      example: >-
        5799544ACF409689705225CBF72FBFA9CD06EEA5F49E043C5C71B2EE6365977EDD3BDD2A3003D247EE39D0CA3E72E8F41DFD49C2ACDE217990A0ABE26F7E025F
      maxLength: 128
      minLength: 128
    AttoTransaction:
      type: object
      properties:
        block:
          oneOf:
            - $ref: '#/components/schemas/AttoChangeBlock'
            - $ref: '#/components/schemas/AttoOpenBlock'
            - $ref: '#/components/schemas/AttoReceiveBlock'
            - $ref: '#/components/schemas/AttoSendBlock'
        signature:
          $ref: '#/components/schemas/AttoSignature'
        work:
          $ref: '#/components/schemas/AttoWork'
        address:
          $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - block
        - signature
        - work
    AttoVersion:
      type: integer
      format: int32
      description: Protocol version (0..65535). Currently always 0
      maximum: 0
      minimum: 0
    AttoWork:
      type: string
      format: hex
      description: Work nonce (hex)
      example: 8E9C4A839AB702AF
      maxLength: 16
      minLength: 16
    Instant:
      type: object
      properties:
        epochSeconds:
          type: integer
          format: int64
        nanosecondsOfSecond:
          type: integer
          format: int32
      required:
        - epochSeconds
        - nanosecondsOfSecond
    AttoAccount:
      type: object
      properties:
        publicKey:
          $ref: '#/components/schemas/AttoPublicKey'
          description: The public key of the account (hex)
          example: 45B3B58C26181580EEAFC1791046D54EEC2854BF550A211E2362761077D6590C
        network:
          type: string
          description: Network type
          enum:
            - LIVE
            - BETA
            - DEV
            - LOCAL
            - UNKNOWN
          example: LIVE
        version:
          $ref: '#/components/schemas/AttoVersion'
          description: Version
          example: '0'
        algorithm:
          type: string
          description: Type
          enum:
            - V1
          example: V1
        height:
          $ref: '#/components/schemas/AttoHeight'
          description: Height (raw uint64)
          example: '1'
        balance:
          $ref: '#/components/schemas/AttoAmount'
          description: Balance (raw uint64)
          example: '180000000000'
        lastTransactionHash:
          $ref: '#/components/schemas/AttoHash'
          description: Last transaction hash (hex)
          example: 70F9406609BCB2E3E18F22BD0839C95E5540E95489DC6F24DBF6A1F7CFD83A92
        lastTransactionTimestamp:
          $ref: '#/components/schemas/AttoInstant'
          description: Timestamp of the last transaction (ms since epoch)
          example: 1705517157478
        representativeAlgorithm:
          type: string
          description: Representative algorithm
          enum:
            - V1
          example: V1
        representativePublicKey:
          $ref: '#/components/schemas/AttoPublicKey'
          description: Public key of the representative (hex)
          example: 99E439410A4DDD2A3A8D0B667C7A090286B8553378CF3C7AA806C3E60B6C4CBE
        representativeAddress:
          $ref: '#/components/schemas/AttoAddress'
        address:
          $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - algorithm
        - balance
        - height
        - lastTransactionHash
        - lastTransactionTimestamp
        - network
        - publicKey
        - representativeAddress
        - representativeAlgorithm
        - representativePublicKey
        - version
    AccountSearch:
      type: object
      properties:
        addresses:
          type: array
          description: List of addresses. Example item shown.
          example:
            - >-
              atto://adwmbykpqs3mgbqogizzwm6arokkcmuxium7rbh343drwd2q5om6vj3jrfiyk
          items:
            $ref: '#/components/schemas/AttoAddress'
      required:
        - addresses
    AccountHeightSearch:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/AttoAddress'
          description: Address of the account
          example: atto://adwmbykpqs3mgbqogizzwm6arokkcmuxium7rbh343drwd2q5om6vj3jrfiyk
        fromHeight:
          $ref: '#/components/schemas/AttoHeight'
          description: From height (inclusive), normally last seen height + 1
          example: '1'
        toHeight:
          $ref: '#/components/schemas/AttoHeight'
          description: To height (inclusive)
          example: '2'
      required:
        - address
        - fromHeight
        - toHeight
    HeightSearch:
      type: object
      properties:
        search:
          type: array
          description: List of account heights to be searched
          items:
            $ref: '#/components/schemas/AccountHeightSearch'
      required:
        - search
    AttoReceivable:
      type: object
      properties:
        network:
          type: string
          enum:
            - LIVE
            - BETA
            - DEV
            - LOCAL
            - UNKNOWN
        hash:
          $ref: '#/components/schemas/AttoHash'
          description: Sender transaction hash (hex)
          example: 0AF0F63BFE4DBC588F95FC3B154DE848AA9A5DD5604BAC99AE9E21C5EA8B4F64
        version:
          $ref: '#/components/schemas/AttoVersion'
          description: Version
          example: '0'
        algorithm:
          type: string
          description: Algorithm
          enum:
            - V1
          example: V1
        publicKey:
          $ref: '#/components/schemas/AttoPublicKey'
          description: Public key of the sender (hex)
          example: 53F1A85D25EDA5021C01A77A2B1BA99CEF9DD5FD912D7465B8B652FDEDB6A4F8
        timestamp:
          $ref: '#/components/schemas/AttoInstant'
          description: Timestamp of the send transaction (ms since epoch)
          example: 1705517157478
        receiverAlgorithm:
          type: string
          description: Algorithm used by the receiver
          enum:
            - V1
          example: V1
        receiverPublicKey:
          $ref: '#/components/schemas/AttoPublicKey'
          description: Public key of the receiver (hex)
          example: 0C400961629D759176F009249A33899440900ABCE275F6C5C01C6F7F37A2C59A
        amount:
          $ref: '#/components/schemas/AttoAmount'
          description: Amount (raw uint64)
          example: '18000000000000000000'
        receiverAddress:
          $ref: '#/components/schemas/AttoAddress'
        address:
          $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - algorithm
        - amount
        - hash
        - network
        - publicKey
        - receiverAddress
        - receiverAlgorithm
        - receiverPublicKey
        - timestamp
        - version
    AttoAccountEntry:
      type: object
      properties:
        hash:
          $ref: '#/components/schemas/AttoHash'
          description: Unique hash of the block (hex)
          example: 68BA42CDD87328380BE32D5AA6DBB86E905B50273D37AF1DE12F47B83A001154
        algorithm:
          type: string
          description: Block algorithm
          enum:
            - V1
          example: V1
        publicKey:
          $ref: '#/components/schemas/AttoPublicKey'
          description: Public key of the account (hex)
          example: FD595851104FDDB2FEBF3739C8006C8AAE9B8A2B1BC390D5FDF07EBDD8583FA1
        height:
          $ref: '#/components/schemas/AttoHeight'
          description: Block height (raw uint64)
          example: '0'
        blockType:
          type: string
          description: Type of block in the account chain
          enum:
            - UNKNOWN
            - OPEN
            - RECEIVE
            - SEND
            - CHANGE
          example: RECEIVE
        subjectAlgorithm:
          type: string
          description: Algorithm of the subject involved in the transaction
          enum:
            - V1
          example: V1
        subjectPublicKey:
          $ref: '#/components/schemas/AttoPublicKey'
          description: Public key of the subject involved in the transaction (hex)
          example: 2EB21717813E7A0E0A7E308B8E2FD8A051F8724F5C5F0047E92E19310C582E3A
        previousBalance:
          $ref: '#/components/schemas/AttoAmount'
          description: Balance before this block (raw uint64)
          example: '0'
        balance:
          $ref: '#/components/schemas/AttoAmount'
          description: Balance after this block (raw uint64)
          example: '100'
        timestamp:
          $ref: '#/components/schemas/AttoInstant'
          description: Timestamp of the block (ms since epoch)
          example: 1704616009211
        address:
          $ref: '#/components/schemas/AttoAddress'
        subjectAddress:
          $ref: '#/components/schemas/AttoAddress'
      required:
        - address
        - algorithm
        - balance
        - blockType
        - hash
        - height
        - previousBalance
        - publicKey
        - subjectAddress
        - subjectAlgorithm
        - subjectPublicKey
        - timestamp
    TimeDifferenceResponse:
      type: object
      properties:
        clientInstant:
          $ref: '#/components/schemas/AttoInstant'
          description: Client instant (iso)
          example: '2026-01-02T21:55:51.182Z'
        serverInstant:
          $ref: '#/components/schemas/AttoInstant'
          description: Server instant (iso)
          example: '2026-01-02T21:55:51.182Z'
        differenceMillis:
          type: integer
          format: int64
          description: Time difference between server and client instants
          example: 100
      required:
        - clientInstant
        - differenceMillis
        - serverInstant
