curl "https://api.alura.io/v1/research/products/trending?type=rising&category_id=1062" \
-H "Authorization: Bearer $ALURA_API_KEY"const res = await fetch('https://api.alura.io/v1/research/products/trending?type=rising&category_id=1062', {
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/research/products/trending?type=rising&category_id=1062",
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "list",
"data": [
{
"object": "research.product",
"id": "4524717183",
"title": "Personalized Name Mug, Custom Coffee Mug",
"url": "https://www.etsy.com/listing/4524717183",
"shop": {
"id": "48911633",
"name": "MugCo"
},
"price": {
"amount": "24.99",
"currency": "EUR",
"usd": "27.10"
},
"image_url": "https://i.etsystatic.com/48911633/r/il/0a1b2c/4524717183/il_570xN.4524717183_mug1.jpg",
"category": {
"id": "1062",
"path": [
"Home & Living",
"Kitchen & Dining",
"Drink & Barware",
"Drinkware",
"Mugs"
]
},
"sales": {
"est_lifetime": 6400,
"est_monthly_avg": 210,
"est_lifetime_revenue_usd": 173440,
"est_last_month": 236,
"est_trend_3m": 0.12
},
"reviews": {
"count": 842,
"average": 4.9
},
"favorites": 3120,
"listing_score": 86,
"listed_at": "2023-04-02T10:11:00.000Z",
"as_of": "2026-10-13T08:05:00.000Z"
}
],
"has_more": false,
"next_cursor": null,
"total": {
"value": 1,
"relation": "eq"
},
"summary": {
"trend_window": {
"from": "2026-04",
"to": "2026-09"
}
}
}{
"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"
}Get trending products
Rising and new Etsy products (other sellers’ active listings). type=rising (default): ranked by sales.est_trend_3m, the change in estimated sales over the last 3 completed months against the 3 before; products qualify with a trend for the last completed month and at least 30 estimated sales a month on average. type=new: products listed in the last 90 days with at least 10 estimated sales a month, most estimated monthly sales first. Filter by category_id (with every category under it), USD price and estimated sales. Product summaries, as search returns them, plus sales.est_trend_3m and sales.est_last_month; summary.trend_window names the six months compared. Only items Alura has refreshed recently can qualify, so coverage grows as Alura refreshes more of Etsy: an item missing from trending is not proof that it is not rising. Shops that opted out of Alura never appear. Nothing is fetched from Etsy. The totals stop counting at 10,000. Costs 10 API credits per page with results; an empty page is free.
Cost: 10 API credits per page.
curl "https://api.alura.io/v1/research/products/trending?type=rising&category_id=1062" \
-H "Authorization: Bearer $ALURA_API_KEY"const res = await fetch('https://api.alura.io/v1/research/products/trending?type=rising&category_id=1062', {
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/research/products/trending?type=rising&category_id=1062",
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "list",
"data": [
{
"object": "research.product",
"id": "4524717183",
"title": "Personalized Name Mug, Custom Coffee Mug",
"url": "https://www.etsy.com/listing/4524717183",
"shop": {
"id": "48911633",
"name": "MugCo"
},
"price": {
"amount": "24.99",
"currency": "EUR",
"usd": "27.10"
},
"image_url": "https://i.etsystatic.com/48911633/r/il/0a1b2c/4524717183/il_570xN.4524717183_mug1.jpg",
"category": {
"id": "1062",
"path": [
"Home & Living",
"Kitchen & Dining",
"Drink & Barware",
"Drinkware",
"Mugs"
]
},
"sales": {
"est_lifetime": 6400,
"est_monthly_avg": 210,
"est_lifetime_revenue_usd": 173440,
"est_last_month": 236,
"est_trend_3m": 0.12
},
"reviews": {
"count": 842,
"average": 4.9
},
"favorites": 3120,
"listing_score": 86,
"listed_at": "2023-04-02T10:11:00.000Z",
"as_of": "2026-10-13T08:05:00.000Z"
}
],
"has_more": false,
"next_cursor": null,
"total": {
"value": 1,
"relation": "eq"
},
"summary": {
"trend_window": {
"from": "2026-04",
"to": "2026-09"
}
}
}{
"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
rising (default): the products whose estimated sales grew the most, last 3 completed months against the 3 before. new: products listed in the last 90 days that already sell, most estimated monthly sales first.
rising, new "rising"
An Etsy category ID (see /v1/categories); matches the category and every category under it.
^[1-9][0-9]{0,9}$"1062"
Lowest price in USD.
^\d{1,9}(\.\d{1,2})?$Highest price in USD.
^\d{1,9}(\.\d{1,2})?$Fewest estimated lifetime sales.
^\d{1,10}$Most estimated lifetime sales.
^\d{1,10}$Fewest estimated sales per month (average).
^\d{1,10}$Most estimated sales per month (average).
^\d{1,10}$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.