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).

Tensor Transaction API is one of 3 APIs that Tensor publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko.

Tagged areas include NFT, Marketplace, Solana, Blockchain, and Web3. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

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