Reviews
3 endpoints. Each needs an API key or OAuth token with the scope shown; the key already names its store, so paths start at /v1/store. Generated from the live contract; also in openapi.json.
The moderation queue with counts and the rating summary
GET
/v1/store/reviewsOr name the store: GET /v1/stores/{storeId}/reviews
Parameters
tab"all" | "pending" | "needs_reply" | "low_ratings" | "flagged" | "hidden"queryqstring | nullqueryproductIdprd_… | nullqueryratinginteger | string | nullquerycursorstring | nullquerylimitinteger | stringquery
Response ListReviewsResponse
itemsSellerReview[]requirednextCursorCursor | nullrequiredcountsReviewCountsrequiredsummaryRatingSummaryrequired
Example
curl "https://api.shopfa.st/v1/store/reviews" \
-H "Authorization: Bearer $SHOPFAST_API_KEY"const res = await fetch('https://api.shopfa.st/v1/store/reviews', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
},
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"GET",
"https://api.shopfa.st/v1/store/reviews",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("GET", "https://api.shopfa.st/v1/store/reviews", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
res, err := http.DefaultClient.Do(req)Try it with your key
Approve, hide, flag or unflag a review
POST
/v1/store/reviews/{reviewId}/moderateOr name the store: POST /v1/stores/{storeId}/reviews/{reviewId}/moderate
Parameters
reviewIdrev_…pathrequired
Body
action"approve" | "hide" | "flag" | "unflag"requiredreasonstring
Response SellerReview
idReviewIdrequiredproductIdProductIdrequiredproductNamestringrequiredorderIdOrderId | nullrequiredorderNumberstringrequiredcustomerIdCustomerId | nullrequiredcustomerEmailstringrequiredratingintegerrequiredtitlestringrequiredbodystringrequired
12 more fields
authorstringrequiredstatusReviewStatusrequiredverifiedbooleanrequiredflaggedbooleanrequiredflagReasonstringrequiredreplystringrequiredrepliedAtTimestamp | nullrequiredcreatedAtTimestamprequiredrewardIssuedReviewReward | nullrequiredsourcestringrequiredsourceLabelstringrequiredimageUrlstringrequired
Example
curl -X POST "https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/moderate" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "approve",
"reason": ""
}'const res = await fetch('https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/moderate', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"action": "approve",
"reason": ""
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"POST",
"https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/moderate",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"action": "approve",
"reason": ""
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("POST", "https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/moderate", strings.NewReader(`{
"action": "approve",
"reason": ""
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)Try it with your key
Reply in public (null removes the reply)
PUT
/v1/store/reviews/{reviewId}/replyOr name the store: PUT /v1/stores/{storeId}/reviews/{reviewId}/reply
Parameters
reviewIdrev_…pathrequired
Body
replystring | nullrequired
Response SellerReview
idReviewIdrequiredproductIdProductIdrequiredproductNamestringrequiredorderIdOrderId | nullrequiredorderNumberstringrequiredcustomerIdCustomerId | nullrequiredcustomerEmailstringrequiredratingintegerrequiredtitlestringrequiredbodystringrequired
12 more fields
authorstringrequiredstatusReviewStatusrequiredverifiedbooleanrequiredflaggedbooleanrequiredflagReasonstringrequiredreplystringrequiredrepliedAtTimestamp | nullrequiredcreatedAtTimestamprequiredrewardIssuedReviewReward | nullrequiredsourcestringrequiredsourceLabelstringrequiredimageUrlstringrequired
Example
curl -X PUT "https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/reply" \
-H "Authorization: Bearer $SHOPFAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reply": "string"
}'const res = await fetch('https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/reply', {
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SHOPFAST_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"reply": "string"
}),
});
if (!res.ok) throw new Error((await res.json()).detail);
const data = await res.json();import os, requests
res = requests.request(
"PUT",
"https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/reply",
headers={"Authorization": f"Bearer {os.environ['SHOPFAST_API_KEY']}"},
json={
"reply": "string"
},
)
res.raise_for_status()
data = res.json()req, _ := http.NewRequest("PUT", "https://api.shopfa.st/v1/store/reviews/rev_0123456789abcdefghjk/reply", strings.NewReader(`{
"reply": "string"
}`))
req.Header.Set("Authorization", "Bearer "+os.Getenv("SHOPFAST_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)