← back to Pattern Vault
etsy: dry-run listing pipeline from kit CSV — 38 type=download draft payloads, OAuth-gated (safe until shop connected)
d0febc9cbae8936292a1f661d4621a41d224ed38 · 2026-07-04 09:50:47 -0700 · Steve Abrams
Files touched
A data/etsy-listings-plan.jsonA scripts/etsy-list.mjs
Diff
commit d0febc9cbae8936292a1f661d4621a41d224ed38
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Jul 4 09:50:47 2026 -0700
etsy: dry-run listing pipeline from kit CSV — 38 type=download draft payloads, OAuth-gated (safe until shop connected)
---
data/etsy-listings-plan.json | 1008 ++++++++++++++++++++++++++++++++++++++++++
scripts/etsy-list.mjs | 155 +++++++
2 files changed, 1163 insertions(+)
diff --git a/data/etsy-listings-plan.json b/data/etsy-listings-plan.json
new file mode 100644
index 0000000..e8361f1
--- /dev/null
+++ b/data/etsy-listings-plan.json
@@ -0,0 +1,1008 @@
+{
+ "generatedFrom": "kits/etsy/listings.csv",
+ "count": 38,
+ "fixed": {
+ "type": "download",
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "quantity": 999,
+ "price": 149
+ },
+ "endpoint": "POST /v3/application/shops/{shop_id}/listings (createDraftListing)",
+ "taxonomyIdResolved": null,
+ "plan": [
+ {
+ "imageFile": "_images/57710.png",
+ "body": {
+ "quantity": 999,
+ "title": "Greige Carouse No.57710 — Seamless Digital Pattern",
+ "description": "Revelrous animal characters mid-carouse on a soft greige ground — conversation-piece whimsy with a neutral palette that still behaves in a real room.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "drunk-animals",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Revelrous animal"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/56250.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Atelier No.56250 — Seamless Digital Pattern",
+ "description": "Muybridge-style sequential motion plates in saddle-mocha on chamois — a scholarly, gallery-wall rhythm for studies, bars and menswear-leaning spaces.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": [
+ "tags dropped (>20 chars): muybridge-plate · saddle-mocha|Muybridge-style sequential"
+ ]
+ },
+ {
+ "imageFile": "_images/40178.png",
+ "body": {
+ "quantity": 999,
+ "title": "Apricot Folio No.40178 — Seamless Digital Pattern",
+ "description": "Hand-painted-look chinoiserie branches drifting across a champagne-linen ground — classic East-meets-West elegance in warm apricot neutrals.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": [
+ "tags dropped (>20 chars): chinoiserie · champagne-linen|Hand-painted-look chinoiserie"
+ ]
+ },
+ {
+ "imageFile": "_images/57669.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Reverie No.57669 — Seamless Digital Pattern",
+ "description": "Full-wall Monterey coastal reverie in sun-washed chamois — a panel mural that reads as fine-art scenery rather than repeat wallpaper.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "monterey-mural",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Full-wall Monterey"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/40172.png",
+ "body": {
+ "quantity": 999,
+ "title": "Oxblood Origin No.40172 — Seamless Digital Pattern",
+ "description": "A disciplined heritage stripe in deep oxblood — tailored, masculine, and instantly at home in libraries, halls and hospitality corridors.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "stripe · oxblood",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A disciplined"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/54111.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Studio No.54111 — Seamless Digital Pattern",
+ "description": "A serene designer-zoo menagerie in muted chamois — calm, illustrative animals with the restraint of a high-end nursery-to-study crossover.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "designer-zoo-calm",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A serene"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/7448.png",
+ "body": {
+ "quantity": 999,
+ "title": "Foxes Slumber in Bottle Green — Seamless Digital Pattern",
+ "description": "Heavy-lidded foxes slumbering in bottle green — moody storybook charm with saturated, jewel-box color.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "stoned-animals",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Heavy-lidded foxes"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/10024.png",
+ "body": {
+ "quantity": 999,
+ "title": "Greige Reverie No.10024 — Seamless Digital Pattern",
+ "description": "A heritage-inspired abstract in layered greige — quiet, textural pattern that flatters furniture instead of fighting it.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "inspired",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A heritage-inspired"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/57678.png",
+ "body": {
+ "quantity": 999,
+ "title": "Terracotta Atelier No.57678 — Seamless Digital Pattern",
+ "description": "Traditional damask reworked in terracotta and umber — old-world formality with an earthy, contemporary temperature.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "damask",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Traditional damask"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/57718.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Folio No.57718 — Seamless Digital Pattern",
+ "description": "Desert cactus silhouettes on warm chamois — southwestern character kept polite enough for coastal and transitional rooms.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "cactus",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Desert cactus"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/38848.png",
+ "body": {
+ "quantity": 999,
+ "title": "Greige Folio No.38848 — Seamless Digital Pattern",
+ "description": "An 11-foot floor-to-ceiling cactus mural in soft greige — sculptural desert scale for feature walls and lobbies.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "cactus-11ft-mural",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "An 11-foot"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/138.png",
+ "body": {
+ "quantity": 999,
+ "title": "Apricot Garden No.138 — Seamless Digital Pattern",
+ "description": "A soft apricot garden floral — romantic, painterly blooms with vintage-print warmth.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "floral",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A soft"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/40138.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Folio No.40138 — Seamless Digital Pattern",
+ "description": "A scenic panoramic toile in chamois — pastoral storytelling in a single sweeping colorway.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A scenic"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": [
+ "tags dropped (>20 chars): designer-scenic · chamois"
+ ]
+ },
+ {
+ "imageFile": "_images/57717.png",
+ "body": {
+ "quantity": 999,
+ "title": "Prussian Origin No.57717 — Seamless Digital Pattern",
+ "description": "Block-printed leaf geometry on deep Prussian blue — graphic, wood-block texture with serious nighttime drama.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Block-printed leaf"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": [
+ "tags dropped (>20 chars): geometric-block-leaves"
+ ]
+ },
+ {
+ "imageFile": "_images/57705.png",
+ "body": {
+ "quantity": 999,
+ "title": "Greige Lattice No.57705 — Seamless Digital Pattern",
+ "description": "A greige lattice geometric — architectural trellis order that layers under art and millwork effortlessly.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "geometric",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A greige"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/54049.png",
+ "body": {
+ "quantity": 999,
+ "title": "Celadon Reverie No.54049 — Seamless Digital Pattern",
+ "description": "Playful monkeys tumbling across a celadon ground — chinoiserie mischief in a fresh botanical green.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "drunk-monkeys-v2",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Playful monkeys"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/57688.png",
+ "body": {
+ "quantity": 999,
+ "title": "Sloths Saunter in Greige — Seamless Digital Pattern",
+ "description": "Sloths sauntering through a greige canopy — slow-living humor rendered in grown-up neutrals.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "drunk-animals",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Sloths sauntering"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/56249.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Reverie No.56249 — Seamless Digital Pattern",
+ "description": "A second Muybridge motion-study plate in chamois reverie — sepia sequences with archival, printed-page character.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A second"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": [
+ "tags dropped (>20 chars): muybridge-plate · saddle-mocha"
+ ]
+ },
+ {
+ "imageFile": "_images/40177.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Origin No.40177 — Seamless Digital Pattern",
+ "description": "Chinoiserie branchwork in smoke-ash over warm chamois — softened contrast for bedrooms and quiet dining rooms.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": [
+ "tags dropped (>20 chars): chinoiserie · smoke-ash|Chinoiserie branchwork"
+ ]
+ },
+ {
+ "imageFile": "_images/57668.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Folio No.57668 — Seamless Digital Pattern",
+ "description": "A companion Monterey mural panel in pale chamois — airy coastal scenery for multi-panel installations.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "monterey-mural",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A companion"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/40171.png",
+ "body": {
+ "quantity": 999,
+ "title": "Honey Studio No.40171 — Seamless Digital Pattern",
+ "description": "A honeyed stripe in antique brass — warm metallic-leaning bands with old-hotel polish.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "A honeyed"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": [
+ "tags dropped (>20 chars): stripe · antique-brass"
+ ]
+ },
+ {
+ "imageFile": "_images/54109.png",
+ "body": {
+ "quantity": 999,
+ "title": "Chamois Reverie No.54109 — Seamless Digital Pattern",
+ "description": "Designer-zoo calm in deeper chamois — the menagerie line in a moodier, tea-stained neutral.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "designer-zoo-calm",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Designer-zoo calm"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/7445.png",
+ "body": {
+ "quantity": 999,
+ "title": "Raccoons Drift in Claret — Seamless Digital Pattern",
+ "description": "Raccoons drifting in claret — rich wine-dark ground with sly, characterful wildlife.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "stoned-animals",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "Raccoons drifting"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/10006.png",
+ "body": {
+ "quantity": 999,
+ "title": "Greige Studio No.10006 — Seamless Digital Pattern",
+ "description": "An inspired abstract study in cool greige — smoky, mineral tones for modern minimal interiors.. Original seamless repeat from the Wallpaper's Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "inspired",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready",
+ "An inspired"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane1.png",
+ "body": {
+ "quantity": 999,
+ "title": "Arden Botanical — Heritage Trellis — Seamless Digital Pattern",
+ "description": "Heritage Botanical — original, generated in our own hand from live trend research (Forest green + cream on soft sage). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "heritage",
+ "trellis",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane2.png",
+ "body": {
+ "quantity": 999,
+ "title": "Nocturne Bloom — Dark Moody Floral — Seamless Digital Pattern",
+ "description": "Dark Moody Florals — original, generated in our own hand from live trend research (Blush peony on ink-black ground). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "dark",
+ "moody",
+ "floral",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-h_black.png",
+ "body": {
+ "quantity": 999,
+ "title": "Gilded Bough — Heritage Noir — Seamless Digital Pattern",
+ "description": "Heritage botanical — original, in our own hand from live trend research (Antique gold on charcoal). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "heritage",
+ "noir",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-h_blush.png",
+ "body": {
+ "quantity": 999,
+ "title": "Rosewater Trellis — Heritage Soft — Seamless Digital Pattern",
+ "description": "Heritage botanical — original, in our own hand from live trend research (Sage on blush). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "heritage",
+ "soft",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-m_plum.png",
+ "body": {
+ "quantity": 999,
+ "title": "Amethyst Nocturne — Moody Bloom — Seamless Digital Pattern",
+ "description": "Dark moody floral — original, in our own hand from live trend research (Plum on aubergine-black). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "moody",
+ "bloom",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-m_emerald.png",
+ "body": {
+ "quantity": 999,
+ "title": "Emerald Nocturne — Camellia — Seamless Digital Pattern",
+ "description": "Dark moody floral — original, in our own hand from live trend research (Blush on emerald-black). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "camellia",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane4.png",
+ "body": {
+ "quantity": 999,
+ "title": "Atomic Meadow — Mid-Century Retro — Seamless Digital Pattern",
+ "description": "Retro mid-century — original, in our own hand from live trend research (Mustard, teal & burnt-orange). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "mid-century",
+ "retro",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane5.png",
+ "body": {
+ "quantity": 999,
+ "title": "Tide Lines — Coastal Stripe — Seamless Digital Pattern",
+ "description": "Coastal stripe — original, in our own hand from live trend research (Faded navy, sage & sand). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "coastal",
+ "stripe",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane6.png",
+ "body": {
+ "quantity": 999,
+ "title": "Folk Tile — Block Print Geometry — Seamless Digital Pattern",
+ "description": "Block-print geometry — original, in our own hand from live trend research (Indigo & terracotta on cream). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "block",
+ "print",
+ "geometry",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane1c2.png",
+ "body": {
+ "quantity": 999,
+ "title": "Calico Vine — Heritage Ditsy — Seamless Digital Pattern",
+ "description": "Heritage botanical ditsy — original, in our own hand from live trend research (Terracotta & olive on bone). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "heritage",
+ "ditsy",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane3b.png",
+ "body": {
+ "quantity": 999,
+ "title": "Cottage Wash — Painterly Floral — Seamless Digital Pattern",
+ "description": "Painterly watercolor floral — original, in our own hand from live trend research (Blush + sage on warm cream). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "painterly",
+ "floral",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane1b.png",
+ "body": {
+ "quantity": 999,
+ "title": "Indigo Trellis — Heritage Vine — Seamless Digital Pattern",
+ "description": "Heritage botanical trellis — original, in our own hand from live trend research (Deep indigo on oatmeal). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "heritage",
+ "vine",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane2b.png",
+ "body": {
+ "quantity": 999,
+ "title": "Crimson Nocturne — Moody Rose — Seamless Digital Pattern",
+ "description": "Dark moody floral — original, in our own hand from live trend research (Burgundy rose on charcoal). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "moody",
+ "rose",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ },
+ {
+ "imageFile": "_images/ih-lane2c.png",
+ "body": {
+ "quantity": 999,
+ "title": "Teal Nocturne — Magnolia Bloom — Seamless Digital Pattern",
+ "description": "Dark moody floral — original, in our own hand from live trend research (Ivory magnolia on deep teal). Original seamless repeat from the Wallpaper’s Back studio — seam-verified, print-clean at 150 DPI. Digital single-use license included; commercial and exclusive tiers available.",
+ "price": 149,
+ "who_made": "i_did",
+ "when_made": "2020_2026",
+ "taxonomy_id": "<SET ETSY_TAXONOMY_ID>",
+ "type": "download",
+ "is_supply": false,
+ "tags": [
+ "magnolia",
+ "bloom",
+ "seamless pattern",
+ "original design",
+ "wallpaper",
+ "surface design",
+ "repeat pattern",
+ "print ready"
+ ],
+ "should_auto_renew": false
+ },
+ "warnings": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/scripts/etsy-list.mjs b/scripts/etsy-list.mjs
new file mode 100644
index 0000000..113546c
--- /dev/null
+++ b/scripts/etsy-list.mjs
@@ -0,0 +1,155 @@
+#!/usr/bin/env node
+// Etsy listing pipeline for Pattern Vault — reads kits/etsy/listings.csv and prepares
+// createDraftListing payloads (type=download) for all 38 designs.
+//
+// SAFE BY DESIGN: dry-run unless BOTH (a) LIVE=1 and (b) Etsy OAuth creds are present.
+// Without a connected shop + listings_w token it CANNOT create a live listing — it just
+// writes data/etsy-listings-plan.json and prints a summary. Once the shop is connected
+// (ETSY_API_KEY, ETSY_ACCESS_TOKEN, ETSY_SHOP_ID, ETSY_TAXONOMY_ID), `LIVE=1` creates the
+// drafts + uploads the preview images; publishing (draft->active) stays a separate step.
+//
+// Flow per row (Etsy API v3):
+// 1. POST /v3/application/shops/{shop_id}/listings (createDraftListing, type=download)
+// 2. POST .../listings/{listing_id}/images (uploadListingImage — preview)
+// 3. [GATED, later] POST .../listings/{listing_id}/files (uploadListingFile — 150-DPI master from Kamatera)
+//
+// Usage:
+// node scripts/etsy-list.mjs # dry-run: build + validate payloads, write plan
+// LIVE=1 node scripts/etsy-list.mjs # live (only proceeds if OAuth creds present)
+
+import fs from 'node:fs';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
+const CSV = path.join(ROOT, 'kits/etsy/listings.csv');
+const OUT = path.join(ROOT, 'data/etsy-listings-plan.json');
+
+// Etsy fixed fields for these products
+const TYPE = 'download';
+const WHO_MADE = 'i_did';
+const WHEN_MADE = '2020_2026';
+const QUANTITY = 999; // Etsy digital-download max
+const PRICE = 149.0;
+
+// OAuth / shop config — absent until Steve connects the Etsy shop.
+const CFG = {
+ apiKey: process.env.ETSY_API_KEY || null,
+ token: process.env.ETSY_ACCESS_TOKEN || null,
+ shopId: process.env.ETSY_SHOP_ID || null,
+ // Digital surface-pattern category. Resolve the real numeric id at wire-up via
+ // getSellerTaxonomyNodes (x-api-key only) and set ETSY_TAXONOMY_ID. Left null here on purpose.
+ taxonomyId: process.env.ETSY_TAXONOMY_ID || null,
+};
+const LIVE = process.env.LIVE === '1';
+
+// --- robust CSV parse (quoted fields, doubled quotes, embedded commas) ---
+function parseCsv(s) {
+ const rows = [];
+ let f = [], cur = '', inq = false;
+ for (let i = 0; i < s.length; i++) {
+ const c = s[i];
+ if (inq) { if (c === '"') { if (s[i + 1] === '"') { cur += '"'; i++; } else inq = false; } else cur += c; }
+ else if (c === '"') inq = true;
+ else if (c === ',') { f.push(cur); cur = ''; }
+ else if (c === '\n') { f.push(cur); rows.push(f); f = []; cur = ''; }
+ else if (c !== '\r') cur += c;
+ }
+ if (cur || f.length) { f.push(cur); rows.push(f); }
+ return rows.filter((r) => r.length > 1 || r[0] !== '');
+}
+
+const raw = parseCsv(fs.readFileSync(CSV, 'utf8'));
+const header = raw[0];
+const idx = (name) => header.indexOf(name);
+const rows = raw.slice(1).map((r) => ({
+ image: r[idx('image')],
+ title: r[idx('title')],
+ description: r[idx('description')],
+ tags: (r[idx('tags')] || '').split(',').map((t) => t.trim()).filter(Boolean),
+}));
+
+// Etsy caps: title <=140 chars; <=13 tags, each <=20 chars.
+const clampTitle = (t) => (t.length <= 140 ? t : t.slice(0, 137).trimEnd() + '…');
+const clampTags = (tags) => tags.filter((t) => t.length <= 20).slice(0, 13);
+
+function buildPayload(row) {
+ const warnings = [];
+ if (row.title.length > 140) warnings.push('title>140 (clamped)');
+ const dropped = row.tags.filter((t) => t.length > 20);
+ if (dropped.length) warnings.push(`tags dropped (>20 chars): ${dropped.join('|')}`);
+ return {
+ imageFile: row.image, // relative to kits/ -> kits/_images/*.png
+ body: {
+ quantity: QUANTITY,
+ title: clampTitle(row.title),
+ description: row.description,
+ price: PRICE,
+ who_made: WHO_MADE,
+ when_made: WHEN_MADE,
+ taxonomy_id: CFG.taxonomyId ? Number(CFG.taxonomyId) : '<SET ETSY_TAXONOMY_ID>',
+ type: TYPE,
+ is_supply: false,
+ tags: clampTags(row.tags),
+ should_auto_renew: false,
+ },
+ warnings,
+ };
+}
+
+const plan = rows.map(buildPayload);
+const totalWarnings = plan.reduce((n, p) => n + p.warnings.length, 0);
+
+fs.mkdirSync(path.dirname(OUT), { recursive: true });
+fs.writeFileSync(OUT, JSON.stringify({
+ generatedFrom: 'kits/etsy/listings.csv',
+ count: plan.length,
+ fixed: { type: TYPE, who_made: WHO_MADE, when_made: WHEN_MADE, quantity: QUANTITY, price: PRICE },
+ endpoint: 'POST /v3/application/shops/{shop_id}/listings (createDraftListing)',
+ taxonomyIdResolved: CFG.taxonomyId || null,
+ plan,
+}, null, 2));
+
+console.log(`[etsy] built ${plan.length} draft-listing payloads (type=${TYPE}) -> ${path.relative(ROOT, OUT)}`);
+console.log(`[etsy] payload warnings: ${totalWarnings}`);
+const missing = ['apiKey', 'token', 'shopId', 'taxonomyId'].filter((k) => !CFG[k]);
+if (missing.length) {
+ console.log(`[etsy] DRY-RUN only — missing config: ${missing.join(', ')}`);
+ console.log('[etsy] connect the shop (OAuth listings_w) + set ETSY_* env, then run LIVE=1 to create drafts.');
+}
+
+async function form(body) {
+ const p = new URLSearchParams();
+ for (const [k, v] of Object.entries(body)) {
+ if (Array.isArray(v)) v.forEach((x) => p.append(k, x));
+ else p.append(k, String(v));
+ }
+ return p;
+}
+
+if (LIVE && missing.length === 0) {
+ const base = `https://openapi.etsy.com/v3/application/shops/${CFG.shopId}/listings`;
+ const headers = { 'x-api-key': CFG.apiKey, Authorization: `Bearer ${CFG.token}`, 'Content-Type': 'application/x-www-form-urlencoded' };
+ let ok = 0, fail = 0;
+ for (const item of plan) {
+ try {
+ const res = await fetch(base, { method: 'POST', headers, body: await form(item.body) });
+ const j = await res.json();
+ if (!res.ok) { console.error(`[etsy] FAIL "${item.body.title}": ${JSON.stringify(j)}`); fail++; continue; }
+ const listingId = j.listing_id;
+ // upload preview image (multipart)
+ const imgPath = path.join(ROOT, 'kits', item.imageFile);
+ if (fs.existsSync(imgPath)) {
+ const fd = new FormData();
+ fd.append('image', new Blob([fs.readFileSync(imgPath)]), path.basename(imgPath));
+ fd.append('rank', '1');
+ await fetch(`${base}/${listingId}/images`, { method: 'POST', headers: { 'x-api-key': CFG.apiKey, Authorization: `Bearer ${CFG.token}` }, body: fd });
+ }
+ console.log(`[etsy] draft ${listingId} ✓ ${item.body.title}`);
+ ok++;
+ } catch (e) { console.error(`[etsy] ERROR "${item.body.title}": ${e.message}`); fail++; }
+ }
+ console.log(`[etsy] LIVE done — ${ok} drafts created, ${fail} failed. Publish (draft->active) is a separate step.`);
+} else if (LIVE) {
+ console.log('[etsy] LIVE requested but config incomplete — refused (nothing sent).');
+}
← 83df324 signup-handoff: record Redbubble automated path (recon-prove
·
back to Pattern Vault
·
etsy: auto-resolve digital-pattern taxonomy_id at wire-up (g 1909be7 →