Tensor · AsyncAPI Specification

Tensor WebSocket API

Version 1.0

Realtime subscription stream for the Tensor Solana NFT marketplace. Clients open a single WebSocket connection authenticated with `x-tensor-api-key`, then send JSON subscribe/unsubscribe control frames addressing one of the channels below. The server publishes JSON event frames as marketplace state changes on-chain. Documented at https://dev.tensor.trade/reference.

View Spec View on GitHub NFTMarketplaceSolanaBlockchainWeb3CryptocurrencyTradingDAODeFiAMMAsyncAPIWebhooksEvents

Channels

newTransaction
Every confirmed marketplace transaction (list, delist, buy, bid placed, bid accepted, bid cancelled).
ammOrderUpdate
Updates to a specific TSwap or TAmm pool the client subscribed to.
ammOrderUpdateAll
Updates across all TSwap / TAmm pools in subscribed collections.
tcompBidUpdate
Updates to a specific compressed-NFT collection bid.
tcompBidUpdateAll
Updates across all compressed-NFT collection bids for subscribed collections.
ping
Keep-alive control frame. Server responds with `pong`.
unsubscribe
Cancel one or more active subscriptions.

Messages

TransactionEvent
TransactionEvent
PoolUpdate
PoolUpdate
BidUpdate
BidUpdate
Ping
Ping
Unsubscribe
Unsubscribe

Servers

wss
mainnet
Mainnet WebSocket subscription endpoint.

AsyncAPI Specification

Raw ↑
asyncapi: 3.0.0
info:
  title: Tensor WebSocket API
  version: '1.0'
  description: |
    Realtime subscription stream for the Tensor Solana NFT marketplace. Clients open a
    single WebSocket connection authenticated with `x-tensor-api-key`, then send JSON
    subscribe/unsubscribe control frames addressing one of the channels below. The
    server publishes JSON event frames as marketplace state changes on-chain.

    Documented at https://dev.tensor.trade/reference.
servers:
  mainnet:
    host: api.mainnet.tensordev.io
    protocol: wss
    description: Mainnet WebSocket subscription endpoint.
    security:
    - $ref: '#/components/securitySchemes/ApiKeyAuth'
channels:
  newTransaction:
    address: newTransaction
    messages:
      transactionEvent:
        $ref: '#/components/messages/TransactionEvent'
    description: Every confirmed marketplace transaction (list, delist, buy, bid placed, bid accepted, bid cancelled).
  ammOrderUpdate:
    address: ammOrderUpdate
    messages:
      poolUpdate:
        $ref: '#/components/messages/PoolUpdate'
    description: Updates to a specific TSwap or TAmm pool the client subscribed to.
  ammOrderUpdateAll:
    address: ammOrderUpdateAll
    messages:
      poolUpdate:
        $ref: '#/components/messages/PoolUpdate'
    description: Updates across all TSwap / TAmm pools in subscribed collections.
  tcompBidUpdate:
    address: tcompBidUpdate
    messages:
      bidUpdate:
        $ref: '#/components/messages/BidUpdate'
    description: Updates to a specific compressed-NFT collection bid.
  tcompBidUpdateAll:
    address: tcompBidUpdateAll
    messages:
      bidUpdate:
        $ref: '#/components/messages/BidUpdate'
    description: Updates across all compressed-NFT collection bids for subscribed collections.
  ping:
    address: ping
    messages:
      ping:
        $ref: '#/components/messages/Ping'
    description: Keep-alive control frame. Server responds with `pong`.
  unsubscribe:
    address: unsubscribe
    messages:
      unsubscribe:
        $ref: '#/components/messages/Unsubscribe'
    description: Cancel one or more active subscriptions.
operations:
  receiveTransaction:
    action: receive
    channel:
      $ref: '#/channels/newTransaction'
  receiveAmmOrderUpdate:
    action: receive
    channel:
      $ref: '#/channels/ammOrderUpdate'
  receiveAmmOrderUpdateAll:
    action: receive
    channel:
      $ref: '#/channels/ammOrderUpdateAll'
  receiveTcompBidUpdate:
    action: receive
    channel:
      $ref: '#/channels/tcompBidUpdate'
  receiveTcompBidUpdateAll:
    action: receive
    channel:
      $ref: '#/channels/tcompBidUpdateAll'
  sendPing:
    action: send
    channel:
      $ref: '#/channels/ping'
  sendUnsubscribe:
    action: send
    channel:
      $ref: '#/channels/unsubscribe'
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-tensor-api-key
  messages:
    TransactionEvent:
      name: TransactionEvent
      contentType: application/json
      payload:
        type: object
        properties:
          slot: { type: integer }
          signature: { type: string }
          mint: { type: string }
          txType: { type: string, enum: [List, Delist, Buy, Bid, BidCancel, BidAccept, PoolCreate, PoolEdit, PoolClose] }
          price: { type: string, description: 'Lamports.' }
          buyer: { type: string }
          seller: { type: string }
          collectionSlug: { type: string }
    PoolUpdate:
      name: PoolUpdate
      contentType: application/json
      payload:
        type: object
        properties:
          pool: { type: string }
          owner: { type: string }
          collectionSlug: { type: string }
          startingPrice: { type: string }
          delta: { type: string }
          poolType: { type: string }
          curveType: { type: string }
          nftsHeld: { type: integer }
          solBalance: { type: string }
    BidUpdate:
      name: BidUpdate
      contentType: application/json
      payload:
        type: object
        properties:
          bid: { type: string }
          bidder: { type: string }
          collectionSlug: { type: string }
          price: { type: string }
          quantity: { type: integer }
          margin: { type: string }
    Ping:
      name: Ping
      contentType: application/json
      payload:
        type: object
        properties:
          op: { type: string, const: ping }
    Unsubscribe:
      name: Unsubscribe
      contentType: application/json
      payload:
        type: object
        properties:
          op: { type: string, const: unsubscribe }
          channel: { type: string }
          target: { type: string, description: 'Slug, pool, bid, or mint depending on channel.' }