2 operations. Every schema and example on this page is generated from the platform contract.
Purchase reviews and collected testimonials in one list, newest first, INCLUDING hidden and unscored ones, each marked with which it is and whether it is on the shop page. Also returns the rating the page is showing.
purchasetestimonialinstagramfacebookmessageothercurl -G "https://www.membber.com/api/v1/reviews" \
-H "Authorization: Bearer $MEMBBER_TOKEN" \
--data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"import { createMembberClient } from "@membber/sdk-ts";
const membber = createMembberClient({
getAccessToken: () => process.env.MEMBBER_TOKEN,
});
const { data, error } = await membber.raw.GET("/api/v1/reviews", {
params: { query: { store_id: "6659c139-0000-4000-8000-d0c500000066" } },
});
if (error) {
// Typed error envelope: { error: { code, message, requestId } }
throw new Error(`${error.error.code}: ${error.error.message}`);
}
console.log(data);import MembberSwift
let client = MembberClient(
serverURL: MembberClient.productionServerURL,
tokenProvider: { session.accessToken }
)
let response = try await client.api.listShopReviews(
query: .init(storeId: "6659c139-0000-4000-8000-d0c500000066")
).ok.body.json
print(response){
"reviews": [
{
"id": "00000d1b-0000-4000-8000-d0c500000000",
"kind": "purchase",
"rating": 1,
"body": "<body>",
"author": "<author>",
"source": "instagram",
"said_at": "<said_at>",
"item_names": [
"<item_name>"
],
"is_visible": true,
"hidden_reason": "Added at the front desk",
"merchant_reply": "<merchant_reply>",
"merchant_replied_at": "<merchant_replied_at>",
"rating_is_editable": true
}
],
"visible_count": 1,
"visible_average": 1
}/api/v1/reviewsSets the stars on a collected testimonial (never on a purchase review, a customer's rating is theirs), shows or hides one on the shop page, and writes or clears the shop owner's public reply. Hiding a purchase review requires a reason, which is recorded against it.
purchasetestimonialpurchasetestimonialinstagramfacebookmessageothercurl -X PATCH "https://www.membber.com/api/v1/reviews" \
-H "Authorization: Bearer $MEMBBER_TOKEN" \
-H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
-H "Content-Type: application/json" \
-d '{
"store_id": "6659c139-0000-4000-8000-d0c500000066",
"review_id": "1d631b62-0000-4000-8000-d0c50000001d",
"kind": "purchase"
}'import { createMembberClient } from "@membber/sdk-ts";
const membber = createMembberClient({
getAccessToken: () => process.env.MEMBBER_TOKEN,
});
const { data, error } = await membber.raw.PATCH("/api/v1/reviews", {
body: {
store_id: "6659c139-0000-4000-8000-d0c500000066",
review_id: "1d631b62-0000-4000-8000-d0c50000001d",
kind: "purchase"
},
headers: { "Idempotency-Key": crypto.randomUUID() },
});
if (error) {
// Typed error envelope: { error: { code, message, requestId } }
throw new Error(`${error.error.code}: ${error.error.message}`);
}
console.log(data);import MembberSwift
let client = MembberClient(
serverURL: MembberClient.productionServerURL,
tokenProvider: { session.accessToken }
)
let response = try await client.api.updateShopReview(
body: .json(.init(
storeId: "6659c139-0000-4000-8000-d0c500000066",
reviewId: "1d631b62-0000-4000-8000-d0c50000001d",
kind: .purchase
))
).ok.body.json
print(response){
"review": {
"id": "00000d1b-0000-4000-8000-d0c500000000",
"kind": "purchase",
"rating": 1,
"body": "<body>",
"author": "<author>",
"source": "instagram",
"said_at": "<said_at>",
"item_names": [
"<item_name>"
],
"is_visible": true,
"hidden_reason": "Added at the front desk",
"merchant_reply": "<merchant_reply>",
"merchant_replied_at": "<merchant_replied_at>",
"rating_is_editable": true
}
}