Search listings

​

Searches the live Marketplace listings across every product. Each result is one seller's listing, with the product it is for, the price, the quantity for sale, the card's condition, language and grade, the seller's photos, the price compared with the listing's market price, and the seller.

Filter by product with name, gameFilters, productType, productIds and expansionIds. Filter the listing itself with price, priceVsMarket, condition, language, finish, graded, gradingService, minGrade and minQuantity. Filter the seller with sellerUsername, sellerCountry, sellerType and region. Pass deliveryCountry to keep only listings from sellers who ship to you, under the same rule checkout applies: each listing then carries the seller's shipping charge under seller.shipping. Without deliveryCountry, seller.shipping is null. Listings with no units left, or priced below 0.01, are never returned.

priceVsMarket and sortBy: priceVsMarket compare the price with the listing's market price in the region of deliveryCountry, otherwise of region, and need one of them. priceVsMarket: { "maxPercent": -20 } keeps listings priced at least 20 percent below their market price. Listings with no market price in that region are left out. For a graded card or a sealed product, the market price is the one of the finish, so the grade is not taken into account.

Results are sorted by sortBy: price (the default, cheapest first, with prices in different currencies compared in euros), priceVsMarket or newest. sortDirection defaults to asc, and to desc for newest. The price sort does not include the VAT that checkout adds to some professional sellers' prices; final prices are computed in the cart.

Results are paginated: follow pagination.nextCursor by passing it back as cursor, with the same filters and sort, until it comes back null. A different search returns CURSOR_MISMATCH. A page can hold fewer than limit listings when some sold or were taken down since the search was indexed; the next cursor still continues without skipping or repeating a listing. limit defaults to 50, maximum 100. The first page also returns pagination.total, counted up to 10,000.

Listings can sell to someone else until you pay, including before you add one to your cart. To buy from a listing, pass its listingId to POST /v1/cart/items.

Requests count against the listing-search rate limit: 600 requests per hour. If your integration needs more, contact support with your username and what you're building — limits can be raised per account.

Authentication is required (any valid API key); no scope.

Headers

  • The language to work in — en, fr, it, es, or de, with or without a region. Name searches match in that language where a translation exists, falling back to English. Defaults to English.

Body

required
application/json
  • Return only raw cards in any of these conditions. Cannot be combined with graded: true.

  • Your delivery country as a two-letter ISO 3166-1 alpha-2 code. Keeps only listings from sellers who ship there, under the same rule checkout applies, and adds the seller's shipping charge to each listing as seller.shipping. It also chooses the market price that priceVsMarket and sortBy: priceVsMarket compare with.

  • Return only listings of products from these expansions (1–200). Ids are returned by GET /v1/games/{gameId}/expansions.

  • Return only listings with any of these finishes.

    values
    • Standard

      A standard, non-foil card.

    • Foil

      A foil card.

    • Rainbow
    • Gold
    • Rainbow Foil
    • Cold Foil
    • Gold Foil
    • Etched

      A card with an etched-foil finish.

  • Restrict to a single game, and optionally filter on that game's own attributes (rarity, color, …). Pass { "game": "pokemon" } for any Pokémon product.

    Restrict to a single game, and optionally filter on that game's own attributes (rarity, color, …). Pass { "game": "pokemon" } for any Pokémon product.

    • Properties: 17
  • true returns graded cards only, false returns raw cards and sealed products only. Omit it to return both.

  • Return only cards graded by any of these companies. Needs graded: true.

    values
    • PSA

      Professional Sports Authenticator.

    • Beckett

      Beckett Grading Services.

    • CGC

      Certified Guaranty Company.

    • TAG
    • PCG
    • CCC
    • PCA
    • CollectAura
    • MTGGrade
    • PureGrading
    • SGS
  • Return only listings in any of these languages, as two-letter codes.

  • Integer numbers.

  • Return only cards graded at or above this grade, inclusive. Needs graded: true.

  • Return only listings with at least this many units for sale.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for post/listings/search
curl https://public-api.cardnexus.com/v1/listings/search \
  --request POST \
  --header 'Accept-Language: fr' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN' \
  --data '{
  "cursor": "",
  "limit": 50,
  "name": "",
  "gameFilters": {
    "game": "sorcery",
    "filters": {}
  },
  "productType": "card",
  "productIds": [
    1
  ],
  "expansionIds": [
    512
  ],
  "deliveryCountry": "FR",
  "region": "eu",
  "price": {
    "min": {
      "amount": 1,
      "currency": "EUR"
    },
    "max": {
      "amount": 1,
      "currency": "EUR"
    }
  },
  "priceVsMarket": {
    "minPercent": 1,
    "maxPercent": 1
  },
  "condition": [
    "NM"
  ],
  "language": [
    "en",
    "fr"
  ],
  "finish": [
    "Standard"
  ],
  "graded": true,
  "gradingService": [
    "PSA"
  ],
  "minGrade": 1,
  "sellerUsername": "north_arena_tcg",
  "sellerCountry": [
    ""
  ],
  "sellerType": "pro",
  "minQuantity": 1,
  "sortBy": "price",
  "sortDirection": "asc"
}'
{
  "data": [
    {
      "listingId": "6650f1c2a4b3e2d1c0b9a8f7",
      "product": {
        "id": 64321,
        "name": "Charizard ex",
        "gameId": "pokemon",
        "expansion": {
          "id": 512,
          "name": "Obsidian Flames",
          "code": "OBF",
          "slug": "obsidian-flames"
        },
        "printNumber": "125",
        "productType": "card",
        "rarity": "Double Rare",
        "imageUrl": "https://ik.imagekit.io/cardnexus/production/products/64321.jpg",
        "imageCensored": false
      },
      "price": {
        "amount": 13.9,
        "currency": "EUR"
      },
      "quantity": 1,
      "condition": "NM",
      "language": "en",
      "finish": "Standard",
      "graded": null,
      "comment": null,
      "photos": [],
      "marketPrice": {
        "amount": 15.87,
        "currency": "EUR",
        "region": "eu"
      },
      "priceVsMarketPercent": -12.4,
      "listedAt": "2026-10-20T14:03:11.000Z",
      "seller": {
        "id": "665f3a2b1c8d4e9f7a6b5c4d",
        "username": "north_arena_tcg",
        "country": "DE",
        "type": "pro",
        "rating": {
          "average": 4.9,
          "count": 812
        },
        "verifiedSalesCount": 1534,
        "shipping": {
          "amount": 3.5,
          "currency": "EUR"
        }
      }
    }
  ],
  "pagination": {
    "nextCursor": "eyJ2IjoxLCJoIjoiOWYyYzFhNGU3YjhkM2E2MCIsInMiOlsxMzkwLCI2NjUwZjFjMmE0YjNlMmQxYzBiOWE4ZjciXSwiaSI6MTc2MTE0NjU5MH0",
    "total": 37,
    "totalIsLowerBound": false
  }
}