Tensor API

Read API surface for the Tensor marketplace covering collections, NFT mint metadata, active listings, bids (collection-wide, single-NFT, trait), TSwap and TAmm pool state, user portfolios, transaction history, royalty enforcement metadata, priority fee oracle, and whitelist verification. Authenticate via the `x-tensor-api-key` header issued through the Tensor Developer Hub.

Tensor 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 and 5 JSON Schema definitions.

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

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

tensor-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Tensor API
  version: '1.0'
  description: |
    Read-only REST surface for the Tensor Solana NFT marketplace. Covers collections,
    NFT mint metadata, active listings, bids (collection / single-NFT / trait), TSwap
    and TAmm pool state, user portfolios, transaction history, royalty enforcement
    metadata, priority fee oracle, and whitelist verification.

    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.

    Operation paths in this spec are illustrative resource-oriented routes mirroring
    the published reference at https://dev.tensor.trade/reference. Consult the live
    reference for canonical request and response payload field names.
  termsOfService: https://tensor.trade/legal/terms-of-service
  contact:
    name: Tensor Developer Hub
    url: https://dev.tensor.trade
  license:
    name: Proprietary
    url: https://tensor.trade/legal/terms-of-service
servers:
- url: https://api.mainnet.tensordev.io
  description: Mainnet REST API
security:
- ApiKeyAuth: []
tags:
- name: Collections
- name: NFTs
- name: Listings
- name: Bids
- name: Pools
- name: User
- name: Utility
paths:
  /api/v1/collections/find:
    get:
      tags: [Collections]
      summary: Find Any Collection
      operationId: findCollection
      description: Search verified and unverified collections by slug, name, or on-chain identifier.
      parameters:
      - { name: query, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: A list of matching collections.
          content:
            application/json:
              schema: { type: array, items: { $ref: '#/components/schemas/Collection' } }
  /api/v1/collections/verified:
    get:
      tags: [Collections]
      summary: Get Verified Collections
      operationId: listVerifiedCollections
      responses:
        '200':
          description: Verified collections.
          content:
            application/json:
              schema: { type: array, items: { $ref: '#/components/schemas/Collection' } }
  /api/v1/collections/{slug}/traits:
    get:
      tags: [Collections]
      summary: Collection Traits
      operationId: getCollectionTraits
      parameters:
      - { name: slug, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Trait dictionary for the collection. }
  /api/v1/collections/search:
    get:
      tags: [Collections]
      summary: Search Collections
      operationId: searchCollections
      parameters:
      - { name: q, in: query, schema: { type: string } }
      - { name: limit, in: query, schema: { type: integer, default: 50 } }
      responses:
        '200':
          description: Search results.
  /api/v1/collections/by-nfts:
    get:
      tags: [Collections]
      summary: Get Collections by NFTs
      operationId: getCollectionsByNfts
      parameters:
      - { name: mints, in: query, required: true, schema: { type: array, items: { type: string } }, style: form, explode: false }
      responses:
        '200': { description: Collections for the supplied mints. }
  /api/v1/mints/info:
    get:
      tags: [NFTs]
      summary: NFTs Info
      operationId: getMintsInfo
      parameters:
      - { name: mints, in: query, required: true, schema: { type: array, items: { type: string } }, style: form, explode: false }
      responses:
        '200':
          description: Mint metadata for each requested NFT.
          content:
            application/json:
              schema: { type: array, items: { $ref: '#/components/schemas/Mint' } }
  /api/v1/collections/{slug}/mints:
    get:
      tags: [NFTs]
      summary: NFTs by Collection
      operationId: getNftsByCollection
      parameters:
      - { name: slug, in: path, required: true, schema: { type: string } }
      - { name: limit, in: query, schema: { type: integer, default: 100 } }
      - { name: cursor, in: query, schema: { type: string } }
      responses:
        '200': { description: Paginated mints in the collection. }
  /api/v1/collections/{slug}/mint-list:
    get:
      tags: [NFTs]
      summary: Mint List
      operationId: getMintList
      parameters:
      - { name: slug, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Complete list of mints in the collection. }
  /api/v1/listings:
    get:
      tags: [Listings]
      summary: Active Listings
      operationId: listActiveListings
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      - { name: sortBy, in: query, schema: { type: string, enum: [PriceAsc, PriceDesc, RankAsc, RankDesc, ListedDesc] } }
      - { name: limit, in: query, schema: { type: integer, default: 50 } }
      - { name: cursor, in: query, schema: { type: string } }
      responses:
        '200':
          description: Active listings for the collection.
          content:
            application/json:
              schema: { type: array, items: { $ref: '#/components/schemas/Listing' } }
  /api/v1/collections/{slug}/activity:
    get:
      tags: [Listings]
      summary: Collection Transaction History
      operationId: getCollectionActivity
      parameters:
      - { name: slug, in: path, required: true, schema: { type: string } }
      - { name: types, in: query, schema: { type: array, items: { type: string } }, style: form, explode: false }
      responses:
        '200': { description: Recent collection activity (sales, listings, delists, bids). }
  /api/v1/bids/collection:
    get:
      tags: [Bids]
      summary: Collection Bids
      operationId: getCollectionBids
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: Collection-wide bids.
          content:
            application/json:
              schema: { type: array, items: { $ref: '#/components/schemas/Bid' } }
  /api/v1/bids/single-nft:
    get:
      tags: [Bids]
      summary: Single NFT Bids
      operationId: getSingleNftBids
      parameters:
      - { name: mint, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Bids targeting a single NFT mint. }
  /api/v1/bids/trait:
    get:
      tags: [Bids]
      summary: Trait Bids
      operationId: getTraitBids
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      - { name: trait, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Bids filtered by trait value. }
  /api/v1/pools/tswap:
    get:
      tags: [Pools]
      summary: TSwap Pools
      operationId: getTswapPools
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: TensorSwap (v1) pools for the collection.
          content:
            application/json:
              schema: { type: array, items: { $ref: '#/components/schemas/Pool' } }
  /api/v1/pools/tamm:
    get:
      tags: [Pools]
      summary: TAmm Pools
      operationId: getTammPools
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      responses:
        '200':
          description: TensorAMM (v2) pools for the collection.
  /api/v1/user/listings:
    get:
      tags: [User]
      summary: User Listings
      operationId: getUserListings
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Active listings owned by the wallet. }
  /api/v1/user/bids/collection:
    get:
      tags: [User]
      summary: User Collection Bids
      operationId: getUserCollectionBids
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: User-owned collection bids. }
  /api/v1/user/bids/nft:
    get:
      tags: [User]
      summary: User NFT Bids
      operationId: getUserNftBids
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: User-owned single-NFT bids. }
  /api/v1/user/bids/trait:
    get:
      tags: [User]
      summary: User Trait Bids
      operationId: getUserTraitBids
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: User-owned trait bids. }
  /api/v1/user/escrow:
    get:
      tags: [User]
      summary: User Escrow Accounts
      operationId: getUserEscrowAccounts
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Shared escrow account balances for the wallet. }
  /api/v1/user/inventory/{slug}:
    get:
      tags: [User]
      summary: User Inventory for Collection
      operationId: getUserInventoryForCollection
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      - { name: slug, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: Inventory held by the wallet in the specified collection. }
  /api/v1/user/portfolio:
    get:
      tags: [User]
      summary: User Collection Portfolio
      operationId: getUserPortfolio
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Aggregated collection portfolio holdings and valuations. }
  /api/v1/user/pools/tswap:
    get:
      tags: [User]
      summary: User TSwap Pools
      operationId: getUserTswapPools
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: TSwap pools owned by the wallet. }
  /api/v1/user/pools/tamm:
    get:
      tags: [User]
      summary: User TAmm Pools
      operationId: getUserTammPools
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: TAmm pools owned by the wallet. }
  /api/v1/user/transactions:
    get:
      tags: [User]
      summary: User Transactions
      operationId: getUserTransactions
      parameters:
      - { name: wallet, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Marketplace transactions for the wallet. }
  /api/v1/mints/refresh-metadata:
    post:
      tags: [Utility]
      summary: Refresh Mint Metadata
      operationId: refreshMintMetadata
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                mints: { type: array, items: { type: string } }
      responses:
        '202': { description: Refresh queued. }
  /api/v1/mints/refresh-rarities:
    post:
      tags: [Utility]
      summary: Refresh Mint Rarities
      operationId: refreshMintRarities
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                slug: { type: string }
      responses:
        '202': { description: Refresh queued. }
  /api/v1/mint-proof:
    get:
      tags: [Utility]
      summary: Mint Proof
      operationId: getMintProof
      parameters:
      - { name: mint, in: query, required: true, schema: { type: string } }
      - { name: whitelist, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Merkle proof for inclusion in the collection whitelist. }
  /api/v1/bids/trait-attributes:
    get:
      tags: [Utility]
      summary: Trait Bid Attributes
      operationId: getTraitBidAttributes
      parameters:
      - { name: slug, in: query, required: true, schema: { type: string } }
      responses:
        '200': { description: Available trait/value pairs that can be bid against. }
  /api/v1/whitelist/{address}:
    get:
      tags: [Utility]
      summary: Whitelist Info
      operationId: getWhitelistInfo
      parameters:
      - { name: address, in: path, required: true, schema: { type: string } }
      responses:
        '200': { description: On-chain whitelist program account. }
  /api/v1/priority-fees:
    get:
      tags: [Utility]
      summary: Priority Fees
      operationId: getPriorityFees
      responses:
        '200': { description: Recommended Solana priority fee tiers for marketplace transactions. }
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-tensor-api-key
  schemas:
    Collection:
      $ref: '../json-schema/tensor-collection-schema.json'
    Listing:
      $ref: '../json-schema/tensor-listing-schema.json'
    Bid:
      $ref: '../json-schema/tensor-bid-schema.json'
    Mint:
      $ref: '../json-schema/tensor-mint-schema.json'
    Pool:
      $ref: '../json-schema/tensor-pool-schema.json'