Amazon products

Embed
Preview of the card
<a href="https://scrapelyserp.com/docs/ref-amazon-products"><img src="https://scrapelyserp.com/docs/_api/public/orgs/affc5b0f-d3c2-423a-8143-9d10db5736ae/spaces/981e6275-da3f-446c-82de-889f59c83b6f/pages/44c77af3-e230-4adc-ab24-2e514df4e245/social-card.svg?v=3e7ae33eec8b" alt="Amazon products" width="600" height="315"></a>
POSThttps://scrapelyserp.com/api/v1/products
Get products

Product and buy-box data on a platform and marketplace (platform default amazon, marketplace default us; see GET /v1/platforms for what is live) for 1 to 2,000 ASINs (10,000 at pulse). One result per unique ASIN, in request order, each with a status. Always 200 for a well-formed request, even when every ASIN is unavailable.

Cost per unique ASIN: pulse 0.25, lite 1, full 5. Delivery dates are included in lite and full at no extra cost. The whole call is reserved up front, rounded up once per call (402 if your balance cannot cover it); partial and unavailable ASINs are refunded, so you pay for ok and not_found. X-Scrapely-Credits is the final charge.

Duration (typical): pulse 10–20 s for 10,000 ASINs; lite 35–45 s for 2,000 ASINs; full 60–90 s for 2,000 ASINs. Smaller calls are proportionally faster. Allow up to 300 s. Uses one concurrency slot.

Walmart (platform: "walmart", marketplace us): send 1 to 100 numeric item ids (from walmart.com/ip/<slug>/<id>) as ids; 1 credit per ok or not_found item. Results carry the neutral fields plus walmart (list price, offer, seller type, shipping, brand, UPC, rating, category). Typical: 3–10 s for 100 items.

Best Buy (platform: "bestbuy", marketplace us): send 1 to 1,000 numeric SKUs as ids; 1 credit per ok or not_found SKU (not_found also covers SKUs Best Buy no longer sells). Results carry the neutral fields plus bestbuy (state, regular price, savings, brand, condition, category). Typical: 10–15 s for 1,000 SKUs.

Target (platform: "target", marketplace us): send 1 to 1,000 TCINs (the number after /A- in a product URL) as ids; 1 credit per ok or not_found TCIN. A variation parent answers with its featured variant (target.tcin). Results carry the neutral fields plus target (regular price, shipping, store pickup). Typical: 5–15 s for 1,000 TCINs.

Request body application/json

Send the items as asins (Amazon) or the generic ids.

platformstring
Which platform to read. Platforms: amazon (live: us; coming soon: uk, de, fr, it, es, ca, mx, jp, au, in, br, nl, se, pl), walmart (live: us), ebay (coming soon), target (live: us), bestbuy (live: us; coming soon: ca), aliexpress (coming soon). A coming-soon platform or marketplace answers 501 NOT_IMPLEMENTED with "coming_soon": true (nothing charged); an unknown one is a 400 listing the valid values. GET /v1/platforms has the full list.
= amazon
marketplacestring
The platform's regional storefront (us, uk, de…); default the platform's main one. Prices come back in its currency.
= us
idsstring[]
The generic name for the item list (asins on Amazon). Send one or the other.
asinsstring[]
1 to 2,000 ASINs; up to 10,000 at tier pulse. Upper-cased and de-duplicated; empty strings are ignored. Duplicates are fetched and charged once.
tierstringrequired
pulse (0.25 credits per ASIN): New-offer count and lowest new price. The cheapest way to sweep a whole catalogue for change. lite (1 credit per ASIN): Everything about the offer: buy-box price and list price, stock, seller, FBA, offer listing id, offer counts, rating and delivery dates. full (5 credits per ASIN): Lite plus the listing: description, images, attributes, binding, other editions and offer summaries for every condition. Pulse returns no buy box: its lowest new price equals the buy-box price for ~92% of ASINs, so use it to detect change, not as a price. standard was merged into lite: it is still accepted and answered as lite. Walmart has one tier, standard (1 credit per item, the default there): Title, price and list price, stock, seller, fulfilment, shipping, images, brand, UPC, rating and category. Best Buy has one tier, standard (1 credit per SKU, the default there): Title, current and regular price, stock, brand, condition and category. Target has one tier, standard (1 credit per TCIN, the default there): Title, current and regular price, stock, shipping and store pickup.
pulse | lite | full
includestring[]
Accepted and ignored: lite and full always include delivery dates and pulse never does, so ["delivery"] changes nothing and costs nothing. Echoed back as include in the response. Any other entry is a 400.
{
  "platform": "amazon",
  "marketplace": "us",
  "ids": [
    "string"
  ],
  "asins": [
    "0060094664",
    "B0009KNLV6",
    "BZZZZZZZZZ"
  ],
  "tier": "lite",
  "include": [
    "delivery"
  ]
}
Code samples
cURL
curl -X POST "https://scrapelyserp.com/api/v1/products" \
  -H "Content-Type: application/json" \
  -d '{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["0060094664","B0009KNLV6","BZZZZZZZZZ"],"tier":"lite","include":["delivery"]}'
TypeScript
const res = await fetch('https://scrapelyserp.com/api/v1/products', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"platform":"amazon","marketplace":"us","ids":["string"],"asins":["0060094664","B0009KNLV6","BZZZZZZZZZ"],"tier":"lite","include":["delivery"]}),
});
const data = await res.json();
Python
import requests

res = requests.request(
    "POST",
    "https://scrapelyserp.com/api/v1/products",
    headers={
    "Content-Type": "application/json",
    },
    json={"platform": "amazon", "marketplace": "us", "ids": ["string"], "asins": ["0060094664", "B0009KNLV6", "BZZZZZZZZZ"], "tier": "lite", "include": ["delivery"]},
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
	"strings"
)

func main() {
	req, _ := http.NewRequest("POST", "https://scrapelyserp.com/api/v1/products", strings.NewReader(`{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["0060094664","B0009KNLV6","BZZZZZZZZZ"],"tier":"lite","include":["delivery"]}`))
	req.Header.Set("Content-Type", "application/json")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://scrapelyserp.com/api/v1/products');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["0060094664","B0009KNLV6","BZZZZZZZZZ"],"tier":"lite","include":["delivery"]}');
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://scrapelyserp.com/api/v1/products')
req = Net::HTTP::Post.new(uri)
req['Content-Type'] = 'application/json'
req.body = '{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["0060094664","B0009KNLV6","BZZZZZZZZZ"],"tier":"lite","include":["delivery"]}'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://scrapelyserp.com/api/v1/products"))
    .header("Content-Type", "application/json")
    .method("POST", BodyPublishers.ofString("{\"platform\":\"amazon\",\"marketplace\":\"us\",\"ids\":[\"string\"],\"asins\":[\"0060094664\",\"B0009KNLV6\",\"BZZZZZZZZZ\"],\"tier\":\"lite\",\"include\":[\"delivery\"]}"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 One result per unique ASIN, in request order.
Example
{
  "platform": "amazon",
  "marketplace": "us",
  "tier": "pulse",
  "include": [
    "delivery"
  ],
  "results": [
    {
      "asin": "B0009KNLV6",
      "id": "B0009KNLV6",
      "price": {
        "amount": null,
        "currency": null
      },
      "availability": {
        "inStock": true,
        "message": "In Stock"
      },
      "seller": {
        "id": "string",
        "name": "string"
      },
      "fulfillment": {
        "byPlatform": true,
        "name": "string"
      },
      "url": "string",
      "images": [
        "string"
      ],
      "status": "ok",
      "fetchedAt": "2024-01-01T00:00:00Z",
      "buybox": {
        "price": null,
        "currency": null,
        "priceDisplay": null,
        "listPrice": null,
        "savings": null,
        "deal": null,
        "inStock": null,
        "availabilityType": null,
        "fulfillerName": null,
        "isFba": null,
        "availabilityMessage": null,
        "condition": null,
        "merchant": null,
        "offerListingId": null
      },
      "title": "string",
      "brand": "Lumen",
      "category": "Health and Beauty",
      "description": [
        "string"
      ],
      "offers": {
        "newCount": 0,
        "newMinPrice": 0,
        "usedCount": 0,
        "usedMinPrice": 0,
        "refurbishedCount": 0,
        "refurbishedMinPrice": 0,
        "collectibleCount": 0,
        "collectibleMinPrice": 0,
        "currency": "USD"
      },
      "reviews": {
        "rating": 4.6,
        "count": "1,204"
      },
      "isParent": true,
      "full": {
        "images": [
          null
        ],
        "attributes": {
          "Publisher": "HarperCollins",
          "Print length": "208 pages"
        },
        "variationChildren": [
          null
        ],
        "binding": "Paperback"
      },
      "bestbuy": {
        "sku": "6505727",
        "state": "available",
        "purchasable": true,
        "brand": "Sony",
        "condition": "new",
        "regularPrice": null,
        "savings": null,
        "onSale": true,
        "category": {
          "department": null,
          "class": null,
          "subclass": null
        }
      },
      "walmart": {
        "brand": "Mainstays",
        "upc": "810004819238",
        "modelNumber": "string",
        "parentId": "string",
        "listPrice": null,
        "offerId": "string",
        "offerType": "ONLINE_AND_STORE",
        "thirdPartySeller": true,
        "onlineAvailable": true,
        "shipping": {
          "standard": null,
          "twoDay": null,
          "twoDayEligible": null,
          "freeOverThreshold": null
        },
        "maxPerOrder": 0,
        "clearance": true,
        "preOrder": true,
        "condition": "New",
        "category": "Home/Appliances/Fans",
        "rating": 4.4,
        "reviewsCount": 1250,
        "size": "string",
        "color": "string"
      },
      "target": {
        "tcin": "83887639",
        "parentTcin": "1011697103",
        "brand": "string",
        "priceDisplay": "$399.99",
        "regularPrice": 399.99,
        "unitPrice": "$0.06/fluid ounce",
        "itemType": "Video Game Consoles",
        "soldOut": true,
        "shipping": {
          "status": null,
          "free": null,
          "minDeliveryDate": null,
          "maxDeliveryDate": null
        },
        "pickup": {
          "status": null,
          "storeId": null,
          "storeName": null,
          "quantity": null,
          "date": null
        },
        "sameDayDelivery": {
          "status": null
        }
      },
      "delivery": {
        "standard": null,
        "fastest": null,
        "isPrime": null,
        "shipsFrom": null,
        "freeOver": null,
        "currency": null
      },
      "deliveryError": "not_fetched"
    }
  ],
  "stats": {
    "requested": 0,
    "ok": 0,
    "partial": 0,
    "notFound": 0,
    "unavailable": 0,
    "elapsedMs": 0,
    "delivery": {
      "requested": 0,
      "ok": 0,
      "failed": 0
    }
  },
  "credits": 3
}
Schema
platformstringrequired
marketplacestringrequired
tierstringrequired
The tier that answered.
pulse | lite | full
includestring[]
Echoes the request's include; absent without it. It changes nothing.
resultsProductResult[]required
One per unique requested ASIN, in request order. Every ASIN appears exactly once.
Show child parameters
asinstringrequired
idstringrequired
The item id as the platform knows it (the ASIN on Amazon).
priceMoney
The featured (buy-box) price, with its currency.
Show child parameters
amountnumberrequired
currencystringrequired
ISO 4217.
availabilityobject
Show child parameters
inStockbooleanrequired
messagestring
sellerobject
Show child parameters
idstring
namestringrequired
fulfillmentobject
Show child parameters
byPlatformbooleanrequired
Shipped by the platform itself (Amazon: FBA).
namestring
urlstring
The product page on the marketplace.
imagesstring[]
statusstringrequired
ok: returned with no errors (charged). partial: returned, but some fields could not be read: do not trust price or stock, re-fetch at a higher tier (refunded). not_found: Amazon says the product does not exist: delist, do not retry (charged). unavailable: we could not get an answer this time: retry later, not evidence the ASIN is dead (refunded).
ok | partial | not_found | unavailable
fetchedAtstringrequired
buyboxBuybox
Present for ok and partial at lite and full. Never at pulse.
Show child parameters
pricenumber
In currency.
currencystring
ISO 4217: the marketplace's currency. Present with price.
priceDisplaystring
lite + full.
listPricenumber
lite + full: the struck-through list or "was" price, in currency. Only when Amazon shows one above price.
savingsobject
lite + full: what Amazon says the buyer saves against listPrice.
dealstring
lite + full: the deal badge on the buy-box offer, when there is one.
inStockbooleanrequired
At least one option has a price and is not OUT_OF_STOCK.
availabilityTypestring
IN_STOCK, OUT_OF_STOCK, …
fulfillerNamestring
isFbabooleanrequired
fulfillerName starts with "amazon" (case-insensitive).
availabilityMessagestring
lite + full.
conditionstring
lite + full: NEW, USED, PARENT_ASIN, …
merchantobject
lite + full.
offerListingIdstring
lite + full. The buy-box offer listing id, URL-decoded.
titlestring
lite + full.
brandstring
lite + full: the brand Amazon shows under the title.
categorystring
lite + full: Amazon's display category.
descriptionstring[]
full only: one entry per paragraph.
offersobject
Every tier. pulse has newCount and newMinPrice only (lowest new price from any seller, not necessarily the buy box); lite adds used; refurbished and collectible are full only.
Show child parameters
newCountinteger
newMinPricenumber
usedCountinteger
usedMinPricenumber
refurbishedCountinteger
refurbishedMinPricenumber
collectibleCountinteger
collectibleMinPricenumber
currencystring
ISO 4217 of the min prices; present with any of them.
reviewsobject
lite + full.
Show child parameters
ratingnumber
Star rating, 0–5.
countstring
The review count as Amazon prints it.
isParentboolean
lite: a PARENT_ASIN option; full: also no buyable option while the listing lists children.
fullobject
full only.
Show child parameters
imagesstring[]required
One URL per image variant, hi-res preferred: https://m.media-amazon.com/images/I/{id}.{ext}
attributesobjectrequired
variationChildrenstring[]required
Other editions of the same title (paperback, e-book, hardcover…): books and media. Empty for most products; size and colour variations are not listed.
bindingstring
bestbuyobject
Best Buy only (platform: "bestbuy"): what Best Buy says beyond the neutral fields.
Show child parameters
skustringrequired
statestringrequired
Where the product stands for an online shopper. available: can be bought online now (the only state where availability.inStock is true). sold_out: sold out online. in_store_only: only through a store. pre_order, coming_soon: not shipping yet. queue: released in limited drops. unavailable / other: not buyable online at the moment.
available | sold_out | in_store_only | pre_order | coming_soon | queue | unavailable | other
purchasablebooleanrequired
Best Buy says it can be bought at all (online or in store).
brandstring
conditionstring
regularPriceMoney
The regular (non-sale) price.
savingsMoney
regularPrice − price; present when on sale.
onSalebooleanrequired
The current price is below the regular price.
categoryobject
walmartobject
Walmart only (platform: "walmart"): what Walmart says beyond the neutral fields. Every field is optional: absent when Walmart does not say.
Show child parameters
brandstring
upcstring
modelNumberstring
parentIdstring
The variant group: items that are variants of one product share it.
listPriceMoney
Walmart's list ("was") price. Can be below price.
offerIdstring
The current offer's id; changes when another offer takes over.
offerTypestring
thirdPartySellerboolean
Sold by a marketplace seller rather than Walmart itself.
onlineAvailableboolean
Offered online. Use availability.inStock for whether it can be bought now.
shippingobject
maxPerOrderinteger
Most units one order may contain.
clearanceboolean
preOrderboolean
conditionstring
categorystring
ratingnumber
reviewsCountinteger
sizestring
colorstring
targetobject
Target only (platform: "target"): what Target says beyond the neutral fields. Stock and pickup are for one reference store.
Show child parameters
tcinstringrequired
The item that was priced: the requested TCIN, or for a variation parent its featured variant.
parentTcinstring
The variation parent, when the item has one.
brandstring
priceDisplaystring
Target's own price text (may be a range).
regularPricenumber
The regular (non-sale) price, in the marketplace currency.
unitPricestring
itemTypestring
soldOutbooleanrequired
Sold out online and in every store.
shippingobject
pickupobject
sameDayDeliveryobject
deliveryDelivery
lite + full, at no extra cost. null when there is no promise (see deliveryError). Never at pulse.
Show child parameters
standardDeliveryPromiserequired
The primary promise shown under the buy box.
fastestDeliveryPromise
The "Or fastest delivery" promise, when Amazon offers one.
isPrimeboolean
The buy-box offer is Prime eligible. Only ever true; absent otherwise.
true
shipsFromstring
Where the buy-box offer ships from. Absent when Amazon does not say.
freeOvernumber
Orders at or over this amount ship free ("FREE delivery on orders over $35"). Only when the standard option is not free.
currencystring
ISO 4217 of cost and freeOver; present with either.
deliveryErrorstring
Only when delivery is null. not_fetched: the product was not ok/partial. no_offer: no buy-box offer. no_promise: the offer had no delivery date. fetch_failed: we could not get the promise this time (retry later). deadline: the call ran out of time.
not_fetched | no_offer | no_promise | fetch_failed | deadline
statsobjectrequired
Show child parameters
requestedintegerrequired
Unique items after de-dup.
okintegerrequired
Answered in full (charged).
partialintegerrequired
Answered with fields missing (refunded). Always 0 where an answer cannot be partial (offers).
notFoundintegerrequired
The platform says the item does not exist (charged).
unavailableintegerrequired
No answer this time (refunded; retry later).
elapsedMsintegerrequired
deliveryobject
lite + full.
Show child parameters
requestedintegerrequired
ASINs a delivery promise was looked up for (the ok + partial ones).
okintegerrequired
ASINs with a delivery promise.
failedintegerrequired
requested − ok.
creditsintegerrequired
Credits charged for the call (also X-Scrapely-Credits).
400 MISSING_PARAM or INVALID_PARAM; param names the culprit.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
401 UNAUTHORIZED: missing, unknown or revoked key.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
402 INSUFFICIENT_CREDITS: nothing was charged.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
429 RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
500 INTERNAL: our fault, not charged. Quote X-Request-Id.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
501 The platform or marketplace is coming soon. Nothing is charged.
Example
{
  "error": {
    "code": {},
    "message": "Amazon UK is coming soon.",
    "param": "marketplace",
    "docs": "string"
  },
  "coming_soon": {}
}
Schema
errorobjectrequired
Show child parameters
code
messagestring
paramstring
docsstring
coming_soonrequired
POSThttps://scrapelyserp.com/api/v1/offers/check
Check whether exact offers can be bought

For 1 to 2000 offers ({ asin, offerListingId } from /v1/products or /v1/offers): can each exact offer be bought right now. A yes/no per offer: no price, no stock level (use lite for those). Always 200 for a well-formed request.

Cost: 0.5 credit per offer answered, rounded up once per call; reserved up front (402 if your balance cannot cover it), unavailable offers refunded. Duration: 2000 offers usually take 15–20 s; allow up to 120 s. Uses one concurrency slot.

Request body application/json
platformstring
Which platform to read. Platforms: amazon (live: us; coming soon: uk, de, fr, it, es, ca, mx, jp, au, in, br, nl, se, pl), walmart (live: us), ebay (coming soon), target (live: us), bestbuy (live: us; coming soon: ca), aliexpress (coming soon). A coming-soon platform or marketplace answers 501 NOT_IMPLEMENTED with "coming_soon": true (nothing charged); an unknown one is a 400 listing the valid values. GET /v1/platforms has the full list.
= amazon
marketplacestring
The platform's regional storefront (us, uk, de…); default the platform's main one. Prices come back in its currency.
= us
offersobject[]required
1 to 2000 offers, each its ASIN and offer listing id as /v1/products (asin + buybox.offerListingId) or /v1/offers (asin + offers[].offerListingId) returned them. Both are required. ids is accepted too.
Show child parameters
asinstringrequired
offerListingIdstringrequired
{
  "platform": "amazon",
  "marketplace": "us",
  "offers": [
    {
      "asin": "B0009KNLV6",
      "offerListingId": "pQ4/z9Lr0sT="
    }
  ]
}
Code samples
cURL
curl -X POST "https://scrapelyserp.com/api/v1/offers/check" \
  -H "Content-Type: application/json" \
  -d '{"platform":"amazon","marketplace":"us","offers":[{"asin":"B0009KNLV6","offerListingId":"pQ4/z9Lr0sT="}]}'
TypeScript
const res = await fetch('https://scrapelyserp.com/api/v1/offers/check', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"platform":"amazon","marketplace":"us","offers":[{"asin":"B0009KNLV6","offerListingId":"pQ4/z9Lr0sT="}]}),
});
const data = await res.json();
Python
import requests

res = requests.request(
    "POST",
    "https://scrapelyserp.com/api/v1/offers/check",
    headers={
    "Content-Type": "application/json",
    },
    json={"platform": "amazon", "marketplace": "us", "offers": [{"asin": "B0009KNLV6", "offerListingId": "pQ4/z9Lr0sT="}]},
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
	"strings"
)

func main() {
	req, _ := http.NewRequest("POST", "https://scrapelyserp.com/api/v1/offers/check", strings.NewReader(`{"platform":"amazon","marketplace":"us","offers":[{"asin":"B0009KNLV6","offerListingId":"pQ4/z9Lr0sT="}]}`))
	req.Header.Set("Content-Type", "application/json")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://scrapelyserp.com/api/v1/offers/check');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"platform":"amazon","marketplace":"us","offers":[{"asin":"B0009KNLV6","offerListingId":"pQ4/z9Lr0sT="}]}');
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://scrapelyserp.com/api/v1/offers/check')
req = Net::HTTP::Post.new(uri)
req['Content-Type'] = 'application/json'
req.body = '{"platform":"amazon","marketplace":"us","offers":[{"asin":"B0009KNLV6","offerListingId":"pQ4/z9Lr0sT="}]}'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://scrapelyserp.com/api/v1/offers/check"))
    .header("Content-Type", "application/json")
    .method("POST", BodyPublishers.ofString("{\"platform\":\"amazon\",\"marketplace\":\"us\",\"offers\":[{\"asin\":\"B0009KNLV6\",\"offerListingId\":\"pQ4/z9Lr0sT=\"}]}"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 One result per unique offer, in request order.
Example
{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "id": "string",
      "asin": "string",
      "offerListingId": "string",
      "status": "ok",
      "fetchedAt": "2024-01-01T00:00:00Z",
      "buyable": true
    }
  ],
  "stats": {
    "requested": 0,
    "ok": 0,
    "partial": 0,
    "notFound": 0,
    "unavailable": 0,
    "elapsedMs": 0
  },
  "credits": 1
}
Schema
platformstringrequired
marketplacestringrequired
resultsOfferCheckResult[]required
One per unique requested id, in request order.
Show child parameters
idstringrequired
The offer listing id.
asinstringrequired
offerListingIdstringrequired
statusstringrequired
ok: answered (charged). unavailable: no answer this time (refunded; retry later).
ok | unavailable
fetchedAtstringrequired
buyableboolean
On ok: Amazon accepts this exact offer for purchase right now. Scarce, backorder and pre-order offers are buyable; no price or stock level. false does not say why (a gone offer and a mistyped id read the same).
statsobjectrequired
Show child parameters
requestedintegerrequired
Unique items after de-dup.
okintegerrequired
Answered in full (charged).
partialintegerrequired
Answered with fields missing (refunded). Always 0 where an answer cannot be partial (offers).
notFoundintegerrequired
The platform says the item does not exist (charged).
unavailableintegerrequired
No answer this time (refunded; retry later).
elapsedMsintegerrequired
creditsintegerrequired
Credits charged for the call (also X-Scrapely-Credits).
400 MISSING_PARAM or INVALID_PARAM; param names the culprit.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
401 UNAUTHORIZED: missing, unknown or revoked key.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
402 INSUFFICIENT_CREDITS: nothing was charged.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
429 RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
500 INTERNAL: our fault, not charged. Quote X-Request-Id.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
501 The platform or marketplace is coming soon. Nothing is charged.
Example
{
  "error": {
    "code": {},
    "message": "Amazon UK is coming soon.",
    "param": "marketplace",
    "docs": "string"
  },
  "coming_soon": {}
}
Schema
errorobjectrequired
Show child parameters
code
messagestring
paramstring
docsstring
coming_soonrequired
POSThttps://scrapelyserp.com/api/v1/offers
Get every offer for a list of items

Every offer for 1 to 100 items on a platform and marketplace (platform default amazon, marketplace default us): price, shipping, condition, seller, FBA and which offer holds the buy box. One result per unique ASIN, in request order. Always 200 for a well-formed request.

Cost per unique ASIN: 1 credit for a listing with one offer or none (and for not_found), 3 for one with more (totalOffers says which). 3 per ASIN is reserved up front (402 if your balance cannot cover it) and the difference refunded; unavailable ASINs are refunded. X-Scrapely-Credits is the final charge.

Depth: every offer for the ASIN, up to 31 (featured offer first, then cheapest first). Duration: a 100-ASIN call usually takes well under a minute; allow up to 180 s. Uses one concurrency slot.

Request body application/json

Send the items as asins (Amazon) or the generic ids.

platformstring
Which platform to read. Platforms: amazon (live: us; coming soon: uk, de, fr, it, es, ca, mx, jp, au, in, br, nl, se, pl), walmart (live: us), ebay (coming soon), target (live: us), bestbuy (live: us; coming soon: ca), aliexpress (coming soon). A coming-soon platform or marketplace answers 501 NOT_IMPLEMENTED with "coming_soon": true (nothing charged); an unknown one is a 400 listing the valid values. GET /v1/platforms has the full list.
= amazon
marketplacestring
The platform's regional storefront (us, uk, de…); default the platform's main one. Prices come back in its currency.
= us
idsstring[]
The generic name for the item list (asins on Amazon).
asinsstring[]
1 to 100 ASINs. Upper-cased and de-duplicated; empty strings are ignored. Duplicates are fetched and charged once.
conditionstring
all (default), new, or used (every non-new condition: used, renewed/refurbished, collectible).
new | used | all = all
{
  "platform": "amazon",
  "marketplace": "us",
  "ids": [
    "string"
  ],
  "asins": [
    "B0009KNLV6",
    "BZZZZZZZZZ"
  ],
  "condition": "all"
}
Code samples
cURL
curl -X POST "https://scrapelyserp.com/api/v1/offers" \
  -H "Content-Type: application/json" \
  -d '{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["B0009KNLV6","BZZZZZZZZZ"],"condition":"all"}'
TypeScript
const res = await fetch('https://scrapelyserp.com/api/v1/offers', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"platform":"amazon","marketplace":"us","ids":["string"],"asins":["B0009KNLV6","BZZZZZZZZZ"],"condition":"all"}),
});
const data = await res.json();
Python
import requests

res = requests.request(
    "POST",
    "https://scrapelyserp.com/api/v1/offers",
    headers={
    "Content-Type": "application/json",
    },
    json={"platform": "amazon", "marketplace": "us", "ids": ["string"], "asins": ["B0009KNLV6", "BZZZZZZZZZ"], "condition": "all"},
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
	"strings"
)

func main() {
	req, _ := http.NewRequest("POST", "https://scrapelyserp.com/api/v1/offers", strings.NewReader(`{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["B0009KNLV6","BZZZZZZZZZ"],"condition":"all"}`))
	req.Header.Set("Content-Type", "application/json")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://scrapelyserp.com/api/v1/offers');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["B0009KNLV6","BZZZZZZZZZ"],"condition":"all"}');
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://scrapelyserp.com/api/v1/offers')
req = Net::HTTP::Post.new(uri)
req['Content-Type'] = 'application/json'
req.body = '{"platform":"amazon","marketplace":"us","ids":["string"],"asins":["B0009KNLV6","BZZZZZZZZZ"],"condition":"all"}'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://scrapelyserp.com/api/v1/offers"))
    .header("Content-Type", "application/json")
    .method("POST", BodyPublishers.ofString("{\"platform\":\"amazon\",\"marketplace\":\"us\",\"ids\":[\"string\"],\"asins\":[\"B0009KNLV6\",\"BZZZZZZZZZ\"],\"condition\":\"all\"}"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 One result per unique ASIN, in request order.
Example
{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "id": "B0009KNLV6",
      "asin": "B0009KNLV6",
      "status": "ok",
      "fetchedAt": "2024-01-01T00:00:00Z",
      "buyboxOfferListingId": "string",
      "totalOffers": 0,
      "offers": [
        {
          "offerListingId": null,
          "price": null,
          "currency": null,
          "priceDisplay": null,
          "shipping": null,
          "condition": null,
          "conditionNote": null,
          "seller": null,
          "fulfillment": null,
          "isBuybox": null,
          "availability": null,
          "delivery": null
        }
      ]
    }
  ],
  "stats": {
    "requested": 0,
    "ok": 0,
    "partial": 0,
    "notFound": 0,
    "unavailable": 0,
    "elapsedMs": 0
  },
  "credits": 5
}
Schema
platformstringrequired
marketplacestringrequired
resultsOffersResult[]required
One per unique requested ASIN, in request order.
Show child parameters
idstringrequired
The item id (the ASIN on Amazon).
asinstringrequired
statusstringrequired
ok: the offer list was read (charged; may be empty). not_found: Amazon has no such product (charged). unavailable: we could not get an answer this time, or the call ran out of time (refunded; retry later).
ok | not_found | unavailable
fetchedAtstringrequired
buyboxOfferListingIdstring
The featured offer, when there is one (reported even if condition filters it out of offers).
totalOffersinteger
Offers on the listing in every condition, the buy box included. 1 or less: charged the single-offer rate.
offersOffer[]required
Featured offer first, then the rest cheapest first. Every offer for the ASIN, up to 31.
Show child parameters
offerListingIdstringrequired
Identifies this exact offer.
pricenumberrequired
In currency.
currencystring
ISO 4217: the currency of the marketplace, for price and shipping.
priceDisplaystring
shippingnumber
In currency; 0 for free delivery; absent when Amazon does not state it.
conditionstringrequired
new, used_like_new, used_very_good, used_good, used_acceptable, refurbished, collectible_*.
conditionNotestring
The seller's condition comment.
sellerobjectrequired
fulfillmentobjectrequired
isBuyboxbooleanrequired
The featured (buy-box) offer.
availabilitystring
deliverystring
The delivery promise as Amazon words it.
statsobjectrequired
Show child parameters
requestedintegerrequired
Unique items after de-dup.
okintegerrequired
Answered in full (charged).
partialintegerrequired
Answered with fields missing (refunded). Always 0 where an answer cannot be partial (offers).
notFoundintegerrequired
The platform says the item does not exist (charged).
unavailableintegerrequired
No answer this time (refunded; retry later).
elapsedMsintegerrequired
creditsintegerrequired
Credits charged for the call (also X-Scrapely-Credits).
400 MISSING_PARAM or INVALID_PARAM; param names the culprit.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
401 UNAUTHORIZED: missing, unknown or revoked key.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
402 INSUFFICIENT_CREDITS: nothing was charged.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
429 RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
500 INTERNAL: our fault, not charged. Quote X-Request-Id.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
501 The platform or marketplace is coming soon. Nothing is charged.
Example
{
  "error": {
    "code": {},
    "message": "Amazon UK is coming soon.",
    "param": "marketplace",
    "docs": "string"
  },
  "coming_soon": {}
}
Schema
errorobjectrequired
Show child parameters
code
messagestring
paramstring
docsstring
coming_soonrequired
GEThttps://scrapelyserp.com/api/v1/products/{id}/offers
Get every offer for one item

A convenience alias for a single-item POST /v1/offers: same response (results holds one entry), same price (1 or 3 credits, nothing when unavailable). A malformed id is a 400 whose param names the platform's id (asin on Amazon).

Parameters
idstringpathrequired
The item id: on Amazon, the ASIN (10 letters or digits).
conditionstringquery
all (default), new, or used (every non-new condition: used, renewed/refurbished, collectible).
new | used | all = all
platformstringquery
Which platform to read. Platforms: amazon (live: us; coming soon: uk, de, fr, it, es, ca, mx, jp, au, in, br, nl, se, pl), walmart (live: us), ebay (coming soon), target (live: us), bestbuy (live: us; coming soon: ca), aliexpress (coming soon). A coming-soon platform or marketplace answers 501 NOT_IMPLEMENTED with "coming_soon": true (nothing charged); an unknown one is a 400 listing the valid values. GET /v1/platforms has the full list.
= amazon
marketplacestringquery
The platform's regional storefront (us, uk, de…); default the platform's main one. Prices come back in its currency.
= us
Code samples
cURL
curl -X GET "https://scrapelyserp.com/api/v1/products/{id}/offers?condition=&platform=&marketplace="
TypeScript
const res = await fetch('https://scrapelyserp.com/api/v1/products/{id}/offers?condition=&platform=&marketplace=', {
  method: 'GET',
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://scrapelyserp.com/api/v1/products/{id}/offers?condition=&platform=&marketplace=",
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://scrapelyserp.com/api/v1/products/{id}/offers?condition=&platform=&marketplace=", nil)
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://scrapelyserp.com/api/v1/products/{id}/offers?condition=&platform=&marketplace=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://scrapelyserp.com/api/v1/products/{id}/offers?condition=&platform=&marketplace=')
req = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://scrapelyserp.com/api/v1/products/{id}/offers?condition=&platform=&marketplace="))
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 One result, for the ASIN in the path.
Example
{
  "platform": "amazon",
  "marketplace": "us",
  "results": [
    {
      "id": "B0009KNLV6",
      "asin": "B0009KNLV6",
      "status": "ok",
      "fetchedAt": "2024-01-01T00:00:00Z",
      "buyboxOfferListingId": "string",
      "totalOffers": 0,
      "offers": [
        {
          "offerListingId": null,
          "price": null,
          "currency": null,
          "priceDisplay": null,
          "shipping": null,
          "condition": null,
          "conditionNote": null,
          "seller": null,
          "fulfillment": null,
          "isBuybox": null,
          "availability": null,
          "delivery": null
        }
      ]
    }
  ],
  "stats": {
    "requested": 0,
    "ok": 0,
    "partial": 0,
    "notFound": 0,
    "unavailable": 0,
    "elapsedMs": 0
  },
  "credits": 5
}
Schema
platformstringrequired
marketplacestringrequired
resultsOffersResult[]required
One per unique requested ASIN, in request order.
Show child parameters
idstringrequired
The item id (the ASIN on Amazon).
asinstringrequired
statusstringrequired
ok: the offer list was read (charged; may be empty). not_found: Amazon has no such product (charged). unavailable: we could not get an answer this time, or the call ran out of time (refunded; retry later).
ok | not_found | unavailable
fetchedAtstringrequired
buyboxOfferListingIdstring
The featured offer, when there is one (reported even if condition filters it out of offers).
totalOffersinteger
Offers on the listing in every condition, the buy box included. 1 or less: charged the single-offer rate.
offersOffer[]required
Featured offer first, then the rest cheapest first. Every offer for the ASIN, up to 31.
Show child parameters
offerListingIdstringrequired
Identifies this exact offer.
pricenumberrequired
In currency.
currencystring
ISO 4217: the currency of the marketplace, for price and shipping.
priceDisplaystring
shippingnumber
In currency; 0 for free delivery; absent when Amazon does not state it.
conditionstringrequired
new, used_like_new, used_very_good, used_good, used_acceptable, refurbished, collectible_*.
conditionNotestring
The seller's condition comment.
sellerobjectrequired
fulfillmentobjectrequired
isBuyboxbooleanrequired
The featured (buy-box) offer.
availabilitystring
deliverystring
The delivery promise as Amazon words it.
statsobjectrequired
Show child parameters
requestedintegerrequired
Unique items after de-dup.
okintegerrequired
Answered in full (charged).
partialintegerrequired
Answered with fields missing (refunded). Always 0 where an answer cannot be partial (offers).
notFoundintegerrequired
The platform says the item does not exist (charged).
unavailableintegerrequired
No answer this time (refunded; retry later).
elapsedMsintegerrequired
creditsintegerrequired
Credits charged for the call (also X-Scrapely-Credits).
400 MISSING_PARAM or INVALID_PARAM; param names the culprit.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
401 UNAUTHORIZED: missing, unknown or revoked key.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
402 INSUFFICIENT_CREDITS: nothing was charged.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
429 RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
500 INTERNAL: our fault, not charged. Quote X-Request-Id.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
501 The platform or marketplace is coming soon. Nothing is charged.
Example
{
  "error": {
    "code": {},
    "message": "Amazon UK is coming soon.",
    "param": "marketplace",
    "docs": "string"
  },
  "coming_soon": {}
}
Schema
errorobjectrequired
Show child parameters
code
messagestring
paramstring
docsstring
coming_soonrequired
Updated