curl -X POST "https://api.alura.io/v1/workspace/syncs" \
-H "Authorization: Bearer $ALURA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"shop_id":"22841907"}'const res = await fetch('https://api.alura.io/v1/workspace/syncs', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.ALURA_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"shop_id": "22841907"
}),
});
console.log(await res.json());import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.alura.io/v1/workspace/syncs",
method="POST",
data=json.dumps({
"shop_id": "22841907"
}).encode(),
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "workspace.sync_start",
"shops": [
{
"shop_id": "22841907",
"outcome": "queued",
"sync": {
"object": "workspace.sync",
"id": "syn_9004",
"shop_id": "22841907",
"status": "queued",
"trigger": "api",
"progress": 0,
"steps": [
{
"name": "settings",
"status": "pending"
},
{
"name": "listings",
"status": "pending"
},
{
"name": "orders",
"status": "pending"
},
{
"name": "reviews",
"status": "pending"
},
{
"name": "finances",
"status": "pending"
},
{
"name": "customers",
"status": "pending"
}
],
"requested_at": "2026-10-17T12:00:00.000Z",
"started_at": null,
"completed_at": null,
"estimated_ready_at": null,
"error": null
},
"next_allowed_at": null,
"reconnect_url": null
}
],
"notices": []
}{
"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"
}Start a sync
Asks Alura to sync your connected Etsy shops now (default every shop; shop_id for one), for example after you changed prices on Etsy. Answers at once with one outcome per shop: queued (a sync started), already_running (one was already queued or running; it is returned and not sped up), cooldown (with next_allowed_at), reconnect_required (with reconnect_url) or unavailable (retry). Each shop can be synced again once its plan allows: Free every 24 hours, Basic 6 hours, Growth 1 hour, Professional 15 minutes, counted from the end of its last sync (scheduled, from the app or through the API). A workspace starts at most 4 syncs per connected shop per UTC day through the API. Follow a sync with GET /v1/workspace/syncs/. Costs 1 API credit per call that queued or found a sync. When every shop is refused it is free: 429 sync_cooldown with Retry-After, 409 reconnect_required when every shop needs reconnecting, or 503 when Alura could not start any. Idempotency-Key is accepted and stores nothing: a repeated call finds the running sync (already_running) and costs 1 API credit again. A shop outside the workspace is 404.
Cost: 1 API credit per call.
curl -X POST "https://api.alura.io/v1/workspace/syncs" \
-H "Authorization: Bearer $ALURA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"shop_id":"22841907"}'const res = await fetch('https://api.alura.io/v1/workspace/syncs', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.ALURA_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"shop_id": "22841907"
}),
});
console.log(await res.json());import json
import os
import urllib.request
request = urllib.request.Request(
"https://api.alura.io/v1/workspace/syncs",
method="POST",
data=json.dumps({
"shop_id": "22841907"
}).encode(),
headers={
"Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
"Content-Type": "application/json",
},
)
with urllib.request.urlopen(request) as response:
print(json.load(response)){
"object": "workspace.sync_start",
"shops": [
{
"shop_id": "22841907",
"outcome": "queued",
"sync": {
"object": "workspace.sync",
"id": "syn_9004",
"shop_id": "22841907",
"status": "queued",
"trigger": "api",
"progress": 0,
"steps": [
{
"name": "settings",
"status": "pending"
},
{
"name": "listings",
"status": "pending"
},
{
"name": "orders",
"status": "pending"
},
{
"name": "reviews",
"status": "pending"
},
{
"name": "finances",
"status": "pending"
},
{
"name": "customers",
"status": "pending"
}
],
"requested_at": "2026-10-17T12:00:00.000Z",
"started_at": null,
"completed_at": null,
"estimated_ready_at": null,
"error": null
},
"next_allowed_at": null,
"reconnect_url": null
}
],
"notices": []
}{
"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_....
Body
Only this connected shop; default every connected shop of the workspace. A shop outside the workspace is 404.
^[0-9]{1,20}$Response
Accepted: the work has started and goes on after this answer.