@spree/docs 0.1.157 → 0.1.158

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -87,16 +87,16 @@ paths:
87
87
  content:
88
88
  application/json:
89
89
  example:
90
- token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6ImU5NjI3OTg4LTExYTktNGJmOC1iZTkxLTY1ODc1NjUwNmE3NyIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2NjU3ODgyfQ.4JRg9z2ShQn3zrFyLz8qCHDTeLC1WeADEa8oVHegkNk
91
- refresh_token: SyvK7EMWxcuZB8k9AJ9huqmp
90
+ token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6IjY5NmE2NDdmLThmZDQtNDc1Mi1iOGU3LTFlYTA3OGUzZTAwNyIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2Njk4ODU4fQ.oOqQ2bauQZ4Ck88b68J1k_XCr7VDE_MJ57RQffZ3TiM
91
+ refresh_token: BzWKLbwXtmd1aZdudRzEuBkv
92
92
  user:
93
93
  id: cust_UkLWZg9DAJ
94
94
  email: test@example.com
95
- first_name: Rayford
96
- last_name: Marvin
95
+ first_name: Hermine
96
+ last_name: Terry
97
97
  phone:
98
98
  accepts_email_marketing: false
99
- full_name: Rayford Marvin
99
+ full_name: Hermine Terry
100
100
  available_store_credit_total: '0'
101
101
  display_available_store_credit_total: "$0.00"
102
102
  addresses: []
@@ -194,16 +194,16 @@ paths:
194
194
  content:
195
195
  application/json:
196
196
  example:
197
- token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6ImIxMjA0Y2YzLTdmYmUtNDRhMy05MjM3LWYwM2Y1MzY1NDQwYyIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2NjU3ODgyfQ.2K_htxHBUlf99Vlt_bbZRSAV2bWQwVyIJM8SrjGIM1o
198
- refresh_token: vHfUDH6acYpBWwaqhGcPzcPh
197
+ token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6IjljODE1NjQxLWI0ODEtNGE4MS05Mjk2LThkYTliZTUzMGVjOCIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2Njk4ODU4fQ.yX_50wOMDs2DJqbXHBrObvhZ8G8yr3mxnFi4LUm-J80
198
+ refresh_token: BMeip9U9jEjHHPrJZ4d4L3aH
199
199
  user:
200
200
  id: cust_UkLWZg9DAJ
201
201
  email: test@example.com
202
- first_name: Carlota
203
- last_name: Yost
202
+ first_name: Merissa
203
+ last_name: Huel
204
204
  phone:
205
205
  accepts_email_marketing: false
206
- full_name: Carlota Yost
206
+ full_name: Merissa Huel
207
207
  available_store_credit_total: '0'
208
208
  display_available_store_credit_total: "$0.00"
209
209
  addresses: []
@@ -393,16 +393,16 @@ paths:
393
393
  content:
394
394
  application/json:
395
395
  example:
396
- token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6IjJkNzVkYTMwLWRmMmQtNDMxNC1hNDcwLWE0MzNhZDcwZjQyMCIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2NjU3ODg2fQ.M5t8nstr8keyRN6ca0WsdTDT-oXIyTi_RsWkd1qrJsk
397
- refresh_token: 8jYDAN8HtyWk1VHdp46qgNGJ
396
+ token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6ImVhMWRhOGYzLTE1MWMtNGI2ZC04Y2ZmLTlkNzgwOTQyNjI2MyIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2Njk4ODYyfQ.9LuICqbKxup_V5_P3OwOL3Z-uEXOL5PDgbzBQql2c-w
397
+ refresh_token: yhFdyWWrHjXRTV1ZmFDWya1P
398
398
  user:
399
399
  id: cust_UkLWZg9DAJ
400
400
  email: customer@example.com
401
- first_name: Jacquelyne
402
- last_name: McKenzie
401
+ first_name: Celia
402
+ last_name: Turcotte
403
403
  phone:
404
404
  accepts_email_marketing: false
405
- full_name: Jacquelyne McKenzie
405
+ full_name: Celia Turcotte
406
406
  available_store_credit_total: '0'
407
407
  display_available_store_credit_total: "$0.00"
408
408
  addresses: []
@@ -879,8 +879,8 @@ paths:
879
879
  example:
880
880
  data:
881
881
  - id: prod_UkLWZg9DAJ
882
- name: Product 1338129
883
- slug: product-1338129
882
+ name: Product 134956
883
+ slug: product-134956
884
884
  meta_title:
885
885
  meta_description:
886
886
  meta_keywords:
@@ -892,12 +892,30 @@ paths:
892
892
  in_stock: false
893
893
  backorderable: true
894
894
  available: true
895
- description: Labore blanditiis aperiam deserunt beatae doloribus
896
- cupiditate veritatis. Saepe nam blanditiis ad veniam voluptatibus.
897
- Iure odit nesciunt sequi soluta facilis laborum.
898
- description_html: Labore blanditiis aperiam deserunt beatae doloribus
899
- cupiditate veritatis. Saepe nam blanditiis ad veniam voluptatibus.
900
- Iure odit nesciunt sequi soluta facilis laborum.
895
+ description: Tenetur dolorum illo voluptate labore rerum cum dolores
896
+ delectus. Fugit quis cumque cum quos quia aliquam exercitationem.
897
+ Doloremque ipsam optio dignissimos maiores quidem expedita reprehenderit
898
+ ullam. Adipisci eius voluptate incidunt optio vel occaecati mollitia
899
+ repudiandae. Iusto ullam atque laudantium ipsam quaerat voluptatibus.
900
+ Nam ad facilis dignissimos repudiandae. Amet esse odio quo debitis
901
+ eaque explicabo veritatis accusamus. Qui suscipit odit repellat
902
+ aliquam. Inventore ut perferendis quasi neque asperiores distinctio.
903
+ Velit necessitatibus eum voluptatem rem voluptatum veniam nobis
904
+ dolore. Unde ipsum sed laborum quae qui tenetur perspiciatis.
905
+ Repellat dignissimos qui libero alias ab tempora fugit autem.
906
+ Itaque eius non dolor iste labore officiis autem fugit. Alias
907
+ consequuntur dicta vero facilis nihil quasi. Alias debitis recusandae
908
+ vitae porro molestias similique fugiat perferendis. Minima iusto
909
+ rem iure a explicabo consequatur cum eum. Veniam non dolorem minus
910
+ pariatur quis tempora ut. Tenetur molestiae illum ratione alias
911
+ laborum. Reprehenderit optio nesciunt pariatur nemo laborum mollitia
912
+ esse fugit.
913
+ description_html: |-
914
+ Tenetur dolorum illo voluptate labore rerum cum dolores delectus. Fugit quis cumque cum quos quia aliquam exercitationem. Doloremque ipsam optio dignissimos maiores quidem expedita reprehenderit ullam.
915
+ Adipisci eius voluptate incidunt optio vel occaecati mollitia repudiandae. Iusto ullam atque laudantium ipsam quaerat voluptatibus. Nam ad facilis dignissimos repudiandae. Amet esse odio quo debitis eaque explicabo veritatis accusamus.
916
+ Qui suscipit odit repellat aliquam. Inventore ut perferendis quasi neque asperiores distinctio. Velit necessitatibus eum voluptatem rem voluptatum veniam nobis dolore. Unde ipsum sed laborum quae qui tenetur perspiciatis. Repellat dignissimos qui libero alias ab tempora fugit autem.
917
+ Itaque eius non dolor iste labore officiis autem fugit. Alias consequuntur dicta vero facilis nihil quasi. Alias debitis recusandae vitae porro molestias similique fugiat perferendis. Minima iusto rem iure a explicabo consequatur cum eum.
918
+ Veniam non dolorem minus pariatur quis tempora ut. Tenetur molestiae illum ratione alias laborum. Reprehenderit optio nesciunt pariatur nemo laborum mollitia esse fugit.
901
919
  default_variant_id: variant_UkLWZg9DAJ
902
920
  thumbnail_url:
903
921
  tags: []
@@ -1052,8 +1070,8 @@ paths:
1052
1070
  example:
1053
1071
  data:
1054
1072
  - id: prod_UkLWZg9DAJ
1055
- name: Product 1752737
1056
- slug: product-1752737
1073
+ name: Product 1797268
1074
+ slug: product-1797268
1057
1075
  meta_title:
1058
1076
  meta_description:
1059
1077
  meta_keywords:
@@ -1082,8 +1100,8 @@ paths:
1082
1100
  price_list_id:
1083
1101
  original_price:
1084
1102
  - id: prod_gbHJdmfrXB
1085
- name: Product 1767740
1086
- slug: product-1767740
1103
+ name: Product 1804864
1104
+ slug: product-1804864
1087
1105
  meta_title:
1088
1106
  meta_description:
1089
1107
  meta_keywords:
@@ -1095,25 +1113,12 @@ paths:
1095
1113
  in_stock: false
1096
1114
  backorderable: true
1097
1115
  available: true
1098
- description: Nobis vel quas nesciunt aperiam nulla corporis doloribus
1099
- non. Autem tempore aperiam doloribus illum quis iusto eius. Saepe
1100
- eum repellat mollitia dolore maiores eaque fugit velit. Hic recusandae
1101
- temporibus quia deleniti nisi ut. Nihil explicabo fuga officia
1102
- quibusdam natus quidem. Eaque natus in maxime numquam possimus
1103
- exercitationem. Asperiores debitis autem ipsam pariatur quisquam
1104
- porro. Possimus molestias eius nemo ipsa soluta. Explicabo inventore
1105
- officia necessitatibus magnam consectetur. Ullam veniam neque
1106
- autem deleniti rem dolores fugit delectus. Necessitatibus temporibus
1107
- quibusdam quis quae dolor error voluptatum. Corporis at quis quam
1108
- a. Reprehenderit asperiores fugit distinctio voluptas porro. Excepturi
1109
- perferendis aliquid consectetur maiores odio ut. Quisquam tempore
1110
- sunt maxime doloremque. Placeat minima non facilis veritatis commodi
1111
- vitae repudiandae praesentium.
1112
- description_html: |-
1113
- Nobis vel quas nesciunt aperiam nulla corporis doloribus non. Autem tempore aperiam doloribus illum quis iusto eius. Saepe eum repellat mollitia dolore maiores eaque fugit velit.
1114
- Hic recusandae temporibus quia deleniti nisi ut. Nihil explicabo fuga officia quibusdam natus quidem. Eaque natus in maxime numquam possimus exercitationem. Asperiores debitis autem ipsam pariatur quisquam porro. Possimus molestias eius nemo ipsa soluta.
1115
- Explicabo inventore officia necessitatibus magnam consectetur. Ullam veniam neque autem deleniti rem dolores fugit delectus. Necessitatibus temporibus quibusdam quis quae dolor error voluptatum. Corporis at quis quam a.
1116
- Reprehenderit asperiores fugit distinctio voluptas porro. Excepturi perferendis aliquid consectetur maiores odio ut. Quisquam tempore sunt maxime doloremque. Placeat minima non facilis veritatis commodi vitae repudiandae praesentium.
1116
+ description: Error sit blanditiis recusandae inventore sunt in.
1117
+ Iste saepe veniam beatae consequuntur. Ad sed temporibus quis
1118
+ explicabo nostrum reiciendis iste.
1119
+ description_html: Error sit blanditiis recusandae inventore sunt
1120
+ in. Iste saepe veniam beatae consequuntur. Ad sed temporibus quis
1121
+ explicabo nostrum reiciendis iste.
1117
1122
  default_variant_id: variant_EfhxLZ9ck8
1118
1123
  thumbnail_url:
1119
1124
  tags: []
@@ -1215,8 +1220,8 @@ paths:
1215
1220
  application/json:
1216
1221
  example:
1217
1222
  id: prod_UkLWZg9DAJ
1218
- name: Product 2036461
1219
- slug: product-2036461
1223
+ name: Product 2076374
1224
+ slug: product-2076374
1220
1225
  meta_title:
1221
1226
  meta_description:
1222
1227
  meta_keywords:
@@ -1250,7 +1255,7 @@ paths:
1250
1255
  amount_in_cents: 999
1251
1256
  currency: USD
1252
1257
  display_amount: "$9.99"
1253
- recorded_at: '2026-07-29T20:51:34Z'
1258
+ recorded_at: '2026-07-30T08:14:32Z'
1254
1259
  schema:
1255
1260
  "$ref": "#/components/schemas/Product"
1256
1261
  '404':
@@ -1500,7 +1505,7 @@ paths:
1500
1505
  channel_id: ch_UkLWZg9DAJ
1501
1506
  preferred_stock_location_id:
1502
1507
  number: cart_gbHJdmfrXB
1503
- token: CTfrtFixn8GtyHaXaVbRZdsJ
1508
+ token: zMBG4xPmvnvUpweDoiSkeU9M
1504
1509
  email:
1505
1510
  customer_note:
1506
1511
  currency: USD
@@ -1559,8 +1564,8 @@ paths:
1559
1564
  preorder_ships_at:
1560
1565
  quantity: 1
1561
1566
  currency: USD
1562
- name: Product 1089341
1563
- slug: product-1089341
1567
+ name: Product 1097994
1568
+ slug: product-1097994
1564
1569
  options_text: ''
1565
1570
  price: '10.0'
1566
1571
  display_price: "$10.00"
@@ -1605,7 +1610,7 @@ paths:
1605
1610
  channel_id: ch_UkLWZg9DAJ
1606
1611
  preferred_stock_location_id:
1607
1612
  number: cart_UkLWZg9DAJ
1608
- token: ycQHQkszbnGftmEaifNsmEWz
1613
+ token: p97ABaANxtNUsn9MFiKsHfgq
1609
1614
  email:
1610
1615
  customer_note:
1611
1616
  currency: USD
@@ -1664,8 +1669,8 @@ paths:
1664
1669
  preorder_ships_at:
1665
1670
  quantity: 1
1666
1671
  currency: USD
1667
- name: Product 1072609
1668
- slug: product-1072609
1672
+ name: Product 1083868
1673
+ slug: product-1083868
1669
1674
  options_text: ''
1670
1675
  price: '10.0'
1671
1676
  display_price: "$10.00"
@@ -1783,7 +1788,7 @@ paths:
1783
1788
  channel_id: ch_UkLWZg9DAJ
1784
1789
  preferred_stock_location_id:
1785
1790
  number: cart_UkLWZg9DAJ
1786
- token: YgG5bEtW23p7iQpN69ZsVPbf
1791
+ token: PN2NE4NhAi12bC3ro1jxELiA
1787
1792
  email:
1788
1793
  customer_note:
1789
1794
  currency: USD
@@ -1948,7 +1953,7 @@ paths:
1948
1953
  channel_id: ch_UkLWZg9DAJ
1949
1954
  preferred_stock_location_id:
1950
1955
  number: cart_UkLWZg9DAJ
1951
- token: rFthqHxs4W8dq6fMQcTpths6
1956
+ token: 32bnSsVMJaZaft4HetrZkkpx
1952
1957
  email:
1953
1958
  customer_note:
1954
1959
  currency: USD
@@ -1956,7 +1961,7 @@ paths:
1956
1961
  total_quantity: 0
1957
1962
  warnings:
1958
1963
  - code: line_item_removed
1959
- message: Product 1124296 was removed because it was sold out
1964
+ message: Product 1139651 was removed because it was sold out
1960
1965
  line_item_id: li_UkLWZg9DAJ
1961
1966
  variant_id: variant_UkLWZg9DAJ
1962
1967
  coupon_code:
@@ -2098,7 +2103,7 @@ paths:
2098
2103
  channel_id: ch_UkLWZg9DAJ
2099
2104
  preferred_stock_location_id:
2100
2105
  number: cart_UkLWZg9DAJ
2101
- token: EtDZM6DwwWMFunhMPuKHMgGK
2106
+ token: krrviFWRbaXyKfCMiZzNrypf
2102
2107
  email:
2103
2108
  customer_note: Leave at door
2104
2109
  currency: USD
@@ -2153,8 +2158,8 @@ paths:
2153
2158
  preorder_ships_at:
2154
2159
  quantity: 1
2155
2160
  currency: USD
2156
- name: Product 1133726
2157
- slug: product-1133726
2161
+ name: Product 1145279
2162
+ slug: product-1145279
2158
2163
  options_text: ''
2159
2164
  price: '10.0'
2160
2165
  display_price: "$10.00"
@@ -2373,8 +2378,8 @@ paths:
2373
2378
  channel_id: ch_UkLWZg9DAJ
2374
2379
  preferred_stock_location_id:
2375
2380
  number: cart_UkLWZg9DAJ
2376
- token: rDSpLUJyAtUFNdDXBZ3AWA3h
2377
- email: argentina.balistreri@kunze.biz
2381
+ token: UzZb7Q5pbA3owE3XsLSdjK3p
2382
+ email: emanuel.moen@batz.ca
2378
2383
  customer_note:
2379
2384
  currency: USD
2380
2385
  locale: en
@@ -2425,8 +2430,8 @@ paths:
2425
2430
  preorder_ships_at:
2426
2431
  quantity: 1
2427
2432
  currency: USD
2428
- name: Product 115925
2429
- slug: product-115925
2433
+ name: Product 1169451
2434
+ slug: product-1169451
2430
2435
  options_text: ''
2431
2436
  price: '10.0'
2432
2437
  display_price: "$10.00"
@@ -2581,7 +2586,7 @@ paths:
2581
2586
  cart_id: cart_UkLWZg9DAJ
2582
2587
  channel_id: ch_UkLWZg9DAJ
2583
2588
  number: R1001
2584
- email: mellissa_romaguera@robel.biz
2589
+ email: aleen@sanfordpacocha.co.uk
2585
2590
  customer_note:
2586
2591
  currency: USD
2587
2592
  locale: en
@@ -2589,7 +2594,7 @@ paths:
2589
2594
  coupon_code:
2590
2595
  fulfillment_status: backorder
2591
2596
  payment_status: paid
2592
- completed_at: '2026-08-13T20:51:23.454Z'
2597
+ completed_at: '2026-08-14T08:14:20.198Z'
2593
2598
  item_total: '10.0'
2594
2599
  display_item_total: "$10.00"
2595
2600
  adjustment_total: '0.0'
@@ -2621,8 +2626,8 @@ paths:
2621
2626
  preorder_ships_at:
2622
2627
  quantity: 1
2623
2628
  currency: USD
2624
- name: Product 1181370
2625
- slug: product-1181370
2629
+ name: Product 1198757
2630
+ slug: product-1198757
2626
2631
  options_text: ''
2627
2632
  price: '10.0'
2628
2633
  display_price: "$10.00"
@@ -2688,7 +2693,7 @@ paths:
2688
2693
  stock_location:
2689
2694
  id: sloc_UkLWZg9DAJ
2690
2695
  state_abbr: NY
2691
- name: Janna Moore
2696
+ name: Tesha Murray
2692
2697
  address1: 1600 Pennsylvania Ave NW
2693
2698
  city: Washington
2694
2699
  zipcode: '20500'
@@ -2727,7 +2732,7 @@ paths:
2727
2732
  payments:
2728
2733
  - id: py_UkLWZg9DAJ
2729
2734
  payment_method_id: pm_UkLWZg9DAJ
2730
- response_code: BGS-bc2d11fc943d
2735
+ response_code: BGS-145d3d64c735
2731
2736
  number: R1001-P1
2732
2737
  amount: '20.0'
2733
2738
  display_amount: "$20.00"
@@ -2884,7 +2889,7 @@ paths:
2884
2889
  channel_id: ch_UkLWZg9DAJ
2885
2890
  preferred_stock_location_id:
2886
2891
  number: cart_UkLWZg9DAJ
2887
- token: JH7HUUjQ4gFS8q8Dj64dVg37
2892
+ token: FtJyKty4FppHQrdsicaKevfc
2888
2893
  email:
2889
2894
  customer_note:
2890
2895
  currency: USD
@@ -2942,8 +2947,8 @@ paths:
2942
2947
  preorder_ships_at:
2943
2948
  quantity: 1
2944
2949
  currency: USD
2945
- name: Product 1446105
2946
- slug: product-1446105
2950
+ name: Product 1454442
2951
+ slug: product-1454442
2947
2952
  options_text: ''
2948
2953
  price: '10.0'
2949
2954
  display_price: "$10.00"
@@ -3072,7 +3077,7 @@ paths:
3072
3077
  channel_id: ch_UkLWZg9DAJ
3073
3078
  preferred_stock_location_id:
3074
3079
  number: cart_UkLWZg9DAJ
3075
- token: 4HPHZ4MoUcYZHQV59VP1Xv5Y
3080
+ token: fDVhvAqKMEF9SWSX9xgHN9sB
3076
3081
  email:
3077
3082
  customer_note:
3078
3083
  currency: USD
@@ -3127,8 +3132,8 @@ paths:
3127
3132
  preorder_ships_at:
3128
3133
  quantity: 1
3129
3134
  currency: USD
3130
- name: Product 1461597
3131
- slug: product-1461597
3135
+ name: Product 1479236
3136
+ slug: product-1479236
3132
3137
  options_text: ''
3133
3138
  price: '10.0'
3134
3139
  display_price: "$10.00"
@@ -3246,8 +3251,8 @@ paths:
3246
3251
  channel_id: ch_UkLWZg9DAJ
3247
3252
  preferred_stock_location_id:
3248
3253
  number: cart_UkLWZg9DAJ
3249
- token: kSKsM54y5FsjGUCAofYkG4mx
3250
- email: kum@breitenberg.name
3254
+ token: b7KRponWQxis6iAoHQhanMGC
3255
+ email: reatha@boehm.com
3251
3256
  customer_note:
3252
3257
  currency: USD
3253
3258
  locale: en
@@ -3295,8 +3300,8 @@ paths:
3295
3300
  preorder_ships_at:
3296
3301
  quantity: 1
3297
3302
  currency: USD
3298
- name: Product 1485794
3299
- slug: product-1485794
3303
+ name: Product 1496348
3304
+ slug: product-1496348
3300
3305
  options_text: ''
3301
3306
  price: '10.0'
3302
3307
  display_price: "$10.00"
@@ -3362,7 +3367,7 @@ paths:
3362
3367
  stock_location:
3363
3368
  id: sloc_UkLWZg9DAJ
3364
3369
  state_abbr: NY
3365
- name: Ma Barrows
3370
+ name: Jen Orn
3366
3371
  address1: 1600 Pennsylvania Ave NW
3367
3372
  city: Washington
3368
3373
  zipcode: '20500'
@@ -3524,7 +3529,7 @@ paths:
3524
3529
  channel_id: ch_UkLWZg9DAJ
3525
3530
  preferred_stock_location_id:
3526
3531
  number: cart_UkLWZg9DAJ
3527
- token: 7LmLqtfgWjXU33CCCtadaTSx
3532
+ token: ztfpWFzyos2yJGrY3a9ZZxQU
3528
3533
  email:
3529
3534
  customer_note:
3530
3535
  currency: USD
@@ -3575,8 +3580,8 @@ paths:
3575
3580
  preorder_ships_at:
3576
3581
  quantity: 1
3577
3582
  currency: USD
3578
- name: Product 1507661
3579
- slug: product-1507661
3583
+ name: Product 1513484
3584
+ slug: product-1513484
3580
3585
  options_text: ''
3581
3586
  price: '10.0'
3582
3587
  display_price: "$10.00"
@@ -3603,7 +3608,7 @@ paths:
3603
3608
  payments:
3604
3609
  - id: py_UkLWZg9DAJ
3605
3610
  payment_method_id: pm_UkLWZg9DAJ
3606
- response_code: 1-SC-20260813205128431255
3611
+ response_code: 1-SC-20260814081425362871
3607
3612
  number: cart_UkLWZg9DAJ-P1
3608
3613
  amount: '10.0'
3609
3614
  display_amount: "$10.00"
@@ -3760,7 +3765,7 @@ paths:
3760
3765
  channel_id: ch_UkLWZg9DAJ
3761
3766
  preferred_stock_location_id:
3762
3767
  number: cart_UkLWZg9DAJ
3763
- token: B8gjwbMpizTJUY2B72FwvGZ4
3768
+ token: iNFM9wetMx5mij7Rjv2fFJMj
3764
3769
  email:
3765
3770
  customer_note:
3766
3771
  currency: USD
@@ -3815,8 +3820,8 @@ paths:
3815
3820
  preorder_ships_at:
3816
3821
  quantity: 1
3817
3822
  currency: USD
3818
- name: Product 1549377
3819
- slug: product-1549377
3823
+ name: Product 1556379
3824
+ slug: product-1556379
3820
3825
  options_text: ''
3821
3826
  price: '10.0'
3822
3827
  display_price: "$10.00"
@@ -3843,7 +3848,7 @@ paths:
3843
3848
  payments:
3844
3849
  - id: py_UkLWZg9DAJ
3845
3850
  payment_method_id: pm_UkLWZg9DAJ
3846
- response_code: 1-SC-20260813205128973522
3851
+ response_code: 1-SC-20260814081425795920
3847
3852
  number: cart_UkLWZg9DAJ-P1
3848
3853
  amount: '10.0'
3849
3854
  display_amount: "$10.00"
@@ -3951,7 +3956,7 @@ paths:
3951
3956
  channel_id: ch_UkLWZg9DAJ
3952
3957
  preferred_stock_location_id:
3953
3958
  number: cart_UkLWZg9DAJ
3954
- token: GdBSZJ6Ujftsp3uFpdBQVqJv
3959
+ token: YhcjyHK16vakgDzkXgxshpJj
3955
3960
  email:
3956
3961
  customer_note:
3957
3962
  currency: USD
@@ -3959,10 +3964,10 @@ paths:
3959
3964
  total_quantity: 2
3960
3965
  warnings:
3961
3966
  - code: delivery_unavailable
3962
- message: Product 1579167 cannot be delivered to the selected address
3967
+ message: Product 1585627 cannot be delivered to the selected address
3963
3968
  line_item_id: li_UkLWZg9DAJ
3964
3969
  - code: delivery_unavailable
3965
- message: Product 1588252 cannot be delivered to the selected address
3970
+ message: Product 1599117 cannot be delivered to the selected address
3966
3971
  line_item_id: li_gbHJdmfrXB
3967
3972
  coupon_code:
3968
3973
  item_total: '29.99'
@@ -4012,8 +4017,8 @@ paths:
4012
4017
  preorder_ships_at:
4013
4018
  quantity: 1
4014
4019
  currency: USD
4015
- name: Product 1579167
4016
- slug: product-1579167
4020
+ name: Product 1585627
4021
+ slug: product-1585627
4017
4022
  options_text: ''
4018
4023
  price: '10.0'
4019
4024
  display_price: "$10.00"
@@ -4042,8 +4047,8 @@ paths:
4042
4047
  preorder_ships_at:
4043
4048
  quantity: 1
4044
4049
  currency: USD
4045
- name: Product 1588252
4046
- slug: product-1588252
4050
+ name: Product 1599117
4051
+ slug: product-1599117
4047
4052
  options_text: ''
4048
4053
  price: '19.99'
4049
4054
  display_price: "$19.99"
@@ -4095,6 +4100,19 @@ paths:
4095
4100
  message: Variant not found
4096
4101
  schema:
4097
4102
  "$ref": "#/components/schemas/ErrorResponse"
4103
+ '422':
4104
+ description: rejected by a store rule
4105
+ content:
4106
+ application/json:
4107
+ example:
4108
+ error:
4109
+ code: validation_error
4110
+ message: Quantity You can order at most 10 of this item.
4111
+ details:
4112
+ quantity:
4113
+ - You can order at most 10 of this item.
4114
+ schema:
4115
+ "$ref": "#/components/schemas/ErrorResponse"
4098
4116
  requestBody:
4099
4117
  content:
4100
4118
  application/json:
@@ -4172,7 +4190,7 @@ paths:
4172
4190
  type: string
4173
4191
  responses:
4174
4192
  '200':
4175
- description: metadata updated on line item
4193
+ description: quantity change rejected, reported in warnings
4176
4194
  content:
4177
4195
  application/json:
4178
4196
  example:
@@ -4181,16 +4199,20 @@ paths:
4181
4199
  channel_id: ch_UkLWZg9DAJ
4182
4200
  preferred_stock_location_id:
4183
4201
  number: cart_UkLWZg9DAJ
4184
- token: FzM1ug9EoEFx5Go8NNb6FHsf
4202
+ token: acPE3ThQkWgFXuQb3mzPzA6M
4185
4203
  email:
4186
4204
  customer_note:
4187
4205
  currency: USD
4188
4206
  locale: en
4189
- total_quantity: 0
4190
- warnings: []
4207
+ total_quantity: 1
4208
+ warnings:
4209
+ - code: purchase_limit_exceeded
4210
+ message: Quantity You can order at most 10 of this item.
4211
+ variant_id: variant_UkLWZg9DAJ
4212
+ item_index: 0
4191
4213
  coupon_code:
4192
- item_total: '0.0'
4193
- display_item_total: "$0.00"
4214
+ item_total: '10.0'
4215
+ display_item_total: "$10.00"
4194
4216
  adjustment_total: '0.0'
4195
4217
  display_adjustment_total: "$0.00"
4196
4218
  discount_total: '0.0'
@@ -4201,12 +4223,12 @@ paths:
4201
4223
  display_included_tax_total: "$0.00"
4202
4224
  additional_tax_total: '0.0'
4203
4225
  display_additional_tax_total: "$0.00"
4204
- total: '0.0'
4205
- display_total: "$0.00"
4226
+ total: '10.0'
4227
+ display_total: "$10.00"
4206
4228
  gift_card_total: '0.0'
4207
4229
  display_gift_card_total: "$0.00"
4208
- amount_due: '0.0'
4209
- display_amount_due: "$0.00"
4230
+ amount_due: '10.0'
4231
+ display_amount_due: "$10.00"
4210
4232
  delivery_total: '0.0'
4211
4233
  display_delivery_total: "$0.00"
4212
4234
  store_credit_total: '0.0'
@@ -4223,6 +4245,10 @@ paths:
4223
4245
  step: delivery
4224
4246
  field: delivery_method
4225
4247
  message: Select a delivery method for all fulfillments
4248
+ - code: payment_required
4249
+ step: payment
4250
+ field: payment
4251
+ message: Add a payment method
4226
4252
  shipping_eq_billing_address: true
4227
4253
  discounts: []
4228
4254
  items:
@@ -4232,8 +4258,8 @@ paths:
4232
4258
  preorder_ships_at:
4233
4259
  quantity: 1
4234
4260
  currency: USD
4235
- name: Product 1617320
4236
- slug: product-1617320
4261
+ name: Product 1653067
4262
+ slug: product-1653067
4237
4263
  options_text: ''
4238
4264
  price: '10.0'
4239
4265
  display_price: "$10.00"
@@ -4351,7 +4377,7 @@ paths:
4351
4377
  channel_id: ch_UkLWZg9DAJ
4352
4378
  preferred_stock_location_id:
4353
4379
  number: cart_UkLWZg9DAJ
4354
- token: RQHpGBNcg2VwobMezqnVrBAB
4380
+ token: NwdkLSsYTUJcNgt3eWsyRtdB
4355
4381
  email:
4356
4382
  customer_note:
4357
4383
  currency: USD
@@ -4491,9 +4517,9 @@ paths:
4491
4517
  id: ps_gbHJdmfrXB
4492
4518
  status: pending
4493
4519
  currency: USD
4494
- external_id: bogus_72ad2dc19ca7fa2ce909cc53
4520
+ external_id: bogus_e65e225eac6ce02bb7a76160
4495
4521
  external_data:
4496
- client_secret: bogus_secret_8b57d314a8ddabf2
4522
+ client_secret: bogus_secret_d86a4e5e86272b8c
4497
4523
  customer_external_id:
4498
4524
  expires_at:
4499
4525
  amount: '10.0'
@@ -4592,7 +4618,7 @@ paths:
4592
4618
  id: ps_UkLWZg9DAJ
4593
4619
  status: pending
4594
4620
  currency: USD
4595
- external_id: bogus_4db32d3b6e74719cf146c26c
4621
+ external_id: bogus_f738692572bdcbb7d5cfccf7
4596
4622
  external_data:
4597
4623
  client_secret: secret_123
4598
4624
  customer_external_id:
@@ -4655,7 +4681,7 @@ paths:
4655
4681
  id: ps_UkLWZg9DAJ
4656
4682
  status: pending
4657
4683
  currency: USD
4658
- external_id: bogus_4650a76a60f45d8e2a8f68e0
4684
+ external_id: bogus_2257118dd52fbdc67ae837bc
4659
4685
  external_data:
4660
4686
  client_secret: secret_123
4661
4687
  customer_external_id:
@@ -4758,7 +4784,7 @@ paths:
4758
4784
  id: ps_UkLWZg9DAJ
4759
4785
  status: completed
4760
4786
  currency: USD
4761
- external_id: bogus_61c00e45d80f6ad84740d17d
4787
+ external_id: bogus_729786e1d972ccb86e4ef475
4762
4788
  external_data:
4763
4789
  client_secret: secret_123
4764
4790
  customer_external_id:
@@ -4966,7 +4992,7 @@ paths:
4966
4992
  channel_id: ch_UkLWZg9DAJ
4967
4993
  preferred_stock_location_id:
4968
4994
  number: cart_UkLWZg9DAJ
4969
- token: kwJ8hNh3zN2HeQR892cdX2KP
4995
+ token: avVKTys5AodncSjbFf84Sjp8
4970
4996
  email:
4971
4997
  customer_note:
4972
4998
  currency: USD
@@ -5017,8 +5043,8 @@ paths:
5017
5043
  preorder_ships_at:
5018
5044
  quantity: 1
5019
5045
  currency: USD
5020
- name: Product 2233172
5021
- slug: product-2233172
5046
+ name: Product 2276440
5047
+ slug: product-2276440
5022
5048
  options_text: ''
5023
5049
  price: '10.0'
5024
5050
  display_price: "$10.00"
@@ -5045,7 +5071,7 @@ paths:
5045
5071
  payments:
5046
5072
  - id: py_UkLWZg9DAJ
5047
5073
  payment_method_id: pm_UkLWZg9DAJ
5048
- response_code: 1-SC-20260813205136395333
5074
+ response_code: 1-SC-20260814081433997087
5049
5075
  number: cart_UkLWZg9DAJ-P1
5050
5076
  amount: '10.0'
5051
5077
  display_amount: "$10.00"
@@ -5166,7 +5192,7 @@ paths:
5166
5192
  channel_id: ch_UkLWZg9DAJ
5167
5193
  preferred_stock_location_id:
5168
5194
  number: cart_UkLWZg9DAJ
5169
- token: wJ4xGkoN52HGDG6QpChLRXHu
5195
+ token: 4q5MaaMs2XS1X2NKuJR7gh2J
5170
5196
  email:
5171
5197
  customer_note:
5172
5198
  currency: USD
@@ -5221,8 +5247,8 @@ paths:
5221
5247
  preorder_ships_at:
5222
5248
  quantity: 1
5223
5249
  currency: USD
5224
- name: Product 2257376
5225
- slug: product-2257376
5250
+ name: Product 2294123
5251
+ slug: product-2294123
5226
5252
  options_text: ''
5227
5253
  price: '10.0'
5228
5254
  display_price: "$10.00"
@@ -5346,7 +5372,7 @@ paths:
5346
5372
  coupon_code:
5347
5373
  fulfillment_status:
5348
5374
  payment_status:
5349
- completed_at: '2026-08-13T20:51:31.576Z'
5375
+ completed_at: '2026-08-14T08:14:28.782Z'
5350
5376
  item_total: '10.0'
5351
5377
  display_item_total: "$10.00"
5352
5378
  adjustment_total: '0.0'
@@ -5378,8 +5404,8 @@ paths:
5378
5404
  preorder_ships_at:
5379
5405
  quantity: 1
5380
5406
  currency: USD
5381
- name: Product 1659073
5382
- slug: product-1659073
5407
+ name: Product 1698581
5408
+ slug: product-1698581
5383
5409
  options_text: ''
5384
5410
  price: '10.0'
5385
5411
  display_price: "$10.00"
@@ -5445,7 +5471,7 @@ paths:
5445
5471
  stock_location:
5446
5472
  id: sloc_UkLWZg9DAJ
5447
5473
  state_abbr: NY
5448
- name: Evangeline Little
5474
+ name: Michell Stracke
5449
5475
  address1: 1600 Pennsylvania Ave NW
5450
5476
  city: Washington
5451
5477
  zipcode: '20500'
@@ -5487,7 +5513,7 @@ paths:
5487
5513
  first_name: John
5488
5514
  last_name: Doe
5489
5515
  full_name: John Doe
5490
- address1: 247 Lovely Street
5516
+ address1: 251 Lovely Street
5491
5517
  address2: Northwest
5492
5518
  postal_code: '10118'
5493
5519
  city: New York
@@ -5506,7 +5532,7 @@ paths:
5506
5532
  first_name: John
5507
5533
  last_name: Doe
5508
5534
  full_name: John Doe
5509
- address1: 248 Lovely Street
5535
+ address1: 252 Lovely Street
5510
5536
  address2: Northwest
5511
5537
  postal_code: '10118'
5512
5538
  city: New York
@@ -6405,7 +6431,7 @@ paths:
6405
6431
  cart_id:
6406
6432
  channel_id: ch_UkLWZg9DAJ
6407
6433
  number: R1001
6408
- email: rita@sanford.co.uk
6434
+ email: carole@vonrueden.biz
6409
6435
  customer_note:
6410
6436
  currency: USD
6411
6437
  locale: en
@@ -6413,7 +6439,7 @@ paths:
6413
6439
  coupon_code:
6414
6440
  fulfillment_status:
6415
6441
  payment_status:
6416
- completed_at: '2026-08-13T20:51:26.311Z'
6442
+ completed_at: '2026-08-14T08:14:23.132Z'
6417
6443
  item_total: '10.0'
6418
6444
  display_item_total: "$10.00"
6419
6445
  adjustment_total: '0.0'
@@ -6445,8 +6471,8 @@ paths:
6445
6471
  preorder_ships_at:
6446
6472
  quantity: 1
6447
6473
  currency: USD
6448
- name: Product 1342185
6449
- slug: product-1342185
6474
+ name: Product 1354977
6475
+ slug: product-1354977
6450
6476
  options_text: ''
6451
6477
  price: '10.0'
6452
6478
  display_price: "$10.00"
@@ -6512,7 +6538,7 @@ paths:
6512
6538
  stock_location:
6513
6539
  id: sloc_UkLWZg9DAJ
6514
6540
  state_abbr: NY
6515
- name: Carlo Cummerata
6541
+ name: Kylee Ledner
6516
6542
  address1: 1600 Pennsylvania Ave NW
6517
6543
  city: Washington
6518
6544
  zipcode: '20500'
@@ -6697,7 +6723,7 @@ paths:
6697
6723
  cart_id:
6698
6724
  channel_id: ch_UkLWZg9DAJ
6699
6725
  number: R1001
6700
- email: matthew@konopelskiwuckert.ca
6726
+ email: tiffani@schroedermohr.ca
6701
6727
  customer_note:
6702
6728
  currency: USD
6703
6729
  locale: en
@@ -6705,7 +6731,7 @@ paths:
6705
6731
  coupon_code:
6706
6732
  fulfillment_status:
6707
6733
  payment_status:
6708
- completed_at: '2026-08-13T20:51:26.524Z'
6734
+ completed_at: '2026-08-14T08:14:23.362Z'
6709
6735
  item_total: '10.0'
6710
6736
  display_item_total: "$10.00"
6711
6737
  adjustment_total: '0.0'
@@ -6737,8 +6763,8 @@ paths:
6737
6763
  preorder_ships_at:
6738
6764
  quantity: 1
6739
6765
  currency: USD
6740
- name: Product 1369662
6741
- slug: product-1369662
6766
+ name: Product 1372684
6767
+ slug: product-1372684
6742
6768
  options_text: ''
6743
6769
  price: '10.0'
6744
6770
  display_price: "$10.00"
@@ -6804,7 +6830,7 @@ paths:
6804
6830
  stock_location:
6805
6831
  id: sloc_UkLWZg9DAJ
6806
6832
  state_abbr: NY
6807
- name: Marisa Stanton
6833
+ name: Marcos Collier
6808
6834
  address1: 1600 Pennsylvania Ave NW
6809
6835
  city: Washington
6810
6836
  zipcode: '20500'
@@ -6944,8 +6970,8 @@ paths:
6944
6970
  content:
6945
6971
  application/json:
6946
6972
  example:
6947
- token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6ImY1NGMyYTQ0LTE3NzgtNGQwZS1hNjdmLTAwN2VkZGQ5MDZmMiIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2NjU3ODg2fQ.u934e5vQA1OTchL5BCka4fcs5-U0NdHr2gUepjveY_Y
6948
- refresh_token: o9dwR7STqrS6T7bqgmyxw5XY
6973
+ token: eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOiJjdXN0b21lciIsImp0aSI6ImJhNGIzN2RmLTJhMzctNDhmOC1hODU2LWUxYjdlYmNjMDMyNyIsImlzcyI6InNwcmVlIiwiYXVkIjoic3RvcmVfYXBpIiwiZXhwIjoxNzg2Njk4ODYzfQ.Tbftvzfg5hqT3AAk5BdhN8EhIEZLOGea25SrEqfnIbM
6974
+ refresh_token: eiVQSfZhNpsu4zzKUbZZ2iRB
6949
6975
  user:
6950
6976
  id: cust_UkLWZg9DAJ
6951
6977
  email: newuser@example.com
@@ -6962,10 +6988,10 @@ paths:
6962
6988
  newsletter_subscriber:
6963
6989
  id: sub_UkLWZg9DAJ
6964
6990
  email: newuser@example.com
6965
- created_at: '2026-08-13T20:51:26.706Z'
6966
- updated_at: '2026-08-13T20:51:26.707Z'
6991
+ created_at: '2026-08-14T08:14:23.585Z'
6992
+ updated_at: '2026-08-14T08:14:23.587Z'
6967
6993
  verified: true
6968
- verified_at: '2026-08-13T20:51:26Z'
6994
+ verified_at: '2026-08-14T08:14:23Z'
6969
6995
  customer_id: cust_UkLWZg9DAJ
6970
6996
  customer_groups: []
6971
6997
  schema:
@@ -7068,12 +7094,12 @@ paths:
7068
7094
  application/json:
7069
7095
  example:
7070
7096
  id: cust_UkLWZg9DAJ
7071
- email: dawna_fay@gleichner.us
7072
- first_name: Adrian
7073
- last_name: Spinka
7097
+ email: jacqualine.turner@lubowitz.name
7098
+ first_name: Chester
7099
+ last_name: Ferry
7074
7100
  phone: 555-555-0199
7075
7101
  accepts_email_marketing: false
7076
- full_name: Adrian Spinka
7102
+ full_name: Chester Ferry
7077
7103
  available_store_credit_total: '0'
7078
7104
  display_available_store_credit_total: "$0.00"
7079
7105
  addresses:
@@ -7209,7 +7235,7 @@ paths:
7209
7235
  application/json:
7210
7236
  example:
7211
7237
  id: cust_UkLWZg9DAJ
7212
- email: lonnie@gerhold.name
7238
+ email: zandra.kautzer@hauck.co.uk
7213
7239
  first_name: Updated
7214
7240
  last_name: Name
7215
7241
  phone: 555-555-0199
@@ -7400,7 +7426,7 @@ paths:
7400
7426
  example:
7401
7427
  data:
7402
7428
  - id: gc_UkLWZg9DAJ
7403
- code: 38A1B07104E77EFD
7429
+ code: F1AD9ECE6F0F8E0B
7404
7430
  status: active
7405
7431
  currency: USD
7406
7432
  amount: '10.0'
@@ -7496,7 +7522,7 @@ paths:
7496
7522
  application/json:
7497
7523
  example:
7498
7524
  id: gc_UkLWZg9DAJ
7499
- code: 6877AC67D5BFBAC6
7525
+ code: 669A1D3D288A601C
7500
7526
  status: active
7501
7527
  currency: USD
7502
7528
  amount: '10.0'
@@ -7568,8 +7594,8 @@ paths:
7568
7594
  example:
7569
7595
  id: pss_gbHJdmfrXB
7570
7596
  status: pending
7571
- external_id: bogus_seti_5bcd7e35a6cb52f0a08952db
7572
- external_client_secret: bogus_seti_secret_120d0483c031d7b4
7597
+ external_id: bogus_seti_74fa22cd538112ddfeb512e1
7598
+ external_client_secret: bogus_seti_secret_806adcdde276088b
7573
7599
  external_data: {}
7574
7600
  payment_method_id: pm_UkLWZg9DAJ
7575
7601
  payment_source_id:
@@ -7668,8 +7694,8 @@ paths:
7668
7694
  example:
7669
7695
  id: pss_UkLWZg9DAJ
7670
7696
  status: pending
7671
- external_id: seti_test_9c8c966219ebd06af389d3db
7672
- external_client_secret: seti_secret_ded35372031c8c499fece627
7697
+ external_id: seti_test_e84dec3f397329cf04fd243c
7698
+ external_client_secret: seti_secret_1376518d96ebfa042b93ae07
7673
7699
  external_data:
7674
7700
  client_secret: secret_123
7675
7701
  payment_method_id: pm_UkLWZg9DAJ
@@ -7745,8 +7771,8 @@ paths:
7745
7771
  example:
7746
7772
  id: pss_UkLWZg9DAJ
7747
7773
  status: completed
7748
- external_id: seti_test_85072f0b0956562f59743322
7749
- external_client_secret: seti_secret_b5d74d0bd76417f5b9b09a7e
7774
+ external_id: seti_test_5271ae630222abb656d797ec
7775
+ external_client_secret: seti_secret_c19c748f265c0cff3bb9e670
7750
7776
  external_data:
7751
7777
  client_secret: secret_123
7752
7778
  payment_method_id: pm_UkLWZg9DAJ
@@ -8690,7 +8716,7 @@ paths:
8690
8716
  data:
8691
8717
  - id: wl_UkLWZg9DAJ
8692
8718
  name: My Wishlist
8693
- token: J5T4u1Kp37piPYfEPwDCbzUa
8719
+ token: RAWrQxQvGuj5shU9uZhnk7qV
8694
8720
  is_default: false
8695
8721
  is_private: true
8696
8722
  meta:
@@ -8766,7 +8792,7 @@ paths:
8766
8792
  example:
8767
8793
  id: wl_gbHJdmfrXB
8768
8794
  name: Birthday Ideas
8769
- token: aECq2EysJDStAotj3HK9W9wW
8795
+ token: PiLjz1PqW43WMhE3xhEj38aN
8770
8796
  is_default: false
8771
8797
  is_private: true
8772
8798
  schema:
@@ -8867,7 +8893,7 @@ paths:
8867
8893
  example:
8868
8894
  id: wl_UkLWZg9DAJ
8869
8895
  name: My Wishlist
8870
- token: TtW1ovtPAg1g2PDLsHk238hg
8896
+ token: ZKW28uLSYhMW8AzgVnSRsDGU
8871
8897
  is_default: false
8872
8898
  is_private: true
8873
8899
  schema:
@@ -8929,7 +8955,7 @@ paths:
8929
8955
  example:
8930
8956
  id: wl_UkLWZg9DAJ
8931
8957
  name: Updated Name
8932
- token: E9Z6cfMF2nFsLPah8siCfMDZ
8958
+ token: sWswuNKqn88rEGPxXQN8Q3m3
8933
8959
  is_default: false
8934
8960
  is_private: true
8935
8961
  schema:
@@ -9045,7 +9071,7 @@ paths:
9045
9071
  variant:
9046
9072
  id: variant_gbHJdmfrXB
9047
9073
  product_id: prod_gbHJdmfrXB
9048
- sku: SKU-273
9074
+ sku: SKU-277
9049
9075
  options_text: ''
9050
9076
  track_inventory: true
9051
9077
  media_count: 0
@@ -9211,11 +9237,11 @@ paths:
9211
9237
  application/json:
9212
9238
  example:
9213
9239
  id: sub_UkLWZg9DAJ
9214
- email: joelle_heidenreich@streichmonahan.name
9215
- created_at: '2026-08-13T20:51:30.589Z'
9216
- updated_at: '2026-08-13T20:51:30.589Z'
9240
+ email: andreas_oreilly@gottliebtromp.name
9241
+ created_at: '2026-08-14T08:14:27.879Z'
9242
+ updated_at: '2026-08-14T08:14:27.880Z'
9217
9243
  verified: true
9218
- verified_at: '2026-08-13T20:51:30Z'
9244
+ verified_at: '2026-08-14T08:14:27Z'
9219
9245
  customer_id: cust_UkLWZg9DAJ
9220
9246
  schema:
9221
9247
  "$ref": "#/components/schemas/NewsletterSubscriber"
@@ -9294,10 +9320,10 @@ paths:
9294
9320
  example:
9295
9321
  id: sub_UkLWZg9DAJ
9296
9322
  email: pending@example.com
9297
- created_at: '2026-08-13T20:51:30.615Z'
9298
- updated_at: '2026-08-13T20:51:30.622Z'
9323
+ created_at: '2026-08-14T08:14:27.914Z'
9324
+ updated_at: '2026-08-14T08:14:27.923Z'
9299
9325
  verified: true
9300
- verified_at: '2026-08-13T20:51:30Z'
9326
+ verified_at: '2026-08-14T08:14:27Z'
9301
9327
  customer_id:
9302
9328
  schema:
9303
9329
  "$ref": "#/components/schemas/NewsletterSubscriber"
@@ -9467,7 +9493,7 @@ paths:
9467
9493
  body_html: ''
9468
9494
  - id: pol_OIJLhNcSbf
9469
9495
  name: Privacy Policy
9470
- slug: privacy-policy-6870aac1-60d5-4fee-84d5-1767b98718f7
9496
+ slug: privacy-policy-19b0f311-6692-42d7-8b75-232c59dab389
9471
9497
  body: We respect your privacy.
9472
9498
  body_html: We respect your privacy.
9473
9499
  - id: pol_uw2YK1rnl0
@@ -9803,14 +9829,14 @@ paths:
9803
9829
  example:
9804
9830
  data:
9805
9831
  - id: sloc_UkLWZg9DAJ
9806
- state_abbr: STATE_ABBR_93
9832
+ state_abbr: STATE_ABBR_94
9807
9833
  name: Downtown
9808
9834
  address1: 1600 Pennsylvania Ave NW
9809
9835
  city: Washington
9810
9836
  zipcode: '20500'
9811
9837
  country_iso: US
9812
9838
  country_name: United States of America
9813
- state_text: STATE_ABBR_93
9839
+ state_text: STATE_ABBR_94
9814
9840
  pickup_ready_in_minutes:
9815
9841
  pickup_instructions:
9816
9842
  servers:
@@ -10051,6 +10077,12 @@ components:
10051
10077
  nullable: true
10052
10078
  description: Prefixed variant ID (when applicable)
10053
10079
  example: variant_abc123
10080
+ item_index:
10081
+ type: integer
10082
+ nullable: true
10083
+ description: Position in the submitted items array, for warnings raised
10084
+ while applying a batch of item changes
10085
+ example: 1
10054
10086
  required:
10055
10087
  - code
10056
10088
  - message
@@ -0,0 +1,173 @@
1
+ ---
2
+ title: Validations
3
+ section: customization
4
+ ---
5
+
6
+ ## Overview
7
+
8
+ Adding a rule — and occasionally relaxing one Spree ships — is one of the most
9
+ common reasons to reach into core models. There are three ways to do it, and
10
+ picking the right one is mostly a question of *what kind of rule* you have.
11
+
12
+ | Your rule is about… | Use |
13
+ |---|---|
14
+ | Whether an **operation** may happen — a purchase limit, B2B eligibility, a region policy | A workflow [`validate` hook](workflows.md) |
15
+ | The **shape of a record** — a field you added must be present, a format must match | A [decorator](decorators.md) adding a validation |
16
+ | A **new attribute** you need on an existing model | [Custom fields](../core-concepts/metafields.md) |
17
+
18
+ Spree deliberately has no registry for adding or removing arbitrary model
19
+ validations. Adding one with a decorator is already a single line of ordinary
20
+ Rails, and removing a core rule is served by the knobs below.
21
+
22
+ ## Vetoing an operation
23
+
24
+ This is the one to reach for first. A `validate` hook runs inside the flow,
25
+ before anything is written, and can stop it:
26
+
27
+ ```ruby
28
+ # config/initializers/spree.rb
29
+ Spree.hooks.register('carts.add_item.validate', 'MyStore::CheckPurchaseLimit')
30
+ Spree.hooks.register('carts.upsert_items.validate', 'MyStore::CheckPurchaseLimit')
31
+
32
+ module MyStore
33
+ class CheckPurchaseLimit
34
+ def call(workflow)
35
+ return if workflow.quantity <= 10
36
+
37
+ workflow.errors.add(:quantity, :purchase_limit_exceeded,
38
+ message: 'You can order at most 10 of this item.')
39
+ workflow.reject!
40
+ end
41
+ end
42
+ end
43
+ ```
44
+
45
+ Why this beats a model validation for operational rules: it runs only for the
46
+ operation you targeted, so a data migration or an admin correction isn't fought
47
+ by a customer-facing rule; it sees the whole flow, not one record; and it can
48
+ tell staff from customers (`workflow.created_by`) to allow a supervisor
49
+ override.
50
+
51
+ Both cart keys appear above because adding to a cart and setting a quantity are
52
+ different flows. See [Services & Workflows](workflows.md)
53
+ for the full hook list.
54
+
55
+ ## Adding a rule to a model
56
+
57
+ For rules about the shape of a record, a decorator is the supported route:
58
+
59
+ ```ruby
60
+ # app/models/spree/product_decorator.rb
61
+ module MyStore
62
+ module ProductDecorator
63
+ def self.prepended(base)
64
+ base.validates :external_id, presence: true, uniqueness: true
65
+ end
66
+ end
67
+ end
68
+
69
+ Spree::Product.prepend(MyStore::ProductDecorator)
70
+ ```
71
+
72
+ Decorators couple you to Spree internals, so prefer a hook when the rule is
73
+ really about an operation. See
74
+ [Decorators](decorators.md).
75
+
76
+ ## Relaxing a rule Spree ships
77
+
78
+ Never call `clear_validators!` — it wipes every validation on the model,
79
+ including ones added by other extensions, and the breakage appears far from the
80
+ cause. Use one of these instead.
81
+
82
+ ### Store preferences
83
+
84
+ Some rules are already switchable, per store, from the dashboard or a console:
85
+
86
+ | Preference | Effect |
87
+ |---|---|
88
+ | `address_requires_phone` | Requires a phone number on addresses |
89
+ | `company_field_enabled` | Shows the company field on address forms |
90
+ | `address_requires_company` | Requires it — only meaningful with the field shown |
91
+ | `disable_sku_validation` | Turns off SKU uniqueness |
92
+
93
+ ```ruby
94
+ store.update!(preferred_address_requires_company: true)
95
+ ```
96
+
97
+ ### Overriding the gating predicate
98
+
99
+ Most conditional validations in `Spree::Address` are gated on a predicate you
100
+ can override, which is far safer than removing the validation:
101
+
102
+ ```ruby
103
+ module MyStore
104
+ module AddressDecorator
105
+ # Business addresses only in this store.
106
+ def require_company?
107
+ !quick_checkout
108
+ end
109
+ end
110
+ end
111
+
112
+ Spree::Address.prepend(MyStore::AddressDecorator)
113
+ ```
114
+
115
+ `require_name?`, `require_street?`, `require_zipcode?`, `require_phone?` and
116
+ `require_company?` all work this way.
117
+
118
+ ### The address validator registry
119
+
120
+ Address rules are regional and business-specific, so addresses carry a registry
121
+ of extra validator classes you can add to and remove from:
122
+
123
+ ```ruby
124
+ # config/initializers/spree.rb — or config.to_prepare for your own classes
125
+ Spree.validators.addresses.register(MyStore::PostBoxValidator)
126
+
127
+ # Drop a rule Spree ships
128
+ Spree.validators.addresses.unregister(Spree::Addresses::PhoneValidator)
129
+ ```
130
+
131
+ A validator is an ordinary `ActiveModel::Validator`:
132
+
133
+ ```ruby
134
+ module MyStore
135
+ class PostBoxValidator < ActiveModel::Validator
136
+ def validate(record)
137
+ return unless record.address1.to_s.match?(/\A\s*P\.?O\.? Box/i)
138
+
139
+ record.errors.add(:address1, :po_box_not_deliverable)
140
+ end
141
+ end
142
+ end
143
+ ```
144
+
145
+ Register your own classes from `config.to_prepare` rather than an initializer —
146
+ the registry holds classes, and a reloadable constant registered once at boot
147
+ goes stale on the next reload.
148
+
149
+ ## Checkout requirements
150
+
151
+ Rules about what a cart needs *before it can be completed* — a phone number
152
+ before delivery, a purchase order number for B2B — belong in the checkout
153
+ requirements registry rather than a model validation, because they also drive
154
+ what the storefront shows as outstanding:
155
+
156
+ ```ruby
157
+ Spree::Checkout::Registry.add_requirement(
158
+ step: 'address',
159
+ field: 'phone',
160
+ message: 'Phone number is required for delivery',
161
+ satisfied: ->(cart) { cart.ship_address&.phone.present? }
162
+ )
163
+ ```
164
+
165
+ See the [Spree 6 quickstart](/v6/developer/customization/quickstart) for the full registry API.
166
+
167
+ ## Custom field values
168
+
169
+ Custom fields currently validate their type only — a `Number` field rejects
170
+ non-numbers, a `Json` field rejects malformed JSON. There is no per-definition
171
+ length, range or format rule yet. A product type marking a custom field as
172
+ *required* is an advisory marker shown in the dashboard; the server does not
173
+ enforce it.
@@ -37,7 +37,7 @@ result = Spree.cart_add_item_workflow.call(cart: cart, variant: variant, quantit
37
37
  if result.success?
38
38
  line_item = result.value
39
39
  else
40
- puts result.error.value
40
+ puts result.error.to_s
41
41
  end
42
42
  ```
43
43
 
@@ -76,12 +76,31 @@ module MyStore
76
76
  # every #perform keyword is a reader: cart, variant, quantity, ...
77
77
  return if workflow.quantity <= 10
78
78
 
79
- workflow.reject!('You can order at most 10 of this item.')
79
+ workflow.errors.add(:quantity, :purchase_limit_exceeded,
80
+ message: 'You can order at most 10 of this item.')
81
+ workflow.reject!
80
82
  end
81
83
  end
82
84
  end
83
85
  ```
84
86
 
87
+ `workflow.errors` is an `ActiveModel::Errors`, the same object a model uses. A
88
+ rejection therefore reaches the API in the shape clients already handle for
89
+ validation failures — the field name, a symbolic code, and the message:
90
+
91
+ ```json
92
+ {
93
+ "error": {
94
+ "code": "validation_error",
95
+ "message": "Quantity You can order at most 10 of this item.",
96
+ "details": { "quantity": ["You can order at most 10 of this item."] }
97
+ }
98
+ }
99
+ ```
100
+
101
+ Add to `:base` for a rejection that isn't about one field. `reject!('message')`
102
+ with an argument is shorthand for exactly that.
103
+
85
104
  > **NOTE:** Hook keys are validated at boot. Registering against a hook that doesn't exist
86
105
  > raises `Spree::Hooks::UnknownHookError` with the list of valid hooks for that
87
106
  > workflow, so a typo fails immediately instead of silently never firing.
@@ -179,9 +198,10 @@ The caller receives a normal failure result — no exception reaches your
179
198
  controller:
180
199
 
181
200
  ```ruby
182
- result = Spree.cart_add_item_workflow.call(cart: cart, variant: variant)
201
+ result = Spree.return_create_workflow.call(order: order, items: items)
183
202
  result.success? # => false
184
- result.error.value # => "You can order at most 10 of this item."
203
+ result.error.to_s # => "This order is outside the 30-day return window."
204
+ result.error.value # => ActiveModel::Errors — the rejection, field by field
185
205
  ```
186
206
 
187
207
  > **WARNING:** Reject from `validate` hooks, not from `after_*` hooks. Rejecting late still
@@ -227,6 +247,8 @@ is reported through `Rails.error` so it's visible rather than mysterious.
227
247
  |---|---|---|---|
228
248
  | `carts.add_item` | `validate` | validate | Before the line item is built |
229
249
  | `carts.add_item` | `after_item_added` | lifecycle | After the item is saved and totals recalculated (in transaction) |
250
+ | `carts.upsert_items` | `validate` | validate | Once per item, immediately before that item is applied — quantity edits, removals and bulk payloads. Earlier items in the batch may already be written |
251
+ | `carts.upsert_items` | `after_items_upserted` | lifecycle | After the batch is applied and the cart recalculated once (in transaction) |
230
252
  | `carts.complete` | `validate` | validate | After checkout requirements pass, before the order is created |
231
253
  | `carts.complete` | `before_finalize` | lifecycle | After payment, before the order is placed |
232
254
  | `carts.complete` | `after_finalize` | lifecycle | After the order is placed |
@@ -251,13 +273,33 @@ is reported through `Rails.error` so it's visible rather than mysterious.
251
273
  | `payments.handle_webhook` | `after_handle` | lifecycle | After the gateway callback is processed |
252
274
  | `customers.create` | `validate` | validate | After the customer is built, before it is saved — the registration-policy veto (bot screening, B2B approval) |
253
275
  | `customers.create` | `after_create` | lifecycle | After the customer is created and the newsletter subscriber linked |
276
+ | `products.create` | `validate` | validate | After the product is built, before it is saved — fires for the Admin API, CSV imports and seeds alike |
277
+ | `products.create` | `after_create` | lifecycle | After the product is saved (in transaction) |
278
+ | `products.update` | `validate` | validate | With the pending attributes assigned, so `product.changes` describes the edit |
279
+ | `products.update` | `after_update` | lifecycle | After the product is saved (in transaction) |
280
+ | `products.destroy` | `validate` | validate | Before the product is soft-deleted — refuse a deletion your store shouldn't allow |
281
+ | `products.destroy` | `after_destroy` | lifecycle | After the soft-delete, for host cleanup (in transaction) |
254
282
 
255
283
  `before_cancel` and `before_resume` accept `reject!` like a `validate` hook.
256
284
 
257
285
  Draft-order editing in the admin uses **twin workflows** with their own keys —
258
- `orders.add_item`, `orders.recalculate`, `orders.recalculate_totals` — carrying
259
- the same hooks as their cart counterparts. Register against the cart key for
260
- storefront carts, the order key for admin edits, or both.
286
+ `orders.add_item`, `orders.upsert_items`, `orders.recalculate`,
287
+ `orders.recalculate_totals` — carrying the same hooks as their cart
288
+ counterparts. Register against the cart key for storefront carts, the order key
289
+ for admin edits, or both.
290
+
291
+ > **NOTE:** `carts.add_item` **adds** to a quantity; `carts.upsert_items` **sets** it, and
292
+ > is what a quantity edit, a removal (quantity `0`) and a bulk item payload all
293
+ > run through. A rule about what may be in a cart therefore belongs on both keys —
294
+ > the readers are the same (`cart`, `variant`, `quantity`), so one handler class
295
+ > registers against each.
296
+ >
297
+ > `upsert_items` is also the one flow where a rejection is **not** fatal on the
298
+ > storefront: the vetoed item is skipped, the rest of the batch applies, and what
299
+ > was dropped comes back in the cart's `warnings`. A customer restoring a saved
300
+ > cart keeps whatever is still purchasable. Admin order edits behave the opposite
301
+ > way — the whole edit fails — because a silently dropped row is worse than a
302
+ > failed request when a merchant is editing.
261
303
 
262
304
  Inspect what's available at runtime:
263
305
 
@@ -340,7 +382,7 @@ The whole vocabulary:
340
382
  | `on_flow_failure: :name` | Names the undo for a step, run in reverse if a later step fails |
341
383
  | `run_hooks :name` | Dispatches a declared hook; returns the merged hash from context handlers |
342
384
  | `failure(value, error)` | Aborts the flow — rolls back an open transaction and returns a failure result |
343
- | `reject!(message)` | The same, named for hook handlers vetoing a flow |
385
+ | `reject!` | The same, named for hook handlers vetoing a flow — carries `workflow.errors` |
344
386
  | `halt!(value)` | Successful early exit (not valid inside a transaction the workflow opened) |
345
387
  | `hooks :a, :b` | Declares the extension points this workflow dispatches |
346
388
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spree/docs",
3
- "version": "0.1.157",
3
+ "version": "0.1.158",
4
4
  "description": "Spree Commerce developer documentation for AI agents and local reference",
5
5
  "type": "module",
6
6
  "license": "CC-BY-4.0",