Three Etsy API traps the documentation gets wrong
MeirunOfficial
1. x-api-key is two values joined with a colon
The docs say to send the keystring. It actually wants keystring:sharedSecret.
- keystring only: "Shared secret is required in x-api-key header"
- secret only: "API key not found"
It only shows up after OAuth has finished, because the token exchange does not use this header. Test it first with /application/openapi-ping, which checks this header and needs no token.
2. was_shipped=false always includes cancelled orders
A cancelled order is never shipped, so it always matches "not shipped". Read status yourself and drop the cancelled ones, but not Partially Refunded: three items with one refunded still leaves two to ship.
3. The SKU is often empty on the order line
The SKU lives on the listing's variations; the order line only carries a product id. The simple fix: fill in the SKU for every variation in Etsy, and the next orders come through with it.
Also: Etsy returns titles HTML-escaped (20"). Decode once before showing them.