Skip to main content
cURL
Cost: 1 API credit per write.
Needs the orders:write scope and the Customer analytics workspace permission. An order outside the workspace answers 404.
A shipment can’t be undone. Etsy marks the order shipped and emails the buyer as soon as it lands.

Add tracking or not

carrier without tracking_code, or the other way round, answers 400. Alura sends the carrier’s name to Etsy as given, such as usps, ups or fedex. Etsy decides whether it knows the carrier and links the tracking. Get shipping carriers lists the carriers Etsy names. Two more fields change Etsy’s email to the buyer:
  • note_to_buyer adds a note to it.
  • send_bcc: true sends the shop owner a copy.
Call with dry_run=true first to see what would be sent, without sending it.

The answer

200 with the order’s shipments as Etsy returned them, and the write’s change. While Etsy is still answering, the answer is 202 with the change instead: get the change until its outcome is final.

Repeats are added once

The same order and tracking code, ignoring case and spaces, is added only once. So is the same order without tracking. This holds under any Idempotency-Key:
  • A repeat answers the first shipment: its result, or its change once that result has expired after 24 hours.
  • While the first shipment’s outcome on Etsy is unknown, a repeat answers 409 write_outcome_unknown and is never sent.

Preferred Partner regions

In regions with Etsy’s Preferred Partner Program, Etsy lets only approved fulfillment partners add shipments. Etsy’s refusal answers 403 etsy_partner_required. Reconnecting the shop doesn’t help: add the shipment on Etsy. From then on, the shop’s connection.capabilities.shipments reads restricted. It reads available again once a shipment lands. See Credits and limits for what a refused shipment, a repeat or a dry run costs.

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

id
string
required

The Etsy order (receipt) ID. An order outside the workspace is 404.

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

"3456789015"

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
carrier
string

The carrier's name, sent to Etsy as given (for example usps, ups, fedex); Etsy decides whether it knows it and links the tracking. With tracking_code, or neither.

Required string length: 1 - 100
tracking_code
string

The tracking code. With carrier, or neither: a shipment without tracking marks the order shipped on Etsy.

Required string length: 1 - 100
note_to_buyer
string

A note Etsy adds to the buyer's shipping email. REST only.

Maximum string length: 1000
send_bcc
boolean

Whether Etsy also sends the shop owner a copy of the buyer's shipping email. REST only.

Response

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

object
string
required
Allowed value: "workspace.order_shipments"
order_id
string
required

The Etsy order (receipt) ID.

shop_id
string
required

The order's shop.

shipped
boolean | null
required

Whether Etsy has the order as shipped after this write; null when its answer did not say.

shipments
object[] | null
required

Every shipment the order has on Etsy after this write, the new one included; null when Etsy's answer did not include them.

as_of
string
required

When Etsy answered the write.

change
object
required

The write: its change ID. A shipment is never revertable (Etsy emailed the buyer).

notices
object[]
required

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