@spree/docs 0.1.219 → 0.1.221

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.
@@ -2010,8 +2010,8 @@ paths:
2010
2010
  coupon_code:
2011
2011
  item_total: '0.0'
2012
2012
  display_item_total: "$0.00"
2013
- adjustment_total: '0.0'
2014
- display_adjustment_total: "$0.00"
2013
+ adjustment_total: '17.0'
2014
+ display_adjustment_total: "$17.00"
2015
2015
  discount_total: '0.0'
2016
2016
  display_discount_total: "$0.00"
2017
2017
  tax_total: '0.0'
@@ -2020,16 +2020,16 @@ paths:
2020
2020
  display_included_tax_total: "$0.00"
2021
2021
  additional_tax_total: '0.0'
2022
2022
  display_additional_tax_total: "$0.00"
2023
- total: '0.0'
2024
- display_total: "$0.00"
2023
+ total: '17.0'
2024
+ display_total: "$17.00"
2025
2025
  gift_card_total: '0.0'
2026
2026
  display_gift_card_total: "$0.00"
2027
- amount_due: '0.0'
2028
- display_amount_due: "$0.00"
2027
+ amount_due: '17.0'
2028
+ display_amount_due: "$17.00"
2029
2029
  delivery_total: '0.0'
2030
2030
  display_delivery_total: "$0.00"
2031
- fee_total: '0.0'
2032
- display_fee_total: "$0.00"
2031
+ fee_total: '17.0'
2032
+ display_fee_total: "$17.00"
2033
2033
  store_credit_total: '0.0'
2034
2034
  display_store_credit_total: "$0.00"
2035
2035
  covered_by_store_credit: false
@@ -2044,13 +2044,31 @@ paths:
2044
2044
  step: address
2045
2045
  field: email
2046
2046
  message: Email address is required
2047
+ - code: payment_required
2048
+ step: payment
2049
+ field: payment
2050
+ message: Add a payment method
2047
2051
  order_minimum:
2048
2052
  order_minimum_shortfall:
2049
2053
  below_order_minimum: false
2050
2054
  freight_summary:
2051
2055
  shipping_eq_billing_address: true
2052
2056
  discounts: []
2053
- fees: []
2057
+ fees:
2058
+ - id: fee_UkLWZg9DAJ
2059
+ label: Gift wrapping
2060
+ kind: gift_wrap
2061
+ line_item_id:
2062
+ fulfillment_id:
2063
+ amount: '5.0'
2064
+ display_amount: "$5.00"
2065
+ - id: fee_gbHJdmfrXB
2066
+ label: Import duty
2067
+ kind: duty
2068
+ line_item_id:
2069
+ fulfillment_id:
2070
+ amount: '12.0'
2071
+ display_amount: "$12.00"
2054
2072
  items: []
2055
2073
  fulfillments: []
2056
2074
  payments: []
@@ -5665,8 +5683,8 @@ paths:
5665
5683
  completed_at: '2026-01-15T12:00:00.000Z'
5666
5684
  item_total: '10.0'
5667
5685
  display_item_total: "$10.00"
5668
- adjustment_total: '0.0'
5669
- display_adjustment_total: "$0.00"
5686
+ adjustment_total: '12.0'
5687
+ display_adjustment_total: "$12.00"
5670
5688
  discount_total: '0.0'
5671
5689
  display_discount_total: "$0.00"
5672
5690
  tax_total: '0.0'
@@ -5675,21 +5693,28 @@ paths:
5675
5693
  display_included_tax_total: "$0.00"
5676
5694
  additional_tax_total: '0.0'
5677
5695
  display_additional_tax_total: "$0.00"
5678
- total: '110.0'
5679
- display_total: "$110.00"
5696
+ total: '122.0'
5697
+ display_total: "$122.00"
5680
5698
  gift_card_total: '0.0'
5681
5699
  display_gift_card_total: "$0.00"
5682
- amount_due: '110.0'
5683
- display_amount_due: "$110.00"
5700
+ amount_due: '122.0'
5701
+ display_amount_due: "$122.00"
5684
5702
  delivery_total: '100.0'
5685
5703
  display_delivery_total: "$100.00"
5686
- fee_total: '0.0'
5687
- display_fee_total: "$0.00"
5704
+ fee_total: '12.0'
5705
+ display_fee_total: "$12.00"
5688
5706
  store_credit_total: '0.0'
5689
5707
  display_store_credit_total: "$0.00"
5690
5708
  covered_by_store_credit: false
5691
5709
  discounts: []
5692
- fees: []
5710
+ fees:
5711
+ - id: fee_UkLWZg9DAJ
5712
+ label: Import duty
5713
+ kind: duty
5714
+ line_item_id:
5715
+ fulfillment_id:
5716
+ amount: '12.0'
5717
+ display_amount: "$12.00"
5693
5718
  items:
5694
5719
  - id: li_UkLWZg9DAJ
5695
5720
  variant_id: variant_UkLWZg9DAJ
@@ -12395,7 +12420,17 @@ components:
12395
12420
  number:
12396
12421
  type: string
12397
12422
  status:
12398
- type: string
12423
+ anyOf:
12424
+ - type: string
12425
+ enum:
12426
+ - open
12427
+ - approved
12428
+ - resolved
12429
+ - denied
12430
+ - canceled
12431
+ - type: string
12432
+ description: The values listed are the built-in ones; extensions may add
12433
+ more.
12399
12434
  resolution:
12400
12435
  type: string
12401
12436
  nullable: true
@@ -12508,6 +12543,11 @@ components:
12508
12543
  type: string
12509
12544
  status:
12510
12545
  type: string
12546
+ enum:
12547
+ - pending
12548
+ - accepted
12549
+ - revoked
12550
+ - expired
12511
12551
  required:
12512
12552
  - id
12513
12553
  - email
@@ -12542,6 +12582,9 @@ components:
12542
12582
  type: string
12543
12583
  kind:
12544
12584
  type: string
12585
+ enum:
12586
+ - company
12587
+ - division
12545
12588
  po_number_required:
12546
12589
  type: boolean
12547
12590
  parent_id:
@@ -12745,8 +12788,20 @@ components:
12745
12788
  type: string
12746
12789
  kind:
12747
12790
  type: string
12791
+ enum:
12792
+ - access
12793
+ - erasure
12748
12794
  status:
12749
- type: string
12795
+ anyOf:
12796
+ - type: string
12797
+ enum:
12798
+ - pending
12799
+ - processing
12800
+ - completed
12801
+ - failed
12802
+ - type: string
12803
+ description: The values listed are the built-in ones; extensions may add
12804
+ more.
12750
12805
  requested_at:
12751
12806
  type: string
12752
12807
  nullable: true
@@ -12770,8 +12825,20 @@ components:
12770
12825
  type: string
12771
12826
  kind:
12772
12827
  type: string
12828
+ enum:
12829
+ - access
12830
+ - erasure
12773
12831
  status:
12774
- type: string
12832
+ anyOf:
12833
+ - type: string
12834
+ enum:
12835
+ - pending
12836
+ - processing
12837
+ - completed
12838
+ - failed
12839
+ - type: string
12840
+ description: The values listed are the built-in ones; extensions may add
12841
+ more.
12775
12842
  requested_at:
12776
12843
  type: string
12777
12844
  nullable: true
@@ -12914,6 +12981,16 @@ components:
12914
12981
  nullable: true
12915
12982
  status:
12916
12983
  type: string
12984
+ enum:
12985
+ - pending
12986
+ - pre_transit
12987
+ - in_transit
12988
+ - out_for_delivery
12989
+ - available_for_pickup
12990
+ - delivered
12991
+ - return_to_sender
12992
+ - failure
12993
+ - unknown
12917
12994
  tracking_url:
12918
12995
  type: string
12919
12996
  nullable: true
@@ -12941,6 +13018,10 @@ components:
12941
13018
  type: string
12942
13019
  member_type:
12943
13020
  type: string
13021
+ enum:
13022
+ - country
13023
+ - state
13024
+ - postal_code
12944
13025
  country_code:
12945
13026
  type: string
12946
13027
  nullable: true
@@ -13054,6 +13135,9 @@ components:
13054
13135
  type: string
13055
13136
  kind:
13056
13137
  type: string
13138
+ enum:
13139
+ - promotion
13140
+ - manual
13057
13141
  code:
13058
13142
  type: string
13059
13143
  nullable: true
@@ -13099,7 +13183,19 @@ components:
13099
13183
  label:
13100
13184
  type: string
13101
13185
  kind:
13102
- type: string
13186
+ anyOf:
13187
+ - type: string
13188
+ enum:
13189
+ - surcharge
13190
+ - handling
13191
+ - gift_wrap
13192
+ - cod
13193
+ - payment
13194
+ - duty
13195
+ - type: string
13196
+ description: What sort of charge this is. `duty` is a customs duty on a
13197
+ cross-border order and is not taxed; the other kinds are. Extensions may
13198
+ register further kinds.
13103
13199
  line_item_id:
13104
13200
  type: string
13105
13201
  nullable: true
@@ -13203,9 +13299,23 @@ components:
13203
13299
  type: string
13204
13300
  nullable: true
13205
13301
  status:
13206
- type: string
13302
+ anyOf:
13303
+ - type: string
13304
+ enum:
13305
+ - unfulfilled
13306
+ - fulfilled
13307
+ - delivered
13308
+ - canceled
13309
+ - type: string
13310
+ description: The values listed are the built-in ones; extensions may add
13311
+ more.
13207
13312
  fulfillment_type:
13208
13313
  type: string
13314
+ enum:
13315
+ - shipping
13316
+ - digital
13317
+ - pickup
13318
+ - pickup_point
13209
13319
  fulfilled_at:
13210
13320
  type: string
13211
13321
  nullable: true
@@ -13307,7 +13417,17 @@ components:
13307
13417
  code:
13308
13418
  type: string
13309
13419
  status:
13310
- type: string
13420
+ anyOf:
13421
+ - type: string
13422
+ enum:
13423
+ - active
13424
+ - partially_redeemed
13425
+ - redeemed
13426
+ - canceled
13427
+ - expired
13428
+ - type: string
13429
+ description: The values listed are the built-in ones; extensions may add
13430
+ more.
13311
13431
  currency:
13312
13432
  type: string
13313
13433
  amount:
@@ -13370,7 +13490,14 @@ components:
13370
13490
  updated_at:
13371
13491
  type: string
13372
13492
  status:
13373
- type: string
13493
+ anyOf:
13494
+ - type: string
13495
+ enum:
13496
+ - pending
13497
+ - accepted
13498
+ - type: string
13499
+ description: The values listed are the built-in ones; extensions may add
13500
+ more.
13374
13501
  resource_type:
13375
13502
  type: string
13376
13503
  nullable: true
@@ -13608,6 +13735,10 @@ components:
13608
13735
  type: string
13609
13736
  media_type:
13610
13737
  type: string
13738
+ enum:
13739
+ - image
13740
+ - video
13741
+ - external_video
13611
13742
  position:
13612
13743
  type: number
13613
13744
  nullable: true
@@ -13647,6 +13778,10 @@ components:
13647
13778
  nullable: true
13648
13779
  media_type:
13649
13780
  type: string
13781
+ enum:
13782
+ - image
13783
+ - video
13784
+ - external_video
13650
13785
  focal_point_x:
13651
13786
  type: number
13652
13787
  nullable: true
@@ -13752,6 +13887,10 @@ components:
13752
13887
  type: number
13753
13888
  kind:
13754
13889
  type: string
13890
+ enum:
13891
+ - dropdown
13892
+ - color_swatch
13893
+ - buttons
13755
13894
  required:
13756
13895
  - id
13757
13896
  - name
@@ -13820,9 +13959,28 @@ components:
13820
13959
  fulfillment_status:
13821
13960
  type: string
13822
13961
  nullable: true
13962
+ enum:
13963
+ - backorder
13964
+ - canceled
13965
+ - partial
13966
+ - unfulfilled
13967
+ - fulfilled
13968
+ - delivered
13969
+ - pending
13970
+ - ready
13971
+ - shipped
13823
13972
  payment_status:
13824
13973
  type: string
13825
13974
  nullable: true
13975
+ enum:
13976
+ - none
13977
+ - authorized
13978
+ - partially_paid
13979
+ - paid
13980
+ - partially_refunded
13981
+ - refunded
13982
+ - overcharged
13983
+ - voided
13826
13984
  completed_at:
13827
13985
  type: string
13828
13986
  nullable: true
@@ -13908,9 +14066,28 @@ components:
13908
14066
  fulfillment_status:
13909
14067
  type: string
13910
14068
  nullable: true
14069
+ enum:
14070
+ - backorder
14071
+ - canceled
14072
+ - partial
14073
+ - unfulfilled
14074
+ - fulfilled
14075
+ - delivered
14076
+ - pending
14077
+ - ready
14078
+ - shipped
13911
14079
  payment_status:
13912
14080
  type: string
13913
14081
  nullable: true
14082
+ enum:
14083
+ - none
14084
+ - authorized
14085
+ - partially_paid
14086
+ - paid
14087
+ - partially_refunded
14088
+ - refunded
14089
+ - overcharged
14090
+ - voided
13914
14091
  completed_at:
13915
14092
  type: string
13916
14093
  nullable: true
@@ -14093,6 +14270,9 @@ components:
14093
14270
  nullable: true
14094
14271
  type:
14095
14272
  type: string
14273
+ description: 'Payment method type. Built-in: check, store_credit, custom_payment_source_method,
14274
+ bogus (test only); payment provider gems register their own, for example
14275
+ stripe.'
14096
14276
  session_required:
14097
14277
  type: boolean
14098
14278
  source_required:
@@ -14118,7 +14298,19 @@ components:
14118
14298
  number:
14119
14299
  type: string
14120
14300
  status:
14121
- type: string
14301
+ anyOf:
14302
+ - type: string
14303
+ enum:
14304
+ - checkout
14305
+ - processing
14306
+ - pending
14307
+ - completed
14308
+ - failed
14309
+ - void
14310
+ - invalid
14311
+ - type: string
14312
+ description: The values listed are the built-in ones; extensions may add
14313
+ more.
14122
14314
  amount:
14123
14315
  type: string
14124
14316
  nullable: true
@@ -14162,7 +14354,18 @@ components:
14162
14354
  id:
14163
14355
  type: string
14164
14356
  status:
14165
- type: string
14357
+ anyOf:
14358
+ - type: string
14359
+ enum:
14360
+ - pending
14361
+ - processing
14362
+ - completed
14363
+ - failed
14364
+ - canceled
14365
+ - expired
14366
+ - type: string
14367
+ description: The values listed are the built-in ones; extensions may add
14368
+ more.
14166
14369
  currency:
14167
14370
  type: string
14168
14371
  external_id:
@@ -14209,7 +14412,18 @@ components:
14209
14412
  id:
14210
14413
  type: string
14211
14414
  status:
14212
- type: string
14415
+ anyOf:
14416
+ - type: string
14417
+ enum:
14418
+ - pending
14419
+ - processing
14420
+ - completed
14421
+ - failed
14422
+ - canceled
14423
+ - expired
14424
+ - type: string
14425
+ description: The values listed are the built-in ones; extensions may add
14426
+ more.
14213
14427
  external_id:
14214
14428
  type: string
14215
14429
  nullable: true
@@ -14426,6 +14640,10 @@ components:
14426
14640
  type: string
14427
14641
  kind:
14428
14642
  type: string
14643
+ enum:
14644
+ - dropdown
14645
+ - color_swatch
14646
+ - buttons
14429
14647
  options:
14430
14648
  type: array
14431
14649
  items:
@@ -14787,7 +15005,17 @@ components:
14787
15005
  number:
14788
15006
  type: string
14789
15007
  status:
14790
- type: string
15008
+ anyOf:
15009
+ - type: string
15010
+ enum:
15011
+ - requested
15012
+ - approved
15013
+ - received
15014
+ - refunded
15015
+ - canceled
15016
+ - type: string
15017
+ description: The values listed are the built-in ones; extensions may add
15018
+ more.
14791
15019
  order_id:
14792
15020
  type: string
14793
15021
  nullable: true
@@ -14872,8 +15100,19 @@ components:
14872
15100
  type: string
14873
15101
  source:
14874
15102
  type: string
15103
+ enum:
15104
+ - purchased
15105
+ - uploaded
14875
15106
  status:
14876
- type: string
15107
+ anyOf:
15108
+ - type: string
15109
+ enum:
15110
+ - purchased
15111
+ - refund_requested
15112
+ - refunded
15113
+ - type: string
15114
+ description: The values listed are the built-in ones; extensions may add
15115
+ more.
14877
15116
  carrier:
14878
15117
  type: string
14879
15118
  nullable: true
@@ -14908,6 +15147,9 @@ components:
14908
15147
  type: string
14909
15148
  owner_type:
14910
15149
  type: string
15150
+ enum:
15151
+ - Spree::Fulfillment
15152
+ - Spree::Return
14911
15153
  cost:
14912
15154
  type: string
14913
15155
  display_cost:
@@ -15045,6 +15287,8 @@ components:
15045
15287
  type: string
15046
15288
  kind:
15047
15289
  type: string
15290
+ description: 'Tax identifier kind, keyed to a registered validator. Built-in:
15291
+ eu_vat. Extensions may register more.'
15048
15292
  value:
15049
15293
  type: string
15050
15294
  required:
@@ -15137,14 +15381,27 @@ components:
15137
15381
  nullable: true
15138
15382
  weight_unit:
15139
15383
  type: string
15384
+ enum:
15385
+ - g
15386
+ - kg
15387
+ - lb
15388
+ - oz
15140
15389
  dimensions_unit:
15141
15390
  type: string
15391
+ enum:
15392
+ - mm
15393
+ - cm
15394
+ - in
15395
+ - ft
15142
15396
  minimum_order_quantity:
15143
15397
  type: number
15144
15398
  order_multiple:
15145
15399
  type: number
15146
15400
  purchase_unit:
15147
15401
  type: string
15402
+ enum:
15403
+ - unit
15404
+ - carton
15148
15405
  units_per_carton:
15149
15406
  type: number
15150
15407
  nullable: true
@@ -118,6 +118,77 @@ A method is priced one of two ways, and the choice is per method:
118
118
  A carrier-priced method returns one option per service, so a single "Carrier
119
119
  rates" method can offer Ground, 2-Day and Overnight as separate choices.
120
120
 
121
+ ## Packaging
122
+
123
+ Every quote needs to know what the goods travel in. A carrier charges by
124
+ dimensional weight as well as actual weight, so the size of the box matters to
125
+ the price, and the empty box's own weight has to be added to what it holds —
126
+ otherwise every parcel is quoted light.
127
+
128
+ Package types are that vocabulary: the box parcels ship in, and for wholesale,
129
+ the cartons products are packed into and the pallets or containers an order
130
+ leaves on.
131
+
132
+ ```typescript Admin SDK
133
+ await adminClient.packageTypes.create({
134
+ name: 'Standard mailer',
135
+ kind: 'box',
136
+ length: 30, width: 20, height: 15, dimensions_unit: 'cm',
137
+ weight: 0.4, weight_unit: 'kg',
138
+ default: true,
139
+ })
140
+ ```
141
+
142
+ One row is marked `default`, and that is the box quotes are built on. Marking
143
+ another one default demotes the first, so there is never more than one.
144
+
145
+ Measurements are optional individually, which is how a merchant records what
146
+ they know. A box with no dimensions still contributes its weight; a box with
147
+ nothing measured contributes nothing, and dimensional pricing has nothing to
148
+ work from.
149
+
150
+ > **NOTE:** Deleting the default box is refused, and so is switching its flag off when
151
+ > nothing else would take it. Both would leave quotes with no size and no tare,
152
+ > which under-prices bulky parcels silently rather than failing.
153
+
154
+ ### On a marketplace
155
+
156
+ A seller packs their own goods, in their own boxes, from their own warehouse.
157
+ So packaging has an owner: rows created by the operator are the marketplace's,
158
+ and each seller has their own.
159
+
160
+ A parcel is quoted with the box belonging to whoever's warehouse it left,
161
+ falling back to the marketplace's when a seller has not recorded one. Sellers
162
+ manage theirs through the Seller API, and can also pack products into the
163
+ marketplace's cartons — those they read but cannot change.
164
+
165
+ ```typescript Seller SDK
166
+ // Their own packaging — what the seller panel's settings page lists.
167
+ const { data: mine } = await sellerClient.packageTypes.list({ owner: 'mine' })
168
+
169
+ // Their own plus the marketplace's, which is what a carton picker wants.
170
+ const { data: available } = await sellerClient.packageTypes.list()
171
+
172
+ available.forEach((row) => {
173
+ row.name
174
+ row.editable // false on the marketplace's own rows
175
+ row.default // this seller's default box
176
+ })
177
+ ```
178
+
179
+ A seller's settings page asks for `owner: 'mine'`. A list mixing both owners
180
+ reads as "packaging is configured" while the seller has recorded nothing of
181
+ their own, which makes the shipping-box requirement look broken rather than
182
+ outstanding. Where a seller genuinely benefits from the marketplace's rows —
183
+ choosing the carton a product is packed into — the unfiltered list is what
184
+ the picker reads.
185
+
186
+ Because the fallback keeps checkout working, a seller who never opens the page
187
+ would quietly ship with someone else's measurements. The **shipping box**
188
+ onboarding requirement is what asks them for it: it is satisfied by a default
189
+ box of their own with all three dimensions and a weight recorded. See
190
+ [sellers](sellers.md#onboarding-requirements).
191
+
121
192
  ## Related
122
193
 
123
194
  - [Fulfillments](fulfillments.md) — what happens to the parcel afterwards
@@ -85,7 +85,7 @@ Requirements come in three flavours, which is what lets one mechanism cover very
85
85
  | **Attested** | The seller confirms something — accepting terms |
86
86
  | **Verified** | The seller submits something and the marketplace rules on it — a document, an operator review |
87
87
 
88
- Shipped out of the box: accepting terms, completing the profile, a billing address, a returns address, and a minimum number of products. Also available are generic document upload, attestation, operator review, and required custom fields.
88
+ Shipped out of the box: accepting terms, completing the profile, a billing address, a returns address, a way to ship, the box they ship in, and a minimum number of products. Also available are generic document upload, attestation, operator review, and required custom fields.
89
89
 
90
90
  A seller sees their checklist and its progress:
91
91
 
@@ -197,7 +197,7 @@ await sellerClient.orders.fulfillments.fulfill(orderId, fulfillmentId, {
197
197
  })
198
198
  ```
199
199
 
200
- Sellers can manage their profile, invite their own team, list and submit products, see and fulfil their orders, manage their stock locations, and work through onboarding. They cannot see other sellers, the marketplace's own catalog, or anything belonging to the store at large.
200
+ Sellers can manage their profile, invite their own team, list and submit products, see and fulfil their orders, manage their stock locations, delivery methods and packaging, and work through onboarding. They cannot see other sellers, the marketplace's own catalog, or anything belonging to the store at large.
201
201
 
202
202
  What a seller's staff may do is governed by [roles](staff-roles.md) owned by the seller — the same permission system as the back office, with a narrower set of keys, so a seller role can never reach store settings.
203
203
 
@@ -206,5 +206,6 @@ What a seller's staff may do is governed by [roles](staff-roles.md) owned by the
206
206
  - [Commissions](commissions.md) — rates, rules, and what the marketplace charges
207
207
  - [Products](products.md#seller-submissions) — the listing review flow
208
208
  - [Orders](orders.md) — orders and their statuses
209
+ - [Delivery setup](delivery-setup.md#on-a-marketplace) — how a seller's goods ship, and what they ship in
209
210
  - [Staff & Roles](staff-roles.md) — how seller teams are governed
210
211
  - [Seller API](../../api-reference/seller-api/introduction.md) — the full endpoint reference
@@ -77,6 +77,27 @@ const cart = await client.carts.giftCards.apply(cartId, 'GC-ABCD-1234', options)
77
77
  await client.carts.giftCards.remove(cartId, 'gc_abc123', options);
78
78
  ```
79
79
 
80
+ ### Fees and Duties
81
+
82
+ A cart may carry charges that are neither a product price nor tax: gift wrapping, a handling charge, a cash-on-delivery surcharge, or an import duty on a cross-border order. Each is a [fee](../../core-concepts/fees.md) on the cart, and the storefront should show every one of them before the customer pays.
83
+
84
+ ```typescript
85
+ const cart = await client.carts.get(cartId, options);
86
+
87
+ cart.fees.forEach((fee) => {
88
+ fee.label; // "Import duty"
89
+ fee.kind; // "duty"
90
+ fee.display_amount; // "$12.00"
91
+ fee.line_item_id; // set when the fee is for one item, otherwise null
92
+ });
93
+
94
+ cart.display_fee_total; // "$17.00"
95
+ ```
96
+
97
+ `kind` is one of `surcharge`, `handling`, `gift_wrap`, `cod`, `payment` or `duty`. Fees are already part of `total`, so list them as their own lines between the subtotal and the total; never add them on top. A `duty` fee is a customs charge and is not taxed, which is why it is worth showing under its own label rather than folding it into a generic "fees" line.
98
+
99
+ Fees are written by the merchant or by an integration, never by the customer; there is no Store API endpoint to create one.
100
+
80
101
  ## Checkout
81
102
 
82
103
  ### Update Cart
@@ -136,10 +157,18 @@ await client.carts.storeCredits.apply(cartId, 25.00, options);
136
157
  await client.carts.storeCredits.remove(cartId, options);
137
158
  ```
138
159
 
139
- The cart/order response includes store credit and gift card totals:
160
+ ### Totals
161
+
162
+ The cart and order responses break the amount the customer pays into these totals. Each has a raw string value and a `display_` twin formatted in the cart's currency.
140
163
 
141
- - `store_credit_total` / `display_store_credit_total` — total store credit applied
142
- - `gift_card_total` / `display_gift_card_total` — total gift card value applied
164
+ - `item_total` — the products, before anything else
165
+ - `delivery_total` — the selected delivery rates
166
+ - `discount_total` — promotions and discount codes, as a negative amount
167
+ - `fee_total` — every [fee](#fees-and-duties) on the cart, duties included
168
+ - `tax_total` — tax on items, delivery and taxable fees
169
+ - `total` — what the order costs: items, delivery, fees and tax, less discounts
170
+ - `store_credit_total` / `gift_card_total` — store credit or gift card value applied against the total
171
+ - `amount_due` — what is left to pay after store credit and gift cards
143
172
  - `covered_by_store_credit` — boolean, whether the order is fully covered by store credit
144
173
  - `gift_card` — associated gift card (if applicable)
145
174
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spree/docs",
3
- "version": "0.1.219",
3
+ "version": "0.1.221",
4
4
  "description": "Spree Commerce developer documentation for AI agents and local reference",
5
5
  "type": "module",
6
6
  "license": "CC-BY-4.0",