Docs / Offers & offer check

Endpoints

Offers & offer check

POST /v1/offers lists every seller on a listing with price, shipping, condition and fulfilment; POST /v1/offers/check says whether exact offers can still be bought.

Overview

Products give you the featured (buy-box) offer. These endpoints go one level down, to individual offers.

EndpointAnswersPer callCredits per itemLive on
POST /v1/offersEvery offer on each listing1–100 ids1 or 3Amazon (us)
GET /v1/products/{id}/offersThe same, for one id1 id1 or 3Amazon (us)
POST /v1/offers/checkCan each exact offer be bought now1–2,000 offers0.5Amazon (us)

All three take platform and marketplace like every item endpoint and return the same envelope. Where they are not live yet, they answer 501 with "coming_soon": true and charge nothing.

List every offer

POST https://api.scrapelyserp.com/v1/offers
Authorization: Bearer $SCRAPELY_API_KEY
Content-Type: application/json

{
  "platform": "amazon",
  "marketplace"?: "us",
  "ids": string[],
  "condition"?: "all" | "new" | "used"
}
FieldTypeDescription
idsstring[], required1 to 100 item ids (asins also works on Amazon). Duplicates are fetched and charged once.
conditionstringall (default), new, or used (every non-new condition: used, refurbished, collectible).
platform, marketplacestringAs for Products.
curl -X POST "https://api.scrapelyserp.com/v1/offers" \
  -H "Authorization: Bearer $SCRAPELY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "amazon",
    "ids": ["B0009KNLV6", "BZZZZZZZZZ"],
    "condition": "new"
  }'
Response
{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "asin": "B0009KNLV6",
      "id": "B0009KNLV6",
      "status": "ok",
      "fetchedAt": "2026-10-16T14:02:11.402Z",
      "buyboxOfferListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ%3D",
      "totalOffers": 14,
      "offers": [
        {
          "offerListingId": "Rk9vX3dqYlR4Q0pZcWt3dmlmZnpPOFZZJTJCUmN3dE92cmlMQ0o0R2ZtS1hYSjdNSmhqWWVEdkQ%3D",
          "price": 77.43,
          "currency": "USD",
          "priceDisplay": "$77.43",
          "shipping": 0,
          "condition": "new",
          "seller": {
            "id": "ATVPDKIKX0DER",
            "name": "Amazon.com"
          },
          "fulfillment": {
            "isFba": true,
            "fulfillerName": "Amazon.com"
          },
          "isBuybox": true,
          "delivery": "FREE delivery Tuesday, October 21 on orders shipped by Amazon over $35"
        },
        {
          "offerListingId": "cW1aMWx0dDNPcEdnbUo2UnBQOGJzcFJIVWZPRWlqUiUyRkR1NUwlMkZPRzZTJTJCQ3J6cFk%3D",
          "price": 71.5,
          "currency": "USD",
          "priceDisplay": "$71.50",
          "shipping": 5.99,
          "condition": "new",
          "seller": {
            "id": "A2R2RITDJNW1Q6",
            "name": "Retro Lunch Co",
            "rating": 4.5,
            "ratingCount": 1287
          },
          "fulfillment": {
            "isFba": false,
            "fulfillerName": "Retro Lunch Co"
          },
          "isBuybox": false,
          "availability": "Only 3 left in stock - order soon.",
          "delivery": "$5.99 delivery October 24 - 28"
        }
      ]
    },
    {
      "asin": "BZZZZZZZZZ",
      "id": "BZZZZZZZZZ",
      "status": "not_found",
      "fetchedAt": "2026-10-16T14:02:10.977Z",
      "offers": []
    }
  ],
  "stats": {
    "requested": 2,
    "ok": 1,
    "partial": 0,
    "notFound": 1,
    "unavailable": 0,
    "elapsedMs": 2210
  },
  "credits": 4
}
FieldDescription
statusok (charged; offers may be empty), not_found (charged), unavailable (refunded; retry later).
totalOffersOffers on the listing in every condition, the featured one included. 1 or less: charged the single-offer rate.
buyboxOfferListingIdThe featured offer, when there is one (that offer also has isBuybox: true). Reported even when condition filters it out.
offers[].offerListingIdIdentifies this exact offer. Use it with offer check.
offers[].price, shipping, currencyIn the marketplace currency. shipping is 0 for free delivery and absent when not stated.
offers[].conditionnew, used_like_new, used_very_good, used_good, used_acceptable, refurbished, collectible_like_new, …; conditionNote is the seller's comment.
offers[].sellerid, name, and the star rating / ratingCount when shown.
offers[].fulfillmentisFba (shipped by the retailer) and fulfillerName.
offers[].availability, deliveryThe stock line and delivery promise, in the retailer's words, when present.
  • Price: 1 credit for a listing with one offer (or none), 3 for one with more. About half of all listings have a single seller. A call reserves 3 per id and refunds the difference.
  • Up to 31 offers per listing: the featured offer first, then the rest cheapest first. condition filters those, so on very crowded listings a used request may not see every used offer.
  • Timing: a 100-id call usually takes well under a minute; allow 180 seconds. Ids not reached in time come back unavailable and are refunded.

Check specific offers

Once you know which offers matter, ask whether each one can still be bought, as often as you like. Take the offerListingId from a products result (buybox.offerListingId on Amazon lite and full) or from /v1/offers, and send it with its item id. 0.5 credit per offer, rounded up once per call.

POST https://api.scrapelyserp.com/v1/offers/check
Authorization: Bearer $SCRAPELY_API_KEY
Content-Type: application/json

{
  "platform": "amazon",
  "marketplace"?: "us",
  "offers": [{ "asin": string, "offerListingId": string }]
}
curl -X POST "https://api.scrapelyserp.com/v1/offers/check" \
  -H "Authorization: Bearer $SCRAPELY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platform": "amazon",
    "offers": [
      {
        "asin": "B0009KNLV6",
        "offerListingId": "pQ4/z9Lr0sT="
      }
    ]
  }'
Response
{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "id": "pQ4/z9Lr0sT=",
      "asin": "B0009KNLV6",
      "offerListingId": "pQ4/z9Lr0sT=",
      "status": "ok",
      "fetchedAt": "2026-10-18T19:02:11.402Z",
      "buyable": true
    },
    {
      "id": "Xh7+qT2b/kLm9wQ==",
      "asin": "0060094664",
      "offerListingId": "Xh7+qT2b/kLm9wQ==",
      "status": "ok",
      "fetchedAt": "2026-10-18T19:02:11.402Z",
      "buyable": false
    }
  ],
  "stats": {
    "requested": 2,
    "ok": 2,
    "partial": 0,
    "notFound": 0,
    "unavailable": 0,
    "elapsedMs": 1210
  },
  "credits": 1
}
FieldDescription
offersRequired (ids also works). 1 to 2,000 objects { asin, offerListingId }, exactly as the API returned them (a URL-encoded id is decoded). The two must belong together. Duplicates are checked and charged once.
buyableOn ok: true when the exact offer can be bought right now; false when it cannot (pulled, sold out, or not a real offer id).
statusok (charged) or unavailable (refunded; retry later).

A yes or no, not a price

Scarce, back-ordered and pre-order offers are all buyable: true, and the answer carries no price or stock level: read those from Products. buyable: false does not say why, so keep ids exactly as we returned them.

Timing: 2,000 offers usually take 15–20 seconds. Each call uses one concurrency slot.