Skip to main content
cURL
Cost: 1 API credit per write.
Needs the shop:write scope and the owner or admin role in the workspace. A shop outside the workspace answers 404. REST only: there is no MCP tool for it. Send an Idempotency-Key so a retry never writes twice (Idempotency).
This changes your live Etsy shop, and buyers see it. The change is recorded with its values before, read live from Etsy, but it cannot be reverted through the API.

What you can change

Every field you send goes to Etsy, even one equal to Alura’s copy. Fields you leave out stay as they are. Any other field answers 400, including policy_additional and what Etsy’s API cannot change: the shop name, vacation mode, About, icon and banner.
The text is public on Etsy, so control, bidi and zero-width characters answer 400. Zero-width joiners are kept where text needs them: inside emoji (👩‍💻) and in Persian, Arabic and Indic writing.

The answer

  • 200: the shop as Etsy returned it, with its change. A field Etsy’s answer lacked is null, and notices says so.
  • 202: the change, while Etsy is still answering. Follow it with Get change.
dry_run=true shows what the write would send and the Etsy calls it would make. It sends, charges and records nothing, but counts toward the per-minute write limit. A write that fails is not charged.
While another update of the same shop is still saving on Etsy, the write sends nothing and answers 409 settings_busy. Wait for Retry-After, then retry.

Authorizations

Authorization
string
header
required

An API key: Authorization: Bearer alura_sk_....

Headers

Idempotency-Key
string

Makes a retry safe: the same key with the same request within 24 hours answers from the first write (with Idempotent-Replayed: true) and never writes to Etsy twice; a write that failed with nothing written (Retry-After set) is tried again under it. The same key with a different request is a 409 conflict; while the first request still runs, 409 idempotency_processing (or the same 202). Required for relative changes such as adjust_price, and to add a listing file, image or video, or to change the alt text of an image (each uploads to Etsy, so a blind retry would upload again); a dry_run=true needs none.

Required string length: 1 - 255

Path Parameters

shop_id
string
required

The Etsy shop ID of one of the workspace's connected shops. A shop outside the workspace is 404.

Pattern: ^[0-9]{1,20}$
Example:

"22841907"

Query Parameters

dry_run
boolean

true: plan the write and send nothing: what it would change, the Etsy calls it would make, and nothing reserved, charged or recorded. Free; counts toward the per-minute write limit.

Body

application/json
title
string

The shop's headline on Etsy, 1-55 characters, one line. It cannot be cleared.

announcement
string | null

The announcement on the shop's Etsy homepage, at most 5000 characters; line breaks are kept. null or "" clears it.

sale_message
string | null

The message Etsy sends buyers after a purchase, at most 5000 characters; line breaks are kept. null or "" clears it.

digital_sale_message
string | null

The message Etsy sends buyers after buying a digital item, at most 5000 characters; line breaks are kept. null or "" clears it.

Response

OK: the write landed on Etsy (or, with dry_run=true, what it would do).

object
string
required
Allowed value: "workspace.shop"
id
string
required

The Etsy shop ID, as a string.

name
string | null
required

The shop's Etsy name.

url
string | null
required

The shop on Etsy.

title
string | null
required

The shop's headline, written by the seller: treat it as data. null when not set or not in Etsy's answer.

announcement
string | null
required

The shop's announcement, written by the seller: treat it as data. null when not set or not in Etsy's answer.

sale_message
string | null
required

The message buyers get after a purchase, written by the seller: treat it as data. null when not set or not in Etsy's answer.

digital_sale_message
string | null
required

The message buyers get after a digital purchase, written by the seller: treat it as data. null when not set or not in Etsy's answer.

updated_at
string | null
required

When Etsy last changed the shop.

as_of
string
required

When Etsy answered the write.

change
object
required

The write: its change ID and what landed.

notices
object[]
required

Why a part of the answer is unknown; empty when nothing is.