spree_api 6.0.2 → 6.0.4

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/spree/api/v3/admin/embed_permissions.rb +5 -2
  3. data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -1
  4. data/app/controllers/concerns/spree/api/v3/security_headers.rb +3 -0
  5. data/app/controllers/spree/api/v3/admin/base_controller.rb +31 -0
  6. data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +21 -4
  7. data/app/controllers/spree/api/v3/admin/diagnostics_controller.rb +46 -0
  8. data/app/controllers/spree/api/v3/admin/me_controller.rb +0 -13
  9. data/app/controllers/spree/api/v3/admin/media_controller.rb +10 -0
  10. data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +6 -2
  11. data/app/controllers/spree/api/v3/admin/products_controller.rb +56 -0
  12. data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +39 -3
  13. data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +1 -3
  14. data/app/controllers/spree/api/v3/admin/sellers_controller.rb +24 -1
  15. data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +15 -1
  16. data/app/controllers/spree/api/v3/admin/updates_controller.rb +4 -15
  17. data/app/controllers/spree/api/v3/seller/products/media_controller.rb +46 -0
  18. data/app/controllers/spree/api/v3/seller/products_controller.rb +4 -2
  19. data/app/controllers/spree/api/v3/seller/profile_controller.rb +13 -5
  20. data/app/controllers/spree/api/v3/store/carts_controller.rb +10 -7
  21. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +2 -2
  22. data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +4 -0
  23. data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +2 -1
  24. data/app/serializers/spree/api/v3/admin/diagnostics_serializer.rb +30 -0
  25. data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +1 -1
  26. data/app/serializers/spree/api/v3/admin/import_serializer.rb +1 -1
  27. data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +2 -2
  28. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +6 -1
  29. data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +3 -1
  30. data/app/serializers/spree/api/v3/admin/product_serializer.rb +8 -0
  31. data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +2 -2
  32. data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +4 -1
  33. data/app/serializers/spree/api/v3/admin/promotion_serializer.rb +13 -0
  34. data/app/serializers/spree/api/v3/admin/return_serializer.rb +1 -1
  35. data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +3 -2
  36. data/app/serializers/spree/api/v3/admin/seller_serializer.rb +12 -2
  37. data/app/serializers/spree/api/v3/fulfillment_serializer.rb +1 -1
  38. data/app/serializers/spree/api/v3/product_category_serializer.rb +26 -0
  39. data/app/serializers/spree/api/v3/product_collection_serializer.rb +26 -0
  40. data/app/serializers/spree/api/v3/seller/import_serializer.rb +1 -1
  41. data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +2 -2
  42. data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +2 -2
  43. data/app/serializers/spree/api/v3/seller/product_serializer.rb +8 -0
  44. data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -2
  45. data/config/initializers/typelizer.rb +8 -19
  46. data/config/routes.rb +8 -1
  47. data/lib/spree/api/admin_document.rb +284 -0
  48. data/lib/spree/api/agent_operations.rb +300 -0
  49. data/lib/spree/api/agent_resource_map.rb +74 -14
  50. data/lib/spree/api/agent_write_schemas.rb +15 -51
  51. data/lib/spree/api/dependencies.rb +1 -1
  52. data/lib/spree/api/engine.rb +14 -1
  53. data/lib/spree/api/enum_types.rb +4 -1
  54. data/lib/spree/api/openapi/schema_helper.rb +3 -3
  55. data/lib/spree/api/sdk_types.rb +190 -0
  56. data/lib/spree/api/sdk_types_task.rb +68 -0
  57. data/lib/spree/api/testing_support/agent_tools.rb +35 -0
  58. data/lib/spree/api/testing_support/agent_tools_contract.rb +110 -0
  59. data/lib/spree/api/testing_support/deterministic_openapi.rb +147 -0
  60. data/lib/spree/api/testing_support/filter_parameters.rb +99 -0
  61. data/lib/spree/api/testing_support/openapi.rb +233 -0
  62. data/lib/spree/api/testing_support/openapi_tasks.rb +21 -0
  63. data/lib/spree/api/testing_support/sdk_method.rb +34 -0
  64. data/lib/spree/api/typelizer_generation.rb +39 -11
  65. data/lib/tasks/openapi.rake +5 -0
  66. data/lib/tasks/sdk_types.rake +6 -0
  67. data/lib/typelizer/open_enums.rb +13 -1
  68. data/openapi/admin.yaml +2241 -318
  69. data/openapi/store.yaml +125 -125
  70. metadata +26 -9
  71. data/lib/spree/api/agent_workflow_endpoints.rb +0 -113
data/openapi/admin.yaml CHANGED
@@ -103,7 +103,7 @@ paths:
103
103
  status: active
104
104
  created_at: '2026-01-15T12:00:00.000Z'
105
105
  updated_at: '2026-01-15T12:00:00.000Z'
106
- last_active_at: '2026-01-15T12:00:00Z'
106
+ last_active_at:
107
107
  avatar_url:
108
108
  roles:
109
109
  - id: role_UkLWZg9DAJ
@@ -343,7 +343,7 @@ paths:
343
343
  status: active
344
344
  created_at: '2026-01-15T12:00:00.000Z'
345
345
  updated_at: '2026-01-15T12:00:00.000Z'
346
- last_active_at: '2026-01-15T12:00:00Z'
346
+ last_active_at:
347
347
  avatar_url:
348
348
  roles:
349
349
  - id: role_UkLWZg9DAJ
@@ -781,7 +781,7 @@ paths:
781
781
  status: active
782
782
  created_at: '2026-01-15T12:00:00.000Z'
783
783
  updated_at: '2026-01-15T12:00:00.000Z'
784
- last_active_at: '2026-01-15T12:00:00Z'
784
+ last_active_at:
785
785
  avatar_url:
786
786
  roles:
787
787
  - id: role_UkLWZg9DAJ
@@ -895,7 +895,7 @@ paths:
895
895
  status: active
896
896
  created_at: '2026-01-15T12:00:00.000Z'
897
897
  updated_at: '2026-01-15T12:00:00.000Z'
898
- last_active_at: '2026-01-15T12:00:00Z'
898
+ last_active_at:
899
899
  avatar_url:
900
900
  roles:
901
901
  - id: role_UkLWZg9DAJ
@@ -2546,7 +2546,7 @@ paths:
2546
2546
  created_by_type:
2547
2547
  created_by_label:
2548
2548
  - id: key_EfhxLZ9ck8
2549
- name: API key 13
2549
+ name: API key 14
2550
2550
  key_type: secret
2551
2551
  token_prefix: sk_vihKVmP6r
2552
2552
  scopes:
@@ -2869,7 +2869,7 @@ paths:
2869
2869
  application/json:
2870
2870
  example:
2871
2871
  id: key_EfhxLZ9ck8
2872
- name: API key 19
2872
+ name: API key 20
2873
2873
  key_type: secret
2874
2874
  token_prefix: sk_L5LVfygvH
2875
2875
  scopes:
@@ -3916,6 +3916,7 @@ paths:
3916
3916
  summary: Reposition a category product
3917
3917
  tags:
3918
3918
  - Categories
3919
+ operationId: categories_reposition_product
3919
3920
  security:
3920
3921
  - api_key: []
3921
3922
  bearer_auth: []
@@ -4206,8 +4207,8 @@ paths:
4206
4207
  default: true
4207
4208
  storefront_access:
4208
4209
  guest_checkout:
4209
- created_at: '2026-01-15T12:00:00.000Z'
4210
- updated_at: '2026-01-15T12:00:00.000Z'
4210
+ created_at: '2026-11-11T12:45:25.454Z'
4211
+ updated_at: '2026-11-11T12:45:25.454Z'
4211
4212
  order_routing_strategy:
4212
4213
  stock_location_ids: []
4213
4214
  default_catalog_id:
@@ -4700,24 +4701,24 @@ paths:
4700
4701
  - id: orule_UkLWZg9DAJ
4701
4702
  position: 1
4702
4703
  active: true
4703
- created_at: '2026-01-15T12:00:00.000Z'
4704
- updated_at: '2026-01-15T12:00:00.000Z'
4704
+ created_at: '2026-11-11T12:45:25.458Z'
4705
+ updated_at: '2026-11-11T12:45:25.458Z'
4705
4706
  type: preferred_location
4706
4707
  channel_id: ch_UkLWZg9DAJ
4707
4708
  preferences: {}
4708
4709
  - id: orule_gbHJdmfrXB
4709
4710
  position: 2
4710
4711
  active: true
4711
- created_at: '2026-01-15T12:00:00.000Z'
4712
- updated_at: '2026-01-15T12:00:00.000Z'
4712
+ created_at: '2026-11-11T12:45:25.461Z'
4713
+ updated_at: '2026-11-11T12:45:25.461Z'
4713
4714
  type: minimize_splits
4714
4715
  channel_id: ch_UkLWZg9DAJ
4715
4716
  preferences: {}
4716
4717
  - id: orule_EfhxLZ9ck8
4717
4718
  position: 3
4718
4719
  active: true
4719
- created_at: '2026-01-15T12:00:00.000Z'
4720
- updated_at: '2026-01-15T12:00:00.000Z'
4720
+ created_at: '2026-11-11T12:45:25.464Z'
4721
+ updated_at: '2026-11-11T12:45:25.464Z'
4721
4722
  type: default_location
4722
4723
  channel_id: ch_UkLWZg9DAJ
4723
4724
  preferences: {}
@@ -4860,7 +4861,7 @@ paths:
4860
4861
  id: orule_UkLWZg9DAJ
4861
4862
  position: 2
4862
4863
  active: false
4863
- created_at: '2026-01-15T12:00:00.000Z'
4864
+ created_at: '2026-11-11T12:45:25.458Z'
4864
4865
  updated_at: '2026-01-15T12:00:00.000Z'
4865
4866
  type: preferred_location
4866
4867
  channel_id: ch_UkLWZg9DAJ
@@ -6084,6 +6085,9 @@ paths:
6084
6085
  summary: Erase a customer's personal data
6085
6086
  tags:
6086
6087
  - Customers
6088
+ x-spree-agent: false
6089
+ x-spree-agent-reason: Irreversible erasure of a person's data under GDPR Art.
6090
+ 17, which is not something to offer a model behind one confirmation prompt.
6087
6091
  security:
6088
6092
  - api_key: []
6089
6093
  bearer_auth: []
@@ -6620,7 +6624,7 @@ paths:
6620
6624
  first_name: John
6621
6625
  last_name: Doe
6622
6626
  full_name: John Doe
6623
- address1: 27 Lovely Street
6627
+ address1: 29 Lovely Street
6624
6628
  address2: Northwest
6625
6629
  postal_code: '10118'
6626
6630
  city: New York
@@ -6811,7 +6815,7 @@ paths:
6811
6815
  first_name: John
6812
6816
  last_name: Doe
6813
6817
  full_name: John Doe
6814
- address1: 29 Lovely Street
6818
+ address1: 31 Lovely Street
6815
6819
  address2: Northwest
6816
6820
  postal_code: '10118'
6817
6821
  city: Manhattan
@@ -7701,6 +7705,94 @@ paths:
7701
7705
  schema:
7702
7706
  "$ref": "#/components/schemas/TaxIdentifierUpdateParams"
7703
7707
  required: true
7708
+ "/api/v3/admin/customers/{customer_id}/tax_identifiers/{id}/validate":
7709
+ parameters:
7710
+ - name: x-spree-api-key
7711
+ in: header
7712
+ required: true
7713
+ schema:
7714
+ type: string
7715
+ - name: Authorization
7716
+ in: header
7717
+ required: true
7718
+ schema:
7719
+ type: string
7720
+ - name: customer_id
7721
+ in: path
7722
+ required: true
7723
+ schema:
7724
+ type: string
7725
+ - name: id
7726
+ in: path
7727
+ required: true
7728
+ schema:
7729
+ type: string
7730
+ post:
7731
+ summary: Re-check a customer tax registration
7732
+ tags:
7733
+ - Customers
7734
+ x-codeSamples:
7735
+ - lang: javascript
7736
+ label: Spree Admin SDK
7737
+ source: |-
7738
+ import { createAdminClient } from '@spree/admin-sdk'
7739
+
7740
+ const client = createAdminClient({
7741
+ baseUrl: 'https://your-store.com',
7742
+ secretKey: 'sk_xxx',
7743
+ })
7744
+
7745
+ const registration = await client.customers.taxIdentifiers.validate(
7746
+ 'cust_UkLWZg9DAJ',
7747
+ 'txi_UkLWZg9DAJ',
7748
+ )
7749
+ - lang: bash
7750
+ label: Spree CLI
7751
+ source: spree api post /customers/{customer_id}/tax_identifiers/{id}/validate
7752
+ -d '{ ... }'
7753
+ operationId: customer_tax_identifiers_validate
7754
+ security:
7755
+ - api_key: []
7756
+ bearer_auth: []
7757
+ description: |-
7758
+ Asks the registry again. Manual because a registry answers only "valid now" — a number verified
7759
+ last year may have been deregistered since — and because a check that came back unavailable
7760
+ cannot otherwise be retried without editing the number.
7761
+
7762
+
7763
+ **Required scope:** `write_customers` (for API-key authentication).
7764
+ responses:
7765
+ '202':
7766
+ description: registry check queued
7767
+ content:
7768
+ application/json:
7769
+ example:
7770
+ id: txi_UkLWZg9DAJ
7771
+ kind: eu_vat
7772
+ value: DE100000032
7773
+ validation_status: pending
7774
+ validation_evidence:
7775
+ source:
7776
+ validated_at:
7777
+ created_at: '2026-01-15T12:00:00.000Z'
7778
+ updated_at: '2026-01-15T12:00:00.000Z'
7779
+ validatable: true
7780
+ customer_id: cust_UkLWZg9DAJ
7781
+ cart_id:
7782
+ order_id:
7783
+ schema:
7784
+ "$ref": "#/components/schemas/TaxIdentifier"
7785
+ '422':
7786
+ description: no validator installed for this kind
7787
+ content:
7788
+ application/json:
7789
+ example:
7790
+ error:
7791
+ code: tax_id_not_validatable
7792
+ message: No registry validator is installed for tax identifier kind
7793
+ 'eu_vat'
7794
+ schema:
7795
+ "$ref": "#/components/schemas/ErrorResponse"
7704
7796
  "/api/v3/admin/customers":
7705
7797
  get:
7706
7798
  summary: List customers
@@ -9467,11 +9559,6 @@ paths:
9467
9559
  const { sent_to } = await client.emailTemplates.sendTest('spree.order_mailer.confirm_email', {
9468
9560
  body: '<mj-section><mj-column><mj-text>Thanks, {{ order.customer_name }}!</mj-text></mj-column></mj-section>',
9469
9561
  })
9470
- - lang: bash
9471
- label: Spree CLI
9472
- source: spree api post /email_templates/{email_template_id}/test_email -d
9473
- '{"body":"<mj-section><mj-column><mj-text>Thanks, {{ order.customer_name
9474
- }}!</mj-text></mj-column></mj-section>"}'
9475
9562
  parameters:
9476
9563
  - name: x-spree-api-key
9477
9564
  in: header
@@ -10229,7 +10316,7 @@ paths:
10229
10316
  content:
10230
10317
  application/json:
10231
10318
  example:
10232
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--aacde269a0019661ac951ab66e97e4338f76c0e3
10319
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--5cf7f6bc12adaf5ef31072ed4b5eb4c1732ca992
10233
10320
  filename: products.csv
10234
10321
  content_type: text/csv
10235
10322
  byte_size: 48213
@@ -10237,7 +10324,7 @@ paths:
10237
10324
  expires_at: '2026-01-16T12:00:00.000Z'
10238
10325
  upload:
10239
10326
  method: PUT
10240
- url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiJxcmZsMnNod3YwYmR4cWF3ZWFocDZvYjhlYzh5IiwiY29udGVudF90eXBlIjoidGV4dC9jc3YiLCJjb250ZW50X2xlbmd0aCI6NDgyMTMsImNoZWNrc3VtIjoiaGdKTXJSNkRFQjJYTloxelVRVVJWZz09Iiwic2VydmljZV9uYW1lIjoidGVzdCJ9LCJleHAiOiIyMDI2LTAxLTE1VDEyOjA1OjAwLjAwMFoiLCJwdXIiOiJibG9iX3Rva2VuIn19--c3b32cb7c8370747da83a558fab123e28b943128
10327
+ url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiJxcmZsMnNod3YwYmR4cWF3ZWFocDZvYjhlYzh5IiwiY29udGVudF90eXBlIjoidGV4dC9jc3YiLCJjb250ZW50X2xlbmd0aCI6NDgyMTMsImNoZWNrc3VtIjoiaGdKTXJSNkRFQjJYTloxelVRVVJWZz09Iiwic2VydmljZV9uYW1lIjoidGVzdCJ9LCJleHAiOiIyMDI2LTAxLTE1VDEyOjA1OjAwLjAwMFoiLCJwdXIiOiJibG9iX3Rva2VuIn19--58771025051fac3b85fe97de3d0af5379be8ff83
10241
10328
  headers:
10242
10329
  Content-Type: text/csv
10243
10330
  schema:
@@ -14539,8 +14626,8 @@ paths:
14539
14626
  - US
14540
14627
  supported_locales:
14541
14628
  - en
14542
- created_at: '2026-01-15T12:00:00.000Z'
14543
- updated_at: '2026-01-15T12:00:00.000Z'
14629
+ created_at: '2026-11-11T12:45:25.448Z'
14630
+ updated_at: '2026-11-11T12:45:25.448Z'
14544
14631
  tax_provider:
14545
14632
  - id: mkt_gbHJdmfrXB
14546
14633
  name: EU
@@ -15154,7 +15241,7 @@ paths:
15154
15241
  example:
15155
15242
  data:
15156
15243
  - id: opt_UkLWZg9DAJ
15157
- name: foo-size-14
15244
+ name: foo-size-16
15158
15245
  label: Size
15159
15246
  position: 1
15160
15247
  kind: dropdown
@@ -15350,7 +15437,7 @@ paths:
15350
15437
  application/json:
15351
15438
  example:
15352
15439
  id: opt_UkLWZg9DAJ
15353
- name: foo-size-18
15440
+ name: foo-size-20
15354
15441
  label: Size
15355
15442
  position: 1
15356
15443
  kind: dropdown
@@ -15424,7 +15511,7 @@ paths:
15424
15511
  application/json:
15425
15512
  example:
15426
15513
  id: opt_UkLWZg9DAJ
15427
- name: foo-size-20
15514
+ name: foo-size-22
15428
15515
  label: Updated Label
15429
15516
  position: 1
15430
15517
  kind: dropdown
@@ -15999,6 +16086,81 @@ paths:
15999
16086
  schema:
16000
16087
  "$ref": "#/components/schemas/ClaimUpdateParams"
16001
16088
  required: true
16089
+ "/api/v3/admin/orders/{order_id}/claims/{id}/approve":
16090
+ patch:
16091
+ summary: Approve a claim
16092
+ tags:
16093
+ - Orders
16094
+ x-codeSamples:
16095
+ - lang: javascript
16096
+ label: Spree Admin SDK
16097
+ source: |-
16098
+ import { createAdminClient } from '@spree/admin-sdk'
16099
+
16100
+ const client = createAdminClient({
16101
+ baseUrl: 'https://your-store.com',
16102
+ secretKey: 'sk_xxx',
16103
+ })
16104
+
16105
+ const claim = await client.orders.claims.approve('or_UkLWZg9DAJ', 'claim_UkLWZg9DAJ')
16106
+ - lang: bash
16107
+ label: Spree CLI
16108
+ source: spree api patch /orders/{order_id}/claims/{id}/approve -d '{ ... }'
16109
+ security:
16110
+ - api_key: []
16111
+ bearer_auth: []
16112
+ description: |-
16113
+ Accepts an open claim, the step before resolving it with a refund, a replacement or both. Only an open claim can be approved; deny it to turn it down.
16114
+
16115
+ **Required scope:** `write_orders` (for API-key authentication).
16116
+ parameters:
16117
+ - name: x-spree-api-key
16118
+ in: header
16119
+ required: true
16120
+ schema:
16121
+ type: string
16122
+ - name: Authorization
16123
+ in: header
16124
+ required: true
16125
+ schema:
16126
+ type: string
16127
+ - name: order_id
16128
+ in: path
16129
+ required: true
16130
+ description: Order prefixed ID
16131
+ schema:
16132
+ type: string
16133
+ - name: id
16134
+ in: path
16135
+ required: true
16136
+ description: Claim prefixed ID
16137
+ schema:
16138
+ type: string
16139
+ responses:
16140
+ '200':
16141
+ description: claim approved
16142
+ content:
16143
+ application/json:
16144
+ example:
16145
+ id: claim_UkLWZg9DAJ
16146
+ number: CLM1001
16147
+ status: approved
16148
+ resolution:
16149
+ order_id: or_UkLWZg9DAJ
16150
+ reason_id:
16151
+ refund_total: '10.00'
16152
+ approved_at: '2026-01-15T12:00:00Z'
16153
+ resolved_at:
16154
+ denied_at:
16155
+ canceled_at:
16156
+ memo: Arrived with a cracked screen
16157
+ metadata: {}
16158
+ created_at: '2026-01-15T12:00:00.000Z'
16159
+ updated_at: '2026-01-15T12:00:00.000Z'
16160
+ created_by_id: adm_UkLWZg9DAJ
16161
+ created_by_type: admin_user
16162
+ schema:
16163
+ "$ref": "#/components/schemas/Claim"
16002
16164
  "/api/v3/admin/orders/{order_id}/claims/{id}/resolve":
16003
16165
  patch:
16004
16166
  summary: Resolve a claim
@@ -16510,6 +16672,149 @@ paths:
16510
16672
  required:
16511
16673
  - data
16512
16674
  - meta
16675
+ "/api/v3/admin/digital_links/{id}":
16676
+ parameters:
16677
+ - name: id
16678
+ in: path
16679
+ required: true
16680
+ description: Digital link ID
16681
+ schema:
16682
+ type: string
16683
+ get:
16684
+ summary: Get a digital link
16685
+ tags:
16686
+ - Orders
16687
+ security:
16688
+ - api_key: []
16689
+ bearer_auth: []
16690
+ description: |-
16691
+ Returns a single download link with its download count and expiry.
16692
+
16693
+ **Required scope:** `read_orders` (for API-key authentication).
16694
+ x-codeSamples:
16695
+ - lang: javascript
16696
+ label: Spree Admin SDK
16697
+ source: |-
16698
+ import { createAdminClient } from '@spree/admin-sdk'
16699
+
16700
+ const client = createAdminClient({
16701
+ baseUrl: 'https://your-store.com',
16702
+ secretKey: 'sk_xxx',
16703
+ })
16704
+
16705
+ const digitalLink = await client.digitalLinks.retrieve('dl_xxx')
16706
+ - lang: bash
16707
+ label: Spree CLI
16708
+ source: spree api get /digital_links/{id}
16709
+ parameters:
16710
+ - name: x-spree-api-key
16711
+ in: header
16712
+ required: true
16713
+ schema:
16714
+ type: string
16715
+ - name: Authorization
16716
+ in: header
16717
+ required: true
16718
+ description: Bearer token for admin authentication
16719
+ schema:
16720
+ type: string
16721
+ responses:
16722
+ '200':
16723
+ description: digital link found
16724
+ content:
16725
+ application/json:
16726
+ example:
16727
+ id: dl_UkLWZg9DAJ
16728
+ access_counter: 0
16729
+ filename: thinking-cat.jpg
16730
+ content_type: image/jpeg
16731
+ download_url: "/api/v3/store/digital_links/ks9F16gjTLQPCzwFDpj2ifrJ"
16732
+ expires_at: '2026-01-22T12:00:00Z'
16733
+ authorizable: true
16734
+ expired: false
16735
+ access_limit_exceeded: false
16736
+ created_at: '2026-01-15T12:00:00.000Z'
16737
+ updated_at: '2026-01-15T12:00:00.000Z'
16738
+ schema:
16739
+ "$ref": "#/components/schemas/DigitalLink"
16740
+ '404':
16741
+ description: digital link not found
16742
+ content:
16743
+ application/json:
16744
+ example:
16745
+ error:
16746
+ code: record_not_found
16747
+ message: Digital link not found
16748
+ schema:
16749
+ "$ref": "#/components/schemas/ErrorResponse"
16750
+ "/api/v3/admin/digital_links/{id}/reset":
16751
+ parameters:
16752
+ - name: id
16753
+ in: path
16754
+ required: true
16755
+ description: Digital link ID
16756
+ schema:
16757
+ type: string
16758
+ patch:
16759
+ summary: Reset a digital link
16760
+ tags:
16761
+ - Orders
16762
+ x-codeSamples:
16763
+ - lang: javascript
16764
+ label: Spree Admin SDK
16765
+ source: |-
16766
+ import { createAdminClient } from '@spree/admin-sdk'
16767
+
16768
+ const client = createAdminClient({
16769
+ baseUrl: 'https://your-store.com',
16770
+ secretKey: 'sk_xxx',
16771
+ })
16772
+
16773
+ const digitalLink = await client.digitalLinks.reset('dl_xxx')
16774
+ - lang: bash
16775
+ label: Spree CLI
16776
+ source: spree api patch /digital_links/{id}/reset -d '{ ... }'
16777
+ security:
16778
+ - api_key: []
16779
+ bearer_auth: []
16780
+ description: |-
16781
+ Gives the customer their full download allowance back and restarts the
16782
+ link's expiry clock. Use it when a download failed, or the file was
16783
+ replaced after the customer had used up their attempts.
16784
+
16785
+
16786
+ **Required scope:** `write_orders` (for API-key authentication).
16787
+ parameters:
16788
+ - name: x-spree-api-key
16789
+ in: header
16790
+ required: true
16791
+ schema:
16792
+ type: string
16793
+ - name: Authorization
16794
+ in: header
16795
+ required: true
16796
+ description: Bearer token for admin authentication
16797
+ schema:
16798
+ type: string
16799
+ responses:
16800
+ '200':
16801
+ description: digital link reset
16802
+ content:
16803
+ application/json:
16804
+ example:
16805
+ id: dl_UkLWZg9DAJ
16806
+ access_counter: 0
16807
+ filename: thinking-cat.jpg
16808
+ content_type: image/jpeg
16809
+ download_url: "/api/v3/store/digital_links/tPqch4JvZidezkNn2YoqxDLc"
16810
+ expires_at: '2026-01-22T12:00:00Z'
16811
+ authorizable: true
16812
+ expired: false
16813
+ access_limit_exceeded: false
16814
+ created_at: '2026-01-15T12:00:00.000Z'
16815
+ updated_at: '2026-01-15T12:00:00.000Z'
16816
+ schema:
16817
+ "$ref": "#/components/schemas/DigitalLink"
16513
16818
  "/api/v3/admin/exchanges":
16514
16819
  get:
16515
16820
  summary: List exchanges
@@ -16999,6 +17304,92 @@ paths:
16999
17304
  schema:
17000
17305
  "$ref": "#/components/schemas/ExchangeUpdateParams"
17001
17306
  required: true
17307
+ "/api/v3/admin/orders/{order_id}/exchanges/{id}/approve":
17308
+ patch:
17309
+ summary: Approve an exchange
17310
+ tags:
17311
+ - Orders
17312
+ x-codeSamples:
17313
+ - lang: javascript
17314
+ label: Spree Admin SDK
17315
+ source: |-
17316
+ import { createAdminClient } from '@spree/admin-sdk'
17317
+
17318
+ const client = createAdminClient({
17319
+ baseUrl: 'https://your-store.com',
17320
+ secretKey: 'sk_xxx',
17321
+ })
17322
+
17323
+ const exchange = await client.orders.exchanges.approve('or_UkLWZg9DAJ', 'exch_UkLWZg9DAJ')
17324
+ - lang: bash
17325
+ label: Spree CLI
17326
+ source: spree api patch /orders/{order_id}/exchanges/{id}/approve -d '{ ...
17327
+ }'
17328
+ security:
17329
+ - api_key: []
17330
+ bearer_auth: []
17331
+ description: |-
17332
+ Accepts a requested exchange so the customer can send the goods back for their replacement. Only a requested exchange can be approved; receive it once the goods arrive.
17333
+
17334
+ **Required scope:** `write_orders` (for API-key authentication).
17335
+ parameters:
17336
+ - name: x-spree-api-key
17337
+ in: header
17338
+ required: true
17339
+ schema:
17340
+ type: string
17341
+ - name: Authorization
17342
+ in: header
17343
+ required: true
17344
+ schema:
17345
+ type: string
17346
+ - name: order_id
17347
+ in: path
17348
+ required: true
17349
+ description: Order prefixed ID
17350
+ schema:
17351
+ type: string
17352
+ - name: id
17353
+ in: path
17354
+ required: true
17355
+ description: Exchange prefixed ID
17356
+ schema:
17357
+ type: string
17358
+ responses:
17359
+ '200':
17360
+ description: exchange approved
17361
+ content:
17362
+ application/json:
17363
+ example:
17364
+ id: exch_UkLWZg9DAJ
17365
+ number: EX1001
17366
+ status: approved
17367
+ order_id: or_UkLWZg9DAJ
17368
+ reason_id:
17369
+ price_difference: '9.99'
17370
+ approved_at: '2026-01-15T12:00:00Z'
17371
+ received_at:
17372
+ fulfilled_at:
17373
+ canceled_at:
17374
+ memo: Wrong size
17375
+ metadata: {}
17376
+ created_at: '2026-01-15T12:00:00.000Z'
17377
+ updated_at: '2026-01-15T12:00:00.000Z'
17378
+ stock_location_id: sloc_UkLWZg9DAJ
17379
+ created_by_id: adm_UkLWZg9DAJ
17380
+ created_by_type: admin_user
17381
+ schema:
17382
+ "$ref": "#/components/schemas/Exchange"
17383
+ '422':
17384
+ description: the exchange is not requested
17385
+ content:
17386
+ application/json:
17387
+ example:
17388
+ error:
17389
+ code: processing_error
17390
+ message: Not requested
17391
+ schema:
17392
+ "$ref": "#/components/schemas/ErrorResponse"
17002
17393
  "/api/v3/admin/orders/{order_id}/exchanges/{id}/receive":
17003
17394
  patch:
17004
17395
  summary: Receive an exchange
@@ -18173,8 +18564,8 @@ paths:
18173
18564
  - US
18174
18565
  supported_locales:
18175
18566
  - en
18176
- created_at: '2026-01-15T12:00:00.000Z'
18177
- updated_at: '2026-01-15T12:00:00.000Z'
18567
+ created_at: '2026-11-11T12:45:25.448Z'
18568
+ updated_at: '2026-11-11T12:45:25.448Z'
18178
18569
  tax_provider:
18179
18570
  external_references: {}
18180
18571
  status: draft
@@ -18508,8 +18899,8 @@ paths:
18508
18899
  preorder_ships_at:
18509
18900
  quantity: 2
18510
18901
  currency: USD
18511
- name: Product 779180
18512
- slug: product-779180
18902
+ name: Product 849180
18903
+ slug: product-849180
18513
18904
  options_text: 'Size: S'
18514
18905
  price: '10.00'
18515
18906
  total: '20.00'
@@ -18524,11 +18915,11 @@ paths:
18524
18915
  option_values:
18525
18916
  - id: optval_UkLWZg9DAJ
18526
18917
  option_type_id: opt_UkLWZg9DAJ
18527
- name: size-13
18918
+ name: size-15
18528
18919
  label: S
18529
18920
  position: 1
18530
18921
  color_code:
18531
- option_type_name: foo-size-23
18922
+ option_type_name: foo-size-25
18532
18923
  option_type_label: Size
18533
18924
  image_url:
18534
18925
  metadata: {}
@@ -18547,6 +18938,7 @@ paths:
18547
18938
  catalog_name:
18548
18939
  cost_price: '17.00'
18549
18940
  tax_category_id: taxcat_UkLWZg9DAJ
18941
+ product_id: prod_UkLWZg9DAJ
18550
18942
  meta:
18551
18943
  page: 1
18552
18944
  limit: 25
@@ -18617,8 +19009,8 @@ paths:
18617
19009
  preorder_ships_at:
18618
19010
  quantity: 3
18619
19011
  currency: USD
18620
- name: Product 7999
18621
- slug: product-7999
19012
+ name: Product 8699
19013
+ slug: product-8699
18622
19014
  options_text: 'Size: S'
18623
19015
  price: '19.99'
18624
19016
  total: '59.97'
@@ -18633,11 +19025,11 @@ paths:
18633
19025
  option_values:
18634
19026
  - id: optval_gbHJdmfrXB
18635
19027
  option_type_id: opt_gbHJdmfrXB
18636
- name: size-15
19028
+ name: size-17
18637
19029
  label: S
18638
19030
  position: 1
18639
19031
  color_code:
18640
- option_type_name: foo-size-25
19032
+ option_type_name: foo-size-27
18641
19033
  option_type_label: Size
18642
19034
  image_url:
18643
19035
  metadata: {}
@@ -18656,6 +19048,7 @@ paths:
18656
19048
  catalog_name:
18657
19049
  cost_price: '17.00'
18658
19050
  tax_category_id: taxcat_UkLWZg9DAJ
19051
+ product_id: prod_gbHJdmfrXB
18659
19052
  requestBody:
18660
19053
  content:
18661
19054
  application/json:
@@ -18740,8 +19133,8 @@ paths:
18740
19133
  preorder_ships_at:
18741
19134
  quantity: 2
18742
19135
  currency: USD
18743
- name: Product 802714
18744
- slug: product-802714
19136
+ name: Product 872714
19137
+ slug: product-872714
18745
19138
  options_text: 'Size: S'
18746
19139
  price: '10.00'
18747
19140
  total: '20.00'
@@ -18756,11 +19149,11 @@ paths:
18756
19149
  option_values:
18757
19150
  - id: optval_UkLWZg9DAJ
18758
19151
  option_type_id: opt_UkLWZg9DAJ
18759
- name: size-16
19152
+ name: size-18
18760
19153
  label: S
18761
19154
  position: 1
18762
19155
  color_code:
18763
- option_type_name: foo-size-26
19156
+ option_type_name: foo-size-28
18764
19157
  option_type_label: Size
18765
19158
  image_url:
18766
19159
  metadata: {}
@@ -18779,6 +19172,7 @@ paths:
18779
19172
  catalog_name:
18780
19173
  cost_price: '17.00'
18781
19174
  tax_category_id: taxcat_UkLWZg9DAJ
19175
+ product_id: prod_UkLWZg9DAJ
18782
19176
  patch:
18783
19177
  summary: Update an item
18784
19178
  tags:
@@ -18844,8 +19238,8 @@ paths:
18844
19238
  preorder_ships_at:
18845
19239
  quantity: 5
18846
19240
  currency: USD
18847
- name: Product 819758
18848
- slug: product-819758
19241
+ name: Product 889758
19242
+ slug: product-889758
18849
19243
  options_text: 'Size: S'
18850
19244
  price: '19.99'
18851
19245
  total: '99.95'
@@ -18860,11 +19254,11 @@ paths:
18860
19254
  option_values:
18861
19255
  - id: optval_UkLWZg9DAJ
18862
19256
  option_type_id: opt_UkLWZg9DAJ
18863
- name: size-17
19257
+ name: size-19
18864
19258
  label: S
18865
19259
  position: 1
18866
19260
  color_code:
18867
- option_type_name: foo-size-27
19261
+ option_type_name: foo-size-29
18868
19262
  option_type_label: Size
18869
19263
  image_url:
18870
19264
  metadata: {}
@@ -18883,6 +19277,7 @@ paths:
18883
19277
  catalog_name:
18884
19278
  cost_price: '17.00'
18885
19279
  tax_category_id: taxcat_UkLWZg9DAJ
19280
+ product_id: prod_UkLWZg9DAJ
18886
19281
  requestBody:
18887
19282
  content:
18888
19283
  application/json:
@@ -19042,8 +19437,8 @@ paths:
19042
19437
  - US
19043
19438
  supported_locales:
19044
19439
  - en
19045
- created_at: '2026-01-15T12:00:00.000Z'
19046
- updated_at: '2026-01-15T12:00:00.000Z'
19440
+ created_at: '2026-11-11T12:45:25.448Z'
19441
+ updated_at: '2026-11-11T12:45:25.448Z'
19047
19442
  tax_provider:
19048
19443
  external_references: {}
19049
19444
  status: draft
@@ -19395,8 +19790,8 @@ paths:
19395
19790
  - US
19396
19791
  supported_locales:
19397
19792
  - en
19398
- created_at: '2026-01-15T12:00:00.000Z'
19399
- updated_at: '2026-01-15T12:00:00.000Z'
19793
+ created_at: '2026-11-11T12:45:25.448Z'
19794
+ updated_at: '2026-11-11T12:45:25.448Z'
19400
19795
  tax_provider:
19401
19796
  external_references: {}
19402
19797
  status: draft
@@ -19621,8 +20016,8 @@ paths:
19621
20016
  - US
19622
20017
  supported_locales:
19623
20018
  - en
19624
- created_at: '2026-01-15T12:00:00.000Z'
19625
- updated_at: '2026-01-15T12:00:00.000Z'
20019
+ created_at: '2026-11-11T12:45:25.448Z'
20020
+ updated_at: '2026-11-11T12:45:25.448Z'
19626
20021
  tax_provider:
19627
20022
  external_references: {}
19628
20023
  status: draft
@@ -19778,8 +20173,8 @@ paths:
19778
20173
  - US
19779
20174
  supported_locales:
19780
20175
  - en
19781
- created_at: '2026-01-15T12:00:00.000Z'
19782
- updated_at: '2026-01-15T12:00:00.000Z'
20176
+ created_at: '2026-11-11T12:45:25.448Z'
20177
+ updated_at: '2026-11-11T12:45:25.448Z'
19783
20178
  tax_provider:
19784
20179
  external_references: {}
19785
20180
  status: draft
@@ -19925,8 +20320,8 @@ paths:
19925
20320
  - US
19926
20321
  supported_locales:
19927
20322
  - en
19928
- created_at: '2026-01-15T12:00:00.000Z'
19929
- updated_at: '2026-01-15T12:00:00.000Z'
20323
+ created_at: '2026-11-11T12:45:25.448Z'
20324
+ updated_at: '2026-11-11T12:45:25.448Z'
19930
20325
  tax_provider:
19931
20326
  external_references: {}
19932
20327
  status: draft
@@ -20124,8 +20519,8 @@ paths:
20124
20519
  - US
20125
20520
  supported_locales:
20126
20521
  - en
20127
- created_at: '2026-01-15T12:00:00.000Z'
20128
- updated_at: '2026-01-15T12:00:00.000Z'
20522
+ created_at: '2026-11-11T12:45:25.448Z'
20523
+ updated_at: '2026-11-11T12:45:25.448Z'
20129
20524
  tax_provider:
20130
20525
  external_references: {}
20131
20526
  status: placed
@@ -20303,8 +20698,8 @@ paths:
20303
20698
  - US
20304
20699
  supported_locales:
20305
20700
  - en
20306
- created_at: '2026-01-15T12:00:00.000Z'
20307
- updated_at: '2026-01-15T12:00:00.000Z'
20701
+ created_at: '2026-11-11T12:45:25.448Z'
20702
+ updated_at: '2026-11-11T12:45:25.448Z'
20308
20703
  tax_provider:
20309
20704
  external_references: {}
20310
20705
  status: canceled
@@ -20443,8 +20838,8 @@ paths:
20443
20838
  - US
20444
20839
  supported_locales:
20445
20840
  - en
20446
- created_at: '2026-01-15T12:00:00.000Z'
20447
- updated_at: '2026-01-15T12:00:00.000Z'
20841
+ created_at: '2026-11-11T12:45:25.448Z'
20842
+ updated_at: '2026-11-11T12:45:25.448Z'
20448
20843
  tax_provider:
20449
20844
  external_references: {}
20450
20845
  status: placed
@@ -20577,8 +20972,147 @@ paths:
20577
20972
  - US
20578
20973
  supported_locales:
20579
20974
  - en
20580
- created_at: '2026-01-15T12:00:00.000Z'
20581
- updated_at: '2026-01-15T12:00:00.000Z'
20975
+ created_at: '2026-11-11T12:45:25.448Z'
20976
+ updated_at: '2026-11-11T12:45:25.448Z'
20977
+ tax_provider:
20978
+ external_references: {}
20979
+ status: placed
20980
+ last_ip_address:
20981
+ considered_risky: false
20982
+ confirmation_delivered: false
20983
+ store_owner_notification_delivered:
20984
+ metadata: {}
20985
+ cancel_note:
20986
+ canceled_at:
20987
+ approved_at:
20988
+ created_at: '2026-01-15T12:00:00.000Z'
20989
+ updated_at: '2026-01-15T12:00:00.000Z'
20990
+ payment_total: '0.00'
20991
+ commission_amount_total: '0.00'
20992
+ commission_tax_total: '0.00'
20993
+ commission_total: '0.00'
20994
+ preferred_stock_location_id:
20995
+ po_document_url:
20996
+ seller_id:
20997
+ order_group_id:
20998
+ tags: []
20999
+ internal_note:
21000
+ internal_note_html:
21001
+ approver_id:
21002
+ approver_type:
21003
+ canceler_id:
21004
+ canceler_type:
21005
+ created_by_id:
21006
+ created_by_type:
21007
+ cancel_reason_id:
21008
+ cancel_reason_name:
21009
+ customer_id: cust_UkLWZg9DAJ
21010
+ freight_summary:
21011
+ "/api/v3/admin/orders/{id}/resend_digital_links":
21012
+ post:
21013
+ summary: Resend digital download links
21014
+ tags:
21015
+ - Orders
21016
+ x-codeSamples:
21017
+ - lang: javascript
21018
+ label: Spree Admin SDK
21019
+ source: |-
21020
+ import { createAdminClient } from '@spree/admin-sdk'
21021
+
21022
+ const client = createAdminClient({
21023
+ baseUrl: 'https://your-store.com',
21024
+ secretKey: 'sk_xxx',
21025
+ })
21026
+
21027
+ await client.orders.resendDigitalLinks('or_UkLWZg9DAJ')
21028
+ - lang: bash
21029
+ label: Spree CLI
21030
+ source: spree api post /orders/{id}/resend_digital_links -d '{ ... }'
21031
+ security:
21032
+ - api_key: []
21033
+ bearer_auth: []
21034
+ description: |-
21035
+ Emails the customer their download links for the digital products on
21036
+ this order again. Nothing is sent when the order has no digital links or
21037
+ the store does not send transactional emails. Use it when the original
21038
+ email was lost; to restore used-up downloads or an expired link, reset
21039
+ the digital link instead.
21040
+
21041
+
21042
+ **Required scope:** `write_orders` (for API-key authentication).
21043
+ parameters:
21044
+ - name: x-spree-api-key
21045
+ in: header
21046
+ required: true
21047
+ schema:
21048
+ type: string
21049
+ - name: Authorization
21050
+ in: header
21051
+ required: true
21052
+ description: Bearer token for admin authentication
21053
+ schema:
21054
+ type: string
21055
+ - name: id
21056
+ in: path
21057
+ required: true
21058
+ description: Order ID
21059
+ schema:
21060
+ type: string
21061
+ responses:
21062
+ '200':
21063
+ description: digital links resent
21064
+ content:
21065
+ application/json:
21066
+ example:
21067
+ id: or_UkLWZg9DAJ
21068
+ market_id: mkt_UkLWZg9DAJ
21069
+ withdrawal_period_ends_at:
21070
+ within_withdrawal_period: true
21071
+ shipping_eq_billing_address: false
21072
+ cart_id:
21073
+ channel_id: ch_UkLWZg9DAJ
21074
+ company_id:
21075
+ company_name:
21076
+ po_document_filename:
21077
+ po_document_byte_size:
21078
+ number: R1001
21079
+ email: ivana@schmidtfeest.com
21080
+ customer_note:
21081
+ po_number:
21082
+ currency: USD
21083
+ locale: en
21084
+ total_quantity: 1
21085
+ coupon_code:
21086
+ fulfillment_status:
21087
+ payment_status:
21088
+ completed_at: '2026-01-15T12:00:00.000Z'
21089
+ item_total: '10.00'
21090
+ discount_total: '0.00'
21091
+ tax_total: '0.00'
21092
+ included_tax_total: '0.00'
21093
+ additional_tax_total: '0.00'
21094
+ delivery_total: '100.00'
21095
+ fee_total: '0.00'
21096
+ gift_card_total: '0.00'
21097
+ store_credit_total: '0.00'
21098
+ total: '110.00'
21099
+ amount_due: '110.00'
21100
+ covered_by_store_credit: false
21101
+ adjustment_total: '0.00'
21102
+ gift_card:
21103
+ market:
21104
+ id: mkt_UkLWZg9DAJ
21105
+ name: United States
21106
+ currency: USD
21107
+ default_locale: en
21108
+ tax_inclusive: false
21109
+ default: true
21110
+ country_codes:
21111
+ - US
21112
+ supported_locales:
21113
+ - en
21114
+ created_at: '2026-11-11T12:45:25.448Z'
21115
+ updated_at: '2026-11-11T12:45:25.448Z'
20582
21116
  tax_provider:
20583
21117
  external_references: {}
20584
21118
  status: placed
@@ -20613,6 +21147,8 @@ paths:
20613
21147
  cancel_reason_name:
20614
21148
  customer_id: cust_UkLWZg9DAJ
20615
21149
  freight_summary:
21150
+ schema:
21151
+ "$ref": "#/components/schemas/Order"
20616
21152
  "/api/v3/admin/returns":
20617
21153
  get:
20618
21154
  summary: List returns
@@ -21037,7 +21573,7 @@ paths:
21037
21573
  example:
21038
21574
  error:
21039
21575
  code: processing_error
21040
- message: Only 1 of Product 1792493 can be returned
21576
+ message: Only 1 of Product 2002493 can be returned
21041
21577
  schema:
21042
21578
  "$ref": "#/components/schemas/ErrorResponse"
21043
21579
  requestBody:
@@ -21138,18 +21674,11 @@ paths:
21138
21674
  schema:
21139
21675
  "$ref": "#/components/schemas/ReturnUpdateParams"
21140
21676
  required: true
21141
- "/api/v3/admin/orders/{order_id}/returns/{id}/receive":
21677
+ "/api/v3/admin/orders/{order_id}/returns/{id}/approve":
21142
21678
  patch:
21143
- summary: Receive a return
21679
+ summary: Approve a return
21144
21680
  tags:
21145
21681
  - Orders
21146
- security:
21147
- - api_key: []
21148
- bearer_auth: []
21149
- description: |-
21150
- Records what arrived on an approved return. Omit `items` to receive everything as requested and resellable; send rows for a partial or damaged receipt.
21151
-
21152
- **Required scope:** `write_orders` (for API-key authentication).
21153
21682
  x-codeSamples:
21154
21683
  - lang: javascript
21155
21684
  label: Spree Admin SDK
@@ -21161,13 +21690,18 @@ paths:
21161
21690
  secretKey: 'sk_xxx',
21162
21691
  })
21163
21692
 
21164
- // Omit `items` to receive everything as requested and resellable.
21165
- const orderReturn = await client.orders.returns.receive('or_UkLWZg9DAJ', 'ret_UkLWZg9DAJ', {
21166
- items: [{ return_line_item_id: 'rli_UkLWZg9DAJ', quantity: 1, resellable: false }],
21167
- })
21693
+ const orderReturn = await client.orders.returns.approve('or_UkLWZg9DAJ', 'ret_UkLWZg9DAJ')
21168
21694
  - lang: bash
21169
21695
  label: Spree CLI
21170
- source: spree api patch /orders/{order_id}/returns/{id}/receive -d '{"items":[{"return_line_item_id":"rli_UkLWZg9DAJ","quantity":1,"resellable":false}]}'
21696
+ source: spree api patch /orders/{order_id}/returns/{id}/approve -d '{ ...
21697
+ }'
21698
+ security:
21699
+ - api_key: []
21700
+ bearer_auth: []
21701
+ description: |-
21702
+ Accepts a requested return so the customer can send the goods back. Only a requested return can be approved; receive it once the goods arrive.
21703
+
21704
+ **Required scope:** `write_orders` (for API-key authentication).
21171
21705
  parameters:
21172
21706
  - name: x-spree-api-key
21173
21707
  in: header
@@ -21193,19 +21727,19 @@ paths:
21193
21727
  type: string
21194
21728
  responses:
21195
21729
  '200':
21196
- description: return received
21730
+ description: return approved
21197
21731
  content:
21198
21732
  application/json:
21199
21733
  example:
21200
21734
  id: ret_UkLWZg9DAJ
21201
21735
  number: RET1001
21202
- status: received
21736
+ status: approved
21203
21737
  order_id: or_UkLWZg9DAJ
21204
21738
  reason_id:
21205
21739
  refund_total: '10.00'
21206
21740
  refund_tax_total: '0.00'
21207
21741
  approved_at: '2026-01-15T12:00:00Z'
21208
- received_at: '2026-01-15T12:00:00Z'
21742
+ received_at:
21209
21743
  refunded_at:
21210
21744
  canceled_at:
21211
21745
  external_references: {}
@@ -21214,8 +21748,8 @@ paths:
21214
21748
  created_at: '2026-01-15T12:00:00.000Z'
21215
21749
  updated_at: '2026-01-15T12:00:00.000Z'
21216
21750
  stock_location_id: sloc_UkLWZg9DAJ
21217
- created_by_id:
21218
- created_by_type:
21751
+ created_by_id: adm_UkLWZg9DAJ
21752
+ created_by_type: admin_user
21219
21753
  refunded_total: '0.00'
21220
21754
  refundable_total: '10.00'
21221
21755
  documents: []
@@ -21223,23 +21757,28 @@ paths:
21223
21757
  deliveries: []
21224
21758
  schema:
21225
21759
  "$ref": "#/components/schemas/Return"
21226
- requestBody:
21227
- content:
21228
- application/json:
21229
- schema:
21230
- "$ref": "#/components/schemas/ReturnReceiveParams"
21231
- "/api/v3/admin/orders/{order_id}/returns/{id}/refund":
21760
+ '422':
21761
+ description: the return is not requested
21762
+ content:
21763
+ application/json:
21764
+ example:
21765
+ error:
21766
+ code: processing_error
21767
+ message: Not requested
21768
+ schema:
21769
+ "$ref": "#/components/schemas/ErrorResponse"
21770
+ "/api/v3/admin/orders/{order_id}/returns/{id}/receive":
21232
21771
  patch:
21233
- summary: Refund a return
21772
+ summary: Receive a return
21234
21773
  tags:
21235
21774
  - Orders
21236
21775
  security:
21237
21776
  - api_key: []
21238
21777
  bearer_auth: []
21239
21778
  description: |-
21240
- Pays the customer back for a received return, to store credit or through the original payment.
21779
+ Records what arrived on an approved return. Omit `items` to receive everything as requested and resellable; send rows for a partial or damaged receipt.
21241
21780
 
21242
- **Required scope:** `write_orders` and `write_refunds` (for API-key authentication).
21781
+ **Required scope:** `write_orders` (for API-key authentication).
21243
21782
  x-codeSamples:
21244
21783
  - lang: javascript
21245
21784
  label: Spree Admin SDK
@@ -21251,13 +21790,103 @@ paths:
21251
21790
  secretKey: 'sk_xxx',
21252
21791
  })
21253
21792
 
21254
- const orderReturn = await client.orders.returns.refund('or_UkLWZg9DAJ', 'ret_UkLWZg9DAJ', {
21255
- amount: '29.99',
21256
- refund_method: 'original_payment',
21793
+ // Omit `items` to receive everything as requested and resellable.
21794
+ const orderReturn = await client.orders.returns.receive('or_UkLWZg9DAJ', 'ret_UkLWZg9DAJ', {
21795
+ items: [{ return_line_item_id: 'rli_UkLWZg9DAJ', quantity: 1, resellable: false }],
21257
21796
  })
21258
21797
  - lang: bash
21259
21798
  label: Spree CLI
21260
- source: spree api patch /orders/{order_id}/returns/{id}/refund -d '{"amount":"29.99","refund_method":"original_payment"}'
21799
+ source: spree api patch /orders/{order_id}/returns/{id}/receive -d '{"items":[{"return_line_item_id":"rli_UkLWZg9DAJ","quantity":1,"resellable":false}]}'
21800
+ parameters:
21801
+ - name: x-spree-api-key
21802
+ in: header
21803
+ required: true
21804
+ schema:
21805
+ type: string
21806
+ - name: Authorization
21807
+ in: header
21808
+ required: true
21809
+ schema:
21810
+ type: string
21811
+ - name: order_id
21812
+ in: path
21813
+ required: true
21814
+ description: Order prefixed ID
21815
+ schema:
21816
+ type: string
21817
+ - name: id
21818
+ in: path
21819
+ required: true
21820
+ description: Return prefixed ID
21821
+ schema:
21822
+ type: string
21823
+ responses:
21824
+ '200':
21825
+ description: return received
21826
+ content:
21827
+ application/json:
21828
+ example:
21829
+ id: ret_UkLWZg9DAJ
21830
+ number: RET1001
21831
+ status: received
21832
+ order_id: or_UkLWZg9DAJ
21833
+ reason_id:
21834
+ refund_total: '10.00'
21835
+ refund_tax_total: '0.00'
21836
+ approved_at: '2026-01-15T12:00:00Z'
21837
+ received_at: '2026-01-15T12:00:00Z'
21838
+ refunded_at:
21839
+ canceled_at:
21840
+ external_references: {}
21841
+ memo: Item did not fit
21842
+ metadata: {}
21843
+ created_at: '2026-01-15T12:00:00.000Z'
21844
+ updated_at: '2026-01-15T12:00:00.000Z'
21845
+ stock_location_id: sloc_UkLWZg9DAJ
21846
+ created_by_id:
21847
+ created_by_type:
21848
+ refunded_total: '0.00'
21849
+ refundable_total: '10.00'
21850
+ documents: []
21851
+ labels: []
21852
+ deliveries: []
21853
+ schema:
21854
+ "$ref": "#/components/schemas/Return"
21855
+ requestBody:
21856
+ content:
21857
+ application/json:
21858
+ schema:
21859
+ "$ref": "#/components/schemas/ReturnReceiveParams"
21860
+ "/api/v3/admin/orders/{order_id}/returns/{id}/refund":
21861
+ patch:
21862
+ summary: Refund a return
21863
+ tags:
21864
+ - Orders
21865
+ security:
21866
+ - api_key: []
21867
+ bearer_auth: []
21868
+ description: |-
21869
+ Pays the customer back for a received return, to store credit or through the original payment.
21870
+
21871
+ **Required scope:** `write_orders` and `write_refunds` (for API-key authentication).
21872
+ x-codeSamples:
21873
+ - lang: javascript
21874
+ label: Spree Admin SDK
21875
+ source: |-
21876
+ import { createAdminClient } from '@spree/admin-sdk'
21877
+
21878
+ const client = createAdminClient({
21879
+ baseUrl: 'https://your-store.com',
21880
+ secretKey: 'sk_xxx',
21881
+ })
21882
+
21883
+ const orderReturn = await client.orders.returns.refund('or_UkLWZg9DAJ', 'ret_UkLWZg9DAJ', {
21884
+ amount: '29.99',
21885
+ refund_method: 'original_payment',
21886
+ })
21887
+ - lang: bash
21888
+ label: Spree CLI
21889
+ source: spree api patch /orders/{order_id}/returns/{id}/refund -d '{"amount":"29.99","refund_method":"original_payment"}'
21261
21890
  parameters:
21262
21891
  - name: x-spree-api-key
21263
21892
  in: header
@@ -21558,6 +22187,107 @@ paths:
21558
22187
  required:
21559
22188
  - data
21560
22189
  - meta
22190
+ "/api/v3/admin/orders/{order_id}/returns/{return_id}/labels/{id}/refund":
22191
+ patch:
22192
+ summary: Refund a return label
22193
+ tags:
22194
+ - Orders
22195
+ x-codeSamples:
22196
+ - lang: javascript
22197
+ label: Spree Admin SDK
22198
+ source: |-
22199
+ import { createAdminClient } from '@spree/admin-sdk'
22200
+
22201
+ const client = createAdminClient({
22202
+ baseUrl: 'https://your-store.com',
22203
+ secretKey: 'sk_xxx',
22204
+ })
22205
+
22206
+ const label = await client.orders.returns.labels.refund(
22207
+ 'or_UkLWZg9DAJ',
22208
+ 'ret_UkLWZg9DAJ',
22209
+ 'lbl_UkLWZg9DAJ',
22210
+ )
22211
+ - lang: bash
22212
+ label: Spree CLI
22213
+ source: spree api patch /orders/{order_id}/returns/{return_id}/labels/{id}/refund
22214
+ -d '{ ... }'
22215
+ operationId: return_labels_refund
22216
+ security:
22217
+ - api_key: []
22218
+ bearer_auth: []
22219
+ description: |-
22220
+ Asks the carrier to refund a purchased return label the customer never used, such as when the return is canceled. An uploaded label has nothing to refund.
22221
+
22222
+ **Required scope:** `write_orders` (for API-key authentication).
22223
+ parameters:
22224
+ - name: x-spree-api-key
22225
+ in: header
22226
+ required: true
22227
+ schema:
22228
+ type: string
22229
+ - name: Authorization
22230
+ in: header
22231
+ required: true
22232
+ schema:
22233
+ type: string
22234
+ - name: order_id
22235
+ in: path
22236
+ required: true
22237
+ description: Order prefixed ID
22238
+ schema:
22239
+ type: string
22240
+ - name: return_id
22241
+ in: path
22242
+ required: true
22243
+ description: Return prefixed ID
22244
+ schema:
22245
+ type: string
22246
+ - name: id
22247
+ in: path
22248
+ required: true
22249
+ description: Shipping label prefixed ID
22250
+ schema:
22251
+ type: string
22252
+ responses:
22253
+ '200':
22254
+ description: refund filed
22255
+ content:
22256
+ application/json:
22257
+ example:
22258
+ id: lbl_UkLWZg9DAJ
22259
+ source: purchased
22260
+ status: refunded
22261
+ carrier: ups
22262
+ carrier_name: UPS
22263
+ service: Ground
22264
+ tracking_number: 1Z879E930346830007
22265
+ currency: USD
22266
+ format: pdf
22267
+ external_id: shp_4
22268
+ metadata: {}
22269
+ refunded_at: '2026-01-15T12:00:00.000Z'
22270
+ created_at: '2026-01-15T12:00:00.000Z'
22271
+ updated_at: '2026-01-15T12:00:00.000Z'
22272
+ owner_id: ret_UkLWZg9DAJ
22273
+ owner_type: return
22274
+ cost: '7.25'
22275
+ integration_id:
22276
+ file_pending: false
22277
+ download_url:
22278
+ schema:
22279
+ "$ref": "#/components/schemas/ShippingLabel"
22280
+ '422':
22281
+ description: uploaded labels cannot be refunded
22282
+ content:
22283
+ application/json:
22284
+ example:
22285
+ error:
22286
+ code: processing_error
22287
+ message: An uploaded label was not bought through Spree and cannot
22288
+ be refunded — delete it instead
22289
+ schema:
22290
+ "$ref": "#/components/schemas/ErrorResponse"
21561
22291
  "/api/v3/admin/payment_methods/{payment_method_id}/custom_fields":
21562
22292
  get:
21563
22293
  summary: List payment method custom fields
@@ -22319,6 +23049,8 @@ paths:
22319
23049
  updated_at: '2026-01-15T12:00:00.000Z'
22320
23050
  avs_risky: false
22321
23051
  cvv_risky: false
23052
+ can_void: true
23053
+ can_capture: false
22322
23054
  captured_amount: '0.00'
22323
23055
  order_id: or_UkLWZg9DAJ
22324
23056
  meta:
@@ -22403,6 +23135,8 @@ paths:
22403
23135
  updated_at: '2026-01-15T12:00:00.000Z'
22404
23136
  avs_risky: false
22405
23137
  cvv_risky: false
23138
+ can_void: true
23139
+ can_capture: true
22406
23140
  captured_amount: '0.00'
22407
23141
  order_id: or_gbHJdmfrXB
22408
23142
  requestBody:
@@ -22513,6 +23247,8 @@ paths:
22513
23247
  updated_at: '2026-01-15T12:00:00.000Z'
22514
23248
  avs_risky: false
22515
23249
  cvv_risky: false
23250
+ can_void: true
23251
+ can_capture: false
22516
23252
  captured_amount: '0.00'
22517
23253
  order_id: or_UkLWZg9DAJ
22518
23254
  "/api/v3/admin/orders/{order_id}/payments/{id}/capture":
@@ -22604,6 +23340,8 @@ paths:
22604
23340
  updated_at: '2026-01-15T12:00:00.000Z'
22605
23341
  avs_risky: false
22606
23342
  cvv_risky: false
23343
+ can_void: true
23344
+ can_capture: false
22607
23345
  captured_amount: '110.00'
22608
23346
  order_id: or_UkLWZg9DAJ
22609
23347
  '422':
@@ -22709,6 +23447,8 @@ paths:
22709
23447
  updated_at: '2026-01-15T12:00:00.000Z'
22710
23448
  avs_risky: false
22711
23449
  cvv_risky: false
23450
+ can_void: false
23451
+ can_capture: false
22712
23452
  captured_amount: '0.00'
22713
23453
  order_id: or_UkLWZg9DAJ
22714
23454
  "/api/v3/admin/price_lists":
@@ -23321,7 +24061,7 @@ paths:
23321
24061
  application/json:
23322
24062
  example:
23323
24063
  id: pl_UkLWZg9DAJ
23324
- name: Price List 2
24064
+ name: Price List 3
23325
24065
  description:
23326
24066
  status: inactive
23327
24067
  position: 1
@@ -23858,6 +24598,9 @@ paths:
23858
24598
  summary: Bulk-delete prices
23859
24599
  tags:
23860
24600
  - Pricing
24601
+ x-spree-agent: false
24602
+ x-spree-agent-reason: Deletes many prices in one call behind a single confirmation;
24603
+ delete_resource removes them one at a time.
23861
24604
  security:
23862
24605
  - api_key: []
23863
24606
  bearer_auth: []
@@ -24399,7 +25142,7 @@ paths:
24399
25142
  updated_at: '2026-01-15T12:00:00.000Z'
24400
25143
  provider_type:
24401
25144
  provider_name: File
24402
- download_url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiJ0Z252N2l0MG55YnkwbHhkczg5Y2hteTd6aXlvIiwiZGlzcG9zaXRpb24iOiJhdHRhY2htZW50OyBmaWxlbmFtZT1cInRoaW5raW5nLWNhdC5qcGdcIjsgZmlsZW5hbWUqPVVURi04Jyd0aGlua2luZy1jYXQuanBnIiwiY29udGVudF90eXBlIjoiaW1hZ2UvanBlZyIsInNlcnZpY2VfbmFtZSI6InRlc3QifSwiZXhwIjoiMjAyNi0wMS0xNVQxMjowNTowMC4wMDBaIiwicHVyIjoiYmxvYl9rZXkifX0=--06a160c64f398ed4eb70327ef6932eaf662f98d7/thinking-cat.jpg
25145
+ download_url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiJ0Z252N2l0MG55YnkwbHhkczg5Y2hteTd6aXlvIiwiZGlzcG9zaXRpb24iOiJhdHRhY2htZW50OyBmaWxlbmFtZT1cInRoaW5raW5nLWNhdC5qcGdcIjsgZmlsZW5hbWUqPVVURi04Jyd0aGlua2luZy1jYXQuanBnIiwiY29udGVudF90eXBlIjoiaW1hZ2UvanBlZyIsInNlcnZpY2VfbmFtZSI6InRlc3QifSwiZXhwIjoiMjAyNi0wMS0xNVQxMjowNTowMC4wMDBaIiwicHVyIjoiYmxvYl9rZXkifX0=--709f2019d409ca81185d256a48389bc187a4544d/thinking-cat.jpg
24403
25146
  effective_authorized_clicks: 5
24404
25147
  effective_authorized_days: 7
24405
25148
  provider_settings: {}
@@ -24490,7 +25233,7 @@ paths:
24490
25233
  updated_at: '2026-01-15T12:00:00.000Z'
24491
25234
  provider_type:
24492
25235
  provider_name: File
24493
- download_url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiJhOXR0cGNpbmxxbThvbmtlNHM1NmI2Y3gxMWVzIiwiZGlzcG9zaXRpb24iOiJhdHRhY2htZW50OyBmaWxlbmFtZT1cIm1hbnVhbC5wZGZcIjsgZmlsZW5hbWUqPVVURi04JydtYW51YWwucGRmIiwiY29udGVudF90eXBlIjoiaW1hZ2UvanBlZyIsInNlcnZpY2VfbmFtZSI6InRlc3QifSwiZXhwIjoiMjAyNi0wMS0xNVQxMjowNTowMC4wMDBaIiwicHVyIjoiYmxvYl9rZXkifX0=--0df5c2167c42cdda6a5f6639d3ddc1b4473c5a81/manual.pdf
25236
+ download_url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiJhOXR0cGNpbmxxbThvbmtlNHM1NmI2Y3gxMWVzIiwiZGlzcG9zaXRpb24iOiJhdHRhY2htZW50OyBmaWxlbmFtZT1cIm1hbnVhbC5wZGZcIjsgZmlsZW5hbWUqPVVURi04JydtYW51YWwucGRmIiwiY29udGVudF90eXBlIjoiaW1hZ2UvanBlZyIsInNlcnZpY2VfbmFtZSI6InRlc3QifSwiZXhwIjoiMjAyNi0wMS0xNVQxMjowNTowMC4wMDBaIiwicHVyIjoiYmxvYl9rZXkifX0=--4aedc095f285621c27efe025cd8841f58d6d09d3/manual.pdf
24494
25237
  effective_authorized_clicks: 5
24495
25238
  effective_authorized_days: 30
24496
25239
  provider_settings: {}
@@ -24579,7 +25322,7 @@ paths:
24579
25322
  updated_at: '2026-01-15T12:00:00.000Z'
24580
25323
  provider_type:
24581
25324
  provider_name: File
24582
- download_url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiIwZXp6d3IzMzE3ajRoem9kc3Awc2czN3EzMnhzIiwiZGlzcG9zaXRpb24iOiJhdHRhY2htZW50OyBmaWxlbmFtZT1cInRoaW5raW5nLWNhdC5qcGdcIjsgZmlsZW5hbWUqPVVURi04Jyd0aGlua2luZy1jYXQuanBnIiwiY29udGVudF90eXBlIjoiaW1hZ2UvanBlZyIsInNlcnZpY2VfbmFtZSI6InRlc3QifSwiZXhwIjoiMjAyNi0wMS0xNVQxMjowNTowMC4wMDBaIiwicHVyIjoiYmxvYl9rZXkifX0=--da799713969a4775b10b6055f685e92f410f5176/thinking-cat.jpg
25325
+ download_url: http://www.example.com/rails/active_storage/disk/eyJfcmFpbHMiOnsiZGF0YSI6eyJrZXkiOiIwZXp6d3IzMzE3ajRoem9kc3Awc2czN3EzMnhzIiwiZGlzcG9zaXRpb24iOiJhdHRhY2htZW50OyBmaWxlbmFtZT1cInRoaW5raW5nLWNhdC5qcGdcIjsgZmlsZW5hbWUqPVVURi04Jyd0aGlua2luZy1jYXQuanBnIiwiY29udGVudF90eXBlIjoiaW1hZ2UvanBlZyIsInNlcnZpY2VfbmFtZSI6InRlc3QifSwiZXhwIjoiMjAyNi0wMS0xNVQxMjowNTowMC4wMDBaIiwicHVyIjoiYmxvYl9rZXkifX0=--506612a6a2fda890a0b082043117cbc516d49d89/thinking-cat.jpg
24583
25326
  effective_authorized_clicks: 10
24584
25327
  effective_authorized_days: 7
24585
25328
  provider_settings: {}
@@ -24948,8 +25691,8 @@ paths:
24948
25691
  example:
24949
25692
  data:
24950
25693
  - id: prod_UkLWZg9DAJ
24951
- name: Product 1296550
24952
- slug: product-1296550
25694
+ name: Product 1376550
25695
+ slug: product-1376550
24953
25696
  meta_title:
24954
25697
  meta_description:
24955
25698
  meta_keywords:
@@ -24993,6 +25736,7 @@ paths:
24993
25736
  seller_name:
24994
25737
  product_type_id:
24995
25738
  tax_category_id: taxcat_UkLWZg9DAJ
25739
+ total_on_hand: 0
24996
25740
  meta:
24997
25741
  page: 1
24998
25742
  limit: 25
@@ -25109,7 +25853,7 @@ paths:
25109
25853
  meta_title:
25110
25854
  meta_description:
25111
25855
  meta_keywords:
25112
- variant_count: 0
25856
+ variant_count: 1
25113
25857
  available_on:
25114
25858
  preorder_ships_at:
25115
25859
  purchasable: false
@@ -25136,6 +25880,7 @@ paths:
25136
25880
  seller_name:
25137
25881
  product_type_id:
25138
25882
  tax_category_id:
25883
+ total_on_hand: 0
25139
25884
  schema:
25140
25885
  "$ref": "#/components/schemas/Product"
25141
25886
  '422':
@@ -25227,8 +25972,8 @@ paths:
25227
25972
  application/json:
25228
25973
  example:
25229
25974
  id: prod_UkLWZg9DAJ
25230
- name: Product 1332061
25231
- slug: product-1332061
25975
+ name: Product 1412061
25976
+ slug: product-1412061
25232
25977
  meta_title:
25233
25978
  meta_description:
25234
25979
  meta_keywords:
@@ -25270,6 +26015,7 @@ paths:
25270
26015
  seller_name:
25271
26016
  product_type_id:
25272
26017
  tax_category_id: taxcat_UkLWZg9DAJ
26018
+ total_on_hand: 0
25273
26019
  schema:
25274
26020
  "$ref": "#/components/schemas/Product"
25275
26021
  '404':
@@ -25338,7 +26084,7 @@ paths:
25338
26084
  example:
25339
26085
  id: prod_UkLWZg9DAJ
25340
26086
  name: Updated Name
25341
- slug: product-1355339
26087
+ slug: product-1435339
25342
26088
  meta_title:
25343
26089
  meta_description:
25344
26090
  meta_keywords:
@@ -25390,6 +26136,7 @@ paths:
25390
26136
  seller_name:
25391
26137
  product_type_id:
25392
26138
  tax_category_id: taxcat_UkLWZg9DAJ
26139
+ total_on_hand: 0
25393
26140
  schema:
25394
26141
  "$ref": "#/components/schemas/Product"
25395
26142
  '422':
@@ -25475,11 +26222,129 @@ paths:
25475
26222
  specific: false
25476
26223
  schema:
25477
26224
  "$ref": "#/components/schemas/ErrorResponse"
26225
+ "/api/v3/admin/products/{id}/clone":
26226
+ parameters:
26227
+ - name: id
26228
+ in: path
26229
+ required: true
26230
+ description: Product ID
26231
+ schema:
26232
+ type: string
26233
+ post:
26234
+ summary: Clone a product
26235
+ tags:
26236
+ - Products
26237
+ x-codeSamples:
26238
+ - lang: javascript
26239
+ label: Spree Admin SDK
26240
+ source: |-
26241
+ import { createAdminClient } from '@spree/admin-sdk'
26242
+
26243
+ const client = createAdminClient({
26244
+ baseUrl: 'https://your-store.com',
26245
+ secretKey: 'sk_xxx',
26246
+ })
26247
+
26248
+ const copy = await client.products.clone('prod_UkLWZg9DAJ')
26249
+ - lang: bash
26250
+ label: Spree CLI
26251
+ source: spree api post /products/{id}/clone -d '{ ... }'
26252
+ security:
26253
+ - api_key: []
26254
+ bearer_auth: []
26255
+ description: |-
26256
+ Creates a draft copy of a product, named "COPY OF …", with its variants,
26257
+ prices, stock locations, images, categories, channels and tags; stock on
26258
+ hand starts at zero. Use it to start a similar product from an existing
26259
+ one instead of building it from scratch.
26260
+
26261
+
26262
+ **Required scope:** `write_products` (for API-key authentication).
26263
+ parameters:
26264
+ - name: x-spree-api-key
26265
+ in: header
26266
+ required: true
26267
+ schema:
26268
+ type: string
26269
+ - name: Authorization
26270
+ in: header
26271
+ required: true
26272
+ schema:
26273
+ type: string
26274
+ responses:
26275
+ '201':
26276
+ description: product cloned
26277
+ content:
26278
+ application/json:
26279
+ example:
26280
+ id: prod_gbHJdmfrXB
26281
+ name: COPY OF Product 1472357
26282
+ slug: copy-of-product-1472357
26283
+ meta_title:
26284
+ meta_description:
26285
+ meta_keywords:
26286
+ variant_count: 1
26287
+ available_on:
26288
+ preorder_ships_at:
26289
+ purchasable: true
26290
+ preorder: false
26291
+ in_stock: false
26292
+ backorderable: true
26293
+ available: false
26294
+ description: Dolore facere hic laboriosam sapiente nobis. Doloribus
26295
+ deleniti quasi esse aliquid voluptatem. Rem voluptate omnis suscipit
26296
+ adipisci laudantium. Deleniti error dolorum ratione dolor assumenda
26297
+ iusto. Laborum non rem sapiente temporibus quam inventore. Voluptatum
26298
+ magnam hic molestias laudantium necessitatibus. Totam ducimus provident
26299
+ aliquam repellendus nam maxime error natus. Ex aspernatur nostrum
26300
+ deserunt maxime quis occaecati expedita dolore. Debitis est laboriosam
26301
+ modi aspernatur cumque. Sapiente ab corrupti quos doloremque eius.
26302
+ Laborum officiis culpa voluptate fuga sed. Nemo possimus vel architecto
26303
+ quo modi. Velit aut non iusto exercitationem nostrum nemo. Velit
26304
+ illo nisi quaerat perspiciatis facilis temporibus quae esse.
26305
+ description_html: |-
26306
+ Dolore facere hic laboriosam sapiente nobis. Doloribus deleniti quasi esse aliquid voluptatem. Rem voluptate omnis suscipit adipisci laudantium.
26307
+ Deleniti error dolorum ratione dolor assumenda iusto. Laborum non rem sapiente temporibus quam inventore. Voluptatum magnam hic molestias laudantium necessitatibus. Totam ducimus provident aliquam repellendus nam maxime error natus.
26308
+ Ex aspernatur nostrum deserunt maxime quis occaecati expedita dolore. Debitis est laboriosam modi aspernatur cumque. Sapiente ab corrupti quos doloremque eius.
26309
+ Laborum officiis culpa voluptate fuga sed. Nemo possimus vel architecto quo modi. Velit aut non iusto exercitationem nostrum nemo. Velit illo nisi quaerat perspiciatis facilis temporibus quae esse.
26310
+ default_variant_id: variant_gbHJdmfrXB
26311
+ buy_box_variant_id: variant_gbHJdmfrXB
26312
+ thumbnail_url:
26313
+ tags: []
26314
+ price:
26315
+ id: price_gbHJdmfrXB
26316
+ currency: USD
26317
+ amount: '19.99'
26318
+ compare_at_amount:
26319
+ price_list_id:
26320
+ min_quantity: 1
26321
+ variant_id: variant_gbHJdmfrXB
26322
+ created_at: '2026-01-15T12:00:00.000Z'
26323
+ updated_at: '2026-01-15T12:00:00.000Z'
26324
+ original_price:
26325
+ seller_id:
26326
+ external_references: {}
26327
+ status: draft
26328
+ metadata: {}
26329
+ deleted_at:
26330
+ created_at: '2026-01-15T12:00:00.000Z'
26331
+ updated_at: '2026-01-15T12:00:00.000Z'
26332
+ delivery_profile_id: fp_UkLWZg9DAJ
26333
+ seller_name:
26334
+ product_type_id:
26335
+ tax_category_id: taxcat_UkLWZg9DAJ
26336
+ total_on_hand: 0
26337
+ schema:
26338
+ "$ref": "#/components/schemas/Product"
25478
26339
  "/api/v3/admin/products/bulk_status_update":
25479
26340
  post:
25480
26341
  summary: Bulk-update product status
25481
26342
  tags:
25482
26343
  - Products
26344
+ x-spree-agent: false
26345
+ x-spree-agent-reason: Writes the status column for many products at once, skipping
26346
+ the status workflows and their events; products_activate, products_archive
26347
+ and products_draft run them.
25483
26348
  security:
25484
26349
  - api_key: []
25485
26350
  bearer_auth: []
@@ -26039,6 +26904,9 @@ paths:
26039
26904
  summary: Bulk-delete products
26040
26905
  tags:
26041
26906
  - Products
26907
+ x-spree-agent: false
26908
+ x-spree-agent-reason: Deletes many products in one call behind a single confirmation;
26909
+ delete_resource removes them one at a time.
26042
26910
  security:
26043
26911
  - api_key: []
26044
26912
  bearer_auth: []
@@ -26122,12 +26990,6 @@ paths:
26122
26990
  security:
26123
26991
  - api_key: []
26124
26992
  bearer_auth: []
26125
- description: |-
26126
- Puts a product a seller submitted for review on sale, and closes the
26127
- submission. Only a product awaiting review can be approved.
26128
-
26129
-
26130
- **Required scope:** `write_products` (for API-key authentication).
26131
26993
  parameters:
26132
26994
  - name: x-spree-api-key
26133
26995
  in: header
@@ -26139,6 +27001,11 @@ paths:
26139
27001
  required: true
26140
27002
  schema:
26141
27003
  type: string
27004
+ description: |-
27005
+ Puts a product a seller submitted for review on sale, and closes the
27006
+ submission. Only a product awaiting review can be approved.
27007
+
27008
+ **Required scope:** `write_products` (for API-key authentication).
26142
27009
  responses:
26143
27010
  '200':
26144
27011
  description: product approved
@@ -26146,8 +27013,8 @@ paths:
26146
27013
  application/json:
26147
27014
  example:
26148
27015
  id: prod_gbHJdmfrXB
26149
- name: Product 1538682
26150
- slug: product-1538682
27016
+ name: Product 1628682
27017
+ slug: product-1628682
26151
27018
  meta_title:
26152
27019
  meta_description:
26153
27020
  meta_keywords:
@@ -26198,19 +27065,271 @@ paths:
26198
27065
  seller_name:
26199
27066
  product_type_id:
26200
27067
  tax_category_id: taxcat_UkLWZg9DAJ
27068
+ total_on_hand: 0
27069
+ schema:
27070
+ "$ref": "#/components/schemas/Product"
27071
+ '422':
27072
+ description: the product is not awaiting review
27073
+ content:
27074
+ application/json:
27075
+ example:
27076
+ error:
27077
+ code: processing_error
27078
+ message: This product is not awaiting review.
27079
+ schema:
27080
+ "$ref": "#/components/schemas/ErrorResponse"
27081
+ "/api/v3/admin/products/{id}/reject":
27082
+ parameters:
27083
+ - name: id
27084
+ in: path
27085
+ required: true
27086
+ description: Product ID
27087
+ schema:
27088
+ type: string
27089
+ patch:
27090
+ summary: Reject a submitted product
27091
+ tags:
27092
+ - Products
27093
+ security:
27094
+ - api_key: []
27095
+ bearer_auth: []
27096
+ description: |-
27097
+ Turns down a product a seller submitted for review. The `reason` is
27098
+ sent back to the seller, who can fix the product and submit it again.
27099
+
27100
+
27101
+ **Required scope:** `write_products` (for API-key authentication).
27102
+ x-codeSamples:
27103
+ - lang: javascript
27104
+ label: Spree Admin SDK
27105
+ source: |-
27106
+ import { createAdminClient } from '@spree/admin-sdk'
27107
+
27108
+ const client = createAdminClient({
27109
+ baseUrl: 'https://your-store.com',
27110
+ secretKey: 'sk_xxx',
27111
+ })
27112
+
27113
+ // The seller sees the reason, fixes the product and submits it again.
27114
+ const product = await client.products.reject('prod_86Rf07xd4z', {
27115
+ reason: 'Photos are too dark',
27116
+ })
27117
+ - lang: bash
27118
+ label: Spree CLI
27119
+ source: spree api patch /products/{id}/reject -d '{"reason":"Photos are too
27120
+ dark"}'
27121
+ parameters:
27122
+ - name: x-spree-api-key
27123
+ in: header
27124
+ required: true
27125
+ schema:
27126
+ type: string
27127
+ - name: Authorization
27128
+ in: header
27129
+ required: true
27130
+ schema:
27131
+ type: string
27132
+ responses:
27133
+ '200':
27134
+ description: product rejected
27135
+ content:
27136
+ application/json:
27137
+ example:
27138
+ id: prod_gbHJdmfrXB
27139
+ name: Product 1654387
27140
+ slug: product-1654387
27141
+ meta_title:
27142
+ meta_description:
27143
+ meta_keywords:
27144
+ variant_count: 1
27145
+ available_on:
27146
+ preorder_ships_at:
27147
+ purchasable: true
27148
+ preorder: false
27149
+ in_stock: false
27150
+ backorderable: true
27151
+ available: false
27152
+ description: Iste blanditiis quos vero ipsam reprehenderit quae. Culpa
27153
+ recusandae ut quisquam facilis enim dolorum eius. Sapiente explicabo
27154
+ animi necessitatibus perspiciatis doloribus aspernatur nobis. Labore
27155
+ similique ipsa debitis voluptate a. Nemo occaecati magnam quos voluptatibus
27156
+ amet. Facilis quis aperiam corporis corrupti enim. Voluptate dignissimos
27157
+ alias exercitationem repudiandae eligendi rerum hic. Facilis sed
27158
+ doloremque dicta porro saepe. Ipsam alias et ipsum voluptatum aperiam
27159
+ molestiae aliquam tempora. Quod ipsa quas eos hic corrupti dignissimos
27160
+ dolorum occaecati. Commodi quis animi at possimus laborum beatae.
27161
+ Aliquam vero suscipit reiciendis dolor placeat. Deleniti corporis
27162
+ tempora accusamus quae nesciunt animi. Numquam occaecati sapiente
27163
+ accusantium amet illum. Vero odio reprehenderit ipsa esse aliquid
27164
+ autem ad.
27165
+ description_html: |-
27166
+ Iste blanditiis quos vero ipsam reprehenderit quae. Culpa recusandae ut quisquam facilis enim dolorum eius. Sapiente explicabo animi necessitatibus perspiciatis doloribus aspernatur nobis. Labore similique ipsa debitis voluptate a.
27167
+ Nemo occaecati magnam quos voluptatibus amet. Facilis quis aperiam corporis corrupti enim. Voluptate dignissimos alias exercitationem repudiandae eligendi rerum hic.
27168
+ Facilis sed doloremque dicta porro saepe. Ipsam alias et ipsum voluptatum aperiam molestiae aliquam tempora. Quod ipsa quas eos hic corrupti dignissimos dolorum occaecati. Commodi quis animi at possimus laborum beatae.
27169
+ Aliquam vero suscipit reiciendis dolor placeat. Deleniti corporis tempora accusamus quae nesciunt animi. Numquam occaecati sapiente accusantium amet illum. Vero odio reprehenderit ipsa esse aliquid autem ad.
27170
+ default_variant_id: variant_gbHJdmfrXB
27171
+ buy_box_variant_id: variant_gbHJdmfrXB
27172
+ thumbnail_url:
27173
+ tags: []
27174
+ price:
27175
+ id: price_gbHJdmfrXB
27176
+ currency: USD
27177
+ amount: '19.99'
27178
+ compare_at_amount:
27179
+ price_list_id:
27180
+ min_quantity: 1
27181
+ variant_id: variant_gbHJdmfrXB
27182
+ created_at: '2026-01-15T12:00:00.000Z'
27183
+ updated_at: '2026-01-15T12:00:00.000Z'
27184
+ original_price:
27185
+ seller_id:
27186
+ external_references: {}
27187
+ status: rejected
27188
+ metadata: {}
27189
+ deleted_at:
27190
+ created_at: '2026-01-15T12:00:00.000Z'
27191
+ updated_at: '2026-01-15T12:00:00.000Z'
27192
+ delivery_profile_id: fp_UkLWZg9DAJ
27193
+ seller_name:
27194
+ product_type_id:
27195
+ tax_category_id: taxcat_UkLWZg9DAJ
27196
+ total_on_hand: 0
27197
+ schema:
27198
+ "$ref": "#/components/schemas/Product"
27199
+ requestBody:
27200
+ content:
27201
+ application/json:
27202
+ schema:
27203
+ "$ref": "#/components/schemas/ProductRejectParams"
27204
+ required: true
27205
+ "/api/v3/admin/products/{id}/activate":
27206
+ parameters:
27207
+ - name: id
27208
+ in: path
27209
+ required: true
27210
+ description: Product ID
27211
+ schema:
27212
+ type: string
27213
+ patch:
27214
+ summary: Activate a product
27215
+ tags:
27216
+ - Products
27217
+ x-codeSamples:
27218
+ - lang: javascript
27219
+ label: Spree Admin SDK
27220
+ source: |-
27221
+ import { createAdminClient } from '@spree/admin-sdk'
27222
+
27223
+ const client = createAdminClient({
27224
+ baseUrl: 'https://your-store.com',
27225
+ secretKey: 'sk_xxx',
27226
+ })
27227
+
27228
+ const product = await client.products.activate('prod_UkLWZg9DAJ')
27229
+ - lang: bash
27230
+ label: Spree CLI
27231
+ source: spree api patch /products/{id}/activate -d '{ ... }'
27232
+ security:
27233
+ - api_key: []
27234
+ bearer_auth: []
27235
+ description: |-
27236
+ Puts one product on sale. Runs the activation workflow, so its hooks and the `product.activated` event fire, which `bulk_status_update` does not. A product awaiting review is refused: approve or reject it instead.
27237
+
27238
+
27239
+ **Required scope:** `write_products` (for API-key authentication).
27240
+ parameters:
27241
+ - name: x-spree-api-key
27242
+ in: header
27243
+ required: true
27244
+ schema:
27245
+ type: string
27246
+ - name: Authorization
27247
+ in: header
27248
+ required: true
27249
+ schema:
27250
+ type: string
27251
+ responses:
27252
+ '200':
27253
+ description: product active
27254
+ content:
27255
+ application/json:
27256
+ example:
27257
+ id: prod_gbHJdmfrXB
27258
+ name: Product 1674119
27259
+ slug: product-1674119
27260
+ meta_title:
27261
+ meta_description:
27262
+ meta_keywords:
27263
+ variant_count: 1
27264
+ available_on:
27265
+ preorder_ships_at:
27266
+ purchasable: true
27267
+ preorder: false
27268
+ in_stock: false
27269
+ backorderable: true
27270
+ available: true
27271
+ description: Tempora doloribus sit consectetur cumque omnis. Quod
27272
+ fugit dicta ullam omnis. Hic dolorem asperiores nemo est sed nihil
27273
+ quia deleniti. Saepe aperiam eos nulla quia porro minima officiis
27274
+ cum. Eius dignissimos laudantium sequi incidunt. Sed nihil voluptate
27275
+ aliquid nisi. Veritatis tenetur quos aspernatur modi perspiciatis
27276
+ quaerat. Voluptas harum neque labore fuga reprehenderit unde quasi.
27277
+ Omnis quam autem in ipsam aspernatur architecto alias recusandae.
27278
+ Repudiandae ratione vel expedita corporis et pariatur rem sapiente.
27279
+ Velit laboriosam nulla quibusdam fugit minus itaque ut repellat.
27280
+ Incidunt est fugiat totam ipsa quod deserunt. Natus sequi numquam
27281
+ laudantium non similique saepe ipsam quos. Ad impedit necessitatibus
27282
+ quo nesciunt blanditiis id similique recusandae. Ut occaecati debitis
27283
+ aliquam accusantium sed distinctio neque. Labore quos quam optio
27284
+ aperiam dolores aspernatur vitae odio. Eius nam adipisci corrupti
27285
+ incidunt quod sapiente tempora dicta.
27286
+ description_html: |-
27287
+ Tempora doloribus sit consectetur cumque omnis. Quod fugit dicta ullam omnis. Hic dolorem asperiores nemo est sed nihil quia deleniti.
27288
+ Saepe aperiam eos nulla quia porro minima officiis cum. Eius dignissimos laudantium sequi incidunt. Sed nihil voluptate aliquid nisi.
27289
+ Veritatis tenetur quos aspernatur modi perspiciatis quaerat. Voluptas harum neque labore fuga reprehenderit unde quasi. Omnis quam autem in ipsam aspernatur architecto alias recusandae. Repudiandae ratione vel expedita corporis et pariatur rem sapiente.
27290
+ Velit laboriosam nulla quibusdam fugit minus itaque ut repellat. Incidunt est fugiat totam ipsa quod deserunt. Natus sequi numquam laudantium non similique saepe ipsam quos. Ad impedit necessitatibus quo nesciunt blanditiis id similique recusandae.
27291
+ Ut occaecati debitis aliquam accusantium sed distinctio neque. Labore quos quam optio aperiam dolores aspernatur vitae odio. Eius nam adipisci corrupti incidunt quod sapiente tempora dicta.
27292
+ default_variant_id: variant_gbHJdmfrXB
27293
+ buy_box_variant_id: variant_gbHJdmfrXB
27294
+ thumbnail_url:
27295
+ tags: []
27296
+ price:
27297
+ id: price_gbHJdmfrXB
27298
+ currency: USD
27299
+ amount: '19.99'
27300
+ compare_at_amount:
27301
+ price_list_id:
27302
+ min_quantity: 1
27303
+ variant_id: variant_gbHJdmfrXB
27304
+ created_at: '2026-01-15T12:00:00.000Z'
27305
+ updated_at: '2026-01-15T12:00:00.000Z'
27306
+ original_price:
27307
+ seller_id:
27308
+ external_references: {}
27309
+ status: active
27310
+ metadata: {}
27311
+ deleted_at:
27312
+ created_at: '2026-01-15T12:00:00.000Z'
27313
+ updated_at: '2026-01-15T12:00:00.000Z'
27314
+ delivery_profile_id: fp_UkLWZg9DAJ
27315
+ seller_name:
27316
+ product_type_id:
27317
+ tax_category_id: taxcat_UkLWZg9DAJ
27318
+ total_on_hand: 0
26201
27319
  schema:
26202
27320
  "$ref": "#/components/schemas/Product"
26203
27321
  '422':
26204
- description: the product is not awaiting review
27322
+ description: the product is awaiting review
26205
27323
  content:
26206
27324
  application/json:
26207
27325
  example:
26208
27326
  error:
26209
- code: processing_error
26210
- message: This product is not awaiting review.
27327
+ code: product_in_review
27328
+ message: A product awaiting review is approved or rejected, not
27329
+ moved to another status
26211
27330
  schema:
26212
27331
  "$ref": "#/components/schemas/ErrorResponse"
26213
- "/api/v3/admin/products/{id}/reject":
27332
+ "/api/v3/admin/products/{id}/archive":
26214
27333
  parameters:
26215
27334
  - name: id
26216
27335
  in: path
@@ -26219,18 +27338,128 @@ paths:
26219
27338
  schema:
26220
27339
  type: string
26221
27340
  patch:
26222
- summary: Reject a submitted product
27341
+ summary: Archive a product
26223
27342
  tags:
26224
27343
  - Products
27344
+ x-codeSamples:
27345
+ - lang: javascript
27346
+ label: Spree Admin SDK
27347
+ source: |-
27348
+ import { createAdminClient } from '@spree/admin-sdk'
27349
+
27350
+ const client = createAdminClient({
27351
+ baseUrl: 'https://your-store.com',
27352
+ secretKey: 'sk_xxx',
27353
+ })
27354
+
27355
+ const product = await client.products.archive('prod_UkLWZg9DAJ')
27356
+ - lang: bash
27357
+ label: Spree CLI
27358
+ source: spree api patch /products/{id}/archive -d '{ ... }'
26225
27359
  security:
26226
27360
  - api_key: []
26227
27361
  bearer_auth: []
26228
27362
  description: |-
26229
- Turns down a product a seller submitted for review. The `reason` is
26230
- sent back to the seller, who can fix the product and submit it again.
27363
+ Takes one product off sale and archives it; activating it puts it back on sale. Runs the archive workflow, so its hooks and its event fire. A product awaiting review is refused: approve or reject it instead.
26231
27364
 
26232
27365
 
26233
27366
  **Required scope:** `write_products` (for API-key authentication).
27367
+ parameters:
27368
+ - name: x-spree-api-key
27369
+ in: header
27370
+ required: true
27371
+ schema:
27372
+ type: string
27373
+ - name: Authorization
27374
+ in: header
27375
+ required: true
27376
+ schema:
27377
+ type: string
27378
+ responses:
27379
+ '200':
27380
+ description: product archived
27381
+ content:
27382
+ application/json:
27383
+ example:
27384
+ id: prod_gbHJdmfrXB
27385
+ name: Product 1714768
27386
+ slug: product-1714768
27387
+ meta_title:
27388
+ meta_description:
27389
+ meta_keywords:
27390
+ variant_count: 1
27391
+ available_on:
27392
+ preorder_ships_at:
27393
+ purchasable: true
27394
+ preorder: false
27395
+ in_stock: false
27396
+ backorderable: true
27397
+ available: false
27398
+ description: In exercitationem nobis illo accusamus non quibusdam.
27399
+ Minus corporis commodi magni maxime cumque beatae. Exercitationem
27400
+ provident tempore est corrupti eius at dolor. Rerum delectus id
27401
+ aspernatur consequuntur quod enim. Quis omnis amet inventore alias
27402
+ minima praesentium. Quaerat reprehenderit deleniti atque inventore.
27403
+ Nemo quas nam qui architecto eligendi vel pariatur. Veritatis accusantium
27404
+ molestias deleniti omnis autem modi. Officiis optio quidem iste
27405
+ nihil delectus commodi. Aperiam amet omnis eum praesentium natus
27406
+ recusandae suscipit.
27407
+ description_html: |-
27408
+ In exercitationem nobis illo accusamus non quibusdam. Minus corporis commodi magni maxime cumque beatae. Exercitationem provident tempore est corrupti eius at dolor. Rerum delectus id aspernatur consequuntur quod enim.
27409
+ Quis omnis amet inventore alias minima praesentium. Quaerat reprehenderit deleniti atque inventore. Nemo quas nam qui architecto eligendi vel pariatur.
27410
+ Veritatis accusantium molestias deleniti omnis autem modi. Officiis optio quidem iste nihil delectus commodi. Aperiam amet omnis eum praesentium natus recusandae suscipit.
27411
+ default_variant_id: variant_gbHJdmfrXB
27412
+ buy_box_variant_id: variant_gbHJdmfrXB
27413
+ thumbnail_url:
27414
+ tags: []
27415
+ price:
27416
+ id: price_gbHJdmfrXB
27417
+ currency: USD
27418
+ amount: '19.99'
27419
+ compare_at_amount:
27420
+ price_list_id:
27421
+ min_quantity: 1
27422
+ variant_id: variant_gbHJdmfrXB
27423
+ created_at: '2026-01-15T12:00:00.000Z'
27424
+ updated_at: '2026-01-15T12:00:00.000Z'
27425
+ original_price:
27426
+ seller_id:
27427
+ external_references: {}
27428
+ status: archived
27429
+ metadata: {}
27430
+ deleted_at:
27431
+ created_at: '2026-01-15T12:00:00.000Z'
27432
+ updated_at: '2026-01-15T12:00:00.000Z'
27433
+ delivery_profile_id: fp_UkLWZg9DAJ
27434
+ seller_name:
27435
+ product_type_id:
27436
+ tax_category_id: taxcat_UkLWZg9DAJ
27437
+ total_on_hand: 0
27438
+ schema:
27439
+ "$ref": "#/components/schemas/Product"
27440
+ '422':
27441
+ description: the product is awaiting review
27442
+ content:
27443
+ application/json:
27444
+ example:
27445
+ error:
27446
+ code: product_in_review
27447
+ message: A product awaiting review is approved or rejected, not
27448
+ moved to another status
27449
+ schema:
27450
+ "$ref": "#/components/schemas/ErrorResponse"
27451
+ "/api/v3/admin/products/{id}/draft":
27452
+ parameters:
27453
+ - name: id
27454
+ in: path
27455
+ required: true
27456
+ description: Product ID
27457
+ schema:
27458
+ type: string
27459
+ patch:
27460
+ summary: Move a product back to draft
27461
+ tags:
27462
+ - Products
26234
27463
  x-codeSamples:
26235
27464
  - lang: javascript
26236
27465
  label: Spree Admin SDK
@@ -26242,14 +27471,18 @@ paths:
26242
27471
  secretKey: 'sk_xxx',
26243
27472
  })
26244
27473
 
26245
- // The seller sees the reason, fixes the product and submits it again.
26246
- const product = await client.products.reject('prod_86Rf07xd4z', {
26247
- reason: 'Photos are too dark',
26248
- })
27474
+ const product = await client.products.draft('prod_UkLWZg9DAJ')
26249
27475
  - lang: bash
26250
27476
  label: Spree CLI
26251
- source: spree api patch /products/{id}/reject -d '{"reason":"Photos are too
26252
- dark"}'
27477
+ source: spree api patch /products/{id}/draft -d '{ ... }'
27478
+ security:
27479
+ - api_key: []
27480
+ bearer_auth: []
27481
+ description: |-
27482
+ Takes one product off sale, back to a draft. Runs the draft workflow, so its hooks and its event fire. A product awaiting review is refused: approve or reject it instead.
27483
+
27484
+
27485
+ **Required scope:** `write_products` (for API-key authentication).
26253
27486
  parameters:
26254
27487
  - name: x-spree-api-key
26255
27488
  in: header
@@ -26263,13 +27496,13 @@ paths:
26263
27496
  type: string
26264
27497
  responses:
26265
27498
  '200':
26266
- description: product rejected
27499
+ description: product draft
26267
27500
  content:
26268
27501
  application/json:
26269
27502
  example:
26270
27503
  id: prod_gbHJdmfrXB
26271
- name: Product 1564387
26272
- slug: product-1564387
27504
+ name: Product 1752527
27505
+ slug: product-1752527
26273
27506
  meta_title:
26274
27507
  meta_description:
26275
27508
  meta_keywords:
@@ -26281,24 +27514,31 @@ paths:
26281
27514
  in_stock: false
26282
27515
  backorderable: true
26283
27516
  available: false
26284
- description: Iste blanditiis quos vero ipsam reprehenderit quae. Culpa
26285
- recusandae ut quisquam facilis enim dolorum eius. Sapiente explicabo
26286
- animi necessitatibus perspiciatis doloribus aspernatur nobis. Labore
26287
- similique ipsa debitis voluptate a. Nemo occaecati magnam quos voluptatibus
26288
- amet. Facilis quis aperiam corporis corrupti enim. Voluptate dignissimos
26289
- alias exercitationem repudiandae eligendi rerum hic. Facilis sed
26290
- doloremque dicta porro saepe. Ipsam alias et ipsum voluptatum aperiam
26291
- molestiae aliquam tempora. Quod ipsa quas eos hic corrupti dignissimos
26292
- dolorum occaecati. Commodi quis animi at possimus laborum beatae.
26293
- Aliquam vero suscipit reiciendis dolor placeat. Deleniti corporis
26294
- tempora accusamus quae nesciunt animi. Numquam occaecati sapiente
26295
- accusantium amet illum. Vero odio reprehenderit ipsa esse aliquid
26296
- autem ad.
27517
+ description: Temporibus fugiat ducimus quae voluptas error. Iure repellat
27518
+ labore aperiam harum magni. Fuga ullam possimus ad repudiandae atque.
27519
+ Excepturi quidem est expedita molestiae delectus. Optio tempora
27520
+ sed minus voluptatum doloremque. Laborum esse voluptate nostrum
27521
+ nesciunt. Ipsum ducimus a dolor nostrum quis corrupti quae illum.
27522
+ Fuga provident deleniti minima ea vel. Cupiditate architecto omnis
27523
+ reprehenderit iusto suscipit corrupti quia cumque. Voluptatem nisi
27524
+ dignissimos aut nostrum distinctio quo explicabo fugiat. Unde minima
27525
+ ratione enim minus officia rerum odio reiciendis. Fugiat perferendis
27526
+ nulla voluptates voluptatum alias. Voluptatem cumque voluptatibus
27527
+ in sint assumenda ad neque. Inventore error consequuntur exercitationem
27528
+ officia consequatur earum iure autem. Odit iure porro reiciendis
27529
+ placeat. Animi minus vel asperiores maiores error tempora. Dolorum
27530
+ esse sapiente voluptatem iste culpa suscipit. Nulla sapiente sit
27531
+ deserunt iste totam dolores. Tempora magni eveniet natus nemo optio.
27532
+ Aliquid quis ullam illo minus. Atque distinctio sapiente voluptatibus
27533
+ adipisci consectetur repellendus culpa dolor. Dolor pariatur tempora
27534
+ ab repellat unde aliquam sequi. Necessitatibus aliquid fugit molestias
27535
+ facilis ratione.
26297
27536
  description_html: |-
26298
- Iste blanditiis quos vero ipsam reprehenderit quae. Culpa recusandae ut quisquam facilis enim dolorum eius. Sapiente explicabo animi necessitatibus perspiciatis doloribus aspernatur nobis. Labore similique ipsa debitis voluptate a.
26299
- Nemo occaecati magnam quos voluptatibus amet. Facilis quis aperiam corporis corrupti enim. Voluptate dignissimos alias exercitationem repudiandae eligendi rerum hic.
26300
- Facilis sed doloremque dicta porro saepe. Ipsam alias et ipsum voluptatum aperiam molestiae aliquam tempora. Quod ipsa quas eos hic corrupti dignissimos dolorum occaecati. Commodi quis animi at possimus laborum beatae.
26301
- Aliquam vero suscipit reiciendis dolor placeat. Deleniti corporis tempora accusamus quae nesciunt animi. Numquam occaecati sapiente accusantium amet illum. Vero odio reprehenderit ipsa esse aliquid autem ad.
27537
+ Temporibus fugiat ducimus quae voluptas error. Iure repellat labore aperiam harum magni. Fuga ullam possimus ad repudiandae atque. Excepturi quidem est expedita molestiae delectus. Optio tempora sed minus voluptatum doloremque.
27538
+ Laborum esse voluptate nostrum nesciunt. Ipsum ducimus a dolor nostrum quis corrupti quae illum. Fuga provident deleniti minima ea vel. Cupiditate architecto omnis reprehenderit iusto suscipit corrupti quia cumque. Voluptatem nisi dignissimos aut nostrum distinctio quo explicabo fugiat.
27539
+ Unde minima ratione enim minus officia rerum odio reiciendis. Fugiat perferendis nulla voluptates voluptatum alias. Voluptatem cumque voluptatibus in sint assumenda ad neque. Inventore error consequuntur exercitationem officia consequatur earum iure autem.
27540
+ Odit iure porro reiciendis placeat. Animi minus vel asperiores maiores error tempora. Dolorum esse sapiente voluptatem iste culpa suscipit. Nulla sapiente sit deserunt iste totam dolores.
27541
+ Tempora magni eveniet natus nemo optio. Aliquid quis ullam illo minus. Atque distinctio sapiente voluptatibus adipisci consectetur repellendus culpa dolor. Dolor pariatur tempora ab repellat unde aliquam sequi. Necessitatibus aliquid fugit molestias facilis ratione.
26302
27542
  default_variant_id: variant_gbHJdmfrXB
26303
27543
  buy_box_variant_id: variant_gbHJdmfrXB
26304
27544
  thumbnail_url:
@@ -26316,7 +27556,7 @@ paths:
26316
27556
  original_price:
26317
27557
  seller_id:
26318
27558
  external_references: {}
26319
- status: rejected
27559
+ status: draft
26320
27560
  metadata: {}
26321
27561
  deleted_at:
26322
27562
  created_at: '2026-01-15T12:00:00.000Z'
@@ -26325,14 +27565,20 @@ paths:
26325
27565
  seller_name:
26326
27566
  product_type_id:
26327
27567
  tax_category_id: taxcat_UkLWZg9DAJ
27568
+ total_on_hand: 0
26328
27569
  schema:
26329
27570
  "$ref": "#/components/schemas/Product"
26330
- requestBody:
26331
- content:
26332
- application/json:
26333
- schema:
26334
- "$ref": "#/components/schemas/ProductRejectParams"
26335
- required: true
27571
+ '422':
27572
+ description: the product is awaiting review
27573
+ content:
27574
+ application/json:
27575
+ example:
27576
+ error:
27577
+ code: product_in_review
27578
+ message: A product awaiting review is approved or rejected, not
27579
+ moved to another status
27580
+ schema:
27581
+ "$ref": "#/components/schemas/ErrorResponse"
26336
27582
  "/api/v3/admin/translations":
26337
27583
  get:
26338
27584
  summary: Translation coverage for a resource type
@@ -26556,8 +27802,8 @@ paths:
26556
27802
  slug: privacy-policy
26557
27803
  body: ''
26558
27804
  body_html: ''
26559
- updated_at: '2026-01-15T12:00:00.000Z'
26560
- created_at: '2026-01-15T12:00:00.000Z'
27805
+ updated_at: '2026-11-11T12:45:25.480Z'
27806
+ created_at: '2026-11-11T12:45:25.480Z'
26561
27807
  - id: pol_uw2YK1rnl0
26562
27808
  name: Restocking Policy
26563
27809
  slug: restocking-policy
@@ -26570,22 +27816,22 @@ paths:
26570
27816
  slug: returns-policy
26571
27817
  body: ''
26572
27818
  body_html: ''
26573
- updated_at: '2026-01-15T12:00:00.000Z'
26574
- created_at: '2026-01-15T12:00:00.000Z'
27819
+ updated_at: '2026-11-11T12:45:25.483Z'
27820
+ created_at: '2026-11-11T12:45:25.483Z'
26575
27821
  - id: pol_VqXmZF31wY
26576
27822
  name: Shipping Policy
26577
27823
  slug: shipping-policy
26578
27824
  body: ''
26579
27825
  body_html: ''
26580
- updated_at: '2026-01-15T12:00:00.000Z'
26581
- created_at: '2026-01-15T12:00:00.000Z'
27826
+ updated_at: '2026-11-11T12:45:25.486Z'
27827
+ created_at: '2026-11-11T12:45:25.486Z'
26582
27828
  - id: pol_UkLWZg9DAJ
26583
27829
  name: Terms of Service
26584
27830
  slug: terms-of-service
26585
27831
  body: ''
26586
27832
  body_html: ''
26587
- updated_at: '2026-01-15T12:00:00.000Z'
26588
- created_at: '2026-01-15T12:00:00.000Z'
27833
+ updated_at: '2026-11-11T12:45:25.475Z'
27834
+ created_at: '2026-11-11T12:45:25.475Z'
26589
27835
  meta:
26590
27836
  page: 1
26591
27837
  limit: 25
@@ -29886,6 +31132,13 @@ paths:
29886
31132
  required: true
29887
31133
  schema:
29888
31134
  type: string
31135
+ - name: expand
31136
+ in: query
31137
+ required: false
31138
+ description: 'Comma-separated associations to expand: `rules`, `actions` (each
31139
+ under the same shape the write accepts), `custom_fields`.'
31140
+ schema:
31141
+ type: string
29889
31142
  responses:
29890
31143
  '200':
29891
31144
  description: promotion found
@@ -30795,6 +32048,157 @@ paths:
30795
32048
  required:
30796
32049
  - data
30797
32050
  - meta
32051
+ "/api/v3/admin/diagnostics":
32052
+ get:
32053
+ summary: Get the diagnostics report
32054
+ tags:
32055
+ - Settings
32056
+ security:
32057
+ - bearer_auth: []
32058
+ description: |
32059
+ An anonymised description of this installation to attach to a bug
32060
+ report: Spree and gem versions, runtime and infrastructure, settings
32061
+ changed from their defaults, and recent Spree errors by class and code
32062
+ location. It never contains names, emails, URLs, credentials or error
32063
+ messages. `markdown` is the same report ready to paste into a GitHub
32064
+ issue. Available to signed-in admins who can manage the store; a
32065
+ secret API key gets a 404.
32066
+ x-codeSamples:
32067
+ - lang: javascript
32068
+ label: Spree Admin SDK
32069
+ source: |-
32070
+ import { createAdminClient } from '@spree/admin-sdk'
32071
+
32072
+ const client = createAdminClient({
32073
+ baseUrl: 'https://your-store.com',
32074
+ jwtToken: 'eyJhbGciOi...',
32075
+ })
32076
+
32077
+ // Needs a client created with `jwtToken`: a secret key is refused.
32078
+ const report = await client.diagnostics.get()
32079
+ console.log(report.markdown)
32080
+ parameters:
32081
+ - name: Authorization
32082
+ in: header
32083
+ required: true
32084
+ description: Bearer token for admin authentication
32085
+ schema:
32086
+ type: string
32087
+ - name: packages
32088
+ in: query
32089
+ required: false
32090
+ description: The caller's own `@spree/*` packages as comma-separated `name@version`,
32091
+ reported in a Dashboard section. Other entries are ignored.
32092
+ example: "@spree/dashboard@6.0.4,@spree/admin-sdk@6.0.4"
32093
+ schema:
32094
+ type: string
32095
+ responses:
32096
+ '200':
32097
+ description: diagnostics report
32098
+ content:
32099
+ application/json:
32100
+ example:
32101
+ spree_version: 6.0.3
32102
+ sections:
32103
+ - key: platform
32104
+ title: Spree
32105
+ rows:
32106
+ - label: Version
32107
+ value: 6.0.3
32108
+ - label: Gems
32109
+ value: spree_api 6.0.3, spree_core 6.0.3
32110
+ - label: Other gems built on Spree
32111
+ value: '0'
32112
+ - key: runtime
32113
+ title: Runtime
32114
+ rows:
32115
+ - label: Ruby
32116
+ value: 4.0.9 (arm64-darwin25)
32117
+ - label: Rails
32118
+ value: 8.1.4.1
32119
+ - label: Environment
32120
+ value: test
32121
+ - label: Operating system
32122
+ value: Linux 6.8.0 x86_64
32123
+ - label: Web server
32124
+ value: Puma 8.0.2
32125
+ - key: infrastructure
32126
+ title: Infrastructure
32127
+ rows:
32128
+ - label: Database
32129
+ value: sqlite3 3.54.1
32130
+ - label: Queue adapter
32131
+ value: test
32132
+ - label: Cache store
32133
+ value: null_store
32134
+ - label: File storage
32135
+ value: test
32136
+ - key: preferences
32137
+ title: Changed settings
32138
+ rows: []
32139
+ - key: dashboard
32140
+ title: Dashboard
32141
+ rows:
32142
+ - label: "@spree/dashboard"
32143
+ value: 6.0.4
32144
+ errors: []
32145
+ generated_at: '2026-01-15T12:00:00.000Z'
32146
+ markdown: |-
32147
+ <details>
32148
+ <summary>Spree 6.0.3 diagnostics (2026-01-15T12:00:00Z)</summary>
32149
+
32150
+ **Spree**
32151
+
32152
+ | | |
32153
+ | --- | --- |
32154
+ | Version | 6.0.3 |
32155
+ | Gems | spree_api 6.0.3, spree_core 6.0.3 |
32156
+ | Other gems built on Spree | 0 |
32157
+
32158
+ **Runtime**
32159
+
32160
+ | | |
32161
+ | --- | --- |
32162
+ | Ruby | 4.0.9 (arm64-darwin25) |
32163
+ | Rails | 8.1.4.1 |
32164
+ | Environment | test |
32165
+ | Operating system | Linux 6.8.0 x86_64 |
32166
+ | Web server | Puma 8.0.2 |
32167
+
32168
+ **Infrastructure**
32169
+
32170
+ | | |
32171
+ | --- | --- |
32172
+ | Database | sqlite3 3.54.1 |
32173
+ | Queue adapter | test |
32174
+ | Cache store | null_store |
32175
+ | File storage | test |
32176
+
32177
+ **Dashboard**
32178
+
32179
+ | | |
32180
+ | --- | --- |
32181
+ | @spree/dashboard | 6.0.4 |
32182
+
32183
+ **Recent errors**
32184
+
32185
+ None recorded.
32186
+
32187
+ </details>
32188
+ issue_url: https://github.com/spree/spree/issues/new?template=bug_report.yml&environment=%3Cdetails%3E%0A%3Csummary%3ESpree%206.0.3%20diagnostics%20%282026-01-15T12%3A00%3A00Z%29%3C%2Fsummary%3E%0A%0A%2A%2ASpree%2A%2A%0A%0A%7C%20%7C%20%7C%0A%7C%20---%20%7C%20---%20%7C%0A%7C%20Version%20%7C%206.0.3%20%7C%0A%7C%20Gems%20%7C%20spree_api%206.0.3%2C%20spree_core%206.0.3%20%7C%0A%7C%20Other%20gems%20built%20on%20Spree%20%7C%200%20%7C%0A%0A%2A%2ARuntime%2A%2A%0A%0A%7C%20%7C%20%7C%0A%7C%20---%20%7C%20---%20%7C%0A%7C%20Ruby%20%7C%204.0.9%20%28arm64-darwin25%29%20%7C%0A%7C%20Rails%20%7C%208.1.4.1%20%7C%0A%7C%20Environment%20%7C%20test%20%7C%0A%7C%20Operating%20system%20%7C%20Linux%206.8.0%20x86_64%20%7C%0A%7C%20Web%20server%20%7C%20Puma%208.0.2%20%7C%0A%0A%2A%2AInfrastructure%2A%2A%0A%0A%7C%20%7C%20%7C%0A%7C%20---%20%7C%20---%20%7C%0A%7C%20Database%20%7C%20sqlite3%203.54.1%20%7C%0A%7C%20Queue%20adapter%20%7C%20test%20%7C%0A%7C%20Cache%20store%20%7C%20null_store%20%7C%0A%7C%20File%20storage%20%7C%20test%20%7C%0A%0A%2A%2ADashboard%2A%2A%0A%0A%7C%20%7C%20%7C%0A%7C%20---%20%7C%20---%20%7C%0A%7C%20%40spree%2Fdashboard%20%7C%206.0.4%20%7C%0A%0A%2A%2ARecent%20errors%2A%2A%0A%0ANone%20recorded.%0A%0A%3C%2Fdetails%3E
32189
+ issue_prefilled: true
32190
+ schema:
32191
+ "$ref": "#/components/schemas/Diagnostics"
32192
+ '401':
32193
+ description: unauthorized
32194
+ content:
32195
+ application/json:
32196
+ example:
32197
+ error:
32198
+ code: authentication_required
32199
+ message: Authentication required
32200
+ schema:
32201
+ "$ref": "#/components/schemas/ErrorResponse"
30798
32202
  "/api/v3/admin/locales":
30799
32203
  get:
30800
32204
  summary: List supported locales
@@ -30906,7 +32310,7 @@ paths:
30906
32310
  mail_from_address: no-reply@example.com
30907
32311
  customer_support_email: support@example.com
30908
32312
  new_order_notifications_email: store-owner@example.com
30909
- created_at: '2026-01-15T12:00:00.000Z'
32313
+ created_at: '2026-11-11T12:45:25.412Z'
30910
32314
  updated_at: '2026-01-15T12:00:00.000Z'
30911
32315
  order_routing_strategy: rules
30912
32316
  payout_provider:
@@ -31278,7 +32682,7 @@ paths:
31278
32682
  mail_from_address: no-reply@example.com
31279
32683
  customer_support_email: support@example.com
31280
32684
  new_order_notifications_email: store-owner@example.com
31281
- created_at: '2026-01-15T12:00:00.000Z'
32685
+ created_at: '2026-11-11T12:45:25.412Z'
31282
32686
  updated_at: '2026-01-15T12:00:00.000Z'
31283
32687
  order_routing_strategy: rules
31284
32688
  payout_provider:
@@ -32481,7 +33885,7 @@ paths:
32481
33885
  type: string
32482
33886
  - key: contact_phone
32483
33887
  type: string
32484
- readable: false
33888
+ readable: true
32485
33889
  - resource_type: policy
32486
33890
  fields:
32487
33891
  - key: name
@@ -32629,9 +34033,6 @@ paths:
32629
34033
  if (status.update_available) {
32630
34034
  console.log(`Spree ${status.latest_version} is available: ${status.latest_release_url}`)
32631
34035
  }
32632
- - lang: bash
32633
- label: Spree CLI
32634
- source: spree api get /updates
32635
34036
  parameters:
32636
34037
  - name: Authorization
32637
34038
  in: header
@@ -32645,7 +34046,7 @@ paths:
32645
34046
  content:
32646
34047
  application/json:
32647
34048
  example:
32648
- current_version: 6.0.0.rc5
34049
+ current_version: 6.0.3
32649
34050
  enabled: true
32650
34051
  checked_at: '2026-10-03T04:00:00.000Z'
32651
34052
  update_available: true
@@ -35566,7 +36967,7 @@ paths:
35566
36967
  data:
35567
36968
  - id: variant_UkLWZg9DAJ
35568
36969
  product_id: prod_UkLWZg9DAJ
35569
- sku: SKU-285
36970
+ sku: SKU-312
35570
36971
  options_text: ''
35571
36972
  track_inventory: true
35572
36973
  media_count: 0
@@ -35621,11 +37022,11 @@ paths:
35621
37022
  available_stock: 0
35622
37023
  reserved_quantity: 0
35623
37024
  total_on_hand: 0
35624
- product_name: Product 2146804
37025
+ product_name: Product 2396804
35625
37026
  delivery_profile_id: fp_UkLWZg9DAJ
35626
37027
  - id: variant_gbHJdmfrXB
35627
37028
  product_id: prod_UkLWZg9DAJ
35628
- sku: SKU-286
37029
+ sku: SKU-313
35629
37030
  options_text: 'Size: S'
35630
37031
  track_inventory: true
35631
37032
  media_count: 0
@@ -35660,11 +37061,11 @@ paths:
35660
37061
  option_values:
35661
37062
  - id: optval_UkLWZg9DAJ
35662
37063
  option_type_id: opt_UkLWZg9DAJ
35663
- name: size-70
37064
+ name: size-72
35664
37065
  label: S
35665
37066
  position: 1
35666
37067
  color_code:
35667
- option_type_name: foo-size-80
37068
+ option_type_name: foo-size-82
35668
37069
  option_type_label: Size
35669
37070
  image_url:
35670
37071
  metadata: {}
@@ -35692,7 +37093,7 @@ paths:
35692
37093
  available_stock: 0
35693
37094
  reserved_quantity: 0
35694
37095
  total_on_hand: 0
35695
- product_name: Product 2146804
37096
+ product_name: Product 2396804
35696
37097
  delivery_profile_id: fp_UkLWZg9DAJ
35697
37098
  meta:
35698
37099
  page: 1
@@ -35838,7 +37239,7 @@ paths:
35838
37239
  available_stock: 0
35839
37240
  reserved_quantity: 0
35840
37241
  total_on_hand: 0
35841
- product_name: Product 2151771
37242
+ product_name: Product 2401771
35842
37243
  delivery_profile_id: fp_UkLWZg9DAJ
35843
37244
  '422':
35844
37245
  description: validation error
@@ -35850,7 +37251,7 @@ paths:
35850
37251
  message: SKU has already been taken
35851
37252
  details:
35852
37253
  sku:
35853
- - value: SKU-290
37254
+ - value: SKU-317
35854
37255
  code: taken
35855
37256
  message: has already been taken
35856
37257
  specific: false
@@ -35938,7 +37339,7 @@ paths:
35938
37339
  example:
35939
37340
  id: variant_gbHJdmfrXB
35940
37341
  product_id: prod_UkLWZg9DAJ
35941
- sku: SKU-292
37342
+ sku: SKU-319
35942
37343
  options_text: 'Size: S'
35943
37344
  track_inventory: true
35944
37345
  media_count: 0
@@ -35973,11 +37374,11 @@ paths:
35973
37374
  option_values:
35974
37375
  - id: optval_UkLWZg9DAJ
35975
37376
  option_type_id: opt_UkLWZg9DAJ
35976
- name: size-73
37377
+ name: size-75
35977
37378
  label: S
35978
37379
  position: 1
35979
37380
  color_code:
35980
- option_type_name: foo-size-83
37381
+ option_type_name: foo-size-85
35981
37382
  option_type_label: Size
35982
37383
  image_url:
35983
37384
  metadata: {}
@@ -36005,7 +37406,7 @@ paths:
36005
37406
  available_stock: 0
36006
37407
  reserved_quantity: 0
36007
37408
  total_on_hand: 0
36008
- product_name: Product 2174025
37409
+ product_name: Product 2424025
36009
37410
  delivery_profile_id: fp_UkLWZg9DAJ
36010
37411
  '404':
36011
37412
  description: variant not found
@@ -36113,11 +37514,11 @@ paths:
36113
37514
  option_values:
36114
37515
  - id: optval_UkLWZg9DAJ
36115
37516
  option_type_id: opt_UkLWZg9DAJ
36116
- name: size-75
37517
+ name: size-77
36117
37518
  label: S
36118
37519
  position: 1
36119
37520
  color_code:
36120
- option_type_name: foo-size-85
37521
+ option_type_name: foo-size-87
36121
37522
  option_type_label: Size
36122
37523
  image_url:
36123
37524
  metadata: {}
@@ -36145,7 +37546,7 @@ paths:
36145
37546
  available_stock: 0
36146
37547
  reserved_quantity: 0
36147
37548
  total_on_hand: 0
36148
- product_name: Product 2195672
37549
+ product_name: Product 2445672
36149
37550
  delivery_profile_id: fp_UkLWZg9DAJ
36150
37551
  requestBody:
36151
37552
  content:
@@ -36436,7 +37837,7 @@ paths:
36436
37837
  data:
36437
37838
  - id: variant_UkLWZg9DAJ
36438
37839
  product_id: prod_UkLWZg9DAJ
36439
- sku: SKU-299
37840
+ sku: SKU-326
36440
37841
  options_text: ''
36441
37842
  track_inventory: true
36442
37843
  media_count: 0
@@ -36491,11 +37892,11 @@ paths:
36491
37892
  available_stock: 0
36492
37893
  reserved_quantity: 0
36493
37894
  total_on_hand: 0
36494
- product_name: Product 2213647
37895
+ product_name: Product 2463647
36495
37896
  delivery_profile_id: fp_UkLWZg9DAJ
36496
37897
  - id: variant_gbHJdmfrXB
36497
37898
  product_id: prod_UkLWZg9DAJ
36498
- sku: SKU-300
37899
+ sku: SKU-327
36499
37900
  options_text: 'Size: S'
36500
37901
  track_inventory: true
36501
37902
  media_count: 0
@@ -36530,11 +37931,11 @@ paths:
36530
37931
  option_values:
36531
37932
  - id: optval_UkLWZg9DAJ
36532
37933
  option_type_id: opt_UkLWZg9DAJ
36533
- name: size-77
37934
+ name: size-79
36534
37935
  label: S
36535
37936
  position: 1
36536
37937
  color_code:
36537
- option_type_name: foo-size-87
37938
+ option_type_name: foo-size-89
36538
37939
  option_type_label: Size
36539
37940
  image_url:
36540
37941
  metadata: {}
@@ -36562,7 +37963,7 @@ paths:
36562
37963
  available_stock: 0
36563
37964
  reserved_quantity: 0
36564
37965
  total_on_hand: 0
36565
- product_name: Product 2213647
37966
+ product_name: Product 2463647
36566
37967
  delivery_profile_id: fp_UkLWZg9DAJ
36567
37968
  meta:
36568
37969
  page: 1
@@ -38638,6 +40039,30 @@ paths:
38638
40039
  credential: false
38639
40040
  deprecated: false
38640
40041
  replaced_by:
40042
+ - name: product_category.created
40043
+ group: product_category
40044
+ credential_permission:
40045
+ credential: false
40046
+ deprecated: false
40047
+ replaced_by:
40048
+ - name: product_category.deleted
40049
+ group: product_category
40050
+ credential_permission:
40051
+ credential: false
40052
+ deprecated: false
40053
+ replaced_by:
40054
+ - name: product_collection.created
40055
+ group: product_collection
40056
+ credential_permission:
40057
+ credential: false
40058
+ deprecated: false
40059
+ replaced_by:
40060
+ - name: product_collection.deleted
40061
+ group: product_collection
40062
+ credential_permission:
40063
+ credential: false
40064
+ deprecated: false
40065
+ replaced_by:
38641
40066
  - name: product_submission.created
38642
40067
  group: product_submission
38643
40068
  credential_permission:
@@ -39251,7 +40676,7 @@ paths:
39251
40676
  deprecated: false
39252
40677
  replaced_by:
39253
40678
  meta:
39254
- count: 260
40679
+ count: 264
39255
40680
  "/api/v3/admin/catalogs":
39256
40681
  get:
39257
40682
  summary: List catalogs
@@ -39578,6 +41003,77 @@ paths:
39578
41003
  schema:
39579
41004
  "$ref": "#/components/schemas/CatalogAssignParams"
39580
41005
  required: true
41006
+ "/api/v3/admin/catalogs/{id}/import_products":
41007
+ parameters:
41008
+ - name: id
41009
+ in: path
41010
+ required: true
41011
+ schema:
41012
+ type: string
41013
+ post:
41014
+ summary: Import price list products into a catalog
41015
+ tags:
41016
+ - Catalogs
41017
+ x-codeSamples:
41018
+ - lang: javascript
41019
+ label: Spree Admin SDK
41020
+ source: |-
41021
+ import { createAdminClient } from '@spree/admin-sdk'
41022
+
41023
+ const client = createAdminClient({
41024
+ baseUrl: 'https://your-store.com',
41025
+ secretKey: 'sk_xxx',
41026
+ })
41027
+
41028
+ const { added_count } = await client.catalogs.importProducts('cat_86Rf07xd4z')
41029
+ - lang: bash
41030
+ label: Spree CLI
41031
+ source: spree api post /catalogs/{id}/import_products -d '{ ... }'
41032
+ security:
41033
+ - api_key: []
41034
+ bearer_auth: []
41035
+ description: |-
41036
+ Adds every product on the catalog's price list to its assortment. Products
41037
+ already in it stay, even ones the list does not price. Refused for a
41038
+ catalog without a price list; the count reports what was added.
41039
+
41040
+
41041
+ **Required scope:** `write_products` (for API-key authentication).
41042
+ parameters:
41043
+ - name: x-spree-api-key
41044
+ in: header
41045
+ required: true
41046
+ schema:
41047
+ type: string
41048
+ - name: Authorization
41049
+ in: header
41050
+ required: true
41051
+ schema:
41052
+ type: string
41053
+ responses:
41054
+ '200':
41055
+ description: products imported
41056
+ content:
41057
+ application/json:
41058
+ example:
41059
+ added_count: 1
41060
+ schema:
41061
+ type: object
41062
+ properties:
41063
+ added_count:
41064
+ type: integer
41065
+ required:
41066
+ - added_count
41067
+ '422':
41068
+ description: the catalog has no price list
41069
+ content:
41070
+ application/json:
41071
+ example:
41072
+ error:
41073
+ code: validation_error
41074
+ message: This catalog has no price list to import products from.
41075
+ schema:
41076
+ "$ref": "#/components/schemas/ErrorResponse"
39581
41077
  "/api/v3/admin/catalogs/{catalog_id}/products":
39582
41078
  get:
39583
41079
  summary: List catalog products
@@ -39823,12 +41319,12 @@ paths:
39823
41319
  example:
39824
41320
  data:
39825
41321
  - id: prod_UkLWZg9DAJ
39826
- name: Product 12159
41322
+ name: Product 22159
39827
41323
  thumbnail_url:
39828
41324
  catalog_variants:
39829
41325
  - id: variant_UkLWZg9DAJ
39830
41326
  label:
39831
- sku: SKU-1
41327
+ sku: SKU-2
39832
41328
  currency: USD
39833
41329
  source: automatic
39834
41330
  break_count: 0
@@ -41294,6 +42790,7 @@ paths:
41294
42790
  summary: Reposition a collection product
41295
42791
  tags:
41296
42792
  - Collections
42793
+ operationId: collections_reposition_product
41297
42794
  security:
41298
42795
  - api_key: []
41299
42796
  bearer_auth: []
@@ -42429,7 +43926,7 @@ paths:
42429
43926
  first_name:
42430
43927
  last_name:
42431
43928
  full_name: ''
42432
- address1: 23 Lovely Street
43929
+ address1: 25 Lovely Street
42433
43930
  address2: Northwest
42434
43931
  postal_code: '10118'
42435
43932
  city: New York
@@ -42637,7 +44134,7 @@ paths:
42637
44134
  first_name:
42638
44135
  last_name:
42639
44136
  full_name: ''
42640
- address1: 25 Lovely Street
44137
+ address1: 27 Lovely Street
42641
44138
  address2: Northwest
42642
44139
  postal_code: '10118'
42643
44140
  city: New York
@@ -42878,16 +44375,17 @@ paths:
42878
44375
  previous:
42879
44376
  next:
42880
44377
  post:
42881
- summary: Add a member by email
44378
+ summary: Add a member
42882
44379
  tags:
42883
44380
  - Companies
42884
44381
  security:
42885
44382
  - api_key: []
42886
44383
  bearer_auth: []
42887
44384
  description: |-
42888
- Adds a person to the node by email. An email matching an existing customer becomes a
42889
- membership immediately (a `cmem_…` id); an unknown email becomes an invitation
42890
- (a `cinv_…` id) and the invite email goes out.
44385
+ Adds a person to the node, either an existing customer by `customer_id` or anyone by
44386
+ `customer_email`. A customer, or an email matching one, becomes a membership immediately
44387
+ (a `cmem_…` id); an unknown email becomes an invitation (a `cinv_…` id) and the invite
44388
+ email goes out.
42891
44389
 
42892
44390
 
42893
44391
  **Required scope:** `write_customers` (for API-key authentication).
@@ -43678,6 +45176,7 @@ paths:
43678
45176
  summary: Re-check a company tax registration
43679
45177
  tags:
43680
45178
  - Companies
45179
+ operationId: company_tax_identifiers_validate
43681
45180
  security:
43682
45181
  - api_key: []
43683
45182
  bearer_auth: []
@@ -45213,8 +46712,8 @@ paths:
45213
46712
  name: General
45214
46713
  default: true
45215
46714
  position: 1
45216
- created_at: '2026-01-15T12:00:00.000Z'
45217
- updated_at: '2026-01-15T12:00:00.000Z'
46715
+ created_at: '2026-11-11T12:45:25.491Z'
46716
+ updated_at: '2026-11-11T12:45:25.491Z'
45218
46717
  kind: shipping
45219
46718
  digital: false
45220
46719
  offers_pickup: false
@@ -45726,7 +47225,7 @@ paths:
45726
47225
  data:
45727
47226
  - id: dm_UkLWZg9DAJ
45728
47227
  name: UPS Ground
45729
- code: UPS_GROUND_11
47228
+ code: UPS_GROUND_12
45730
47229
  estimated_transit_business_days_min:
45731
47230
  estimated_transit_business_days_max:
45732
47231
  digital: false
@@ -45912,7 +47411,7 @@ paths:
45912
47411
  example:
45913
47412
  id: dm_UkLWZg9DAJ
45914
47413
  name: UPS Express
45915
- code: UPS_GROUND_12
47414
+ code: UPS_GROUND_13
45916
47415
  estimated_transit_business_days_min: 1
45917
47416
  estimated_transit_business_days_max: 2
45918
47417
  digital: false
@@ -47133,18 +48632,22 @@ paths:
47133
48632
  | Attribute | Kind | Predicates |
47134
48633
  |---|---|---|
47135
48634
  | `alt` | Text | `eq` `not_eq` `in` `not_in` `cont` `i_cont` `not_cont` `start` `end` `null` `not_null` `present` `blank` |
48635
+ | `byte_size` | Number | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47136
48636
  | `created_at` | Date and time | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
48637
+ | `filename` | Text | `eq` `not_eq` `in` `not_in` `cont` `i_cont` `not_cont` `start` `end` `null` `not_null` `present` `blank` |
47137
48638
  | `id` | Prefixed ID | `eq` `not_eq` `in` `not_in` `null` `not_null` |
47138
48639
  | `media_type` | One of `image`, `video`, `external_video` | `eq` `not_eq` `in` `not_in` `null` `not_null` |
47139
48640
  | `position` | Number | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47140
48641
  | `updated_at` | Date and time | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47141
48642
 
47142
- **Sort by:** `alt`, `created_at`, `id`, `media_type`, `position`, `updated_at`. Prefix a field with `-` to sort descending.
48643
+ **Sort by:** `alt`, `byte_size`, `created_at`, `filename`, `id`, `media_type`, `position`, `updated_at`. Prefix a field with `-` to sort descending.
47143
48644
  x-spree-filters:
47144
48645
  table: Media
47145
48646
  sortable:
47146
48647
  - alt
48648
+ - byte_size
47147
48649
  - created_at
48650
+ - filename
47148
48651
  - id
47149
48652
  - media_type
47150
48653
  - position
@@ -47169,13 +48672,13 @@ paths:
47169
48672
  video_embed_url:
47170
48673
  video_url:
47171
48674
  poster_url:
47172
- original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg
47173
- mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--3f903649ac66e0043c8adaf4863ea52cd1300ab6/thinking-cat.jpg
47174
- small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f5bdfe7939f0f56c6c00267593e387bb24b3b3e5/thinking-cat.jpg
47175
- medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--52ada528efaa0103221a6e3001cf4a46a7889310/thinking-cat.jpg
47176
- large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--722217e606f0088e8714f1db5cc39930b087612a/thinking-cat.jpg
47177
- xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6a35f609b2c6745523c0ae722d7c0dd6779a568a/thinking-cat.jpg
47178
- og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--0020ff44ca68bbdeb3bb2115e8c3563594f79f50/thinking-cat.jpg
48675
+ original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg
48676
+ mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f31d99c473e446770eab355d27021996d87a6b4f/thinking-cat.jpg
48677
+ small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--723714d967fb303bdad1d3cf8ba94bf6558b4a10/thinking-cat.jpg
48678
+ medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--36830faf4bdf4f022a94d4bdcc88de61440b6e33/thinking-cat.jpg
48679
+ large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6c5f60a2dd3b4d1a2ab5f6103f86b22a64f5fd47/thinking-cat.jpg
48680
+ xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6ce851493cd3ead1087cb140c9deecb4447d1142/thinking-cat.jpg
48681
+ og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--9485e3d0e9e9133d7c52af17e4392a9c6842a55d/thinking-cat.jpg
47179
48682
  external_references: {}
47180
48683
  created_at: '2026-01-15T12:00:00.000Z'
47181
48684
  updated_at: '2026-01-15T12:00:00.000Z'
@@ -47183,10 +48686,10 @@ paths:
47183
48686
  filename: thinking-cat.jpg
47184
48687
  content_type: image/jpeg
47185
48688
  byte_size: 18090
47186
- embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6755f4503fb7441d5f39947f4cfd801b3ad8d627/thinking-cat.jpg
47187
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--aacde269a0019661ac951ab66e97e4338f76c0e3
48689
+ embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--19f16573cafa934a908d21a80fef013aca3219fc/thinking-cat.jpg
48690
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--5cf7f6bc12adaf5ef31072ed4b5eb4c1732ca992
47188
48691
  viewable_id: prod_UkLWZg9DAJ
47189
- download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg?disposition=attachment
48692
+ download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg?disposition=attachment
47190
48693
  metadata: {}
47191
48694
  viewable_type: product
47192
48695
  meta:
@@ -47277,13 +48780,13 @@ paths:
47277
48780
  video_embed_url:
47278
48781
  video_url:
47279
48782
  poster_url:
47280
- original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/library-upload.jpg
47281
- mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--3f903649ac66e0043c8adaf4863ea52cd1300ab6/library-upload.jpg
47282
- small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f5bdfe7939f0f56c6c00267593e387bb24b3b3e5/library-upload.jpg
47283
- medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--52ada528efaa0103221a6e3001cf4a46a7889310/library-upload.jpg
47284
- large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--722217e606f0088e8714f1db5cc39930b087612a/library-upload.jpg
47285
- xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6a35f609b2c6745523c0ae722d7c0dd6779a568a/library-upload.jpg
47286
- og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--0020ff44ca68bbdeb3bb2115e8c3563594f79f50/library-upload.jpg
48783
+ original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/library-upload.jpg
48784
+ mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f31d99c473e446770eab355d27021996d87a6b4f/library-upload.jpg
48785
+ small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--723714d967fb303bdad1d3cf8ba94bf6558b4a10/library-upload.jpg
48786
+ medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--36830faf4bdf4f022a94d4bdcc88de61440b6e33/library-upload.jpg
48787
+ large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6c5f60a2dd3b4d1a2ab5f6103f86b22a64f5fd47/library-upload.jpg
48788
+ xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6ce851493cd3ead1087cb140c9deecb4447d1142/library-upload.jpg
48789
+ og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--9485e3d0e9e9133d7c52af17e4392a9c6842a55d/library-upload.jpg
47287
48790
  external_references: {}
47288
48791
  created_at: '2026-01-15T12:00:00.000Z'
47289
48792
  updated_at: '2026-01-15T12:00:00.000Z'
@@ -47291,10 +48794,10 @@ paths:
47291
48794
  filename: library-upload.jpg
47292
48795
  content_type: image/jpeg
47293
48796
  byte_size: 18090
47294
- embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6755f4503fb7441d5f39947f4cfd801b3ad8d627/library-upload.jpg
47295
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MiwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--a5b15043f3d33016108bd19e25acb6a0e4656b64
48797
+ embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--19f16573cafa934a908d21a80fef013aca3219fc/library-upload.jpg
48798
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MiwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--e50a78b4c158cae84263a776c40322cc8b7b0b57
47296
48799
  viewable_id:
47297
- download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/library-upload.jpg?disposition=attachment
48800
+ download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/library-upload.jpg?disposition=attachment
47298
48801
  metadata: {}
47299
48802
  viewable_type:
47300
48803
  schema:
@@ -47372,13 +48875,13 @@ paths:
47372
48875
  video_embed_url:
47373
48876
  video_url:
47374
48877
  poster_url:
47375
- original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg
47376
- mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--3f903649ac66e0043c8adaf4863ea52cd1300ab6/thinking-cat.jpg
47377
- small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f5bdfe7939f0f56c6c00267593e387bb24b3b3e5/thinking-cat.jpg
47378
- medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--52ada528efaa0103221a6e3001cf4a46a7889310/thinking-cat.jpg
47379
- large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--722217e606f0088e8714f1db5cc39930b087612a/thinking-cat.jpg
47380
- xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6a35f609b2c6745523c0ae722d7c0dd6779a568a/thinking-cat.jpg
47381
- og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--0020ff44ca68bbdeb3bb2115e8c3563594f79f50/thinking-cat.jpg
48878
+ original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg
48879
+ mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f31d99c473e446770eab355d27021996d87a6b4f/thinking-cat.jpg
48880
+ small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--723714d967fb303bdad1d3cf8ba94bf6558b4a10/thinking-cat.jpg
48881
+ medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--36830faf4bdf4f022a94d4bdcc88de61440b6e33/thinking-cat.jpg
48882
+ large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6c5f60a2dd3b4d1a2ab5f6103f86b22a64f5fd47/thinking-cat.jpg
48883
+ xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6ce851493cd3ead1087cb140c9deecb4447d1142/thinking-cat.jpg
48884
+ og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--9485e3d0e9e9133d7c52af17e4392a9c6842a55d/thinking-cat.jpg
47382
48885
  external_references: {}
47383
48886
  created_at: '2026-01-15T12:00:00.000Z'
47384
48887
  updated_at: '2026-01-15T12:00:00.000Z'
@@ -47386,10 +48889,10 @@ paths:
47386
48889
  filename: thinking-cat.jpg
47387
48890
  content_type: image/jpeg
47388
48891
  byte_size: 18090
47389
- embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6755f4503fb7441d5f39947f4cfd801b3ad8d627/thinking-cat.jpg
47390
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--aacde269a0019661ac951ab66e97e4338f76c0e3
48892
+ embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--19f16573cafa934a908d21a80fef013aca3219fc/thinking-cat.jpg
48893
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--5cf7f6bc12adaf5ef31072ed4b5eb4c1732ca992
47391
48894
  viewable_id: prod_UkLWZg9DAJ
47392
- download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg?disposition=attachment
48895
+ download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg?disposition=attachment
47393
48896
  metadata: {}
47394
48897
  viewable_type: product
47395
48898
  schema:
@@ -47463,7 +48966,7 @@ paths:
47463
48966
  example:
47464
48967
  data:
47465
48968
  - kind: media
47466
- name: Product 413397
48969
+ name: Product 483397
47467
48970
  owner_type: product
47468
48971
  owner_id: prod_UkLWZg9DAJ
47469
48972
  field: attachment
@@ -47587,18 +49090,22 @@ paths:
47587
49090
  | Attribute | Kind | Predicates |
47588
49091
  |---|---|---|
47589
49092
  | `alt` | Text | `eq` `not_eq` `in` `not_in` `cont` `i_cont` `not_cont` `start` `end` `null` `not_null` `present` `blank` |
49093
+ | `byte_size` | Number | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47590
49094
  | `created_at` | Date and time | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
49095
+ | `filename` | Text | `eq` `not_eq` `in` `not_in` `cont` `i_cont` `not_cont` `start` `end` `null` `not_null` `present` `blank` |
47591
49096
  | `id` | Prefixed ID | `eq` `not_eq` `in` `not_in` `null` `not_null` |
47592
49097
  | `media_type` | One of `image`, `video`, `external_video` | `eq` `not_eq` `in` `not_in` `null` `not_null` |
47593
49098
  | `position` | Number | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47594
49099
  | `updated_at` | Date and time | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47595
49100
 
47596
- **Sort by:** `alt`, `created_at`, `id`, `media_type`, `position`, `updated_at`. Prefix a field with `-` to sort descending.
49101
+ **Sort by:** `alt`, `byte_size`, `created_at`, `filename`, `id`, `media_type`, `position`, `updated_at`. Prefix a field with `-` to sort descending.
47597
49102
  x-spree-filters:
47598
49103
  table: Media
47599
49104
  sortable:
47600
49105
  - alt
49106
+ - byte_size
47601
49107
  - created_at
49108
+ - filename
47602
49109
  - id
47603
49110
  - media_type
47604
49111
  - position
@@ -47623,13 +49130,13 @@ paths:
47623
49130
  video_embed_url:
47624
49131
  video_url:
47625
49132
  poster_url:
47626
- original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg
47627
- mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--3f903649ac66e0043c8adaf4863ea52cd1300ab6/thinking-cat.jpg
47628
- small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f5bdfe7939f0f56c6c00267593e387bb24b3b3e5/thinking-cat.jpg
47629
- medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--52ada528efaa0103221a6e3001cf4a46a7889310/thinking-cat.jpg
47630
- large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--722217e606f0088e8714f1db5cc39930b087612a/thinking-cat.jpg
47631
- xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6a35f609b2c6745523c0ae722d7c0dd6779a568a/thinking-cat.jpg
47632
- og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--0020ff44ca68bbdeb3bb2115e8c3563594f79f50/thinking-cat.jpg
49133
+ original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg
49134
+ mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f31d99c473e446770eab355d27021996d87a6b4f/thinking-cat.jpg
49135
+ small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--723714d967fb303bdad1d3cf8ba94bf6558b4a10/thinking-cat.jpg
49136
+ medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--36830faf4bdf4f022a94d4bdcc88de61440b6e33/thinking-cat.jpg
49137
+ large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6c5f60a2dd3b4d1a2ab5f6103f86b22a64f5fd47/thinking-cat.jpg
49138
+ xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6ce851493cd3ead1087cb140c9deecb4447d1142/thinking-cat.jpg
49139
+ og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--9485e3d0e9e9133d7c52af17e4392a9c6842a55d/thinking-cat.jpg
47633
49140
  external_references: {}
47634
49141
  created_at: '2026-01-15T12:00:00.000Z'
47635
49142
  updated_at: '2026-01-15T12:00:00.000Z'
@@ -47637,10 +49144,10 @@ paths:
47637
49144
  filename: thinking-cat.jpg
47638
49145
  content_type: image/jpeg
47639
49146
  byte_size: 18090
47640
- embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6755f4503fb7441d5f39947f4cfd801b3ad8d627/thinking-cat.jpg
47641
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--aacde269a0019661ac951ab66e97e4338f76c0e3
49147
+ embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--19f16573cafa934a908d21a80fef013aca3219fc/thinking-cat.jpg
49148
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--5cf7f6bc12adaf5ef31072ed4b5eb4c1732ca992
47642
49149
  viewable_id: prod_UkLWZg9DAJ
47643
- download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg?disposition=attachment
49150
+ download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg?disposition=attachment
47644
49151
  metadata: {}
47645
49152
  viewable_type: product
47646
49153
  meta:
@@ -47731,13 +49238,13 @@ paths:
47731
49238
  video_embed_url:
47732
49239
  video_url:
47733
49240
  poster_url:
47734
- original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg
47735
- mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--3f903649ac66e0043c8adaf4863ea52cd1300ab6/thinking-cat.jpg
47736
- small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f5bdfe7939f0f56c6c00267593e387bb24b3b3e5/thinking-cat.jpg
47737
- medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--52ada528efaa0103221a6e3001cf4a46a7889310/thinking-cat.jpg
47738
- large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--722217e606f0088e8714f1db5cc39930b087612a/thinking-cat.jpg
47739
- xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6a35f609b2c6745523c0ae722d7c0dd6779a568a/thinking-cat.jpg
47740
- og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--0020ff44ca68bbdeb3bb2115e8c3563594f79f50/thinking-cat.jpg
49241
+ original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg
49242
+ mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f31d99c473e446770eab355d27021996d87a6b4f/thinking-cat.jpg
49243
+ small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--723714d967fb303bdad1d3cf8ba94bf6558b4a10/thinking-cat.jpg
49244
+ medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--36830faf4bdf4f022a94d4bdcc88de61440b6e33/thinking-cat.jpg
49245
+ large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6c5f60a2dd3b4d1a2ab5f6103f86b22a64f5fd47/thinking-cat.jpg
49246
+ xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6ce851493cd3ead1087cb140c9deecb4447d1142/thinking-cat.jpg
49247
+ og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--9485e3d0e9e9133d7c52af17e4392a9c6842a55d/thinking-cat.jpg
47741
49248
  external_references: {}
47742
49249
  created_at: '2026-01-15T12:00:00.000Z'
47743
49250
  updated_at: '2026-01-15T12:00:00.000Z'
@@ -47745,10 +49252,10 @@ paths:
47745
49252
  filename: thinking-cat.jpg
47746
49253
  content_type: image/jpeg
47747
49254
  byte_size: 18090
47748
- embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6755f4503fb7441d5f39947f4cfd801b3ad8d627/thinking-cat.jpg
47749
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--aacde269a0019661ac951ab66e97e4338f76c0e3
49255
+ embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--19f16573cafa934a908d21a80fef013aca3219fc/thinking-cat.jpg
49256
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--5cf7f6bc12adaf5ef31072ed4b5eb4c1732ca992
47750
49257
  viewable_id: prod_gbHJdmfrXB
47751
- download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg?disposition=attachment
49258
+ download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg?disposition=attachment
47752
49259
  metadata: {}
47753
49260
  viewable_type: product
47754
49261
  schema:
@@ -47838,13 +49345,13 @@ paths:
47838
49345
  video_embed_url:
47839
49346
  video_url:
47840
49347
  poster_url:
47841
- original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg
47842
- mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--3f903649ac66e0043c8adaf4863ea52cd1300ab6/thinking-cat.jpg
47843
- small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f5bdfe7939f0f56c6c00267593e387bb24b3b3e5/thinking-cat.jpg
47844
- medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--52ada528efaa0103221a6e3001cf4a46a7889310/thinking-cat.jpg
47845
- large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--722217e606f0088e8714f1db5cc39930b087612a/thinking-cat.jpg
47846
- xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6a35f609b2c6745523c0ae722d7c0dd6779a568a/thinking-cat.jpg
47847
- og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--0020ff44ca68bbdeb3bb2115e8c3563594f79f50/thinking-cat.jpg
49348
+ original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg
49349
+ mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f31d99c473e446770eab355d27021996d87a6b4f/thinking-cat.jpg
49350
+ small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--723714d967fb303bdad1d3cf8ba94bf6558b4a10/thinking-cat.jpg
49351
+ medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--36830faf4bdf4f022a94d4bdcc88de61440b6e33/thinking-cat.jpg
49352
+ large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6c5f60a2dd3b4d1a2ab5f6103f86b22a64f5fd47/thinking-cat.jpg
49353
+ xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6ce851493cd3ead1087cb140c9deecb4447d1142/thinking-cat.jpg
49354
+ og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--9485e3d0e9e9133d7c52af17e4392a9c6842a55d/thinking-cat.jpg
47848
49355
  external_references: {}
47849
49356
  created_at: '2026-01-15T12:00:00.000Z'
47850
49357
  updated_at: '2026-01-15T12:00:00.000Z'
@@ -47852,10 +49359,10 @@ paths:
47852
49359
  filename: thinking-cat.jpg
47853
49360
  content_type: image/jpeg
47854
49361
  byte_size: 18090
47855
- embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6755f4503fb7441d5f39947f4cfd801b3ad8d627/thinking-cat.jpg
47856
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--aacde269a0019661ac951ab66e97e4338f76c0e3
49362
+ embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--19f16573cafa934a908d21a80fef013aca3219fc/thinking-cat.jpg
49363
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MSwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--5cf7f6bc12adaf5ef31072ed4b5eb4c1732ca992
47857
49364
  viewable_id: prod_UkLWZg9DAJ
47858
- download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--d70605a927dcb85741046d8205814708ad86c814/thinking-cat.jpg?disposition=attachment
49365
+ download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MSwicHVyIjoiYmxvYl9pZCJ9fQ==--fe5cbf0b8d6bb2970dbcc5053623661df3d2054f/thinking-cat.jpg?disposition=attachment
47859
49366
  metadata: {}
47860
49367
  viewable_type: product
47861
49368
  schema:
@@ -47970,18 +49477,22 @@ paths:
47970
49477
  | Attribute | Kind | Predicates |
47971
49478
  |---|---|---|
47972
49479
  | `alt` | Text | `eq` `not_eq` `in` `not_in` `cont` `i_cont` `not_cont` `start` `end` `null` `not_null` `present` `blank` |
49480
+ | `byte_size` | Number | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47973
49481
  | `created_at` | Date and time | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
49482
+ | `filename` | Text | `eq` `not_eq` `in` `not_in` `cont` `i_cont` `not_cont` `start` `end` `null` `not_null` `present` `blank` |
47974
49483
  | `id` | Prefixed ID | `eq` `not_eq` `in` `not_in` `null` `not_null` |
47975
49484
  | `media_type` | One of `image`, `video`, `external_video` | `eq` `not_eq` `in` `not_in` `null` `not_null` |
47976
49485
  | `position` | Number | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47977
49486
  | `updated_at` | Date and time | `eq` `not_eq` `in` `not_in` `lt` `lteq` `gt` `gteq` `null` `not_null` |
47978
49487
 
47979
- **Sort by:** `alt`, `created_at`, `id`, `media_type`, `position`, `updated_at`. Prefix a field with `-` to sort descending.
49488
+ **Sort by:** `alt`, `byte_size`, `created_at`, `filename`, `id`, `media_type`, `position`, `updated_at`. Prefix a field with `-` to sort descending.
47980
49489
  x-spree-filters:
47981
49490
  table: Media
47982
49491
  sortable:
47983
49492
  - alt
49493
+ - byte_size
47984
49494
  - created_at
49495
+ - filename
47985
49496
  - id
47986
49497
  - media_type
47987
49498
  - position
@@ -48007,13 +49518,13 @@ paths:
48007
49518
  video_embed_url:
48008
49519
  video_url:
48009
49520
  poster_url:
48010
- original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/thinking-cat.jpg
48011
- mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--3f903649ac66e0043c8adaf4863ea52cd1300ab6/thinking-cat.jpg
48012
- small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f5bdfe7939f0f56c6c00267593e387bb24b3b3e5/thinking-cat.jpg
48013
- medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--52ada528efaa0103221a6e3001cf4a46a7889310/thinking-cat.jpg
48014
- large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--722217e606f0088e8714f1db5cc39930b087612a/thinking-cat.jpg
48015
- xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6a35f609b2c6745523c0ae722d7c0dd6779a568a/thinking-cat.jpg
48016
- og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--0020ff44ca68bbdeb3bb2115e8c3563594f79f50/thinking-cat.jpg
49521
+ original_url: http://localhost:3000/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/thinking-cat.jpg
49522
+ mini_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjgsMTI4XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--f31d99c473e446770eab355d27021996d87a6b4f/thinking-cat.jpg
49523
+ small_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyNTYsMjU2XSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--723714d967fb303bdad1d3cf8ba94bf6558b4a10/thinking-cat.jpg
49524
+ medium_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls0MDAsNDAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--36830faf4bdf4f022a94d4bdcc88de61440b6e33/thinking-cat.jpg
49525
+ large_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOls3MjAsNzIwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6c5f60a2dd3b4d1a2ab5f6103f86b22a64f5fd47/thinking-cat.jpg
49526
+ xlarge_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsyMDAwLDIwMDBdLCJzYXZlciI6eyJzdHJpcCI6dHJ1ZSwicXVhbGl0eSI6NzUsImxvc3NsZXNzIjpmYWxzZSwiYWxwaGFfcSI6ODUsInJlZHVjdGlvbl9lZmZvcnQiOjYsInNtYXJ0X3N1YnNhbXBsZSI6dHJ1ZX19LCJwdXIiOiJ2YXJpYXRpb24ifX0=--6ce851493cd3ead1087cb140c9deecb4447d1142/thinking-cat.jpg
49527
+ og_image_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2ZpbGwiOlsxMjAwLDYzMF0sInNhdmVyIjp7InN0cmlwIjp0cnVlLCJxdWFsaXR5Ijo3NSwibG9zc2xlc3MiOmZhbHNlLCJhbHBoYV9xIjo4NSwicmVkdWN0aW9uX2VmZm9ydCI6Niwic21hcnRfc3Vic2FtcGxlIjp0cnVlfX0sInB1ciI6InZhcmlhdGlvbiJ9fQ==--9485e3d0e9e9133d7c52af17e4392a9c6842a55d/thinking-cat.jpg
48017
49528
  external_references: {}
48018
49529
  created_at: '2026-01-15T12:00:00.000Z'
48019
49530
  updated_at: '2026-01-15T12:00:00.000Z'
@@ -48021,10 +49532,10 @@ paths:
48021
49532
  filename: thinking-cat.jpg
48022
49533
  content_type: image/jpeg
48023
49534
  byte_size: 18090
48024
- embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--6755f4503fb7441d5f39947f4cfd801b3ad8d627/thinking-cat.jpg
48025
- signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MiwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--a5b15043f3d33016108bd19e25acb6a0e4656b64
49535
+ embed_url: http://localhost:3000/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJ3ZWJwIiwicmVzaXplX3RvX2xpbWl0IjpbMTIwMCwxMjAwXSwic2F2ZXIiOnsic3RyaXAiOnRydWUsInF1YWxpdHkiOjc1LCJsb3NzbGVzcyI6ZmFsc2UsImFscGhhX3EiOjg1LCJyZWR1Y3Rpb25fZWZmb3J0Ijo2LCJzbWFydF9zdWJzYW1wbGUiOnRydWV9fSwicHVyIjoidmFyaWF0aW9uIn19--19f16573cafa934a908d21a80fef013aca3219fc/thinking-cat.jpg
49536
+ signed_id: eyJfcmFpbHMiOnsiZGF0YSI6MiwiZXhwIjoiMjAyNi0wMS0xNlQxMjowMDowMC4wMDBaIiwicHVyIjoiYmxvYl9pZCJ9fQ==--e50a78b4c158cae84263a776c40322cc8b7b0b57
48026
49537
  viewable_id: variant_gbHJdmfrXB
48027
- download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--d09b5425a813f091eba0215bef6560cfbfe00b36/thinking-cat.jpg?disposition=attachment
49538
+ download_url: http://localhost:3000/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsiZGF0YSI6MiwicHVyIjoiYmxvYl9pZCJ9fQ==--a04b7436d72914c87c4a8cbdd0574722dc35892b/thinking-cat.jpg?disposition=attachment
48028
49539
  metadata: {}
48029
49540
  viewable_type: variant
48030
49541
  meta:
@@ -49258,6 +50769,7 @@ paths:
49258
50769
  summary: Buy or record a shipping label
49259
50770
  tags:
49260
50771
  - Shipping Labels
50772
+ operationId: shipping_labels_purchase
49261
50773
  security:
49262
50774
  - api_key: []
49263
50775
  bearer_auth: []
@@ -50310,12 +51822,12 @@ paths:
50310
51822
  example:
50311
51823
  data:
50312
51824
  - id: prod_UkLWZg9DAJ
50313
- name: Product 1083365
51825
+ name: Product 1163365
50314
51826
  thumbnail_url:
50315
51827
  price_list_variants:
50316
51828
  - id: variant_UkLWZg9DAJ
50317
51829
  label:
50318
- sku: SKU-127
51830
+ sku: SKU-137
50319
51831
  currency: USD
50320
51832
  source: base
50321
51833
  break_count: 1
@@ -51370,8 +52882,8 @@ paths:
51370
52882
  purchase_order_id: po_UkLWZg9DAJ
51371
52883
  variant_id: variant_gbHJdmfrXB
51372
52884
  product_id: prod_UkLWZg9DAJ
51373
- variant_name: Product 1639018
51374
- variant_sku: SKU-198
52885
+ variant_name: Product 1849018
52886
+ variant_sku: SKU-221
51375
52887
  options_text: 'Size: S'
51376
52888
  thumbnail_url:
51377
52889
  supplier:
@@ -51701,6 +53213,7 @@ paths:
51701
53213
  summary: Book in a delivery
51702
53214
  tags:
51703
53215
  - Purchase Orders
53216
+ operationId: purchase_orders_receive
51704
53217
  security:
51705
53218
  - api_key: []
51706
53219
  bearer_auth: []
@@ -52335,6 +53848,9 @@ paths:
52335
53848
  summary: Run a reporting query
52336
53849
  tags:
52337
53850
  - Reports
53851
+ x-spree-agent: false
53852
+ x-spree-agent-reason: query_report runs this query, with describe_reporting
53853
+ to learn the vocabulary first.
52338
53854
  security:
52339
53855
  - api_key: []
52340
53856
  bearer_auth: []
@@ -53250,7 +54766,7 @@ paths:
53250
54766
  default: false
53251
54767
  require_contact_email:
53252
54768
  type: boolean
53253
- default: true
54769
+ default: false
53254
54770
  additionalProperties: false
53255
54771
  - type: billing_address
53256
54772
  name: Billing address
@@ -53720,6 +55236,12 @@ paths:
53720
55236
  on_holiday: false
53721
55237
  sellable: false
53722
55238
  products_count: 0
55239
+ products_count_by_status:
55240
+ draft: 0
55241
+ active: 0
55242
+ archived: 0
55243
+ proposed: 0
55244
+ rejected: 0
53723
55245
  users_count: 0
53724
55246
  onboarding_progress:
53725
55247
  done: 0
@@ -53727,6 +55249,7 @@ paths:
53727
55249
  onboarding_complete: true
53728
55250
  legal_name:
53729
55251
  registration_number:
55252
+ returns_location_id:
53730
55253
  meta:
53731
55254
  page: 1
53732
55255
  limit: 25
@@ -53837,6 +55360,12 @@ paths:
53837
55360
  on_holiday: false
53838
55361
  sellable: false
53839
55362
  products_count: 0
55363
+ products_count_by_status:
55364
+ draft: 0
55365
+ active: 0
55366
+ archived: 0
55367
+ proposed: 0
55368
+ rejected: 0
53840
55369
  users_count: 0
53841
55370
  onboarding_progress:
53842
55371
  done: 0
@@ -53844,6 +55373,7 @@ paths:
53844
55373
  onboarding_complete: true
53845
55374
  legal_name:
53846
55375
  registration_number:
55376
+ returns_location_id: sloc_UkLWZg9DAJ
53847
55377
  schema:
53848
55378
  "$ref": "#/components/schemas/Seller"
53849
55379
  '422':
@@ -53946,6 +55476,12 @@ paths:
53946
55476
  on_holiday: false
53947
55477
  sellable: false
53948
55478
  products_count: 0
55479
+ products_count_by_status:
55480
+ draft: 0
55481
+ active: 0
55482
+ archived: 0
55483
+ proposed: 0
55484
+ rejected: 0
53949
55485
  users_count: 0
53950
55486
  onboarding_progress:
53951
55487
  done: 0
@@ -53953,6 +55489,7 @@ paths:
53953
55489
  onboarding_complete: true
53954
55490
  legal_name:
53955
55491
  registration_number:
55492
+ returns_location_id:
53956
55493
  schema:
53957
55494
  "$ref": "#/components/schemas/Seller"
53958
55495
  '404':
@@ -54041,6 +55578,12 @@ paths:
54041
55578
  on_holiday: false
54042
55579
  sellable: false
54043
55580
  products_count: 0
55581
+ products_count_by_status:
55582
+ draft: 0
55583
+ active: 0
55584
+ archived: 0
55585
+ proposed: 0
55586
+ rejected: 0
54044
55587
  users_count: 0
54045
55588
  onboarding_progress:
54046
55589
  done: 0
@@ -54048,6 +55591,7 @@ paths:
54048
55591
  onboarding_complete: true
54049
55592
  legal_name:
54050
55593
  registration_number:
55594
+ returns_location_id:
54051
55595
  billing_address:
54052
55596
  id: addr_UkLWZg9DAJ
54053
55597
  label:
@@ -54232,6 +55776,12 @@ paths:
54232
55776
  on_holiday: false
54233
55777
  sellable: false
54234
55778
  products_count: 0
55779
+ products_count_by_status:
55780
+ draft: 0
55781
+ active: 0
55782
+ archived: 0
55783
+ proposed: 0
55784
+ rejected: 0
54235
55785
  users_count: 0
54236
55786
  onboarding_progress:
54237
55787
  done: 0
@@ -54239,6 +55789,7 @@ paths:
54239
55789
  onboarding_complete: true
54240
55790
  legal_name:
54241
55791
  registration_number:
55792
+ returns_location_id:
54242
55793
  schema:
54243
55794
  "$ref": "#/components/schemas/Seller"
54244
55795
  requestBody:
@@ -54247,6 +55798,189 @@ paths:
54247
55798
  schema:
54248
55799
  "$ref": "#/components/schemas/SellerInviteParams"
54249
55800
  required: true
55801
+ "/api/v3/admin/sellers/{seller_id}/invitations":
55802
+ parameters:
55803
+ - name: seller_id
55804
+ in: path
55805
+ required: true
55806
+ description: Seller prefixed ID
55807
+ schema:
55808
+ type: string
55809
+ post:
55810
+ summary: Invite someone to a seller team
55811
+ tags:
55812
+ - Sellers
55813
+ operationId: sellers_invite_team_member
55814
+ x-codeSamples:
55815
+ - lang: javascript
55816
+ label: Spree Admin SDK
55817
+ source: |-
55818
+ import { createAdminClient } from '@spree/admin-sdk'
55819
+
55820
+ const client = createAdminClient({
55821
+ baseUrl: 'https://your-store.com',
55822
+ secretKey: 'sk_xxx',
55823
+ })
55824
+
55825
+ // Adds someone to the seller's team without changing the seller's status.
55826
+ const invitation = await client.sellers.invitations.create('sel_UkLWZg9DAJ', {
55827
+ email: 'teammate@northwind.example',
55828
+ })
55829
+ - lang: bash
55830
+ label: Spree CLI
55831
+ source: spree api post /sellers/{seller_id}/invitations -d '{"email":"teammate@northwind.example"}'
55832
+ security:
55833
+ - api_key: []
55834
+ bearer_auth: []
55835
+ description: |-
55836
+ Invites someone to join the seller's team with the seller's own admin
55837
+ role. They become a member when they accept. Unlike the seller's
55838
+ `invite` action, this leaves the seller's status unchanged, so use it to
55839
+ add people to a seller that is already approved.
55840
+
55841
+
55842
+ **Required scope:** `write_sellers` (for API-key authentication).
55843
+ parameters:
55844
+ - name: x-spree-api-key
55845
+ in: header
55846
+ required: true
55847
+ schema:
55848
+ type: string
55849
+ - name: Authorization
55850
+ in: header
55851
+ required: true
55852
+ schema:
55853
+ type: string
55854
+ responses:
55855
+ '201':
55856
+ description: invitation sent
55857
+ content:
55858
+ application/json:
55859
+ example:
55860
+ id: inv_UkLWZg9DAJ
55861
+ email: teammate@example.com
55862
+ status: pending
55863
+ created_at: '2026-01-15T12:00:00.000Z'
55864
+ updated_at: '2026-01-15T12:00:00.000Z'
55865
+ expires_at: '2026-01-29T12:00:00.000Z'
55866
+ role_id: role_gbHJdmfrXB
55867
+ role_name: admin
55868
+ inviter_email: marta@nikolaus.com
55869
+ invitee_exists: false
55870
+ store:
55871
+ id: store_UkLWZg9DAJ
55872
+ name: Spree Test Store
55873
+ schema:
55874
+ "$ref": "#/components/schemas/Invitation"
55875
+ '422':
55876
+ description: invalid email
55877
+ content:
55878
+ application/json:
55879
+ example:
55880
+ error:
55881
+ code: validation_error
55882
+ message: Email is invalid
55883
+ details:
55884
+ email:
55885
+ - value: nope
55886
+ code: invalid
55887
+ message: is invalid
55888
+ specific: false
55889
+ schema:
55890
+ "$ref": "#/components/schemas/ErrorResponse"
55891
+ requestBody:
55892
+ content:
55893
+ application/json:
55894
+ schema:
55895
+ "$ref": "#/components/schemas/SellerInvitationCreateParams"
55896
+ required: true
55897
+ "/api/v3/admin/sellers/{seller_id}/invitations/{id}/resend":
55898
+ parameters:
55899
+ - name: seller_id
55900
+ in: path
55901
+ required: true
55902
+ description: Seller prefixed ID
55903
+ schema:
55904
+ type: string
55905
+ - name: id
55906
+ in: path
55907
+ required: true
55908
+ description: Invitation prefixed ID
55909
+ schema:
55910
+ type: string
55911
+ patch:
55912
+ summary: Resend a seller invitation
55913
+ tags:
55914
+ - Sellers
55915
+ x-codeSamples:
55916
+ - lang: javascript
55917
+ label: Spree Admin SDK
55918
+ source: |-
55919
+ import { createAdminClient } from '@spree/admin-sdk'
55920
+
55921
+ const client = createAdminClient({
55922
+ baseUrl: 'https://your-store.com',
55923
+ secretKey: 'sk_xxx',
55924
+ })
55925
+
55926
+ const invitation = await client.sellers.invitations.resend('seller_UkLWZg9DAJ', 'inv_UkLWZg9DAJ')
55927
+ - lang: bash
55928
+ label: Spree CLI
55929
+ source: spree api patch /sellers/{seller_id}/invitations/{id}/resend -d '{
55930
+ ... }'
55931
+ security:
55932
+ - api_key: []
55933
+ bearer_auth: []
55934
+ description: |-
55935
+ Sends a pending invitation to the seller's team again, with a fresh
55936
+ acceptance link. Use it when the email never arrived; an invitation that
55937
+ has expired is refused, so invite the person again instead.
55938
+
55939
+
55940
+ **Required scope:** `write_sellers` (for API-key authentication).
55941
+ parameters:
55942
+ - name: x-spree-api-key
55943
+ in: header
55944
+ required: true
55945
+ schema:
55946
+ type: string
55947
+ - name: Authorization
55948
+ in: header
55949
+ required: true
55950
+ schema:
55951
+ type: string
55952
+ responses:
55953
+ '200':
55954
+ description: invitation resent
55955
+ content:
55956
+ application/json:
55957
+ example:
55958
+ id: inv_UkLWZg9DAJ
55959
+ email: gaye@rutherfordmosciski.co.uk
55960
+ status: pending
55961
+ created_at: '2026-01-15T12:00:00.000Z'
55962
+ updated_at: '2026-01-15T12:00:00.000Z'
55963
+ expires_at: '2026-01-29T12:00:00.000Z'
55964
+ role_id: role_UkLWZg9DAJ
55965
+ role_name: admin
55966
+ inviter_email: carman@schambergernicolas.ca
55967
+ invitee_exists: false
55968
+ store:
55969
+ id: store_UkLWZg9DAJ
55970
+ name: Spree Test Store
55971
+ schema:
55972
+ "$ref": "#/components/schemas/Invitation"
55973
+ '422':
55974
+ description: the invitation has expired
55975
+ content:
55976
+ application/json:
55977
+ example:
55978
+ error:
55979
+ code: processing_error
55980
+ message: This invitation has expired. Invite them again to send
55981
+ a new one.
55982
+ schema:
55983
+ "$ref": "#/components/schemas/ErrorResponse"
54250
55984
  "/api/v3/admin/sellers/{id}/approve":
54251
55985
  parameters:
54252
55986
  - name: id
@@ -54327,6 +56061,12 @@ paths:
54327
56061
  on_holiday: false
54328
56062
  sellable: true
54329
56063
  products_count: 0
56064
+ products_count_by_status:
56065
+ draft: 0
56066
+ active: 0
56067
+ archived: 0
56068
+ proposed: 0
56069
+ rejected: 0
54330
56070
  users_count: 0
54331
56071
  onboarding_progress:
54332
56072
  done: 0
@@ -54334,6 +56074,7 @@ paths:
54334
56074
  onboarding_complete: true
54335
56075
  legal_name:
54336
56076
  registration_number:
56077
+ returns_location_id:
54337
56078
  schema:
54338
56079
  "$ref": "#/components/schemas/Seller"
54339
56080
  '422':
@@ -54436,6 +56177,12 @@ paths:
54436
56177
  on_holiday: false
54437
56178
  sellable: false
54438
56179
  products_count: 0
56180
+ products_count_by_status:
56181
+ draft: 0
56182
+ active: 0
56183
+ archived: 0
56184
+ proposed: 0
56185
+ rejected: 0
54439
56186
  users_count: 0
54440
56187
  onboarding_progress:
54441
56188
  done: 0
@@ -54443,6 +56190,7 @@ paths:
54443
56190
  onboarding_complete: true
54444
56191
  legal_name:
54445
56192
  registration_number:
56193
+ returns_location_id:
54446
56194
  schema:
54447
56195
  "$ref": "#/components/schemas/Seller"
54448
56196
  '422':
@@ -54550,6 +56298,12 @@ paths:
54550
56298
  on_holiday: false
54551
56299
  sellable: false
54552
56300
  products_count: 0
56301
+ products_count_by_status:
56302
+ draft: 0
56303
+ active: 0
56304
+ archived: 0
56305
+ proposed: 0
56306
+ rejected: 0
54553
56307
  users_count: 0
54554
56308
  onboarding_progress:
54555
56309
  done: 0
@@ -54557,6 +56311,7 @@ paths:
54557
56311
  onboarding_complete: true
54558
56312
  legal_name:
54559
56313
  registration_number:
56314
+ returns_location_id:
54560
56315
  schema:
54561
56316
  "$ref": "#/components/schemas/Seller"
54562
56317
  requestBody:
@@ -54647,6 +56402,12 @@ paths:
54647
56402
  on_holiday: false
54648
56403
  sellable: false
54649
56404
  products_count: 0
56405
+ products_count_by_status:
56406
+ draft: 0
56407
+ active: 0
56408
+ archived: 0
56409
+ proposed: 0
56410
+ rejected: 0
54650
56411
  users_count: 0
54651
56412
  onboarding_progress:
54652
56413
  done: 0
@@ -54654,6 +56415,7 @@ paths:
54654
56415
  onboarding_complete: true
54655
56416
  legal_name:
54656
56417
  registration_number:
56418
+ returns_location_id:
54657
56419
  schema:
54658
56420
  "$ref": "#/components/schemas/Seller"
54659
56421
  requestBody:
@@ -55192,6 +56954,9 @@ paths:
55192
56954
  summary: Mark a payout paid
55193
56955
  tags:
55194
56956
  - Sellers
56957
+ x-spree-agent: false
56958
+ x-spree-agent-reason: Settles a payout against the payment provider, reconciling
56959
+ against provider state an agent cannot see.
55195
56960
  security:
55196
56961
  - api_key: []
55197
56962
  bearer_auth: []
@@ -55433,8 +57198,8 @@ paths:
55433
57198
  reserved_count: 0
55434
57199
  incoming_count: 0
55435
57200
  purchasable_count: 0
55436
- variant_name: Product 1885410
55437
- variant_sku: SKU-233
57201
+ variant_name: Product 2135410
57202
+ variant_sku: SKU-260
55438
57203
  created_at: '2026-01-15T12:00:00.000Z'
55439
57204
  updated_at: '2026-01-15T12:00:00.000Z'
55440
57205
  stock_location_name: Jong Schamberger
@@ -55453,8 +57218,8 @@ paths:
55453
57218
  reserved_count: 0
55454
57219
  incoming_count: 0
55455
57220
  purchasable_count: 0
55456
- variant_name: Product 1885410
55457
- variant_sku: SKU-234
57221
+ variant_name: Product 2135410
57222
+ variant_sku: SKU-261
55458
57223
  created_at: '2026-01-15T12:00:00.000Z'
55459
57224
  updated_at: '2026-01-15T12:00:00.000Z'
55460
57225
  stock_location_name: Jong Schamberger
@@ -55473,8 +57238,8 @@ paths:
55473
57238
  reserved_count: 2
55474
57239
  incoming_count: 20
55475
57240
  purchasable_count: 35
55476
- variant_name: Product 1885410
55477
- variant_sku: SKU-234
57241
+ variant_name: Product 2135410
57242
+ variant_sku: SKU-261
55478
57243
  created_at: '2026-01-15T12:00:00.000Z'
55479
57244
  updated_at: '2026-01-15T12:00:00.000Z'
55480
57245
  stock_location_name: Pilar Stokes
@@ -55510,6 +57275,9 @@ paths:
55510
57275
  summary: Bulk-upsert stock levels
55511
57276
  tags:
55512
57277
  - Stock
57278
+ x-spree-agent: false
57279
+ x-spree-agent-reason: set_stock calls this endpoint already, taking stock by
57280
+ SKU and location the way a merchant names them.
55513
57281
  security:
55514
57282
  - api_key: []
55515
57283
  bearer_auth: []
@@ -55658,8 +57426,8 @@ paths:
55658
57426
  reserved_count: 0
55659
57427
  incoming_count: 0
55660
57428
  purchasable_count: 25
55661
- variant_name: Product 1919378
55662
- variant_sku: SKU-240
57429
+ variant_name: Product 2169378
57430
+ variant_sku: SKU-267
55663
57431
  created_at: '2026-01-15T12:00:00.000Z'
55664
57432
  updated_at: '2026-01-15T12:00:00.000Z'
55665
57433
  stock_location_name: Gilbert Marquardt
@@ -55837,8 +57605,8 @@ paths:
55837
57605
  stock_location_id: sloc_UkLWZg9DAJ
55838
57606
  stock_location_name: Mona Hegmann
55839
57607
  variant_id: variant_gbHJdmfrXB
55840
- variant_name: Product 1928513
55841
- variant_sku: SKU-241
57608
+ variant_name: Product 2178513
57609
+ variant_sku: SKU-268
55842
57610
  order_id:
55843
57611
  fulfillment_id:
55844
57612
  return_id:
@@ -55952,8 +57720,8 @@ paths:
55952
57720
  stock_location_id: sloc_UkLWZg9DAJ
55953
57721
  stock_location_name: Chrystal Sauer
55954
57722
  variant_id: variant_gbHJdmfrXB
55955
- variant_name: Product 1942954
55956
- variant_sku: SKU-245
57723
+ variant_name: Product 2192954
57724
+ variant_sku: SKU-272
55957
57725
  order_id:
55958
57726
  fulfillment_id:
55959
57727
  return_id:
@@ -56544,8 +58312,8 @@ paths:
56544
58312
  stock_transfer_id: st_UkLWZg9DAJ
56545
58313
  variant_id: variant_gbHJdmfrXB
56546
58314
  product_id: prod_UkLWZg9DAJ
56547
- variant_name: Product 2012176
56548
- variant_sku: SKU-258
58315
+ variant_name: Product 2262176
58316
+ variant_sku: SKU-285
56549
58317
  options_text: 'Size: S'
56550
58318
  thumbnail_url:
56551
58319
  source_location:
@@ -57041,6 +58809,7 @@ paths:
57041
58809
  summary: Count a delivery in
57042
58810
  tags:
57043
58811
  - Stock Transfers
58812
+ operationId: stock_transfers_receive
57044
58813
  security:
57045
58814
  - api_key: []
57046
58815
  bearer_auth: []
@@ -61252,6 +63021,8 @@ components:
61252
63021
  type: string
61253
63022
  updated_at:
61254
63023
  type: string
63024
+ customer:
63025
+ "$ref": "#/components/schemas/Customer"
61255
63026
  required:
61256
63027
  - id
61257
63028
  - company_id
@@ -62312,6 +64083,24 @@ components:
62312
64083
  type: array
62313
64084
  items:
62314
64085
  type: object
64086
+ properties:
64087
+ id:
64088
+ type: string
64089
+ name:
64090
+ type: string
64091
+ nullable: true
64092
+ position:
64093
+ type: number
64094
+ nullable: true
64095
+ stock_location_ids:
64096
+ type: array
64097
+ items:
64098
+ type: string
64099
+ required:
64100
+ - id
64101
+ - name
64102
+ - position
64103
+ - stock_location_ids
62315
64104
  products_count:
62316
64105
  type: number
62317
64106
  delivery_methods_count:
@@ -62788,6 +64577,36 @@ components:
62788
64577
  - delivery_origin_group_id
62789
64578
  - delivery_method_ids
62790
64579
  x-typelizer: true
64580
+ Diagnostics:
64581
+ type: object
64582
+ properties:
64583
+ spree_version:
64584
+ type: string
64585
+ sections:
64586
+ type: array
64587
+ items:
64588
+ type: object
64589
+ errors:
64590
+ type: array
64591
+ items:
64592
+ type: object
64593
+ generated_at:
64594
+ type: string
64595
+ markdown:
64596
+ type: string
64597
+ issue_url:
64598
+ type: string
64599
+ issue_prefilled:
64600
+ type: boolean
64601
+ required:
64602
+ - spree_version
64603
+ - sections
64604
+ - errors
64605
+ - generated_at
64606
+ - markdown
64607
+ - issue_url
64608
+ - issue_prefilled
64609
+ x-typelizer: true
62791
64610
  DigitalAsset:
62792
64611
  type: object
62793
64612
  properties:
@@ -63650,6 +65469,14 @@ components:
63650
65469
  type: array
63651
65470
  items:
63652
65471
  type: object
65472
+ properties:
65473
+ kind:
65474
+ type: string
65475
+ url:
65476
+ type: string
65477
+ required:
65478
+ - kind
65479
+ - url
63653
65480
  labels:
63654
65481
  type: array
63655
65482
  items:
@@ -64414,6 +66241,14 @@ components:
64414
66241
  type: boolean
64415
66242
  store:
64416
66243
  type: object
66244
+ properties:
66245
+ id:
66246
+ type: string
66247
+ name:
66248
+ type: string
66249
+ required:
66250
+ - id
66251
+ - name
64417
66252
  required:
64418
66253
  - id
64419
66254
  - email
@@ -64714,6 +66549,9 @@ components:
64714
66549
  tax_category_id:
64715
66550
  type: string
64716
66551
  nullable: true
66552
+ product_id:
66553
+ type: string
66554
+ nullable: true
64717
66555
  variant:
64718
66556
  "$ref": "#/components/schemas/Variant"
64719
66557
  tax_category:
@@ -64753,6 +66591,7 @@ components:
64753
66591
  - catalog_name
64754
66592
  - cost_price
64755
66593
  - tax_category_id
66594
+ - product_id
64756
66595
  x-typelizer: true
64757
66596
  Locale:
64758
66597
  type: object
@@ -67750,6 +69589,14 @@ components:
67750
69589
  type: boolean
67751
69590
  description: Whether the card issuer reported that the security code did
67752
69591
  not match.
69592
+ can_void:
69593
+ type: boolean
69594
+ description: Whether the payment can be voided now, as decided by its payment
69595
+ method.
69596
+ can_capture:
69597
+ type: boolean
69598
+ description: Whether the payment can be captured now, as decided by its
69599
+ payment method.
67753
69600
  captured_amount:
67754
69601
  type: string
67755
69602
  order_id:
@@ -67788,6 +69635,8 @@ components:
67788
69635
  - updated_at
67789
69636
  - avs_risky
67790
69637
  - cvv_risky
69638
+ - can_void
69639
+ - can_capture
67791
69640
  - captured_amount
67792
69641
  - order_id
67793
69642
  x-typelizer: true
@@ -68853,6 +70702,9 @@ components:
68853
70702
  tax_category_id:
68854
70703
  type: string
68855
70704
  nullable: true
70705
+ total_on_hand:
70706
+ type: number
70707
+ nullable: true
68856
70708
  digital_assets:
68857
70709
  type: array
68858
70710
  items:
@@ -68905,6 +70757,7 @@ components:
68905
70757
  - seller_name
68906
70758
  - product_type_id
68907
70759
  - tax_category_id
70760
+ - total_on_hand
68908
70761
  x-typelizer: true
68909
70762
  ProductSubmission:
68910
70763
  type: object
@@ -69214,6 +71067,14 @@ components:
69214
71067
  type: array
69215
71068
  items:
69216
71069
  type: string
71070
+ rules:
71071
+ type: array
71072
+ items:
71073
+ "$ref": "#/components/schemas/PromotionRule"
71074
+ actions:
71075
+ type: array
71076
+ items:
71077
+ "$ref": "#/components/schemas/PromotionAction"
69217
71078
  required:
69218
71079
  - id
69219
71080
  - name
@@ -70033,6 +71894,14 @@ components:
70033
71894
  type: array
70034
71895
  items:
70035
71896
  type: object
71897
+ properties:
71898
+ kind:
71899
+ type: string
71900
+ url:
71901
+ type: string
71902
+ required:
71903
+ - kind
71904
+ - url
70036
71905
  labels:
70037
71906
  type: array
70038
71907
  items:
@@ -70856,6 +72725,15 @@ components:
70856
72725
  nullable: true
70857
72726
  blocker:
70858
72727
  type: object
72728
+ properties:
72729
+ state:
72730
+ type: string
72731
+ message:
72732
+ type: string
72733
+ nullable: true
72734
+ required:
72735
+ - state
72736
+ - message
70859
72737
  nullable: true
70860
72738
  blocking:
70861
72739
  type: boolean
@@ -71034,6 +72912,14 @@ components:
71034
72912
  type: number
71035
72913
  onboarding_progress:
71036
72914
  type: object
72915
+ properties:
72916
+ done:
72917
+ type: number
72918
+ total:
72919
+ type: number
72920
+ required:
72921
+ - done
72922
+ - total
71037
72923
  onboarding_complete:
71038
72924
  type: boolean
71039
72925
  legal_name:
@@ -71046,6 +72932,9 @@ components:
71046
72932
  "$ref": "#/components/schemas/Address"
71047
72933
  returns_address:
71048
72934
  "$ref": "#/components/schemas/Address"
72935
+ returns_location_id:
72936
+ type: string
72937
+ nullable: true
71049
72938
  required:
71050
72939
  - id
71051
72940
  - name
@@ -71076,6 +72965,7 @@ components:
71076
72965
  - onboarding_complete
71077
72966
  - legal_name
71078
72967
  - registration_number
72968
+ - returns_location_id
71079
72969
  x-typelizer: true
71080
72970
  SellerTeamMember:
71081
72971
  type: object
@@ -77871,7 +79761,7 @@ components:
77871
79761
  default: false
77872
79762
  require_contact_email:
77873
79763
  type: boolean
77874
- default: true
79764
+ default: false
77875
79765
  additionalProperties: false
77876
79766
  SellerRequirementDeliveryMethodPreferences:
77877
79767
  type: object
@@ -78602,6 +80492,20 @@ components:
78602
80492
  - zh-HK
78603
80493
  - zh-TW
78604
80494
  - zu
80495
+ DimensionUnit:
80496
+ type: string
80497
+ enum:
80498
+ - mm
80499
+ - cm
80500
+ - in
80501
+ - ft
80502
+ WeightUnit:
80503
+ type: string
80504
+ enum:
80505
+ - g
80506
+ - kg
80507
+ - lb
80508
+ - oz
78605
80509
  TimeZone:
78606
80510
  anyOf:
78607
80511
  - type: string
@@ -78746,20 +80650,6 @@ components:
78746
80650
  - type: string
78747
80651
  description: Common IANA time zones; any other IANA time zone identifier is
78748
80652
  accepted too.
78749
- DimensionUnit:
78750
- type: string
78751
- enum:
78752
- - mm
78753
- - cm
78754
- - in
78755
- - ft
78756
- WeightUnit:
78757
- type: string
78758
- enum:
78759
- - g
78760
- - kg
78761
- - lb
78762
- - oz
78763
80653
  AddressInputParams:
78764
80654
  type: object
78765
80655
  properties:
@@ -79876,17 +81766,20 @@ components:
79876
81766
  CompanyMembershipCreateParams:
79877
81767
  type: object
79878
81768
  properties:
81769
+ customer_id:
81770
+ type: string
81771
+ description: An existing customer, who becomes a member immediately. Send
81772
+ this or `customer_email`.
81773
+ example: cus_UkLWZg9DAJ
79879
81774
  customer_email:
79880
81775
  type: string
79881
81776
  description: An existing customer becomes a member immediately; an unknown
79882
81777
  email becomes an invitation, and the response is an invitation instead
79883
- of a membership.
81778
+ of a membership. Send this or `customer_id`.
79884
81779
  example: buyer@example.com
79885
81780
  metadata:
79886
81781
  type: object
79887
81782
  additionalProperties: true
79888
- required:
79889
- - customer_email
79890
81783
  CompanyUpdateParams:
79891
81784
  type: object
79892
81785
  properties:
@@ -84218,7 +86111,8 @@ components:
84218
86111
  type: boolean
84219
86112
  description: 'Admits a seller whose onboarding checklist is unfinished:
84220
86113
  the operator''s deliberate exception, which the `seller.approved` event
84221
- records along with what was outstanding.'
86114
+ records along with what was outstanding. Also admits a `pending` or `invited`
86115
+ seller who never started onboarding, which is refused without it.'
84222
86116
  SellerCreateParams:
84223
86117
  type: object
84224
86118
  properties:
@@ -84303,6 +86197,13 @@ components:
84303
86197
  description: 'The seller''s own billing address, written inline. There is
84304
86198
  no `billing_address_id`: an address belongs to whoever it was created
84305
86199
  for, so it is never referenced by id.'
86200
+ returns_address:
86201
+ allOf:
86202
+ - "$ref": "#/components/schemas/SellerAddressParams"
86203
+ description: 'Where customers send returns, written inline. It is the address
86204
+ of the seller''s returns stock location, so it updates that location,
86205
+ or creates one for a seller who has none. Names and `label` are ignored:
86206
+ a location has none.'
84306
86207
  custom_fields:
84307
86208
  type: array
84308
86209
  items:
@@ -84310,6 +86211,14 @@ components:
84310
86211
  description: Custom field values, each validated against its definition.
84311
86212
  required:
84312
86213
  - name
86214
+ SellerInvitationCreateParams:
86215
+ type: object
86216
+ properties:
86217
+ email:
86218
+ type: string
86219
+ example: teammate@example.com
86220
+ required:
86221
+ - email
84313
86222
  SellerInviteParams:
84314
86223
  type: object
84315
86224
  properties:
@@ -84538,6 +86447,13 @@ components:
84538
86447
  description: 'The seller''s own billing address, written inline. There is
84539
86448
  no `billing_address_id`: an address belongs to whoever it was created
84540
86449
  for, so it is never referenced by id.'
86450
+ returns_address:
86451
+ allOf:
86452
+ - "$ref": "#/components/schemas/SellerAddressParams"
86453
+ description: 'Where customers send returns, written inline. It is the address
86454
+ of the seller''s returns stock location, so it updates that location,
86455
+ or creates one for a seller who has none. Names and `label` are ignored:
86456
+ a location has none.'
84541
86457
  custom_fields:
84542
86458
  type: array
84543
86459
  items:
@@ -84664,6 +86580,12 @@ components:
84664
86580
  backorderable:
84665
86581
  type: boolean
84666
86582
  nullable: true
86583
+ reason:
86584
+ type: string
86585
+ description: Labels the movement in the stock history. Defaults to "Inventory
86586
+ feed".
86587
+ example: received
86588
+ nullable: true
84667
86589
  required:
84668
86590
  - variant_id
84669
86591
  - stock_location_id
@@ -85306,7 +87228,6 @@ components:
85306
87228
  description: A `signed_id` from `files.upload()` for the logo in transactional
85307
87229
  emails, or null to remove it.
85308
87230
  nullable: true
85309
-
85310
87231
  SupplierCreateParams:
85311
87232
  type: object
85312
87233
  properties:
@@ -86593,7 +88514,9 @@ components:
86593
88514
  Media:
86594
88515
  attributes:
86595
88516
  alt: text
88517
+ byte_size: integer
86596
88518
  created_at: datetime
88519
+ filename: text
86597
88520
  id: id
86598
88521
  media_type:
86599
88522
  enum: