Skip to main content

ASINScope API Documentation

The ASINScope API lets you retrieve detailed Amazon product data (title, brand, UPC, EAN, MPN, imagery, and more) so you can enrich catalogs, validate listings, or power downstream workflows directly from your applications.

Base URL

https://api.asinscope.com

Authentication

  • Pass your API key as the key query parameter on every request.
  • Find your key in the ASINScope API Dashboard after subscribing.

Example

curl --get 'https://api.asinscope.com/products/lookup' \
--data-urlencode "key=YOUR_API_KEY" \
--data-urlencode "asin=B01NAL48FU,B00NNUMI86" \
--data-urlencode "domain=com"

Products Lookup

Endpoint
GET /products/lookup

What it does
Returns product details for up to 10 identifiers per request. Use one identifier type per call:

  • asin — Amazon ASINs
  • upc — UPC codes
  • ean — EAN codes

Parameters (query)

  • asin | upc | ean (string, required): Comma-separated list of 1–10 codes. Provide only one of these parameters per request.
  • domain (string, optional): Amazon marketplace domain. Default: com. Supported: com, ca, de, fr, it, nl, es, in, uk, jp, au, mx.
  • key (string, required): Your API key.

Sample requests

Lookup by ASIN:

curl --get 'https://api.asinscope.com/products/lookup' \
--data-urlencode "key=YOUR_API_KEY" \
--data-urlencode "asin=B01NAL48FU" \
--data-urlencode "domain=com"

Lookup by UPC:

curl --get 'https://api.asinscope.com/products/lookup' \
--data-urlencode "key=YOUR_API_KEY" \
--data-urlencode "upc=012345678905,098765432109" \
--data-urlencode "domain=com"

Lookup by EAN:

curl --get 'https://api.asinscope.com/products/lookup' \
--data-urlencode "key=YOUR_API_KEY" \
--data-urlencode "ean=4006381333931" \
--data-urlencode "domain=de"

Response

200 OK — JSON payload with product data and token usage info.

{
"items": [
{
"asin": "B088H39PXX",
"ean": "0793610399007",
"upc": "793610399007",
"mpn": "2143",
"bsr": 95,
"category": "Sports & Outdoors",
"brand": "CUKU",
"title": "Magnetic Dart Board - 12pcs Magnetic Darts (Red Green Yellow) - Excellent Indoor Game and Party Games - Magnetic Dart Board Toys Gifts for 5 6 7 8 9 10 11 12 Year Old Boy Kids",
"productGroup": "Sports",
"lowestNewPrice": 22.79,
"lowestFormattedPrice": "$22.79",
"soldByAmazon": false,
"packageDimensions": {
"height": 1.77,
"width": 13.46,
"length": 13.58,
"weight": 2.07
},
"upcList": ["793610399007"],
"eanList": ["0793610399007"],
"totalNew": 2,
"smallImage": "https://images-na.ssl-images-amazon.com/images/I/91we94LQPhL.jpg",
"mediumImage": "https://images-na.ssl-images-amazon.com/images/I/91we94LQPhL.jpg",
"images": [
"https://images-na.ssl-images-amazon.com/images/I/91we94LQPhL.jpg",
"https://images-na.ssl-images-amazon.com/images/I/91WKu-Y+P4L.jpg",
"https://images-na.ssl-images-amazon.com/images/I/91-9rELjLsL.jpg"
]
}
],
"dailyTokensLeft": 9998,
"bucketSize": 119,
"msBeforeNextDailyToken": 82524143,
"consumedTokens": 1
}

Errors

StatusDescription
400 Bad RequestMissing or malformed parameters (e.g., more than 10 codes, mixed identifier types)
401 UnauthorizedInvalid or missing API key
429 Too Many RequestsRate limit exceeded; retry with backoff
500 Internal Server ErrorUnexpected server issue

Account Tokens

Endpoint GET /account/tokens

What it does Returns your current token usage and limits without consuming any tokens. Use this endpoint to check available capacity before making data requests — especially useful when processing jobs from a queue where you want to avoid losing messages if tokens are exhausted.

Parameters (query)

  • key (string, required): Your API key.

Sample request

curl --get 'https://api.asinscope.com/account/tokens' \
--data-urlencode "key=YOUR_API_KEY"

Response

200 OK — JSON payload with current token status.

{
"dailyTokensLeft": 9812,
"dailyTokensLimit": 10000,
"minutelyTokensLeft": 119,
"minutelyBucketCapacity": 120,
"tokensPerMinute": 60,
"msBeforeNextDailyReset": 82524143
}
FieldDescription
dailyTokensLeftRemaining tokens for the current day
dailyTokensLimitMaximum daily tokens for your subscription
minutelyTokensLeftCurrent tokens available in the short-term bucket
minutelyBucketCapacityMaximum bucket capacity for your subscription
tokensPerMinuteRate at which the bucket refills (tokens per minute)
msBeforeNextDailyResetMilliseconds until the daily limit resets

Errors

StatusDescription
400 Bad RequestMissing API key
401 UnauthorizedInvalid API key
403 ForbiddenNo active subscription

Rate Limits

Daily tokens

  • Basic: 1,000 tokens/day
  • Pro: 10,000 tokens/day

Short-term capacity (rolling bucket)

  • Basic: bucket capacity 60 tokens, refill rate 10 tokens/minute
  • Pro: bucket capacity 120 tokens, refill rate 60 tokens/minute

How tokens are used

  • Each product identifier (ASIN/UPC/EAN) consumes one token.
  • Two limits apply:
    • Daily limit: If daily tokens are exhausted, responses are 429 Too Many Requests with { "error": "The daily requests limit has been reached." }.
    • Short-term bucket: If the minute bucket is empty, responses are 429 Too Many Requests with { "error": "Not enough tokens in the bucket. Restore rate: <rate> / min" }.
  • Daily tokens reset at the start of the next day; the short-term bucket refills continuously at the listed rate.

Code Samples

Python (requests)

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.asinscope.com/products/lookup"

def lookup_by_asin(asins, domain="com"):
params = {
"key": API_KEY,
"asin": ",".join(asins),
"domain": domain,
}
response = requests.get(BASE_URL, params=params, timeout=30)
response.raise_for_status()
return response.json()

if __name__ == "__main__":
try:
data = lookup_by_asin(["B01NAL48FU", "B00NNUMI86"])
for item in data.get("items", []):
print(item["asin"], item.get("upc"), item.get("ean"))
except requests.HTTPError as err:
if err.response.status_code == 429:
print("Rate limited — wait briefly and retry.")
else:
print(f"Request failed: {err.response.status_code} {err.response.text}")

Node.js (axios)

const axios = require('axios');

const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://api.asinscope.com/products/lookup';

async function lookupByUpc(upcs, domain = 'com') {
const params = new URLSearchParams({
key: API_KEY,
upc: upcs.join(','),
domain,
});

const url = `${BASE_URL}?${params.toString()}`;
const response = await axios.get(url, { timeout: 30000 });
return response.data;
}

(async () => {
try {
const data = await lookupByUpc(['012345678905', '098765432109']);
data.items.forEach(item => {
console.log(item.upc, item.title);
});
} catch (err) {
if (err.response?.status === 429) {
console.error('Rate limited — wait briefly and retry.');
} else {
console.error('Request failed:', err.message);
}
}
})();

Tips

  • Send at most 10 codes per call and use only one identifier type (asin, upc, or ean) per request.
  • Always specify domain if you target a marketplace other than com.
  • URL-encode query parameters; using curl --get --data-urlencode helps avoid encoding issues.
  • On 429 responses, apply exponential backoff or wait for the bucket to refill before retrying.
  • If you hit 429s, check the error body to see which limit fired (Not enough tokens in the bucket... vs The daily requests limit has been reached.) and adjust usage accordingly.