GET
/products/reviews/details
1 credit
Amazon Product Review Details API
Fetch one specific review in full by its review id, including the untruncated body.
Try it
You are not signed in, so this runs against sample data and costs nothing.
Create a free account to run it against your own key.
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
|
asin
required |
string | — | Amazon Standard Identification Number. |
|
review_id
required |
string | — |
Review id from /products/reviews.
|
| marketplace | string | US | Two-letter marketplace code (US, UK, DE, FR, IT, ES, CA, JP, IN, AU, …). |
| zip | string | — | Delivery postcode. Without one, many listings report “cannot be shipped to your location” and come back with no price or images. Always send it for price-accurate data. |
Request
curl -sS "https://amazoncrawler.com/v1/products/reviews/details?asin=B07CMS5Q6P&review_id=R3H2KBL1KYTDR0&marketplace=US&zip=10001" \
-H "x-api-key: YOUR_API_KEY"
import requests
API_KEY = "YOUR_API_KEY"
response = requests.get(
"https://amazoncrawler.com/v1/products/reviews/details",
params={
"asin": "B07CMS5Q6P",
"review_id": "R3H2KBL1KYTDR0",
"marketplace": "US",
"zip": "10001",
},
headers={"x-api-key": API_KEY},
timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
const API_KEY = "YOUR_API_KEY";
const url = new URL("https://amazoncrawler.com/v1/products/reviews/details");
const params = {
asin: "B07CMS5Q6P",
review_id: "R3H2KBL1KYTDR0",
marketplace: "US",
zip: "10001",
};
Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
const response = await fetch(url, {
headers: { "x-api-key": API_KEY },
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data);
<?php
$apiKey = 'YOUR_API_KEY';
$query = http_build_query([
'asin' => 'B07CMS5Q6P',
'review_id' => 'R3H2KBL1KYTDR0',
'marketplace' => 'US',
'zip' => '10001',
]);
$ch = curl_init("https://amazoncrawler.com/v1/products/reviews/details?$query");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["x-api-key: $apiKey"],
CURLOPT_TIMEOUT => 30,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($data);
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
func main() {
u, _ := url.Parse("https://amazoncrawler.com/v1/products/reviews/details")
q := u.Query()
q.Set("asin", "B07CMS5Q6P")
q.Set("review_id", "R3H2KBL1KYTDR0")
q.Set("marketplace", "US")
q.Set("zip", "10001")
u.RawQuery = q.Encode()
req, _ := http.NewRequest("GET", u.String(), nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]any
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data)
}
Response
{
"url": "https://www.amazon.com/gp/customer-reviews/R3H2KBL1KYTDR0",
"asin": "B07CMS5Q6P",
"review": {
"id": "R3H2KBL1KYTDR0",
"body": "The Logitech G305 Lightspeed is one of the best wireless gaming mice I've used\u2026",
"date": "June 6, 2026",
"title": "Excellent Wireless Gaming Mouse with Amazing Battery Life",
"images": [],
"rating": 5.0,
"country": "United States",
"variant": "Color: Black Style: Classic Pattern Name: Mouse",
"helpful_votes": 11,
"verified_purchase": true
},
"review_id": "R3H2KBL1KYTDR0"
}
Errors
Beyond the shared error codes, this endpoint returns
422 when a parameter fails validation — the
detail array names the field.
{
"detail": [
{
"loc": ["query", "asin"],
"msg": "Field required",
"type": "missing",
"input": null
}
]
}