Syndica · AsyncAPI Specification

Syndica Solana RPC PubSub & ChainStream WebSocket API

Version 1.0.0

AsyncAPI 2.6 specification for Syndica's Solana WebSocket surface. Covers two products: 1. **Solana RPC PubSub** — JSON-RPC 2.0 subscriptions served from `wss://solana-mainnet.api.syndica.io/api-key/`. Drop-in compatible with the standard Solana PubSub methods (`accountSubscribe`, `blockSubscribe`, `logsSubscribe`, `programSubscribe`, `signatureSubscribe`, `slotSubscribe`, `voteSubscribe`, `rootSubscribe`) and their matching `*Unsubscribe` calls. 2. **ChainStream** — Syndica's proprietary low-latency JSON-RPC 2.0 streaming API served from `wss://chainstream.api.syndica.io/api-key/`. Consolidates updates across multiple validators using a "fastest wins" strategy and supports `transactionsSubscribe`, `slotsSubscribe`, and `blocksSubscribe`, plus their `*Unsubscribe` counterparts. Authentication is performed by embedding the credential in the URL path.

View Spec View on GitHub SolanaBlockchainWeb3RPCStreamingInfrastructureValidatorStakingAsyncAPIWebhooksEvents

Channels

accountSubscribe
publish accountSubscribe
Open an account subscription.
Subscribe to an account to receive notifications when the lamports or data for a given account public key changes.
accountUnsubscribe
publish accountUnsubscribe
Unsubscribe from account-change notifications.
blockSubscribe
publish blockSubscribe
Subscribe to receive notifications when a new block is confirmed or finalized. Filter by `all` or by `mentionsAccountOrProgram`.
blockUnsubscribe
publish blockUnsubscribe
Unsubscribe from block notifications.
logsSubscribe
publish logsSubscribe
Subscribe to transaction log notifications. Filter by `all`, `allWithVotes`, or by `mentions` of one account public key.
logsUnsubscribe
publish logsUnsubscribe
Unsubscribe from log notifications.
programSubscribe
publish programSubscribe
Subscribe to a program to receive notifications when the lamports or data for any account owned by the program changes.
programUnsubscribe
publish programUnsubscribe
Unsubscribe from program-account notifications.
signatureSubscribe
publish signatureSubscribe
Subscribe to a transaction signature to receive a single notification when the transaction reaches the requested commitment level.
signatureUnsubscribe
publish signatureUnsubscribe
Unsubscribe from signature notifications.
slotSubscribe
publish slotSubscribe
Subscribe to receive notification any time a slot is processed by the validator.
slotUnsubscribe
publish slotUnsubscribe
Unsubscribe from slot notifications.
voteSubscribe
publish voteSubscribe
Subscribe to receive notification any time a new vote is observed in gossip. These votes are pre-consensus and not guaranteed to land on chain.
voteUnsubscribe
publish voteUnsubscribe
Unsubscribe from vote notifications.
rootSubscribe
publish rootSubscribe
Subscribe to receive notification any time a new root is set by the validator.
rootUnsubscribe
publish rootUnsubscribe
Unsubscribe from root notifications.
chainstream.transactionsSubscribe
publish chainstreamTransactionsSubscribe
ChainStream `transactionsSubscribe` — receive real-time Solana transaction notifications consolidated across multiple validators. Supports the optional `verified` parameter to deliver only transactions confirmed by multiple validators at `processed` commitment.
chainstream.transactionsUnsubscribe
publish chainstreamTransactionsUnsubscribe
Unsubscribe from ChainStream transaction notifications.
chainstream.slotsSubscribe
publish chainstreamSlotsSubscribe
ChainStream `slotsSubscribe` — real-time slot updates consolidated across validators.
chainstream.slotsUnsubscribe
publish chainstreamSlotsUnsubscribe
Unsubscribe from ChainStream slot notifications.
chainstream.blocksSubscribe
publish chainstreamBlocksSubscribe
ChainStream `blocksSubscribe` — encoded block notifications consolidated across validators.
chainstream.blocksUnsubscribe
publish chainstreamBlocksUnsubscribe
Unsubscribe from ChainStream block notifications.

Messages

SimpleSubscribeRequest
JSON-RPC subscription request (no parameters)
UnsubscribeRequest
JSON-RPC unsubscribe request
UnsubscribeResult
JSON-RPC unsubscribe result
AccountSubscribeRequest
AccountSubscribeRequest
AccountNotification
AccountNotification
BlockSubscribeRequest
BlockSubscribeRequest
BlockNotification
BlockNotification
LogsSubscribeRequest
LogsSubscribeRequest
LogsNotification
LogsNotification
ProgramSubscribeRequest
ProgramSubscribeRequest
ProgramNotification
ProgramNotification
SignatureSubscribeRequest
SignatureSubscribeRequest
SignatureNotification
SignatureNotification
SlotNotification
SlotNotification
VoteNotification
VoteNotification
RootNotification
RootNotification
ChainstreamTransactionsSubscribeRequest
ChainstreamTransactionsSubscribeRequest
ChainstreamTransactionsNotification
ChainstreamTransactionsNotification
ChainstreamSlotsSubscribeRequest
ChainstreamSlotsSubscribeRequest
ChainstreamSlotsNotification
ChainstreamSlotsNotification
ChainstreamBlocksSubscribeRequest
ChainstreamBlocksSubscribeRequest
ChainstreamBlocksNotification
ChainstreamBlocksNotification

Servers

wss
solana-rpc-pubsub solana-mainnet.api.syndica.io/api-key/{apiKey}
Syndica Solana RPC PubSub WebSocket endpoint.
wss
chainstream chainstream.api.syndica.io/api-key/{apiKey}
Syndica ChainStream WebSocket endpoint.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
info:
  title: Syndica Solana RPC PubSub & ChainStream WebSocket API
  version: '1.0.0'
  description: |
    AsyncAPI 2.6 specification for Syndica's Solana WebSocket surface. Covers two
    products:

      1. **Solana RPC PubSub** — JSON-RPC 2.0 subscriptions served from
         `wss://solana-mainnet.api.syndica.io/api-key/<API_KEY>`. Drop-in
         compatible with the standard Solana PubSub methods (`accountSubscribe`,
         `blockSubscribe`, `logsSubscribe`, `programSubscribe`,
         `signatureSubscribe`, `slotSubscribe`, `voteSubscribe`,
         `rootSubscribe`) and their matching `*Unsubscribe` calls.
      2. **ChainStream** — Syndica's proprietary low-latency JSON-RPC 2.0
         streaming API served from
         `wss://chainstream.api.syndica.io/api-key/<API_KEY>`. Consolidates
         updates across multiple validators using a "fastest wins" strategy
         and supports `transactionsSubscribe`, `slotsSubscribe`, and
         `blocksSubscribe`, plus their `*Unsubscribe` counterparts.

    Authentication is performed by embedding the credential in the URL path.
  contact:
    name: Syndica Support
    url: https://docs.syndica.io
    email: [email protected]
  license:
    name: Proprietary
    url: https://syndica.io

defaultContentType: application/json

servers:
  solana-rpc-pubsub:
    url: solana-mainnet.api.syndica.io/api-key/{apiKey}
    protocol: wss
    description: Syndica Solana RPC PubSub WebSocket endpoint.
    variables:
      apiKey:
        description: Syndica API key (credential).
        default: REPLACE_WITH_API_KEY
  chainstream:
    url: chainstream.api.syndica.io/api-key/{apiKey}
    protocol: wss
    description: Syndica ChainStream WebSocket endpoint.
    variables:
      apiKey:
        description: Syndica API key (credential).
        default: REPLACE_WITH_API_KEY

channels:

  # ---------------- Solana RPC PubSub ----------------

  accountSubscribe:
    description: |
      Subscribe to an account to receive notifications when the lamports or data
      for a given account public key changes.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: accountSubscribe
      summary: Open an account subscription.
      message:
        $ref: '#/components/messages/AccountSubscribeRequest'
    subscribe:
      operationId: accountNotification
      summary: Receive account change notifications.
      message:
        $ref: '#/components/messages/AccountNotification'

  accountUnsubscribe:
    description: Unsubscribe from account-change notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: accountUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: accountUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  blockSubscribe:
    description: |
      Subscribe to receive notifications when a new block is confirmed or
      finalized. Filter by `all` or by `mentionsAccountOrProgram`.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: blockSubscribe
      message:
        $ref: '#/components/messages/BlockSubscribeRequest'
    subscribe:
      operationId: blockNotification
      message:
        $ref: '#/components/messages/BlockNotification'

  blockUnsubscribe:
    description: Unsubscribe from block notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: blockUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: blockUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  logsSubscribe:
    description: |
      Subscribe to transaction log notifications. Filter by `all`, `allWithVotes`,
      or by `mentions` of one account public key.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: logsSubscribe
      message:
        $ref: '#/components/messages/LogsSubscribeRequest'
    subscribe:
      operationId: logsNotification
      message:
        $ref: '#/components/messages/LogsNotification'

  logsUnsubscribe:
    description: Unsubscribe from log notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: logsUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: logsUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  programSubscribe:
    description: |
      Subscribe to a program to receive notifications when the lamports or data
      for any account owned by the program changes.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: programSubscribe
      message:
        $ref: '#/components/messages/ProgramSubscribeRequest'
    subscribe:
      operationId: programNotification
      message:
        $ref: '#/components/messages/ProgramNotification'

  programUnsubscribe:
    description: Unsubscribe from program-account notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: programUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: programUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  signatureSubscribe:
    description: |
      Subscribe to a transaction signature to receive a single notification when
      the transaction reaches the requested commitment level.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: signatureSubscribe
      message:
        $ref: '#/components/messages/SignatureSubscribeRequest'
    subscribe:
      operationId: signatureNotification
      message:
        $ref: '#/components/messages/SignatureNotification'

  signatureUnsubscribe:
    description: Unsubscribe from signature notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: signatureUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: signatureUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  slotSubscribe:
    description: Subscribe to receive notification any time a slot is processed by the validator.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: slotSubscribe
      message:
        $ref: '#/components/messages/SimpleSubscribeRequest'
    subscribe:
      operationId: slotNotification
      message:
        $ref: '#/components/messages/SlotNotification'

  slotUnsubscribe:
    description: Unsubscribe from slot notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: slotUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: slotUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  voteSubscribe:
    description: |
      Subscribe to receive notification any time a new vote is observed in gossip.
      These votes are pre-consensus and not guaranteed to land on chain.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: voteSubscribe
      message:
        $ref: '#/components/messages/SimpleSubscribeRequest'
    subscribe:
      operationId: voteNotification
      message:
        $ref: '#/components/messages/VoteNotification'

  voteUnsubscribe:
    description: Unsubscribe from vote notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: voteUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: voteUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  rootSubscribe:
    description: Subscribe to receive notification any time a new root is set by the validator.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: rootSubscribe
      message:
        $ref: '#/components/messages/SimpleSubscribeRequest'
    subscribe:
      operationId: rootNotification
      message:
        $ref: '#/components/messages/RootNotification'

  rootUnsubscribe:
    description: Unsubscribe from root notifications.
    servers:
      - solana-rpc-pubsub
    publish:
      operationId: rootUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: rootUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  # ---------------- ChainStream ----------------

  chainstream.transactionsSubscribe:
    description: |
      ChainStream `transactionsSubscribe` — receive real-time Solana transaction
      notifications consolidated across multiple validators. Supports the optional
      `verified` parameter to deliver only transactions confirmed by multiple
      validators at `processed` commitment.
    servers:
      - chainstream
    publish:
      operationId: chainstreamTransactionsSubscribe
      message:
        $ref: '#/components/messages/ChainstreamTransactionsSubscribeRequest'
    subscribe:
      operationId: chainstreamTransactionsNotification
      message:
        $ref: '#/components/messages/ChainstreamTransactionsNotification'

  chainstream.transactionsUnsubscribe:
    description: Unsubscribe from ChainStream transaction notifications.
    servers:
      - chainstream
    publish:
      operationId: chainstreamTransactionsUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: chainstreamTransactionsUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  chainstream.slotsSubscribe:
    description: ChainStream `slotsSubscribe` — real-time slot updates consolidated across validators.
    servers:
      - chainstream
    publish:
      operationId: chainstreamSlotsSubscribe
      message:
        $ref: '#/components/messages/ChainstreamSlotsSubscribeRequest'
    subscribe:
      operationId: chainstreamSlotsNotification
      message:
        $ref: '#/components/messages/ChainstreamSlotsNotification'

  chainstream.slotsUnsubscribe:
    description: Unsubscribe from ChainStream slot notifications.
    servers:
      - chainstream
    publish:
      operationId: chainstreamSlotsUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: chainstreamSlotsUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

  chainstream.blocksSubscribe:
    description: ChainStream `blocksSubscribe` — encoded block notifications consolidated across validators.
    servers:
      - chainstream
    publish:
      operationId: chainstreamBlocksSubscribe
      message:
        $ref: '#/components/messages/ChainstreamBlocksSubscribeRequest'
    subscribe:
      operationId: chainstreamBlocksNotification
      message:
        $ref: '#/components/messages/ChainstreamBlocksNotification'

  chainstream.blocksUnsubscribe:
    description: Unsubscribe from ChainStream block notifications.
    servers:
      - chainstream
    publish:
      operationId: chainstreamBlocksUnsubscribe
      message:
        $ref: '#/components/messages/UnsubscribeRequest'
    subscribe:
      operationId: chainstreamBlocksUnsubscribeResult
      message:
        $ref: '#/components/messages/UnsubscribeResult'

components:

  messages:

    # ---- Generic JSON-RPC envelopes ----

    SimpleSubscribeRequest:
      name: SimpleSubscribeRequest
      title: JSON-RPC subscription request (no parameters)
      payload:
        type: object
        required: [jsonrpc, id, method]
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string }
          params:
            type: array
            items: {}

    UnsubscribeRequest:
      name: UnsubscribeRequest
      title: JSON-RPC unsubscribe request
      payload:
        type: object
        required: [jsonrpc, id, method, params]
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string }
          params:
            type: array
            items: { type: integer }
            description: '[subscriptionId]'

    UnsubscribeResult:
      name: UnsubscribeResult
      title: JSON-RPC unsubscribe result
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          result: { type: boolean }

    # ---- accountSubscribe ----

    AccountSubscribeRequest:
      name: AccountSubscribeRequest
      payload:
        type: object
        required: [jsonrpc, id, method, params]
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [accountSubscribe] }
          params:
            type: array
            minItems: 1
            maxItems: 2
            items:
              oneOf:
                - type: string
                  description: Account public key (base-58).
                - $ref: '#/components/schemas/AccountSubscribeConfig'

    AccountNotification:
      name: AccountNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [accountNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  context:
                    $ref: '#/components/schemas/RpcContext'
                  value:
                    $ref: '#/components/schemas/AccountInfo'

    # ---- blockSubscribe ----

    BlockSubscribeRequest:
      name: BlockSubscribeRequest
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [blockSubscribe] }
          params:
            type: array
            items:
              oneOf:
                - type: string
                  enum: [all]
                - type: object
                  properties:
                    mentionsAccountOrProgram: { type: string }
                - $ref: '#/components/schemas/BlockSubscribeConfig'

    BlockNotification:
      name: BlockNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [blockNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  context:
                    $ref: '#/components/schemas/RpcContext'
                  value:
                    type: object
                    properties:
                      slot: { type: integer }
                      err: { type: [object, 'null'] }
                      block:
                        $ref: '#/components/schemas/Block'

    # ---- logsSubscribe ----

    LogsSubscribeRequest:
      name: LogsSubscribeRequest
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [logsSubscribe] }
          params:
            type: array
            items:
              oneOf:
                - type: string
                  enum: [all, allWithVotes]
                - type: object
                  properties:
                    mentions:
                      type: array
                      items: { type: string }
                - $ref: '#/components/schemas/CommitmentConfig'

    LogsNotification:
      name: LogsNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [logsNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  context:
                    $ref: '#/components/schemas/RpcContext'
                  value:
                    type: object
                    properties:
                      signature: { type: string }
                      err: { type: [object, 'null'] }
                      logs:
                        type: array
                        items: { type: string }

    # ---- programSubscribe ----

    ProgramSubscribeRequest:
      name: ProgramSubscribeRequest
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [programSubscribe] }
          params:
            type: array
            items:
              oneOf:
                - type: string
                  description: Program public key (base-58).
                - $ref: '#/components/schemas/ProgramSubscribeConfig'

    ProgramNotification:
      name: ProgramNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [programNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  context:
                    $ref: '#/components/schemas/RpcContext'
                  value:
                    type: object
                    properties:
                      pubkey: { type: string }
                      account:
                        $ref: '#/components/schemas/AccountInfo'

    # ---- signatureSubscribe ----

    SignatureSubscribeRequest:
      name: SignatureSubscribeRequest
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [signatureSubscribe] }
          params:
            type: array
            items:
              oneOf:
                - type: string
                  description: Transaction signature (base-58).
                - $ref: '#/components/schemas/SignatureSubscribeConfig'

    SignatureNotification:
      name: SignatureNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [signatureNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  context:
                    $ref: '#/components/schemas/RpcContext'
                  value:
                    type: object
                    properties:
                      err: { type: [object, 'null'] }

    # ---- slotSubscribe ----

    SlotNotification:
      name: SlotNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [slotNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  parent: { type: integer }
                  root: { type: integer }
                  slot: { type: integer }

    # ---- voteSubscribe ----

    VoteNotification:
      name: VoteNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [voteNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  hash: { type: string }
                  slots:
                    type: array
                    items: { type: integer }
                  timestamp: { type: [integer, 'null'] }
                  signature: { type: string }
                  votePubkey: { type: string }

    # ---- rootSubscribe ----

    RootNotification:
      name: RootNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [rootNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: integer
                description: Latest root slot number.

    # ---- ChainStream ----

    ChainstreamTransactionsSubscribeRequest:
      name: ChainstreamTransactionsSubscribeRequest
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [transactionsSubscribe] }
          params:
            type: array
            items:
              type: object
              properties:
                network: { type: string, enum: [solana-mainnet] }
                verified:
                  type: boolean
                  description: When true, deliver only transactions confirmed by multiple validators at `processed` commitment.
                filter:
                  type: object
                  description: Filter by accounts included/excluded, vote, failed status, etc.

    ChainstreamTransactionsNotification:
      name: ChainstreamTransactionsNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [transactionsNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  slot: { type: integer }
                  signature: { type: string }
                  transaction:
                    type: object
                    description: Encoded transaction payload.
                  meta:
                    type: object
                    description: Transaction status metadata.

    ChainstreamSlotsSubscribeRequest:
      name: ChainstreamSlotsSubscribeRequest
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [slotsSubscribe] }
          params:
            type: array
            items:
              type: object
              properties:
                network: { type: string, enum: [solana-mainnet] }

    ChainstreamSlotsNotification:
      name: ChainstreamSlotsNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [slotsNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  slot: { type: integer }
                  parent: { type: integer }
                  status: { type: string, enum: [processed, confirmed, finalized] }

    ChainstreamBlocksSubscribeRequest:
      name: ChainstreamBlocksSubscribeRequest
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          id: { type: integer }
          method: { type: string, enum: [blocksSubscribe] }
          params:
            type: array
            items:
              type: object
              properties:
                network: { type: string, enum: [solana-mainnet] }
                encoding: { type: string, enum: [base64, base58, json, jsonParsed] }
                transactionDetails: { type: string, enum: [full, accounts, signatures, none] }

    ChainstreamBlocksNotification:
      name: ChainstreamBlocksNotification
      payload:
        type: object
        properties:
          jsonrpc: { type: string, enum: ['2.0'] }
          method: { type: string, enum: [blocksNotification] }
          params:
            type: object
            properties:
              subscription: { type: integer }
              result:
                type: object
                properties:
                  slot: { type: integer }
                  block:
                    $ref: '#/components/schemas/Block'

  schemas:

    Commitment:
      type: string
      enum: [processed, confirmed, finalized]

    CommitmentConfig:
      type: object
      properties:
        commitment:
          $ref: '#/components/schemas/Commitment'

    Encoding:
      type: string
      enum: [base58, base64, base64+zstd, jsonParsed]

    RpcContext:
      type: object
      properties:
        slot: { type: integer }
        apiVersion: { type: string }

    AccountInfo:
      type: object
      properties:
        lamports: { type: integer }
        owner: { type: string }
        data:
          oneOf:
            - type: array
              items: { type: string }
            - type: object
        executable: { type: boolean }
        rentEpoch: { type: integer }
        space: { type: integer }

    AccountSubscribeConfig:
      type: object
      properties:
        commitment:
          $ref: '#/components/schemas/Commitment'
        encoding:
          $ref: '#/components/schemas/Encoding'

    BlockSubscribeConfig:
      type: object
      properties:
        commitment:
          $ref: '#/components/schemas/Commitment'
        encoding:
          $ref: '#/components/schemas/Encoding'
        transactionDetails:
          type: string
          enum: [full, accounts, signatures, none]
        showRewards: { type: boolean }
        maxSupportedTransactionVersion: { type: integer }

    ProgramSubscribeConfig:
      type: object
      properties:
        commitment:
          $ref: '#/components/schemas/Commitment'
        encoding:
          $ref: '#/components/schemas/Encoding'
        filters:
          type: array
          items: { type: object }
        withContext: { type: boolean }

    SignatureSubscribeConfig:
      type: object
      properties:
        commitment:
          $ref: '#/components/schemas/Commitment'
        enableReceivedNotification: { type: boolean }

    Block:
      type: object
      properties:
        blockHeight: { type: integer }
        blockTime: { type: [integer, 'null'] }
        blockhash: { type: string }
        parentSlot: { type: integer }
        previousBlockhash: { type: string }
        transactions:
          type: array
          items: { type: object }
        rewards:
          type: array
          items: { type: object }