curl "https://api.alura.io/v1/workspace/reviews?rating_max=2&has_text=true&from=2026-07-19" \
-H "Authorization: Bearer $ALURA_API_KEY"const res = await fetch('https://api.alura.io/v1/workspace/reviews?rating_max=2&has_text=true&from=2026-07-19', {
headers: {
Authorization: `Bearer ${process.env.ALURA_API_KEY}`,
},
});
console.log(await res.json());import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.alura.io/v1/workspace/reviews?rating_max=2&has_text=true&from=2026-07-19",
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "list",
"data": [
{
"object": "workspace.review",
"id": "41002",
"shop_id": "22841907",
"listing": {
"id": "1834720562",
"title": "Custom travel tumbler with name, insulated 20oz"
},
"order_id": "3456789013",
"buyer": {
"id": "12346",
"name": "Alex Example"
},
"buyer_error": null,
"rating": 2,
"text": "Arrived a week late. The tumbler itself is nice.",
"language": "en",
"image_url": null,
"created_at": "2026-10-03T12:00:00.000Z",
"updated_at": null,
"as_of": "2026-10-08T06:00:00.000Z"
},
{
"object": "workspace.review",
"id": "41091",
"shop_id": "22841907",
"listing": {
"id": "1834720561",
"title": "Personalized name mug, custom coffee mug with name, 11oz ceramic gift"
},
"order_id": null,
"buyer": {
"id": "12391",
"name": null
},
"buyer_error": null,
"rating": 1,
"text": "The print faded after a few washes.",
"language": "en",
"image_url": "https://i.etsystatic.com/iusa/a1b2c3/70002/iusa_fullxfull.70002_review2.jpg",
"created_at": "2026-09-20T09:15:00.000Z",
"updated_at": null,
"as_of": "2026-10-08T06:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null,
"total": {
"value": 2,
"relation": "eq"
},
"summary": {
"as_of": "2026-10-08T06:00:00.000Z",
"freshness": [
{
"shop_id": "22841907",
"as_of": "2026-10-08T06:00:00.000Z"
},
{
"shop_id": "30577120",
"as_of": "2026-10-17T06:00:00.000Z"
},
{
"shop_id": "48911633",
"as_of": "2026-10-16T06:00:00.000Z"
}
],
"notices": [
{
"code": "stale_shops",
"shop_ids": [
"22841907"
],
"detail": "These shops have no data, or no data newer than 7 days, for this area. Start a sync to refresh them."
}
],
"count": 2,
"average": 1.5,
"distribution": {
"1": 1,
"2": 1,
"3": 0,
"4": 0,
"5": 0
},
"with_images": 1
}
}{
"type": "https://docs.alura.io/errors/invalid_request",
"title": "Invalid request",
"status": 400,
"code": "invalid_request",
"detail": "Invalid request",
"suggestion": "Fix the request as the detail says, then send it again.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/unauthorized",
"title": "Unauthorized",
"status": 401,
"code": "unauthorized",
"detail": "Unauthorized",
"suggestion": "Send a valid API key as `Authorization: Bearer alura_sk_...`.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_exhausted",
"title": "API credits exhausted",
"status": 402,
"code": "credits_exhausted",
"detail": "API credits exhausted",
"suggestion": "Upgrade the plan or wait for the monthly reset.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/plan_required",
"title": "Plan required",
"status": 403,
"code": "plan_required",
"detail": "Plan required",
"suggestion": "Upgrade the workspace plan to use this operation.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/not_found",
"title": "Not found",
"status": 404,
"code": "not_found",
"detail": "Not found",
"suggestion": "Check the ID, or search for it first.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/method_not_allowed",
"title": "Method not allowed",
"status": 405,
"code": "method_not_allowed",
"detail": "Method not allowed",
"suggestion": "Use one of the methods in the Allow header.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/rate_limited",
"title": "Rate limited",
"status": 429,
"code": "rate_limited",
"detail": "Rate limited",
"suggestion": "Wait for Retry-After, then retry.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/internal_error",
"title": "Internal error",
"status": 500,
"code": "internal_error",
"detail": "Internal error",
"suggestion": "Retry; if it keeps failing, report the request_id.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_unavailable",
"title": "API credits unavailable",
"status": 503,
"code": "credits_unavailable",
"detail": "API credits unavailable",
"suggestion": "Retry shortly.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}Search reviews
Searches the reviews of your connected Etsy shops: filter by a listing, star rating (rating at least, rating_max at most), when they were written (from, to), with or without text, with or without the buyer’s photo; newest first by default (created for oldest first, -rating or rating by stars, newest first within one rating). Covers every connected shop unless shop_id narrows it; a shop or listing outside the workspace is 404. summary adds the count, average rating, rating distribution and photo count over every matching review (not just the page), each shop’s data time and a stale_shops notice for shops not synced for 7 days; while a shop’s reviews were never synced the statistics are null with a reviews_not_synced notice. Each review names its buyer and order: the buyer block and order_id need the orders:read scope and the Customer analytics workspace permission, and are null with buyer_error otherwise. Etsy’s API has no seller replies, so there are none. The first summary of a very large shop (tens of thousands of reviews) can take up to 10 seconds, and may answer a retryable 503 when it takes longer. Paging stops after 10,000 results. Costs 1 API credit per page with results; an empty page and the summary are free.
Cost: 1 API credit per page.
curl "https://api.alura.io/v1/workspace/reviews?rating_max=2&has_text=true&from=2026-07-19" \
-H "Authorization: Bearer $ALURA_API_KEY"const res = await fetch('https://api.alura.io/v1/workspace/reviews?rating_max=2&has_text=true&from=2026-07-19', {
headers: {
Authorization: `Bearer ${process.env.ALURA_API_KEY}`,
},
});
console.log(await res.json());import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.alura.io/v1/workspace/reviews?rating_max=2&has_text=true&from=2026-07-19",
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "list",
"data": [
{
"object": "workspace.review",
"id": "41002",
"shop_id": "22841907",
"listing": {
"id": "1834720562",
"title": "Custom travel tumbler with name, insulated 20oz"
},
"order_id": "3456789013",
"buyer": {
"id": "12346",
"name": "Alex Example"
},
"buyer_error": null,
"rating": 2,
"text": "Arrived a week late. The tumbler itself is nice.",
"language": "en",
"image_url": null,
"created_at": "2026-10-03T12:00:00.000Z",
"updated_at": null,
"as_of": "2026-10-08T06:00:00.000Z"
},
{
"object": "workspace.review",
"id": "41091",
"shop_id": "22841907",
"listing": {
"id": "1834720561",
"title": "Personalized name mug, custom coffee mug with name, 11oz ceramic gift"
},
"order_id": null,
"buyer": {
"id": "12391",
"name": null
},
"buyer_error": null,
"rating": 1,
"text": "The print faded after a few washes.",
"language": "en",
"image_url": "https://i.etsystatic.com/iusa/a1b2c3/70002/iusa_fullxfull.70002_review2.jpg",
"created_at": "2026-09-20T09:15:00.000Z",
"updated_at": null,
"as_of": "2026-10-08T06:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null,
"total": {
"value": 2,
"relation": "eq"
},
"summary": {
"as_of": "2026-10-08T06:00:00.000Z",
"freshness": [
{
"shop_id": "22841907",
"as_of": "2026-10-08T06:00:00.000Z"
},
{
"shop_id": "30577120",
"as_of": "2026-10-17T06:00:00.000Z"
},
{
"shop_id": "48911633",
"as_of": "2026-10-16T06:00:00.000Z"
}
],
"notices": [
{
"code": "stale_shops",
"shop_ids": [
"22841907"
],
"detail": "These shops have no data, or no data newer than 7 days, for this area. Start a sync to refresh them."
}
],
"count": 2,
"average": 1.5,
"distribution": {
"1": 1,
"2": 1,
"3": 0,
"4": 0,
"5": 0
},
"with_images": 1
}
}{
"type": "https://docs.alura.io/errors/invalid_request",
"title": "Invalid request",
"status": 400,
"code": "invalid_request",
"detail": "Invalid request",
"suggestion": "Fix the request as the detail says, then send it again.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/unauthorized",
"title": "Unauthorized",
"status": 401,
"code": "unauthorized",
"detail": "Unauthorized",
"suggestion": "Send a valid API key as `Authorization: Bearer alura_sk_...`.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_exhausted",
"title": "API credits exhausted",
"status": 402,
"code": "credits_exhausted",
"detail": "API credits exhausted",
"suggestion": "Upgrade the plan or wait for the monthly reset.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/plan_required",
"title": "Plan required",
"status": 403,
"code": "plan_required",
"detail": "Plan required",
"suggestion": "Upgrade the workspace plan to use this operation.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/not_found",
"title": "Not found",
"status": 404,
"code": "not_found",
"detail": "Not found",
"suggestion": "Check the ID, or search for it first.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/method_not_allowed",
"title": "Method not allowed",
"status": 405,
"code": "method_not_allowed",
"detail": "Method not allowed",
"suggestion": "Use one of the methods in the Allow header.",
"retryable": false,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/rate_limited",
"title": "Rate limited",
"status": 429,
"code": "rate_limited",
"detail": "Rate limited",
"suggestion": "Wait for Retry-After, then retry.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/internal_error",
"title": "Internal error",
"status": 500,
"code": "internal_error",
"detail": "Internal error",
"suggestion": "Retry; if it keeps failing, report the request_id.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}{
"type": "https://docs.alura.io/errors/credits_unavailable",
"title": "API credits unavailable",
"status": 503,
"code": "credits_unavailable",
"detail": "API credits unavailable",
"suggestion": "Retry shortly.",
"retryable": true,
"request_id": "req_01JQ5W3H8M2N4P6R8T0V2X4Z6B"
}Authorizations
An API key: Authorization: Bearer alura_sk_....
Query Parameters
Only these connected shops, comma-separated; default every connected shop of the workspace. A shop outside the workspace is 404.
Only this listing's reviews. A listing outside the workspace is 404.
^[0-9]{1,20}$At least this many stars, 1 to 5 (5: only 5-star reviews).
^[1-5]$At most this many stars, 1 to 5 (2: only 1- and 2-star reviews).
^[1-5]$"2"
Written at or after this time (a date is midnight UTC).
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2}))?$"2026-07-19"
Written before this time.
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}(:\d{2}(\.\d{1,3})?)?(Z|[+-]\d{2}:\d{2}))?$true: only reviews with text; false: only reviews without.
true, false "true"
true: only reviews with the buyer's photo; false: only reviews without one.
true, false -created (newest first, the default), created, -rating (most stars first) or rating; within one rating newest first.
-created, created, -rating, rating Page size: default 25, at most 100.
1 <= x <= 100The next_cursor of the previous page. Bound to the query, the workspace and the key.
Comma-separated dotted paths to return; id, object and as_of always come back.
Response
OK
"list"Show child attributes
Show child attributes
Show child attributes
Show child attributes
Over every review that matches the filters, not just this page; the same on every page.
Show child attributes
Show child attributes