Tensor Transaction API

Server-side transaction construction API that returns base64-encoded unsigned Solana transactions for the canonical Tensor marketplace flows — list, delist, edit listing, buy, place/accept/cancel collection bid, single-NFT bid, trait bid, deposit/withdraw escrow, create/edit/close AMM pool. Clients sign locally with the user's wallet and submit. Covers standard NFTs, programmable NFTs (pNFT), and compressed NFTs (cNFT).

OpenAPI Specification

tensor-tx-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Tensor Transaction (TX) API
  version: '1.0'
  description: |
    Server-side transaction construction API that returns base64-encoded unsigned
    Solana transactions for the Tensor marketplace flows. Clients sign with the
    user's wallet and submit to a Solana RPC endpoint.

    Operations cover legacy NFTs, programmable NFTs (pNFT), and Bubblegum
    compressed NFTs (cNFT). Endpoints encapsulate priority fees, royalty payments,
    Anchor IDL encoding, escrow operations, and AMM bonding-curve interactions so
    that callers do not need to construct Solana instructions by hand.

    All endpoints require an `x-tensor-api-key` header. Request access at
    https://dev.tensor.trade and follow the Airtable signup flow linked from the
    Tensor Developer Hub.
  contact:
    name: Tensor Developer Hub
    url: https://dev.tensor.trade
servers:
- url: https://api.mainnet.tensordev.io
  description: Mainnet TX construction API
security:
- ApiKeyAuth: []
tags:
- name: Listings
- name: Bids
- name: Pools
- name: Escrow
paths:
  /api/v1/tx/list:
    get:
      tags: [Listings]
      summary: Build List NFT Transaction
      operationId: buildListTx
      description: Construct a transaction to list an NFT, pNFT, or cNFT for sale.
      parameters:
      - { name: mint, in: query, required: true, schema: { type: string } }
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: price, in: query, required: true, schema: { type: string, description: 'Price in lamports.' } }
      - { name: blockhash, in: query, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/edit-listing:
    get:
      tags: [Listings]
      summary: Build Edit Listing Transaction
      operationId: buildEditListingTx
      parameters:
      - { name: mint, in: query, required: true, schema: { type: string } }
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: price, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/delist:
    get:
      tags: [Listings]
      summary: Build Delist Transaction
      operationId: buildDelistTx
      parameters:
      - { name: mint, in: query, required: true, schema: { type: string } }
      - { name: owner, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/buy:
    get:
      tags: [Listings]
      summary: Build Buy Transaction
      operationId: buildBuyTx
      parameters:
      - { name: mint, in: query, required: true, schema: { type: string } }
      - { name: buyer, in: query, required: true, schema: { type: string } }
      - { name: maxPrice, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/place-collection-bid:
    get:
      tags: [Bids]
      summary: Build Place Collection Bid Transaction
      operationId: buildPlaceCollectionBidTx
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      - { name: bidder, in: query, required: true, schema: { type: string } }
      - { name: price, in: query, required: true, schema: { type: string } }
      - { name: quantity, in: query, schema: { type: integer, default: 1 } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/place-single-nft-bid:
    get:
      tags: [Bids]
      summary: Build Place Single-NFT Bid Transaction
      operationId: buildPlaceSingleNftBidTx
      parameters:
      - { name: mint, in: query, required: true, schema: { type: string } }
      - { name: bidder, in: query, required: true, schema: { type: string } }
      - { name: price, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/place-trait-bid:
    get:
      tags: [Bids]
      summary: Build Place Trait Bid Transaction
      operationId: buildPlaceTraitBidTx
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      - { name: bidder, in: query, required: true, schema: { type: string } }
      - { name: trait, in: query, required: true, schema: { type: string } }
      - { name: value, in: query, required: true, schema: { type: string } }
      - { name: price, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/accept-bid:
    get:
      tags: [Bids]
      summary: Build Accept Bid Transaction
      operationId: buildAcceptBidTx
      parameters:
      - { name: bid, in: query, required: true, schema: { type: string } }
      - { name: mint, in: query, required: true, schema: { type: string } }
      - { name: seller, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/cancel-bid:
    get:
      tags: [Bids]
      summary: Build Cancel Bid Transaction
      operationId: buildCancelBidTx
      parameters:
      - { name: bid, in: query, required: true, schema: { type: string } }
      - { name: bidder, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/pool/create:
    get:
      tags: [Pools]
      summary: Build Create Pool Transaction
      operationId: buildCreatePoolTx
      description: Open a TensorAMM v2 bonding-curve pool.
      parameters:
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: slug, in: query, required: true, schema: { type: string } }
      - { name: poolType, in: query, required: true, schema: { type: string, enum: [Buy, Sell, TwoSided] } }
      - { name: curveType, in: query, required: true, schema: { type: string, enum: [Linear, Exponential] } }
      - { name: startingPrice, in: query, required: true, schema: { type: string } }
      - { name: delta, in: query, required: true, schema: { type: string } }
      - { name: mmFeeBps, in: query, schema: { type: integer } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/pool/edit:
    get:
      tags: [Pools]
      summary: Build Edit Pool Transaction
      operationId: buildEditPoolTx
      parameters:
      - { name: pool, in: query, required: true, schema: { type: string } }
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: startingPrice, in: query, schema: { type: string } }
      - { name: delta, in: query, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/pool/close:
    get:
      tags: [Pools]
      summary: Build Close Pool Transaction
      operationId: buildClosePoolTx
      parameters:
      - { name: pool, in: query, required: true, schema: { type: string } }
      - { name: owner, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/pool/deposit:
    get:
      tags: [Pools]
      summary: Build Pool Deposit Transaction
      operationId: buildPoolDepositTx
      parameters:
      - { name: pool, in: query, required: true, schema: { type: string } }
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: amount, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/pool/withdraw:
    get:
      tags: [Pools]
      summary: Build Pool Withdraw Transaction
      operationId: buildPoolWithdrawTx
      parameters:
      - { name: pool, in: query, required: true, schema: { type: string } }
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: amount, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/escrow/deposit:
    get:
      tags: [Escrow]
      summary: Build Shared Escrow Deposit Transaction
      operationId: buildEscrowDepositTx
      parameters:
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: amount, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
  /api/v1/tx/escrow/withdraw:
    get:
      tags: [Escrow]
      summary: Build Shared Escrow Withdraw Transaction
      operationId: buildEscrowWithdrawTx
      parameters:
      - { name: owner, in: query, required: true, schema: { type: string } }
      - { name: amount, in: query, required: true, schema: { type: string } }
      responses:
        '200': { $ref: '#/components/responses/UnsignedTx' }
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-tensor-api-key
  responses:
    UnsignedTx:
      description: Base64-encoded unsigned Solana transaction ready for client-side signing.
      content:
        application/json:
          schema:
            type: object
            required: [txs]
            properties:
              txs:
                type: array
                items:
                  type: object
                  required: [tx]
                  properties:
                    tx:
                      type: string
                      description: Base64-encoded serialized Solana versioned transaction.
                    lastValidBlockHeight:
                      type: integer
              metadata:
                type: object
                additionalProperties: true