Skip to main content
Get Etsy’s events for your connected shops, such as a new paid order, at your own HTTPS endpoint within seconds. You don’t need an Etsy app: Etsy sends webhooks only to app owners, and Alura relays the events it receives for your shops to your workspace. Each delivery is signed with your endpoint’s secret (see Verifying webhooks), and the last 30 days of events stay readable with GET /v1/events.

What you receive

  • Etsy’s payload, unchanged. Each event carries what Etsy sent in data, byte for byte: today event_type, resource_url and shop_id. Alura adds nothing to it and doesn’t keep a list of event types, so a type Etsy adds tomorrow reaches you too.
  • Your shops only. An event reaches a workspace only when its shop is connected to that workspace.
  • From your first endpoint on. Alura stores an event for your workspace when one of your enabled endpoints wants it. History starts with your first endpoint, and covers the event types and shops your endpoints subscribe to.
  • 30 days. Events are kept for 30 days.
resource_url points at Etsy’s own API, which needs an Etsy app. Read the same data from Alura instead: for an order.* event, the order with GET /v1/workspace/orders/{id}, taking the receipt ID from the end of resource_url.

Scopes

Order events reveal that an order exists, so they also need orders:read: on the key that subscribes an endpoint to *, order.* or any order. type, or changes, tests or rotates such an endpoint, and on the key that reads them with GET /v1/events. A workspace owner or admin can create a key with these scopes.

Create an endpoint

An endpoint is an HTTPS URL on a public host (not localhost or a private address) with the event types it wants: * for every type, an exact type such as order.paid, or a prefix such as order.*. Add shop_ids to limit it to some of your connected shops. The answer carries the endpoint’s signing secret (whsec_...) once, so store it then. A workspace has at most 10 endpoints. Events start reaching a new endpoint within about 30 seconds of creating it (or enabling it, or connecting a shop).
To stop events for a while, set status to disabled with PATCH /v1/webhooks/{id}. Events that arrive while it is disabled aren’t stored for it, retries still queued for it are cancelled, and enabling it again doesn’t replay them.

Deliveries

Alura POSTs each event to every enabled endpoint that wants it, usually within a few seconds of Etsy’s notification. Any 2xx answer counts as delivered. Anything else, no answer within 15 seconds, or a redirect counts as a failure, and Alura retries 5 seconds, 5 minutes, 30 minutes, 2 hours, 5 hours, 10 hours and 10 hours later: 8 attempts over 27 hours and 35 minutes. Every attempt carries the same webhook-id header, the event’s ID.
  • Every attempt is listed. GET /v1/webhooks/{id}/deliveries shows the last 30 days of attempts, newest first, with the HTTP status your endpoint answered (never its body), how long it took, an error when there was no usable answer, and when the next retry is due.
After 5 days without a successful delivery and at least 20 failed attempts, Alura disables the endpoint: status becomes disabled with disabled_reason: "failing". Fix it, then set status back to enabled with PATCH /v1/webhooks/{id}. Missed events aren’t replayed to the endpoint; read them with GET /v1/events.
Alura resolves your endpoint’s host before each attempt and connects only when every address it resolves to is public. Private, loopback, link-local and cloud metadata addresses are refused, and the attempt’s error is address_refused.

Read events

GET /v1/events lists your events newest first. Filter by type (exact or a prefix such as order.*), shop_id and created_after, and page with cursor. After an outage on your side, this is how you catch up.
Each event looks like this:
created_at is when Alura received the event from Etsy. Etsy retries a delivery it isn’t sure arrived, and Alura stores each Etsy message once per workspace, so a retry never shows up twice. Webhook endpoints, deliveries and events are free and REST only: AI assistants don’t get them as MCP tools.