Arbitrum · AsyncAPI Specification

Arbitrum Public WebSocket APIs

Version 1.0.0

AsyncAPI description of the WebSocket surface that Arbitrum exposes from publicly documented endpoints. ## Important scope notes (from Arbitrum docs) Arbitrum's public RPC endpoints — `arb1.arbitrum.io/rpc`, `nova.arbitrum.io/rpc`, and `sepolia-rollup.arbitrum.io/rpc` — **do not expose JSON-RPC over WebSockets**. The Arbitrum documentation states explicitly: "Arbitrum public RPCs do not provide Websocket support." Production teams use Alchemy, QuickNode, Infura, Chainstack, dRPC, Ankr, Allnodes, or a self-hosted Nitro node to obtain a WSS JSON-RPC endpoint. The *only* WebSocket interface Arbitrum publishes on its own domains is the **Nitro Sequencer Feed**, a public, read-only broadcast of ordered `BroadcastFeedMessage` envelopes. This document describes: 1. The Nitro Sequencer Feed channels (`arb1`, `nova`, `sepolia`). 2. The `eth_subscribe` channels that work against an Arbitrum Nitro JSON-RPC WebSocket *when one is available* (self-hosted node or third-party provider). These are included so consumers can model the message shape with Arbitrum's documented block extensions (`l1BlockNumber`, `sendRoot`, `sendCount`, modified `mixHash`, fixed `difficulty` / `gasLimit`, custom transaction types). ## eth_subscribe support on Arbitrum Nitro * `newHeads` — supported. Blocks include the Arbitrum-specific fields documented under "RPC methods" (`l1BlockNumber`, `sendRoot`, `sendCount`, `extraData == sendRoot`, mixed `mixHash`, fixed `difficulty` / `gasLimit`). * `logs` — supported. * `newPendingTransactions` — Arbitrum has a single centralized Sequencer and orders transactions on receipt; there is no public mempool, so the practical utility differs from L1 Ethereum. The subscription topic is accepted by Nitro for compatibility but does not surface a mempool the way Ethereum does. * `syncing` — accepted by Nitro for go-ethereum compatibility. No `arb_subscribe` family of methods is documented by Offchain Labs at the time of writing.

View Spec View on GitHub Layer 2EthereumRollupJSON-RPCStylusNitroOrbitBridgeAsyncAPIEventsWebSockets

Channels

/feed/arb1
subscribe receiveArb1SequencerFeed
Receive ordered sequencer broadcast messages from Arbitrum One.
Nitro Sequencer broadcast feed for Arbitrum One. The connection is a raw WebSocket; each text frame is a JSON `BroadcastMessage`.
/feed/nova
subscribe receiveNovaSequencerFeed
Receive ordered sequencer broadcast messages from Arbitrum Nova.
Nitro Sequencer broadcast feed for Arbitrum Nova.
/feed/sepolia
subscribe receiveSepoliaSequencerFeed
Receive ordered sequencer broadcast messages from Arbitrum Sepolia.
Nitro Sequencer broadcast feed for Arbitrum Sepolia testnet.
eth_subscribe/newHeads
publish subscribeNewHeads
Open a `newHeads` subscription.
`eth_subscribe("newHeads")` on a Nitro JSON-RPC WebSocket. Emits a notification for every new L2 head produced by the Sequencer. Blocks include Arbitrum-specific fields (`l1BlockNumber`, `sendRoot`, `sendCount`, modified `mixHash`, fixed `difficulty` / `gasLimit`).
eth_subscribe/logs
publish subscribeLogs
Open a `logs` subscription with an address/topics filter.
`eth_subscribe("logs", {address, topics})` on a Nitro JSON-RPC WebSocket. Emits a notification for each log matching the supplied address/topics filter.
eth_subscribe/newPendingTransactions
publish subscribeNewPendingTransactions
Open a `newPendingTransactions` subscription.
`eth_subscribe("newPendingTransactions")`. Accepted by Nitro for go-ethereum compatibility, but Arbitrum's centralized Sequencer orders transactions on receipt — there is no public mempool, so the stream is effectively empty / of limited use compared to L1 Ethereum.
eth_subscribe/syncing
publish subscribeSyncing
Open a `syncing` subscription.
`eth_subscribe("syncing")`. Accepted by Nitro for go-ethereum compatibility. Notifications reflect the local node's sync status.

Messages

BroadcastMessage
Nitro Sequencer Broadcast Envelope
Top-level envelope emitted by the Nitro Sequencer feed broadcaster.
JsonRpcSubscribeRequestNewHeads
eth_subscribe newHeads request
JsonRpcSubscribeRequestLogs
eth_subscribe logs request
JsonRpcSubscribeRequestNewPendingTxs
eth_subscribe newPendingTransactions request
JsonRpcSubscribeRequestSyncing
eth_subscribe syncing request
EthSubscriptionNewHead
eth_subscription notification — newHeads
EthSubscriptionLog
eth_subscription notification — logs
EthSubscriptionPendingTxHash
eth_subscription notification — pending tx hash
EthSubscriptionSyncing
eth_subscription notification — syncing

Servers

wss
arb1-feed arb1-feed.arbitrum.io/feed
Public Nitro Sequencer broadcast feed for Arbitrum One mainnet (chain ID 42161). Read-only stream of ordered `BroadcastFeedMessage` envelopes. The `blockNumber` carried inside messages refers to the parent-chain (L1) block; L2 block number is computed as `genesisBlockNumber + sequenceNumber` (Arbitrum One genesis is 22207817).
wss
nova-feed nova-feed.arbitrum.io/feed
Public Nitro Sequencer broadcast feed for Arbitrum Nova (chain ID 42170, AnyTrust DAC chain).
wss
sepolia-feed sepolia-rollup.arbitrum.io/feed
Public Nitro Sequencer broadcast feed for Arbitrum Sepolia testnet (chain ID 421614).
wss
nitro-rpc-ws {host}
Generic JSON-RPC WebSocket endpoint exposed by a self-hosted Nitro node or a third-party provider (Alchemy, QuickNode, Infura, Chainstack, dRPC, Ankr, Allnodes). Arbitrum's own public RPC hosts (`arb1.arbitrum.io/rpc`, `nova.arbitrum.io/rpc`, `sepolia-rollup.arbitrum.io/rpc`) do not accept WebSocket upgrades.

AsyncAPI Specification

Raw ↑
asyncapi: '2.6.0'
id: 'urn:com:arbitrum:public-wss'
info:
  title: Arbitrum Public WebSocket APIs
  version: '1.0.0'
  description: >-
    AsyncAPI description of the WebSocket surface that Arbitrum exposes from
    publicly documented endpoints.


    ## Important scope notes (from Arbitrum docs)


    Arbitrum's public RPC endpoints — `arb1.arbitrum.io/rpc`,
    `nova.arbitrum.io/rpc`, and `sepolia-rollup.arbitrum.io/rpc` — **do not
    expose JSON-RPC over WebSockets**. The Arbitrum documentation states
    explicitly: "Arbitrum public RPCs do not provide Websocket support."
    Production teams use Alchemy, QuickNode, Infura, Chainstack, dRPC, Ankr,
    Allnodes, or a self-hosted Nitro node to obtain a WSS JSON-RPC endpoint.


    The *only* WebSocket interface Arbitrum publishes on its own domains is the
    **Nitro Sequencer Feed**, a public, read-only broadcast of ordered
    `BroadcastFeedMessage` envelopes. This document describes:


      1. The Nitro Sequencer Feed channels (`arb1`, `nova`, `sepolia`).
      2. The `eth_subscribe` channels that work against an Arbitrum Nitro
         JSON-RPC WebSocket *when one is available* (self-hosted node or
         third-party provider). These are included so consumers can model the
         message shape with Arbitrum's documented block extensions
         (`l1BlockNumber`, `sendRoot`, `sendCount`, modified `mixHash`,
         fixed `difficulty` / `gasLimit`, custom transaction types).


    ## eth_subscribe support on Arbitrum Nitro


      * `newHeads` — supported. Blocks include the Arbitrum-specific fields
        documented under "RPC methods" (`l1BlockNumber`, `sendRoot`,
        `sendCount`, `extraData == sendRoot`, mixed `mixHash`, fixed
        `difficulty` / `gasLimit`).
      * `logs` — supported.
      * `newPendingTransactions` — Arbitrum has a single centralized Sequencer
        and orders transactions on receipt; there is no public mempool, so the
        practical utility differs from L1 Ethereum. The subscription topic is
        accepted by Nitro for compatibility but does not surface a mempool the
        way Ethereum does.
      * `syncing` — accepted by Nitro for go-ethereum compatibility.


    No `arb_subscribe` family of methods is documented by Offchain Labs at the
    time of writing.
  contact:
    name: API Evangelist
    url: https://apievangelist.com
    email: kin@apievangelist.com
  license:
    name: Arbitrum docs (CC-BY)
    url: https://docs.arbitrum.io
  tags:
    - name: arbitrum
    - name: nitro
    - name: layer-2
    - name: sequencer-feed
    - name: json-rpc
    - name: websocket

defaultContentType: application/json

servers:
  arb1-feed:
    url: arb1-feed.arbitrum.io/feed
    protocol: wss
    description: >-
      Public Nitro Sequencer broadcast feed for Arbitrum One mainnet
      (chain ID 42161). Read-only stream of ordered `BroadcastFeedMessage`
      envelopes. The `blockNumber` carried inside messages refers to the
      parent-chain (L1) block; L2 block number is computed as
      `genesisBlockNumber + sequenceNumber` (Arbitrum One genesis is
      22207817).
  nova-feed:
    url: nova-feed.arbitrum.io/feed
    protocol: wss
    description: >-
      Public Nitro Sequencer broadcast feed for Arbitrum Nova (chain ID 42170,
      AnyTrust DAC chain).
  sepolia-feed:
    url: sepolia-rollup.arbitrum.io/feed
    protocol: wss
    description: >-
      Public Nitro Sequencer broadcast feed for Arbitrum Sepolia testnet
      (chain ID 421614).
  nitro-rpc-ws:
    url: '{host}'
    protocol: wss
    description: >-
      Generic JSON-RPC WebSocket endpoint exposed by a self-hosted Nitro node
      or a third-party provider (Alchemy, QuickNode, Infura, Chainstack, dRPC,
      Ankr, Allnodes). Arbitrum's own public RPC hosts
      (`arb1.arbitrum.io/rpc`, `nova.arbitrum.io/rpc`,
      `sepolia-rollup.arbitrum.io/rpc`) do not accept WebSocket upgrades.
    variables:
      host:
        description: Provider- or operator-supplied WSS host and path.
        default: arb-mainnet.g.alchemy.com/v2/YOUR_KEY

channels:
  /feed/arb1:
    servers:
      - arb1-feed
    description: >-
      Nitro Sequencer broadcast feed for Arbitrum One. The connection is a
      raw WebSocket; each text frame is a JSON `BroadcastMessage`.
    subscribe:
      operationId: receiveArb1SequencerFeed
      summary: Receive ordered sequencer broadcast messages from Arbitrum One.
      message:
        $ref: '#/components/messages/BroadcastMessage'
  /feed/nova:
    servers:
      - nova-feed
    description: Nitro Sequencer broadcast feed for Arbitrum Nova.
    subscribe:
      operationId: receiveNovaSequencerFeed
      summary: Receive ordered sequencer broadcast messages from Arbitrum Nova.
      message:
        $ref: '#/components/messages/BroadcastMessage'
  /feed/sepolia:
    servers:
      - sepolia-feed
    description: Nitro Sequencer broadcast feed for Arbitrum Sepolia testnet.
    subscribe:
      operationId: receiveSepoliaSequencerFeed
      summary: Receive ordered sequencer broadcast messages from Arbitrum Sepolia.
      message:
        $ref: '#/components/messages/BroadcastMessage'

  eth_subscribe/newHeads:
    servers:
      - nitro-rpc-ws
    description: >-
      `eth_subscribe("newHeads")` on a Nitro JSON-RPC WebSocket. Emits a
      notification for every new L2 head produced by the Sequencer. Blocks
      include Arbitrum-specific fields (`l1BlockNumber`, `sendRoot`,
      `sendCount`, modified `mixHash`, fixed `difficulty` / `gasLimit`).
    publish:
      operationId: subscribeNewHeads
      summary: Open a `newHeads` subscription.
      message:
        $ref: '#/components/messages/JsonRpcSubscribeRequestNewHeads'
    subscribe:
      operationId: receiveNewHeads
      summary: Receive `eth_subscription` notifications for new heads.
      message:
        $ref: '#/components/messages/EthSubscriptionNewHead'

  eth_subscribe/logs:
    servers:
      - nitro-rpc-ws
    description: >-
      `eth_subscribe("logs", {address, topics})` on a Nitro JSON-RPC
      WebSocket. Emits a notification for each log matching the supplied
      address/topics filter.
    publish:
      operationId: subscribeLogs
      summary: Open a `logs` subscription with an address/topics filter.
      message:
        $ref: '#/components/messages/JsonRpcSubscribeRequestLogs'
    subscribe:
      operationId: receiveLogs
      summary: Receive `eth_subscription` notifications for matching logs.
      message:
        $ref: '#/components/messages/EthSubscriptionLog'

  eth_subscribe/newPendingTransactions:
    servers:
      - nitro-rpc-ws
    description: >-
      `eth_subscribe("newPendingTransactions")`. Accepted by Nitro for
      go-ethereum compatibility, but Arbitrum's centralized Sequencer orders
      transactions on receipt — there is no public mempool, so the stream is
      effectively empty / of limited use compared to L1 Ethereum.
    publish:
      operationId: subscribeNewPendingTransactions
      summary: Open a `newPendingTransactions` subscription.
      message:
        $ref: '#/components/messages/JsonRpcSubscribeRequestNewPendingTxs'
    subscribe:
      operationId: receiveNewPendingTransactions
      summary: Receive pending transaction hash notifications.
      message:
        $ref: '#/components/messages/EthSubscriptionPendingTxHash'

  eth_subscribe/syncing:
    servers:
      - nitro-rpc-ws
    description: >-
      `eth_subscribe("syncing")`. Accepted by Nitro for go-ethereum
      compatibility. Notifications reflect the local node's sync status.
    publish:
      operationId: subscribeSyncing
      summary: Open a `syncing` subscription.
      message:
        $ref: '#/components/messages/JsonRpcSubscribeRequestSyncing'
    subscribe:
      operationId: receiveSyncing
      summary: Receive `syncing` status notifications.
      message:
        $ref: '#/components/messages/EthSubscriptionSyncing'

components:
  messages:
    BroadcastMessage:
      name: BroadcastMessage
      title: Nitro Sequencer Broadcast Envelope
      summary: >-
        Top-level envelope emitted by the Nitro Sequencer feed broadcaster.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BroadcastMessage'

    JsonRpcSubscribeRequestNewHeads:
      name: JsonRpcSubscribeRequestNewHeads
      title: eth_subscribe newHeads request
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcRequest'
          - type: object
            properties:
              method:
                const: eth_subscribe
              params:
                type: array
                minItems: 1
                maxItems: 1
                items:
                  - const: newHeads

    JsonRpcSubscribeRequestLogs:
      name: JsonRpcSubscribeRequestLogs
      title: eth_subscribe logs request
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcRequest'
          - type: object
            properties:
              method:
                const: eth_subscribe
              params:
                type: array
                minItems: 1
                maxItems: 2
                items:
                  - const: logs
                  - $ref: '#/components/schemas/LogsFilter'

    JsonRpcSubscribeRequestNewPendingTxs:
      name: JsonRpcSubscribeRequestNewPendingTxs
      title: eth_subscribe newPendingTransactions request
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcRequest'
          - type: object
            properties:
              method:
                const: eth_subscribe
              params:
                type: array
                minItems: 1
                maxItems: 2
                items:
                  - const: newPendingTransactions
                  - type: boolean
                    description: >-
                      Optional boolean. If true, emit full transaction objects
                      instead of just hashes (provider-dependent).

    JsonRpcSubscribeRequestSyncing:
      name: JsonRpcSubscribeRequestSyncing
      title: eth_subscribe syncing request
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcRequest'
          - type: object
            properties:
              method:
                const: eth_subscribe
              params:
                type: array
                minItems: 1
                maxItems: 1
                items:
                  - const: syncing

    EthSubscriptionNewHead:
      name: EthSubscriptionNewHead
      title: eth_subscription notification — newHeads
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcSubscriptionNotification'
          - type: object
            properties:
              params:
                type: object
                properties:
                  subscription:
                    type: string
                  result:
                    $ref: '#/components/schemas/ArbitrumBlockHeader'

    EthSubscriptionLog:
      name: EthSubscriptionLog
      title: eth_subscription notification — logs
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcSubscriptionNotification'
          - type: object
            properties:
              params:
                type: object
                properties:
                  subscription:
                    type: string
                  result:
                    $ref: '#/components/schemas/Log'

    EthSubscriptionPendingTxHash:
      name: EthSubscriptionPendingTxHash
      title: eth_subscription notification — pending tx hash
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcSubscriptionNotification'
          - type: object
            properties:
              params:
                type: object
                properties:
                  subscription:
                    type: string
                  result:
                    type: string
                    pattern: '^0x[0-9a-fA-F]{64}$'
                    description: 32-byte transaction hash.

    EthSubscriptionSyncing:
      name: EthSubscriptionSyncing
      title: eth_subscription notification — syncing
      contentType: application/json
      payload:
        allOf:
          - $ref: '#/components/schemas/JsonRpcSubscriptionNotification'
          - type: object
            properties:
              params:
                type: object
                properties:
                  subscription:
                    type: string
                  result:
                    oneOf:
                      - type: boolean
                        description: false when not syncing.
                      - type: object
                        properties:
                          syncing:
                            type: boolean
                          status:
                            type: object
                            additionalProperties: true

  schemas:
    JsonRpcRequest:
      type: object
      required:
        - jsonrpc
        - id
        - method
      properties:
        jsonrpc:
          type: string
          const: '2.0'
        id:
          oneOf:
            - type: integer
            - type: string
        method:
          type: string
        params:
          type: array

    JsonRpcSubscribeResponse:
      type: object
      required:
        - jsonrpc
        - id
        - result
      properties:
        jsonrpc:
          type: string
          const: '2.0'
        id:
          oneOf:
            - type: integer
            - type: string
        result:
          type: string
          description: Subscription ID (hex-encoded) returned by the node.

    JsonRpcSubscriptionNotification:
      type: object
      required:
        - jsonrpc
        - method
        - params
      properties:
        jsonrpc:
          type: string
          const: '2.0'
        method:
          type: string
          const: eth_subscription
        params:
          type: object
          required:
            - subscription
            - result
          properties:
            subscription:
              type: string
              description: The subscription ID this notification belongs to.
            result:
              description: Subscription-specific payload.

    LogsFilter:
      type: object
      properties:
        address:
          oneOf:
            - type: string
              pattern: '^0x[0-9a-fA-F]{40}$'
            - type: array
              items:
                type: string
                pattern: '^0x[0-9a-fA-F]{40}$'
        topics:
          type: array
          maxItems: 4
          items:
            oneOf:
              - type: 'null'
              - type: string
                pattern: '^0x[0-9a-fA-F]{64}$'
              - type: array
                items:
                  type: string
                  pattern: '^0x[0-9a-fA-F]{64}$'

    ArbitrumBlockHeader:
      type: object
      description: >-
        Block header as returned by an Arbitrum Nitro node. Extends the
        Ethereum block header with Arbitrum-specific fields documented under
        "RPC methods" in the Arbitrum developer docs.
      properties:
        number:
          type: string
          description: L2 block number (hex).
        hash:
          type: string
          pattern: '^0x[0-9a-fA-F]{64}$'
        parentHash:
          type: string
          pattern: '^0x[0-9a-fA-F]{64}$'
        nonce:
          type: string
        sha3Uncles:
          type: string
        logsBloom:
          type: string
        transactionsRoot:
          type: string
        stateRoot:
          type: string
        receiptsRoot:
          type: string
        miner:
          type: string
        difficulty:
          type: string
          const: '0x1'
          description: Fixed at 0x1 on Arbitrum.
        totalDifficulty:
          type: string
        extraData:
          type: string
          description: >-
            On Arbitrum, `extraData` is equivalent to `sendRoot` — the Merkle
            root of the outbox tree state.
        size:
          type: string
        gasLimit:
          type: string
          const: '0x4000000000000'
          description: Fixed at 0x4000000000000 on Arbitrum.
        gasUsed:
          type: string
        timestamp:
          type: string
        transactions:
          type: array
          items:
            type: string
        uncles:
          type: array
          items:
            type: string
        mixHash:
          type: string
          description: >-
            On Arbitrum, the first 8 bytes mirror `sendCount` and the second
            8 bytes mirror `l1BlockNumber`.
        l1BlockNumber:
          type: string
          description: >-
            Arbitrum-specific. Approximate block number of the first
            non-Arbitrum ancestor chain (Ethereum L1 for Arbitrum One / Nova /
            Sepolia) that occurred before this child-chain block.
        sendRoot:
          type: string
          description: >-
            Arbitrum-specific. Merkle root of the outbox tree state. Equal
            to `extraData`.
        sendCount:
          type: string
          description: >-
            Arbitrum-specific. Number of child-to-parent chain messages since
            Nitro genesis.

    Log:
      type: object
      properties:
        address:
          type: string
        topics:
          type: array
          items:
            type: string
        data:
          type: string
        blockNumber:
          type: string
        transactionHash:
          type: string
        transactionIndex:
          type: string
        blockHash:
          type: string
        logIndex:
          type: string
        removed:
          type: boolean

    BroadcastMessage:
      type: object
      description: >-
        Top-level Sequencer feed envelope (Go: `broadcaster/message.BroadcastMessage`).
        Fields use `omitempty`; the feed is forward-compatible and may add
        fields without breaking clients.
      required:
        - version
      properties:
        version:
          type: integer
          description: Broadcast protocol version.
        messages:
          type: array
          items:
            $ref: '#/components/schemas/BroadcastFeedMessage'
        confirmedSequenceNumberMessage:
          $ref: '#/components/schemas/ConfirmedSequenceNumberMessage'

    BroadcastFeedMessage:
      type: object
      description: >-
        A single ordered Sequencer message.
      properties:
        sequenceNumber:
          type: integer
          description: >-
            Monotonic message index. For Arbitrum One, the L2 block number
            equals `22207817 + sequenceNumber` (genesis offset).
        message:
          $ref: '#/components/schemas/MessageWithMetadata'
        blockHash:
          type: string
          pattern: '^0x[0-9a-fA-F]{64}$'
          description: Optional associated L2 block hash.
        signature:
          type: string
          description: Legacy / nullable signature field.
        signatureV2:
          type: string
          description: >-
            Current signature over (chainId, sequenceNumber, blockHash,
            blockMetadata, message).
        blockMetadata:
          type: string
          description: Optional opaque block-related metadata blob.

    MessageWithMetadata:
      type: object
      description: >-
        Carries the L1IncomingMessage plus delayed-message bookkeeping.
      properties:
        message:
          $ref: '#/components/schemas/L1IncomingMessage'
        delayedMessagesRead:
          type: integer

    L1IncomingMessage:
      type: object
      description: >-
        Inbox-message envelope: a header plus the L2 message bytes
        (decodable with Nitro's `ParseL2Transactions`).
      properties:
        header:
          $ref: '#/components/schemas/L1IncomingMessageHeader'
        l2Msg:
          type: string
          description: Base64- or hex-encoded L2 message bytes.

    L1IncomingMessageHeader:
      type: object
      properties:
        kind:
          type: integer
          description: >-
            Message kind. Maps to Arbitrum transaction types — e.g. 100
            (`ArbitrumDepositTx`, 0x64), 101 (`ArbitrumUnsignedTx`, 0x65),
            102 (`ArbitrumContractTx`, 0x66), 104 (`ArbitrumRetryTx`, 0x68),
            105 (`ArbitrumSubmitRetryableTx`, 0x6A), 106
            (`ArbitrumInternalTx`, 0x6B).
        sender:
          type: string
          pattern: '^0x[0-9a-fA-F]{40}$'
        blockNumber:
          type: integer
          description: >-
            Parent-chain (L1) block number at which this inbox message was
            posted — NOT the L2 block number.
        timestamp:
          type: integer
          description: Parent-chain (L1) timestamp.
        requestId:
          type: string
          description: >-
            Parent-to-child inbox queue position. Surfaces on cross-chain
            transactions.
        baseFeeL1:
          type: string
          description: Parent-chain base fee at the time of inclusion.

    ConfirmedSequenceNumberMessage:
      type: object
      properties:
        sequenceNumber:
          type: integer
          description: Highest sequencer number confirmed at this point in the stream.

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/arbitrum-asyncapi"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.