spree_api 3.6.6 → 3.7.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/spree/api/main.js +36 -0
  3. data/app/assets/javascripts/spree/api/storefront/cart.js +49 -0
  4. data/app/controllers/concerns/spree/api/v2/storefront/order_concern.rb +48 -0
  5. data/app/controllers/spree/api/errors_controller.rb +9 -0
  6. data/app/controllers/spree/api/v1/checkouts_controller.rb +12 -0
  7. data/app/controllers/spree/api/v1/customer_returns_controller.rb +1 -0
  8. data/app/controllers/spree/api/v1/line_items_controller.rb +11 -10
  9. data/app/controllers/spree/api/v1/orders_controller.rb +6 -6
  10. data/app/controllers/spree/api/v1/product_properties_controller.rb +1 -0
  11. data/app/controllers/spree/api/v1/products_controller.rb +6 -6
  12. data/app/controllers/spree/api/v1/promotions_controller.rb +1 -0
  13. data/app/controllers/spree/api/v1/reimbursements_controller.rb +1 -0
  14. data/app/controllers/spree/api/v1/shipments_controller.rb +12 -3
  15. data/app/controllers/spree/api/v1/variants_controller.rb +5 -3
  16. data/app/controllers/spree/api/v2/base_controller.rb +94 -0
  17. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +55 -0
  18. data/app/controllers/spree/api/v2/storefront/account_controller.rb +33 -0
  19. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +124 -0
  20. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +108 -0
  21. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +57 -0
  22. data/app/controllers/spree/api/v2/storefront/products_controller.rb +87 -0
  23. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +82 -0
  24. data/app/helpers/spree/api/api_helpers.rb +1 -1
  25. data/app/helpers/spree/api/v2/collection_options_helpers.rb +37 -0
  26. data/app/models/doorkeeper/access_grant_decorator.rb +3 -0
  27. data/app/models/doorkeeper/access_token_decorator.rb +3 -0
  28. data/app/models/doorkeeper/application_decorator.rb +3 -0
  29. data/app/serializers/spree/v2/storefront/account/credit_card_serializer.rb +16 -0
  30. data/app/serializers/spree/v2/storefront/account_serializer.rb +29 -0
  31. data/app/serializers/spree/v2/storefront/address_serializer.rb +14 -0
  32. data/app/serializers/spree/v2/storefront/base_serializer.rb +9 -0
  33. data/app/serializers/spree/v2/storefront/cart_serializer.rb +40 -0
  34. data/app/serializers/spree/v2/storefront/country_serializer.rb +18 -0
  35. data/app/serializers/spree/v2/storefront/image_serializer.rb +11 -0
  36. data/app/serializers/spree/v2/storefront/line_item_serializer.rb +17 -0
  37. data/app/serializers/spree/v2/storefront/option_type_serializer.rb +13 -0
  38. data/app/serializers/spree/v2/storefront/option_value_serializer.rb +11 -0
  39. data/app/serializers/spree/v2/storefront/payment_method_serializer.rb +11 -0
  40. data/app/serializers/spree/v2/storefront/payment_serializer.rb +12 -0
  41. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +14 -0
  42. data/app/serializers/spree/v2/storefront/product_serializer.rb +35 -0
  43. data/app/serializers/spree/v2/storefront/promotion_serializer.rb +12 -0
  44. data/app/serializers/spree/v2/storefront/shipment_serializer.rb +16 -0
  45. data/app/serializers/spree/v2/storefront/shipping_rate_serializer.rb +14 -0
  46. data/app/serializers/spree/v2/storefront/state_serializer.rb +11 -0
  47. data/app/serializers/spree/v2/storefront/taxon_image_serializer.rb +11 -0
  48. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +28 -0
  49. data/app/serializers/spree/v2/storefront/taxonomy_serializer.rb +11 -0
  50. data/app/serializers/spree/v2/storefront/user_serializer.rb +11 -0
  51. data/app/serializers/spree/v2/storefront/variant_serializer.rb +21 -0
  52. data/app/views/spree/api/v1/orders/order.v1.rabl +1 -1
  53. data/config/initializers/doorkeeper.rb +20 -0
  54. data/config/locales/en.yml +4 -0
  55. data/config/routes.rb +51 -3
  56. data/db/migrate/20180320110726_create_doorkeeper_tables.rb +69 -0
  57. data/docs/oauth/index.yml +77 -0
  58. data/docs/v2/storefront/index.yaml +2444 -0
  59. data/lib/spree/api/engine.rb +9 -2
  60. data/lib/spree_api.rb +2 -0
  61. data/spree_api.gemspec +5 -1
  62. metadata +92 -7
@@ -0,0 +1,14 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class ShippingRateSerializer < BaseSerializer
5
+ set_type :shipping_rate
6
+
7
+ attributes :name, :selected, :final_price, :display_final_price, :cost,
8
+ :display_cost, :tax_amount, :display_tax_amount, :shipping_method_id
9
+
10
+ attribute :free, &:free?
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class StateSerializer < BaseSerializer
5
+ set_type :state
6
+
7
+ attributes :abbr, :name
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class TaxonImageSerializer < BaseSerializer
5
+ set_type :taxon_image
6
+
7
+ attributes :viewable_type, :viewable_id, :styles
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class TaxonSerializer < BaseSerializer
5
+ set_type :taxon
6
+
7
+ attributes :name, :pretty_name, :permalink, :seo_title, :meta_title, :meta_description,
8
+ :meta_keywords, :left, :right, :position, :depth, :updated_at
9
+
10
+ attribute :is_root, &:root?
11
+ attribute :is_child, &:child?
12
+ attribute :is_leaf, &:leaf?
13
+
14
+ belongs_to :parent, record_type: :taxon, serializer: :taxon
15
+ belongs_to :taxonomy, record_type: :taxonomy
16
+
17
+ has_many :children, record_type: :child, serializer: :taxon
18
+ has_many :products, record_type: :product
19
+
20
+ has_one :image,
21
+ object_method_name: :icon,
22
+ id_method_name: :icon_id,
23
+ record_type: :taxon_image,
24
+ serializer: :taxon_image
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class TaxonomySerializer < BaseSerializer
5
+ set_type :taxonomy
6
+
7
+ attributes :name, :position
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class UserSerializer < BaseSerializer
5
+ set_type :user
6
+
7
+ attributes :email
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ module Spree
2
+ module V2
3
+ module Storefront
4
+ class VariantSerializer < BaseSerializer
5
+ set_type :variant
6
+
7
+ attributes :name, :sku, :price, :currency, :display_price, :weight, :height,
8
+ :width, :depth, :is_master, :options_text, :slug, :description,
9
+ :track_inventory
10
+
11
+ attribute :purchasable, &:purchasable?
12
+ attribute :in_stock, &:in_stock?
13
+ attribute :backorderable, &:backorderable?
14
+
15
+ belongs_to :product
16
+ has_many :images
17
+ has_many :option_values
18
+ end
19
+ end
20
+ end
21
+ end
@@ -6,5 +6,5 @@ node(:display_total) { |o| o.display_total.to_s }
6
6
  node(:display_ship_total, &:display_ship_total)
7
7
  node(:display_tax_total, &:display_tax_total)
8
8
  node(:display_adjustment_total, &:display_adjustment_total)
9
- node(:token, &:guest_token)
9
+ node(:token, &:token)
10
10
  node(:checkout_steps, &:checkout_steps)
@@ -0,0 +1,20 @@
1
+ Doorkeeper.configure do
2
+ orm :active_record
3
+ use_refresh_token
4
+ api_only
5
+
6
+ resource_owner_authenticator { current_spree_user }
7
+
8
+ resource_owner_from_credentials do
9
+ user = Spree.user_class.find_for_database_authentication(email: params[:username])
10
+ user if user&.valid_for_authentication? { user.valid_password?(params[:password]) }
11
+ end
12
+
13
+ admin_authenticator do |routes|
14
+ current_spree_user&.has_spree_role?('admin') || redirect_to(routes.root_url)
15
+ end
16
+
17
+ grant_flows %w(password)
18
+
19
+ access_token_methods :from_bearer_authorization, :from_access_token_param
20
+ end
@@ -29,3 +29,7 @@ en:
29
29
  shipment_transfer_errors_occured: "Following errors occured while attempting this action:"
30
30
  negative_quantity: "quantity is negative"
31
31
  wrong_shipment_target: "target shipment is the same as original shipment"
32
+
33
+ v2:
34
+ cart:
35
+ wrong_quantity: "Quantity has to be greater than 0"
data/config/routes.rb CHANGED
@@ -1,3 +1,9 @@
1
+ spree_path = Rails.application.routes.url_helpers.try(:spree_path, trailing_slash: true) || '/'
2
+
3
+ Rails.application.routes.draw do
4
+ use_doorkeeper scope: "#{spree_path}/spree_oauth"
5
+ end
6
+
1
7
  Spree::Core::Engine.add_routes do
2
8
  namespace :api, defaults: { format: 'json' } do
3
9
  namespace :v1 do
@@ -122,20 +128,62 @@ Spree::Core::Engine.add_routes do
122
128
  get '/taxons/products', to: 'taxons#products', as: :taxon_products
123
129
  end
124
130
 
125
- spree_path = Rails.application.routes.url_helpers.try(:spree_path, trailing_slash: true) || '/'
131
+ namespace :v2 do
132
+ namespace :storefront do
133
+ resource :cart, controller: :cart, only: %i[show create] do
134
+ post :add_item
135
+ patch :empty
136
+ delete 'remove_line_item/:line_item_id', to: 'cart#remove_line_item', as: :cart_remove_line_item
137
+ patch :set_quantity
138
+ patch :apply_coupon_code
139
+ delete 'remove_coupon_code/:coupon_code', to: 'cart#remove_coupon_code', as: :cart_remove_coupon_code
140
+ end
141
+
142
+ resource :checkout, controller: :checkout, only: %i[update] do
143
+ patch :next
144
+ patch :advance
145
+ patch :complete
146
+ post :add_store_credit
147
+ post :remove_store_credit
148
+ get :payment_methods
149
+ get :shipping_rates
150
+ end
151
+
152
+ resource :account, controller: :account, only: %i[show]
153
+
154
+ namespace :account do
155
+ resources :credit_cards, controller: :credit_cards, only: %i[index show]
156
+ end
157
+
158
+ resources :countries, only: %i[index]
159
+ get '/countries/:iso', to: 'countries#show', as: :country
160
+ resources :products, only: %i[index show]
161
+ resources :taxons, only: %i[index show]
162
+ end
163
+ end
164
+
165
+ get '/404', to: 'errors#render_404'
126
166
 
127
167
  match 'v:api/*path', to: redirect { |params, request|
128
168
  format = ".#{params[:format]}" unless params[:format].blank?
129
169
  query = "?#{request.query_string}" unless request.query_string.blank?
130
170
 
131
- "#{spree_path}api/v1/#{params[:path]}#{format}#{query}"
171
+ if request.path == "#{spree_path}api/v1/#{params[:path]}#{format}#{query}"
172
+ "#{spree_path}api/404"
173
+ else
174
+ "#{spree_path}api/v1/#{params[:path]}#{format}#{query}"
175
+ end
132
176
  }, via: [:get, :post, :put, :patch, :delete]
133
177
 
134
178
  match '*path', to: redirect { |params, request|
135
179
  format = ".#{params[:format]}" unless params[:format].blank?
136
180
  query = "?#{request.query_string}" unless request.query_string.blank?
137
181
 
138
- "#{spree_path}api/v1/#{params[:path]}#{format}#{query}"
182
+ if request.path == "#{spree_path}api/v1/#{params[:path]}#{format}#{query}"
183
+ "#{spree_path}api/404"
184
+ else
185
+ "#{spree_path}api/v1/#{params[:path]}#{format}#{query}"
186
+ end
139
187
  }, via: [:get, :post, :put, :patch, :delete]
140
188
  end
141
189
  end
@@ -0,0 +1,69 @@
1
+ class CreateDoorkeeperTables < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :spree_oauth_applications do |t|
4
+ t.string :name, null: false
5
+ t.string :uid, null: false
6
+ t.string :secret, null: false
7
+ t.text :redirect_uri, null: false
8
+ t.string :scopes, null: false, default: ''
9
+ t.boolean :confidential, null: false, default: true
10
+ t.timestamps null: false
11
+ end
12
+
13
+ add_index :spree_oauth_applications, :uid, unique: true
14
+
15
+ create_table :spree_oauth_access_grants do |t|
16
+ t.integer :resource_owner_id, null: false
17
+ t.references :application, null: false
18
+ t.string :token, null: false
19
+ t.integer :expires_in, null: false
20
+ t.text :redirect_uri, null: false
21
+ t.datetime :created_at, null: false
22
+ t.datetime :revoked_at
23
+ t.string :scopes
24
+ end
25
+
26
+ add_index :spree_oauth_access_grants, :token, unique: true
27
+ add_foreign_key(
28
+ :spree_oauth_access_grants,
29
+ :spree_oauth_applications,
30
+ column: :application_id
31
+ )
32
+
33
+ create_table :spree_oauth_access_tokens do |t|
34
+ t.integer :resource_owner_id
35
+ t.references :application
36
+
37
+ # If you use a custom token generator you may need to change this column
38
+ # from string to text, so that it accepts tokens larger than 255
39
+ # characters. More info on custom token generators in:
40
+ # https://github.com/doorkeeper-gem/doorkeeper/tree/v3.0.0.rc1#custom-access-token-generator
41
+ #
42
+ # t.text :token, null: false
43
+ t.string :token, null: false
44
+
45
+ t.string :refresh_token
46
+ t.integer :expires_in
47
+ t.datetime :revoked_at
48
+ t.datetime :created_at, null: false
49
+ t.string :scopes
50
+
51
+ # If there is a previous_refresh_token column,
52
+ # refresh tokens will be revoked after a related access token is used.
53
+ # If there is no previous_refresh_token column,
54
+ # previous tokens are revoked as soon as a new access token is created.
55
+ # Comment out this line if you'd rather have refresh tokens
56
+ # instantly revoked.
57
+ t.string :previous_refresh_token, null: false, default: ""
58
+ end
59
+
60
+ add_index :spree_oauth_access_tokens, :token, unique: true
61
+ add_index :spree_oauth_access_tokens, :resource_owner_id
62
+ add_index :spree_oauth_access_tokens, :refresh_token, unique: true
63
+ add_foreign_key(
64
+ :spree_oauth_access_tokens,
65
+ :spree_oauth_applications,
66
+ column: :application_id
67
+ )
68
+ end
69
+ end
@@ -0,0 +1,77 @@
1
+ openapi: 3.0.0
2
+ servers:
3
+ - url: 'http://localhost:3000/spree_oauth'
4
+ info:
5
+ version: 1.0.0
6
+ title: Spree OAuth 2.0 Authentication
7
+ description: >-
8
+ Spree uses the [Doorkeeper](https://github.com/doorkeeper-gem/doorkeeper) gem
9
+ for handling OAuth. This integration is built into `spree_api` gem.
10
+ paths:
11
+ '/token':
12
+ post:
13
+ description: >-
14
+ Creates or refreshes a Bearer token required to authorize calls API calls
15
+ tags:
16
+ - Token
17
+ operationId: Create or Refresh Token
18
+ responses:
19
+ '200':
20
+ description: Token was succesfully created or refreshed
21
+ content:
22
+ application/json:
23
+ schema:
24
+ $ref: '#/components/schemas/Token'
25
+ requestBody:
26
+ required: true
27
+ content:
28
+ application/x-www-form-urlencoded:
29
+ schema:
30
+ oneOf:
31
+ - $ref: '#/components/schemas/CreateTokenBody'
32
+ - $ref: '#/components/schemas/RefreshTokenBody'
33
+ components:
34
+ schemas:
35
+ Token:
36
+ properties:
37
+ access_token:
38
+ type: string
39
+ example: 2480c16561d1391ea81ca5336b651e9a29f4524f6dee8c7f3f02a600159189c3
40
+ token_type:
41
+ type: string
42
+ example: Bearer
43
+ default: Bearer
44
+ expires_in:
45
+ type: integer
46
+ example: 7200
47
+ description: 'Time (in seconds) after which the access token will expire'
48
+ refresh_token:
49
+ type: string
50
+ example: f5d78642252eeb3f3001f67b196ac21a27afc030462a54060b0ebbdae2b8dc9c
51
+ created_at:
52
+ type: integer
53
+ example: 1539863418
54
+ CreateTokenBody:
55
+ properties:
56
+ grant_type:
57
+ type: string
58
+ default: password
59
+ description: >-
60
+ Use `password` to create a token and `refresh_token` to refresh it
61
+ username:
62
+ type: string
63
+ description: User email address
64
+ example: 'spree@example.com'
65
+ password:
66
+ type: string
67
+ description: User password
68
+ example: 'spree123'
69
+ RefreshTokenBody:
70
+ properties:
71
+ grant_type:
72
+ type: string
73
+ default: refresh_token
74
+ refresh_token:
75
+ type: string
76
+ description: Rerefresh token obtained from the old created token
77
+ example: 27af95fd57a424e5d01aaf5eab1324a8d5c0ca57daf384fae39f811a5144330143301'
@@ -0,0 +1,2444 @@
1
+ openapi: 3.0.0
2
+ servers:
3
+ - url: 'http://localhost:3000/api/v2/storefront'
4
+ info:
5
+ version: 2.0.0
6
+ title: Storefront API
7
+ description: >-
8
+ <p>
9
+ Storefront API v2 is a modern REST API based on the
10
+ <a href="https://jsonapi.org/" target="_blank" rel="noopener">JSON API spec</a>
11
+ which provides you with necessary endpoints to build amazing user
12
+ intefaces either in JavaScript frameworks or native mobile libraries.
13
+ </p>
14
+ <p>
15
+ Please read our introduction to the API v2 [insert link here]
16
+ </p>
17
+ <p>
18
+ <a href="https://raw.githubusercontent.com/spree/spree/master/api/docs/v2/storefront/index.yaml" target="_blank" rel="noopener">
19
+ Import this documentation to Postman
20
+ </a>
21
+ </p>
22
+ paths:
23
+ '/account':
24
+ get:
25
+ description: >-
26
+ Returns current user information
27
+ tags:
28
+ - Account
29
+ operationId: 'Account Information'
30
+ parameters:
31
+ - $ref: '#/components/parameters/AccountIncludeParam'
32
+ - $ref: '#/components/parameters/SparseFieldsParam'
33
+ responses:
34
+ '200':
35
+ description: ok
36
+ content:
37
+ application/json:
38
+ schema:
39
+ $ref: '#/components/schemas/Account'
40
+ '403':
41
+ $ref: '#/components/responses/403Forbidden'
42
+ security:
43
+ - bearerAuth: []
44
+
45
+ '/account/credit_cards':
46
+ get:
47
+ description: >-
48
+ Returns a list of Credit Cards for the signed in User
49
+ tags:
50
+ - Account
51
+ operationId: 'Credit Cards list'
52
+ responses:
53
+ '200':
54
+ description: Listing user credit cards.
55
+ content:
56
+ application/json:
57
+ schema:
58
+ $ref: '#/components/schemas/CreditCardList'
59
+ '403':
60
+ $ref: '#/components/responses/403Forbidden'
61
+ security:
62
+ - bearerAuth: []
63
+ parameters:
64
+ - in: query
65
+ name: filter[payment_method_id]
66
+ schema:
67
+ type: integer
68
+ example: 2
69
+ description: Filter based on payment method ID
70
+ - $ref: '#/components/parameters/CreditCardIncludeParam'
71
+ - $ref: '#/components/parameters/SparseFieldsParam'
72
+ '/account/credit_cards/default':
73
+ get:
74
+ description: >-
75
+ Return the User's default Credit Card
76
+ tags:
77
+ - Account
78
+ operationId: 'Default Credit Card'
79
+ responses:
80
+ '200':
81
+ description: Listing user default credit card.
82
+ content:
83
+ application/json:
84
+ schema:
85
+ $ref: '#/components/schemas/CreditCard'
86
+ '403':
87
+ $ref: '#/components/responses/403Forbidden'
88
+ parameters:
89
+ - $ref: '#/components/parameters/CreditCardIncludeParam'
90
+ - $ref: '#/components/parameters/SparseFieldsParam'
91
+ security:
92
+ - bearerAuth: []
93
+ '/cart':
94
+ post:
95
+ description: >-
96
+ <p>Creates new Cart and returns it attributes.</p>
97
+ <br />
98
+ <p>
99
+ <strong>token</strong> attribute, can be used for authorization of all operations
100
+ on this particular Cart and Checkout.
101
+ </p>
102
+ tags:
103
+ - Cart
104
+ operationId: 'Create Cart'
105
+ responses:
106
+ '201':
107
+ description: Cart was successfully created
108
+ content:
109
+ application/json:
110
+ schema:
111
+ $ref: '#/components/schemas/Cart'
112
+ parameters:
113
+ - $ref: '#/components/parameters/CartIncludeParam'
114
+ - $ref: '#/components/parameters/SparseFieldsParam'
115
+ get:
116
+ description: Returns contents of the cart
117
+ tags:
118
+ - Cart
119
+ operationId: 'Get Cart'
120
+ responses:
121
+ '200':
122
+ description: Correct cart was returned
123
+ content:
124
+ application/json:
125
+ schema:
126
+ $ref: '#/components/schemas/Cart'
127
+ '404':
128
+ $ref: '#/components/responses/404NotFound'
129
+ security:
130
+ - orderToken: []
131
+ - bearerAuth: []
132
+ parameters:
133
+ - $ref: '#/components/parameters/CartIncludeParam'
134
+ - $ref: '#/components/parameters/SparseFieldsParam'
135
+
136
+ '/cart/add_item':
137
+ post:
138
+ description: >-
139
+ Adds a Product Variant to the Cart
140
+ <br />
141
+ <p>
142
+ Additional parameters passed in <strong>options</strong> hash
143
+ must be registered in <cite>config/initialiers/spree.rb</cite>, eg.
144
+ </p>
145
+ <br />
146
+ <blockquote>
147
+ Spree::PermittedAttributes.line_item_attributes << :foo
148
+ </blockquote>
149
+ tags:
150
+ - Cart
151
+ operationId: 'Add Item'
152
+ responses:
153
+ '200':
154
+ description: Item was added to the Cart successfully
155
+ content:
156
+ application/json:
157
+ schema:
158
+ $ref: '#/components/schemas/Cart'
159
+ '404':
160
+ $ref: '#/components/responses/404NotFound'
161
+ security:
162
+ - orderToken: []
163
+ - bearerAuth: []
164
+ parameters:
165
+ - $ref: '#/components/parameters/CartIncludeParam'
166
+ - $ref: '#/components/parameters/SparseFieldsParam'
167
+ requestBody:
168
+ required: true
169
+ content:
170
+ application/json:
171
+ schema:
172
+ type: object
173
+ properties:
174
+ variant_id:
175
+ type: string
176
+ quantity:
177
+ type: integer
178
+ options:
179
+ type: object
180
+ description: >-
181
+ Additional custom options.
182
+ You need to add them via
183
+ `Spree::PermittedAttributes.line_item_attributes << :foo`
184
+ in `config/initialiers/spree.rb`
185
+ example:
186
+ variant_id: "1"
187
+ quantity: 5
188
+
189
+ '/cart/set_quantity':
190
+ patch:
191
+ description: Sets the quantity of a given line item. It has to be a positive integer greater than 0.
192
+ tags:
193
+ - Cart
194
+ operationId: 'Set Quantity'
195
+ responses:
196
+ '200':
197
+ description: New quantity has been successfully set for a requested Line Item
198
+ content:
199
+ application/json:
200
+ schema:
201
+ $ref: '#/components/schemas/Cart'
202
+ '422':
203
+ description: Stock quantity is not sufficient for this request to be fulfielled
204
+ content:
205
+ application/json:
206
+ schema:
207
+ $ref: '#/components/schemas/Error'
208
+ security:
209
+ - orderToken: []
210
+ - bearerAuth: []
211
+ parameters:
212
+ - $ref: '#/components/parameters/CartIncludeParam'
213
+ - $ref: '#/components/parameters/SparseFieldsParam'
214
+ requestBody:
215
+ required: true
216
+ content:
217
+ application/json:
218
+ schema:
219
+ type: object
220
+ properties:
221
+ line_item_id:
222
+ type: string
223
+ quantity:
224
+ type: integer
225
+ example:
226
+ line_item_id: "1"
227
+ quantity: 5
228
+
229
+ '/cart/remove_line_item/{line_item_id}':
230
+ delete:
231
+ description: Removes Line Item from Cart
232
+ tags:
233
+ - Cart
234
+ operationId: 'Remove Line Item'
235
+ parameters:
236
+ - $ref: '#/components/parameters/LineItemId'
237
+ - $ref: '#/components/parameters/CartIncludeParam'
238
+ - $ref: '#/components/parameters/SparseFieldsParam'
239
+ responses:
240
+ '200':
241
+ description: Requested Line Item has been removed from the Cart
242
+ content:
243
+ application/json:
244
+ schema:
245
+ $ref: '#/components/schemas/Cart'
246
+ '404':
247
+ $ref: '#/components/responses/404NotFound'
248
+ security:
249
+ - orderToken: []
250
+ - bearerAuth: []
251
+
252
+ '/cart/empty':
253
+ patch:
254
+ description: Empties the Cart
255
+ tags:
256
+ - Cart
257
+ operationId: 'Empty Cart'
258
+ responses:
259
+ '200':
260
+ description: Cart has been successfully emptied
261
+ content:
262
+ application/json:
263
+ schema:
264
+ $ref: '#/components/schemas/Cart'
265
+ '404':
266
+ $ref: '#/components/responses/404NotFound'
267
+ security:
268
+ - orderToken: []
269
+ - bearerAuth: []
270
+ parameters:
271
+ - $ref: '#/components/parameters/CartIncludeParam'
272
+ - $ref: '#/components/parameters/SparseFieldsParam'
273
+
274
+ '/cart/apply_coupon_code':
275
+ patch:
276
+ description: Applies a coupon code to the Cart
277
+ tags:
278
+ - Cart
279
+ operationId: 'Apply Coupon Code'
280
+ responses:
281
+ '200':
282
+ description: Cuopon code was applied successfully
283
+ content:
284
+ application/json:
285
+ schema:
286
+ $ref: '#/components/schemas/Cart'
287
+ '422':
288
+ description: Coupon code couldn't be applied
289
+ content:
290
+ application/json:
291
+ schema:
292
+ $ref: '#/components/schemas/Error'
293
+ security:
294
+ - orderToken: []
295
+ - bearerAuth: []
296
+ parameters:
297
+ - $ref: '#/components/parameters/CartIncludeParam'
298
+ - $ref: '#/components/parameters/SparseFieldsParam'
299
+ requestBody:
300
+ required: true
301
+ content:
302
+ application/json:
303
+ schema:
304
+ type: object
305
+ properties:
306
+ coupon_code:
307
+ type: string
308
+ example: 'DISCOUNT10'
309
+
310
+ '/cart/remove_coupon_code/{coupon_code}':
311
+ delete:
312
+ description: Removes a coupon code from the Cart
313
+ tags:
314
+ - Cart
315
+ operationId: 'Remove Coupon Code'
316
+ parameters:
317
+ - name: coupon_code
318
+ in: path
319
+ required: true
320
+ description: Coupon code applied to Order
321
+ schema:
322
+ type: string
323
+ example: 'DISCOUNT10'
324
+ - $ref: '#/components/parameters/CartIncludeParam'
325
+ - $ref: '#/components/parameters/SparseFieldsParam'
326
+ responses:
327
+ '200':
328
+ description: Coupon code was removed successfully
329
+ content:
330
+ application/json:
331
+ schema:
332
+ $ref: '#/components/schemas/Cart'
333
+ '422':
334
+ description: Coupon code couldn't be removed
335
+ content:
336
+ application/json:
337
+ schema:
338
+ $ref: '#/components/schemas/Error'
339
+ security:
340
+ - orderToken: []
341
+ - bearerAuth: []
342
+
343
+ '/checkout':
344
+ patch:
345
+ description: >-
346
+ Updates the Checkout
347
+ <br />
348
+ <p>
349
+ You can run multiple Checkout updates with different data types.
350
+ </p>
351
+ <h3>1. Update the Customer information<h3>
352
+ <pre>PATCH /checkout</pre>
353
+ <br />
354
+ <pre>
355
+ order: {
356
+ email: 'john@snow.org',
357
+ bill_address_attributes: {
358
+ {
359
+ firstname: 'John',
360
+ lastname: 'Snow',
361
+ address1: '7735 Old Georgetown Road',
362
+ city: 'Bethesda',
363
+ phone: '3014445002',
364
+ zipcode: '20814',
365
+ state_name: 'MD',
366
+ country_id: 232
367
+ }
368
+ },
369
+ ship_address_attributes: {
370
+ {
371
+ firstname: 'John',
372
+ lastname: 'Snow',
373
+ address1: '7735 Old Georgetown Road',
374
+ city: 'Bethesda',
375
+ phone: '3014445002',
376
+ zipcode: '20814',
377
+ state_name: 'MD',
378
+ country_id: 232
379
+ }
380
+ }
381
+ }
382
+ </pre>
383
+ <h3>2. Fetch Shipping Rates</h3>
384
+ <pre>
385
+ GET /checkout/shipping_rates
386
+ </pre>
387
+ <br />
388
+ <p>
389
+ Order can have multiple Shipments, eg. some Items will be shipped right away,
390
+ and some needs to be backordered.
391
+ </p>
392
+ <p>
393
+ Each Shipment can have different Shipping Method/Rate selected.
394
+ </p>
395
+
396
+ <h3>3. Select shipping method(s)</h3>
397
+ <pre>PATCH /checkout</pre>
398
+ <br />
399
+ <pre>
400
+ order: {
401
+ shipments_attributes: {
402
+ '0' => { selected_shipping_rate_id: 1, id: 1}
403
+ }
404
+ }
405
+ </pre>
406
+ <br />
407
+ <p>
408
+ <code>selected_shipping_rate_id</code> is the ID of a Shipping Rate.
409
+ <code>id</code> is the ID of the Shipment itself. You can update multiple
410
+ Shipments at once.
411
+ </p>
412
+ <h3>4. Add Payment Source(s)</h3>
413
+ <pre>PATCH /checkout</pre>
414
+ <br />
415
+ <pre>
416
+ {
417
+ order: {
418
+ payments_attributes: [
419
+ {
420
+ payment_method_id: 1
421
+ }
422
+ ]
423
+ },
424
+ payment_source: {
425
+ '1' => {
426
+ number: '4111111111111111',
427
+ month: '01',
428
+ year: '2022',
429
+ verification_value: '123',
430
+ name: 'John Doe'
431
+ }
432
+ }
433
+ }
434
+ </pre>
435
+ <br />
436
+ <p>
437
+ You can obtain <code>payment_method_id</code> by querying
438
+ <code>GET /checkout/payment_methods</code> endpoint.
439
+ </p>
440
+ <h3>5. Complete checkout</h3>
441
+ <pre>PATCH /checkout/complete</pre>
442
+ <br />
443
+ <p>
444
+ This will complete the Checout and will marke the Order as completed.
445
+ You cannot execute any operations on this Order anymore via Storefront API.
446
+ Further operations on the Order are possible via Platform API.
447
+ </p>
448
+ tags:
449
+ - Checkout
450
+ operationId: 'Update Checkout'
451
+ responses:
452
+ '200':
453
+ description: Checkout was updated
454
+ content:
455
+ application/json:
456
+ schema:
457
+ $ref: '#/components/schemas/Cart'
458
+ '422':
459
+ description: Checkout couldn't be updated
460
+ content:
461
+ application/json:
462
+ schema:
463
+ $ref: '#/components/schemas/Error'
464
+ '404':
465
+ $ref: '#/components/responses/404NotFound'
466
+ security:
467
+ - orderToken: []
468
+ - bearerAuth: []
469
+ parameters:
470
+ - $ref: '#/components/parameters/CartIncludeParam'
471
+ requestBody:
472
+ required: true
473
+ content:
474
+ application/json:
475
+ schema:
476
+ type: object
477
+ properties:
478
+ order:
479
+ type: object
480
+ properties:
481
+ email:
482
+ type: string
483
+ example: 'john@snow.org'
484
+ bill_address_attributes:
485
+ $ref: '#/components/schemas/AddressPayload'
486
+ ship_address_attributes:
487
+ $ref: '#/components/schemas/AddressPayload'
488
+ payments_attributes:
489
+ type: array
490
+ items:
491
+ type: object
492
+ properties:
493
+ payment_method_id:
494
+ type: number
495
+ example: 1
496
+ description: 'ID of selected payment method'
497
+ shipments_attributes:
498
+ type: object
499
+ payment_source:
500
+ type: object
501
+
502
+ '/checkout/next':
503
+ patch:
504
+ description: Goes to the next Checkout step
505
+ tags:
506
+ - Checkout
507
+ operationId: 'Checkout Next'
508
+ responses:
509
+ '200':
510
+ description: Checkout transitioned to the next step
511
+ content:
512
+ application/json:
513
+ schema:
514
+ $ref: '#/components/schemas/Cart'
515
+ '422':
516
+ description: Checkout couldn't transition to the next step
517
+ content:
518
+ application/json:
519
+ schema:
520
+ $ref: '#/components/schemas/Error'
521
+ '404':
522
+ $ref: '#/components/responses/404NotFound'
523
+ security:
524
+ - orderToken: []
525
+ - bearerAuth: []
526
+ parameters:
527
+ - $ref: '#/components/parameters/CartIncludeParam'
528
+ - $ref: '#/components/parameters/SparseFieldsParam'
529
+
530
+ '/checkout/advance':
531
+ patch:
532
+ description: Advances Checkout to the furthest Checkout step validation allows, until the Complete step
533
+ tags:
534
+ - Checkout
535
+ operationId: 'Advance Checkout'
536
+ responses:
537
+ '200':
538
+ description: Checkout was advanced to the furthest step
539
+ content:
540
+ application/json:
541
+ schema:
542
+ $ref: '#/components/schemas/Cart'
543
+ '422':
544
+ description: Checkout couldn't transition to the next step
545
+ content:
546
+ application/json:
547
+ schema:
548
+ $ref: '#/components/schemas/Error'
549
+ '404':
550
+ $ref: '#/components/responses/404NotFound'
551
+ security:
552
+ - orderToken: []
553
+ - bearerAuth: []
554
+ parameters:
555
+ - $ref: '#/components/parameters/CartIncludeParam'
556
+ - $ref: '#/components/parameters/SparseFieldsParam'
557
+
558
+ '/checkout/complete':
559
+ patch:
560
+ description: Completes the Checkout
561
+ tags:
562
+ - Checkout
563
+ operationId: 'Complete Checkout'
564
+ responses:
565
+ '200':
566
+ description: Checkout was completed
567
+ content:
568
+ application/json:
569
+ schema:
570
+ $ref: '#/components/schemas/Cart'
571
+ '422':
572
+ description: Checkout couldn't be completed
573
+ content:
574
+ application/json:
575
+ schema:
576
+ $ref: '#/components/schemas/Error'
577
+ '404':
578
+ $ref: '#/components/responses/404NotFound'
579
+ security:
580
+ - orderToken: []
581
+ - bearerAuth: []
582
+ parameters:
583
+ - $ref: '#/components/parameters/CartIncludeParam'
584
+
585
+ '/checkout/add_store_credit':
586
+ post:
587
+ description: Adds Store Credit payments if a user has any
588
+ tags:
589
+ - Checkout
590
+ operationId: 'Add Store Credit'
591
+ responses:
592
+ '200':
593
+ description: Store Credit payment created
594
+ content:
595
+ application/json:
596
+ schema:
597
+ $ref: '#/components/schemas/Cart'
598
+ '422':
599
+ description: Store Credit couldn't be created
600
+ content:
601
+ application/json:
602
+ schema:
603
+ $ref: '#/components/schemas/Error'
604
+ '404':
605
+ $ref: '#/components/responses/404NotFound'
606
+ security:
607
+ - orderToken: []
608
+ - bearerAuth: []
609
+ parameters:
610
+ - in: query
611
+ name: amount
612
+ description: >-
613
+ Amount of Store Credit to use.
614
+ As much as possible Store Credit will be applied if no amount is passed.
615
+ schema:
616
+ type: string
617
+ example: 100.0
618
+ - $ref: '#/components/parameters/CartIncludeParam'
619
+ - $ref: '#/components/parameters/SparseFieldsParam'
620
+ '/checkout/remove_store_credit':
621
+ post:
622
+ description: Remove Store Credit payments if any applied
623
+ tags:
624
+ - Checkout
625
+ operationId: 'Remove Store Credit'
626
+ responses:
627
+ '200':
628
+ description: Store Credit payment removed
629
+ content:
630
+ application/json:
631
+ schema:
632
+ $ref: '#/components/schemas/Cart'
633
+ '422':
634
+ description: Store Credit payments weren't removed
635
+ content:
636
+ application/json:
637
+ schema:
638
+ $ref: '#/components/schemas/Error'
639
+ '404':
640
+ $ref: '#/components/responses/404NotFound'
641
+ security:
642
+ - orderToken: []
643
+ - bearerAuth: []
644
+ parameters:
645
+ - $ref: '#/components/parameters/CartIncludeParam'
646
+ - $ref: '#/components/parameters/SparseFieldsParam'
647
+
648
+ '/checkout/payment_methods':
649
+ get:
650
+ description: >-
651
+ Returns a list of available Payment Methods
652
+ tags:
653
+ - Checkout
654
+ operationId: 'Payment Methods'
655
+ responses:
656
+ '200':
657
+ description: Returns a list of available Payment Methods
658
+ content:
659
+ application/json:
660
+ schema:
661
+ $ref: '#/components/schemas/PaymentMethodsList'
662
+ '404':
663
+ $ref: '#/components/responses/404NotFound'
664
+ security:
665
+ - orderToken: []
666
+ - bearerAuth: []
667
+
668
+ '/checkout/shipping_rates':
669
+ get:
670
+ description: >-
671
+ Returns a list of available Shipping Rates for Checkout.
672
+ Shipping Rates are grouped against Shipments.
673
+ Each checkout cna have multiple Shipments eg. some products are available
674
+ in stock and will be send out instantly and some needs to be backordered.
675
+ tags:
676
+ - Checkout
677
+ operationId: 'Shipping Rates'
678
+ responses:
679
+ '200':
680
+ description: Returns a list of available Shipping Rates for Checkout
681
+ content:
682
+ application/json:
683
+ schema:
684
+ $ref: '#/components/schemas/ShippingRatesList'
685
+ '404':
686
+ $ref: '#/components/responses/404NotFound'
687
+ security:
688
+ - orderToken: []
689
+ - bearerAuth: []
690
+
691
+ '/products':
692
+ get:
693
+ description: >-
694
+ Returns a list of Products
695
+ tags:
696
+ - Products
697
+ operationId: 'Products List'
698
+ parameters:
699
+ - $ref: '#/components/parameters/FilterByIds'
700
+ - in: query
701
+ name: filter[price]
702
+ schema:
703
+ type: string
704
+ example: 10,100
705
+ description: Filter Prodcuts based on price (minimum, maximum range)
706
+ - in: query
707
+ name: filter[taxons]
708
+ schema:
709
+ type: string
710
+ example: 1,2,3,4,5,6,7,8,9,10,11
711
+ description: Filter Prodcuts based on taxons (IDs of categories, brands, etc)
712
+ - in: query
713
+ name: filter[name]
714
+ schema:
715
+ type: string
716
+ example: rails
717
+ description: Find Prodcuts with matching name (supports wild-card, partial-word match search)
718
+ - in: query
719
+ name: 'filter[options][tshirt-color]'
720
+ schema:
721
+ type: string
722
+ example: Red
723
+ description: >-
724
+ Find Prodcuts with Variants that have the specified option (eg. color, size)
725
+ and value (eg. red, XS)
726
+ - in: query
727
+ name: sort
728
+ schema:
729
+ type: string
730
+ example: >-
731
+ -updated_at,price
732
+ description: >-
733
+ Sort products based on:
734
+ <ul>
735
+ <li>price (ascending/descenging)</li>
736
+ <li>updated_at (ascending/descenging)</li>
737
+ </ul>
738
+ Use <q>-</q> sign to set descenging sort, eg. <q>-updated_at</q>
739
+ - $ref: '#/components/parameters/PageParam'
740
+ - $ref: '#/components/parameters/PerPageParam'
741
+ - $ref: '#/components/parameters/ProductIncludeParam'
742
+ - $ref: '#/components/parameters/SparseFieldsParam'
743
+ responses:
744
+ '200':
745
+ description: Returns a list of Products
746
+ content:
747
+ application/json:
748
+ schema:
749
+ $ref: '#/components/schemas/ProductsList'
750
+ '/products/{id}':
751
+ get:
752
+ description: >-
753
+ To view the details for a single product, make a request using that
754
+ product's permalink:<br /> <code>GET /api/v2/products/a-product</code>
755
+ <br /><br />You may also query by the product's id attribute:<br /><code>GET
756
+ /api/v2/products/1 </code> <br /><br />Note that the API will attempt a
757
+ permalink lookup before an ID lookup.
758
+ tags:
759
+ - Products
760
+ operationId: 'Show Product'
761
+ parameters:
762
+ - $ref: '#/components/parameters/IdOrPermalink'
763
+ - $ref: '#/components/parameters/ProductIncludeParam'
764
+ - $ref: '#/components/parameters/SparseFieldsParam'
765
+ responses:
766
+ '200':
767
+ description: Returns the requested Product
768
+ content:
769
+ application/json:
770
+ schema:
771
+ $ref: '#/components/schemas/Product'
772
+ '404':
773
+ $ref: '#/components/responses/404NotFound'
774
+
775
+ '/taxons':
776
+ get:
777
+ description: >-
778
+ Returns a list of Taxons. You can filter out taxons by...
779
+ tags:
780
+ - Taxons
781
+ operationId: 'Taxons List'
782
+ parameters:
783
+ - $ref: '#/components/parameters/FilterByIds'
784
+ - $ref: '#/components/parameters/FilterByName'
785
+ - in: query
786
+ name: filter[parent_id]
787
+ schema:
788
+ type: string
789
+ example: '1'
790
+ description: Fetch children nodes of specified Taxon
791
+ - in: query
792
+ name: filter[taxonomy_id]
793
+ schema:
794
+ type: string
795
+ example: '1'
796
+ description: Fetch Taxons in a specified Taxonomy
797
+ - in: query
798
+ name: filter[roots]
799
+ schema:
800
+ type: boolean
801
+ example: false
802
+ description: Fetch only root Taxons (Taxonomies)
803
+ - $ref: '#/components/parameters/PageParam'
804
+ - $ref: '#/components/parameters/PerPageParam'
805
+ - $ref: '#/components/parameters/TaxonIncludeParam'
806
+ - $ref: '#/components/parameters/SparseFieldsParam'
807
+ responses:
808
+ '200':
809
+ description: Returns a list of Taxons
810
+ content:
811
+ application/json:
812
+ schema:
813
+ $ref: '#/components/schemas/TaxonsList'
814
+
815
+ '/taxons/{id}':
816
+ get:
817
+ description: >-
818
+ To view the details for a single Taxon, make a request using that
819
+ Taxon's permalink:<br /> <code>GET /api/v2/taxons/t-shirts</code>
820
+ <br /><br />You may also query by the Taxons's ID attribute:<br /><code>GET
821
+ /api/v2/taxons/1 </code> <br /><br />Note that the API will attempt a
822
+ permalink lookup before an ID lookup.
823
+ tags:
824
+ - Taxons
825
+ operationId: 'Show Taxon'
826
+ parameters:
827
+ - $ref: '#/components/parameters/IdOrPermalink'
828
+ - $ref: '#/components/parameters/TaxonIncludeParam'
829
+ - $ref: '#/components/parameters/SparseFieldsParam'
830
+ responses:
831
+ '200':
832
+ description: Returns the reqested Taxon
833
+ content:
834
+ application/json:
835
+ schema:
836
+ $ref: '#/components/schemas/Taxon'
837
+ '404':
838
+ $ref: '#/components/responses/404NotFound'
839
+
840
+ '/countries':
841
+ get:
842
+ description: >-
843
+ Returns a list of all Countries
844
+ tags:
845
+ - Countries
846
+ operationId: 'Countries List'
847
+ responses:
848
+ '200':
849
+ description: Returns a list of all Countries
850
+ content:
851
+ application/json:
852
+ schema:
853
+ $ref: '#/components/schemas/CountriesList'
854
+
855
+ '/countries/{iso}':
856
+ get:
857
+ description: >-
858
+ To view the details for a single Country, make a request using that
859
+ Country's iso code:<br /> <code>GET /api/v2/storefront/countries/gb</code>
860
+ <br /><br />You may also query by the Country's iso3 code:<br /><code>GET
861
+ /api/v2/storefront/coutries/gbr </code> <br /><br />Note that the API will attempt a
862
+ iso lookup before an iso3 lookup.
863
+ tags:
864
+ - Countries
865
+ operationId: 'Show Country'
866
+ parameters:
867
+ - $ref: '#/components/parameters/IsoOrIso3'
868
+ - $ref: '#/components/parameters/CountryIncludeParam'
869
+ - $ref: '#/components/parameters/SparseFieldsParam'
870
+ responses:
871
+ '200':
872
+ description: Returns the requested Country
873
+ content:
874
+ application/json:
875
+ schema:
876
+ $ref: '#/components/schemas/Country'
877
+ '404':
878
+ $ref: '#/components/responses/404NotFound'
879
+
880
+ '/countries/default':
881
+ get:
882
+ description: >-
883
+ Returns the default Country for the application.
884
+ By default this will be the US.
885
+ tags:
886
+ - Countries
887
+ operationId: 'Default Country'
888
+ parameters:
889
+ - $ref: '#/components/parameters/CountryIncludeParam'
890
+ - $ref: '#/components/parameters/SparseFieldsParam'
891
+ responses:
892
+ '200':
893
+ description: Returns the default Country
894
+ content:
895
+ application/json:
896
+ schema:
897
+ $ref: '#/components/schemas/Country'
898
+
899
+ components:
900
+ securitySchemes:
901
+ bearerAuth:
902
+ type: http
903
+ scheme: bearer
904
+ description: >-
905
+ User token to authorize Cart and Checkout requests. You can obtain it
906
+ from `http://your_store_url.com/spree_oauth` endpoint.
907
+ It is required to associate Cart with the User.
908
+ See OAuth documentation for more details.
909
+ orderToken:
910
+ type: apiKey
911
+ in: header
912
+ description: >-
913
+ <p>
914
+ Order token to authorize Cart and Checkout requests.
915
+ Useful for guest checouts when you don't have the user token
916
+ (bearerAuth)
917
+ </p>
918
+ <p>
919
+ You can obtain it from the `/cart` endpoint -
920
+ it's part of the response (value of the `token` field).
921
+ </p>
922
+ name: X-Spree-Order-Token
923
+ schemas:
924
+ Error:
925
+ required:
926
+ - error
927
+ properties:
928
+ error:
929
+ type: string
930
+ ListLinks:
931
+ properties:
932
+ self:
933
+ type: string
934
+ description: 'URL to the current page of the listing'
935
+ next:
936
+ type: string
937
+ description: 'URL to the next page of the listing'
938
+ prev:
939
+ type: string
940
+ description: 'URL to the previous page of the listing'
941
+ last:
942
+ type: string
943
+ description: 'URL to the last page of the listing'
944
+ first:
945
+ type: string
946
+ description: 'URL to the first page of the listing'
947
+ ListMeta:
948
+ properties:
949
+ count:
950
+ type: number
951
+ example: 7
952
+ description: 'Number of items on the current listing'
953
+ total_count:
954
+ type: number
955
+ example: 145
956
+ description: 'Number of all items matching the criteria'
957
+ total_pages:
958
+ type: number
959
+ example: 10
960
+ description: 'Number of all pages containing items matching the criteria'
961
+ Timestamp:
962
+ type: string
963
+ example: '2018-05-25T11:22:57.214-04:00'
964
+ Address:
965
+ properties:
966
+ id:
967
+ type: string
968
+ example: '1'
969
+ type:
970
+ type: string
971
+ default: 'address'
972
+ attributes:
973
+ type: object
974
+ properties:
975
+ firstname:
976
+ type: string
977
+ example: 'John'
978
+ lastname:
979
+ type: string
980
+ example: 'Doe'
981
+ address1:
982
+ type: string
983
+ example: '1600 Amphitheatre Pkwy'
984
+ address2:
985
+ type: string
986
+ example: 'Suite 1'
987
+ city:
988
+ type: string
989
+ example: 'Mountain View'
990
+ zipcode:
991
+ type: string
992
+ example: '94043'
993
+ phone:
994
+ type: string
995
+ example: '(+1) 123 456 789'
996
+ state_name:
997
+ type: string
998
+ example: 'California'
999
+ state_code:
1000
+ type: string
1001
+ example: 'CA'
1002
+ country_name:
1003
+ type: string
1004
+ example: 'United States of America'
1005
+ country_iso3:
1006
+ type: string
1007
+ example: 'USA'
1008
+ company:
1009
+ type: string
1010
+ example: 'Google Inc.'
1011
+ Cart:
1012
+ required:
1013
+ - data
1014
+ - included
1015
+ properties:
1016
+ data:
1017
+ type: object
1018
+ required:
1019
+ - id
1020
+ - type
1021
+ - attributes
1022
+ - relationships
1023
+ properties:
1024
+ id:
1025
+ type: string
1026
+ example: '1'
1027
+ type:
1028
+ type: string
1029
+ default: 'cart'
1030
+ attributes:
1031
+ type: object
1032
+ properties:
1033
+ number:
1034
+ type: string
1035
+ example: 'R123456789'
1036
+ email:
1037
+ type: string
1038
+ example: 'spree@example.com'
1039
+ item_total:
1040
+ type: string
1041
+ example: '19.99'
1042
+ display_item_total:
1043
+ type: string
1044
+ example: '$19.99'
1045
+ total:
1046
+ type: string
1047
+ example: '29.99'
1048
+ display_total:
1049
+ type: string
1050
+ example: '$29.99'
1051
+ ship_total:
1052
+ type: string
1053
+ example: '0.0'
1054
+ display_ship_total:
1055
+ type: string
1056
+ example: '$19.99'
1057
+ adjustment_total:
1058
+ type: string
1059
+ example: '10.0'
1060
+ display_adjustment_total:
1061
+ type: string
1062
+ example: '$10.00'
1063
+ promo_total:
1064
+ type: string
1065
+ example: '-10.0'
1066
+ display_promo_total:
1067
+ type: string
1068
+ example: '-$10.00'
1069
+ created_at:
1070
+ $ref: '#/components/schemas/Timestamp'
1071
+ updated_at:
1072
+ $ref: '#/components/schemas/Timestamp'
1073
+ included_tax_total:
1074
+ type: string
1075
+ example: '5.00'
1076
+ additional_tax_total:
1077
+ type: string
1078
+ example: '5.0'
1079
+ display_additional_tax_total:
1080
+ type: string
1081
+ example: '$5.00'
1082
+ display_included_tax_total:
1083
+ type: string
1084
+ example: '$5.00'
1085
+ tax_total:
1086
+ type: string
1087
+ example: '10.0'
1088
+ display_tax_total:
1089
+ type: string
1090
+ example: '$10.00'
1091
+ item_count:
1092
+ type: number
1093
+ example: 2
1094
+ description: 'Total quantity number of all items added to the Cart'
1095
+ special_instructions:
1096
+ type: string
1097
+ example: 'Please wrap it as a gift'
1098
+ description: 'Message added by the Customer'
1099
+ currency:
1100
+ type: string
1101
+ example: 'USD'
1102
+ state:
1103
+ type: string
1104
+ example: 'address'
1105
+ description: 'State of the Cart in the Checkout flow'
1106
+ token:
1107
+ type: string
1108
+ example: abcdef123456
1109
+ description: >-
1110
+ Used for authorizing any action for an order within Spree’s
1111
+ API
1112
+ relationships:
1113
+ type: object
1114
+ properties:
1115
+ line_items:
1116
+ type: object
1117
+ properties:
1118
+ data:
1119
+ type: array
1120
+ items:
1121
+ $ref: '#/components/schemas/Relation'
1122
+ promotions:
1123
+ type: object
1124
+ properties:
1125
+ data:
1126
+ type: array
1127
+ items:
1128
+ $ref: '#/components/schemas/Relation'
1129
+ variants:
1130
+ type: object
1131
+ properties:
1132
+ data:
1133
+ type: array
1134
+ items:
1135
+ $ref: '#/components/schemas/Relation'
1136
+ user:
1137
+ type: object
1138
+ properties:
1139
+ data:
1140
+ $ref: '#/components/schemas/Relation'
1141
+ billing_address:
1142
+ type: object
1143
+ properties:
1144
+ data:
1145
+ $ref: '#/components/schemas/Relation'
1146
+ shipping_address:
1147
+ type: object
1148
+ properties:
1149
+ data:
1150
+ $ref: '#/components/schemas/Relation'
1151
+ payments:
1152
+ type: object
1153
+ properties:
1154
+ data:
1155
+ $ref: '#/components/schemas/Relation'
1156
+ shipments:
1157
+ type: object
1158
+ properties:
1159
+ data:
1160
+ $ref: '#/components/schemas/Relation'
1161
+ included:
1162
+ type: array
1163
+ items:
1164
+ type: object
1165
+ oneOf:
1166
+ - $ref: '#/components/schemas/VariantAttributesAndRelationships'
1167
+ - $ref: '#/components/schemas/LineItem'
1168
+ - $ref: '#/components/schemas/Promotion'
1169
+ - $ref: '#/components/schemas/User'
1170
+ - $ref: '#/components/schemas/Address'
1171
+ - $ref: '#/components/schemas/ShipmentAttributesWithoutRelationsips'
1172
+ CreditCardList:
1173
+ required:
1174
+ - data
1175
+ - included
1176
+ properties:
1177
+ data:
1178
+ type: array
1179
+ items:
1180
+ $ref: '#/components/schemas/CreditCardAttributesWithRelationships'
1181
+ included:
1182
+ type: array
1183
+ items:
1184
+ type: object
1185
+ oneOf:
1186
+ - $ref: '#/components/schemas/PaymentMethod'
1187
+ CreditCard:
1188
+ required:
1189
+ - data
1190
+ - included
1191
+ properties:
1192
+ data:
1193
+ type: object
1194
+ $ref: '#/components/schemas/CreditCardAttributesWithRelationships'
1195
+ included:
1196
+ type: array
1197
+ items:
1198
+ type: object
1199
+ oneOf:
1200
+ - $ref: '#/components/schemas/PaymentMethod'
1201
+ CreditCardAttributes:
1202
+ properties:
1203
+ cc_type:
1204
+ type: string
1205
+ example: 'visa'
1206
+ last_digits:
1207
+ type: string
1208
+ example: '1232'
1209
+ month:
1210
+ type: integer
1211
+ example: 10
1212
+ year:
1213
+ type: integer
1214
+ example: 2019
1215
+ name:
1216
+ type: string
1217
+ example: 'John Doe'
1218
+ CreditCardAttributesWithRelationships:
1219
+ properties:
1220
+ id:
1221
+ type: string
1222
+ example: '1'
1223
+ type:
1224
+ type: string
1225
+ example: 'credit_card'
1226
+ attributes:
1227
+ type: object
1228
+ $ref: '#/components/schemas/CreditCardAttributes'
1229
+ relationships:
1230
+ type: object
1231
+ properties:
1232
+ payment_method:
1233
+ type: object
1234
+ properties:
1235
+ data:
1236
+ $ref: '#/components/schemas/Relation'
1237
+ Image:
1238
+ required:
1239
+ - data
1240
+ properties:
1241
+ data:
1242
+ type: object
1243
+ properties:
1244
+ id:
1245
+ type: string
1246
+ example: '1'
1247
+ type:
1248
+ type: string
1249
+ default: 'image'
1250
+ attributes:
1251
+ type: object
1252
+ properties:
1253
+ position:
1254
+ type: integer
1255
+ example: 0
1256
+ description: 'Sort order of images set in the Admin Panel'
1257
+ styles:
1258
+ type: array
1259
+ description: 'An array of pre-scaled image styles'
1260
+ items:
1261
+ $ref: '#/components/schemas/ImageStyle'
1262
+ ImageStyle:
1263
+ properties:
1264
+ url:
1265
+ type: string
1266
+ example: 'http://localhost:3000/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaEpJbWQyWVhKcFlXNTBjeTltWm1sMmRURlNORFpZWjJaSFpYUkdZMjk2WWsxM1RHWXZNVGs1T1RCak5XVmlNamN4TlRnd1pqVTBabUpqTWpCbFkyVXhZMlZpTTJFd05ERTJZemMzT0dKaE5tSTFNREkyT0dKaFpqa3paV1JtWTJWaE16aGxaQVk2QmtWVSIsImV4cCI6IjIwMTgtMDYtMjRUMTM6NTk6NTguOTY5WiIsInB1ciI6ImJsb2Jfa2V5In19--5e9ff358dc747f73754e332678c5762114ac6f3f/ror_jr_spaghetti.jpeg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22ror_jr_spaghetti.jpeg%22%3B+filename%2A%3DUTF-8%27%27ror_jr_spaghetti.jpeg'
1267
+ description: 'Absolute URL of the uploaded image in selected style (width/height)'
1268
+ width:
1269
+ type: integer
1270
+ example: 1920
1271
+ description: 'Actual width of image'
1272
+ height:
1273
+ type: integer
1274
+ example: 1080
1275
+ description: 'Actual height of image'
1276
+ User:
1277
+ properties:
1278
+ id:
1279
+ type: string
1280
+ example: 1
1281
+ type:
1282
+ type: string
1283
+ default: 'user'
1284
+ attributes:
1285
+ type: object
1286
+ properties:
1287
+ email:
1288
+ type: string
1289
+ example: 'spree@example.com'
1290
+ LineItem:
1291
+ properties:
1292
+ id:
1293
+ type: string
1294
+ example: '1'
1295
+ type:
1296
+ type: string
1297
+ default: 'line_item'
1298
+ attributes:
1299
+ type: object
1300
+ properties:
1301
+ name:
1302
+ type: string
1303
+ example: 'Sample product'
1304
+ quantity:
1305
+ type: integer
1306
+ example: 1
1307
+ slug:
1308
+ type: string
1309
+ example: 'sample-product'
1310
+ options_text:
1311
+ type: string
1312
+ example: 'Size: small, Color: red'
1313
+ price:
1314
+ type: string
1315
+ example: '125.0'
1316
+ description: Price of Product per quantity
1317
+ currency:
1318
+ type: string
1319
+ example: 'USD'
1320
+ display_price:
1321
+ type: string
1322
+ example: '$125.00'
1323
+ description: Price of Product per quantity
1324
+ total:
1325
+ type: string
1326
+ example: '250.0'
1327
+ description: >-
1328
+ Total price of Line Item including adjastments, promotions
1329
+ and taxes
1330
+ display_total:
1331
+ type: string
1332
+ example: '$250.00'
1333
+ description: >-
1334
+ Total price of Line Item including adjastments, promotions
1335
+ and taxes
1336
+ adjustment_total:
1337
+ type: string
1338
+ example: '10.0'
1339
+ description: TBD
1340
+ display_adjustment_total:
1341
+ type: string
1342
+ example: '$10.00'
1343
+ description: TBD
1344
+ additional_tax_total:
1345
+ type: string
1346
+ example: '5.0'
1347
+ display_additional_tax_total:
1348
+ type: string
1349
+ example: '$5.00'
1350
+ promo_total:
1351
+ type: string
1352
+ example: '-5.0'
1353
+ display_promo_total:
1354
+ type: string
1355
+ included_tax_total:
1356
+ type: string
1357
+ example: '0.0'
1358
+ description: 'Taxes included in the price, eg. VAT'
1359
+ display_inluded_tax_total:
1360
+ type: string
1361
+ example: '$0.00'
1362
+ relationships:
1363
+ properties:
1364
+ variant:
1365
+ type: object
1366
+ properties:
1367
+ data:
1368
+ $ref: '#/components/schemas/Relation'
1369
+ Promotion:
1370
+ properties:
1371
+ id:
1372
+ type: string
1373
+ example: '1'
1374
+ type:
1375
+ type: string
1376
+ default: 'promotion'
1377
+ attributes:
1378
+ type: object
1379
+ properties:
1380
+ name:
1381
+ type: string
1382
+ example: '10% Discount'
1383
+ descriptiom:
1384
+ type: string
1385
+ example: 'Super discount for you'
1386
+ amount:
1387
+ type: string
1388
+ example: '-10.0'
1389
+ display_amount:
1390
+ type: string
1391
+ example: '-$10.00'
1392
+ Product:
1393
+ required:
1394
+ - data
1395
+ - included
1396
+ properties:
1397
+ data:
1398
+ $ref: '#/components/schemas/ProductAttributesAndRelationships'
1399
+ included:
1400
+ type: array
1401
+ items:
1402
+ oneOf:
1403
+ - $ref: '#/components/schemas/OptionType'
1404
+ - $ref: '#/components/schemas/OptionValue'
1405
+ - $ref: '#/components/schemas/ProductProperty'
1406
+ - $ref: '#/components/schemas/Property'
1407
+ - $ref: '#/components/schemas/VariantAttributesAndRelationships'
1408
+ - $ref: '#/components/schemas/Image'
1409
+ - $ref: '#/components/schemas/TaxonAttributesAndRelationships'
1410
+ ProductsList:
1411
+ required:
1412
+ - links
1413
+ - data
1414
+ - included
1415
+ properties:
1416
+ links:
1417
+ $ref: '#/components/schemas/ListLinks'
1418
+ meta:
1419
+ $ref: '#/components/schemas/ListMeta'
1420
+ data:
1421
+ type: array
1422
+ items:
1423
+ $ref: '#/components/schemas/ProductAttributesAndRelationships'
1424
+ included:
1425
+ type: array
1426
+ items:
1427
+ oneOf:
1428
+ - $ref: '#/components/schemas/OptionType'
1429
+ - $ref: '#/components/schemas/OptionValue'
1430
+ - $ref: '#/components/schemas/ProductProperty'
1431
+ - $ref: '#/components/schemas/Property'
1432
+ - $ref: '#/components/schemas/VariantAttributesAndRelationships'
1433
+ - $ref: '#/components/schemas/Image'
1434
+ - $ref: '#/components/schemas/TaxonAttributesAndRelationships'
1435
+ ProductAttributes:
1436
+ type: object
1437
+ properties:
1438
+ name:
1439
+ type: string
1440
+ example: 'Example product'
1441
+ description:
1442
+ type: string
1443
+ example: 'Example description'
1444
+ price:
1445
+ type: string
1446
+ example: '15.99'
1447
+ currency:
1448
+ type: string
1449
+ example: 'USD'
1450
+ display_price:
1451
+ type: string
1452
+ example: $15.99
1453
+ available_on:
1454
+ type: string
1455
+ example: '2012-10-17T03:43:57Z'
1456
+ purchasable:
1457
+ type: boolean
1458
+ example: true
1459
+ description: 'Indicates if any of Variants are in stock or backorderable'
1460
+ in_stock:
1461
+ type: boolean
1462
+ example: true
1463
+ description: 'Indicates if any of Variants are in stock'
1464
+ backorderable:
1465
+ type: boolean
1466
+ example: true
1467
+ description: 'Indicates if any of Variants are backeorderable'
1468
+ slug:
1469
+ type: string
1470
+ example: 'example-product'
1471
+ meta_description:
1472
+ type: string
1473
+ example: 'Example product'
1474
+ meta_keywords:
1475
+ type: string
1476
+ example: 'example, product'
1477
+ updated_at:
1478
+ $ref: '#/components/schemas/Timestamp'
1479
+ ProductRelationships:
1480
+ type: object
1481
+ properties:
1482
+ default_variant:
1483
+ type: object
1484
+ description: 'The default Variant for given product'
1485
+ properties:
1486
+ data:
1487
+ $ref: '#/components/schemas/Relation'
1488
+ product_properties:
1489
+ type: object
1490
+ description: 'List of Product Properties'
1491
+ properties:
1492
+ data:
1493
+ type: array
1494
+ items:
1495
+ $ref: '#/components/schemas/Relation'
1496
+ option_types:
1497
+ type: object
1498
+ description: 'List of Product Option Types'
1499
+ properties:
1500
+ data:
1501
+ type: array
1502
+ items:
1503
+ $ref: '#/components/schemas/Relation'
1504
+ variants:
1505
+ type: object
1506
+ description: 'List of Product Variants, excluding Master Variant'
1507
+ properties:
1508
+ data:
1509
+ type: array
1510
+ items:
1511
+ $ref: '#/components/schemas/Relation'
1512
+ taxons:
1513
+ type: object
1514
+ description: 'List of Taxons associated with Product'
1515
+ properties:
1516
+ data:
1517
+ type: array
1518
+ items:
1519
+ $ref: '#/components/schemas/Relation'
1520
+ ProductAttributesAndRelationships:
1521
+ properties:
1522
+ id:
1523
+ type: string
1524
+ example: '1'
1525
+ type:
1526
+ type: string
1527
+ default: 'product'
1528
+ attributes:
1529
+ $ref: '#/components/schemas/ProductAttributes'
1530
+ relationships:
1531
+ $ref: '#/components/schemas/ProductRelationships'
1532
+ Relation:
1533
+ required:
1534
+ - id
1535
+ - type
1536
+ properties:
1537
+ id:
1538
+ type: string
1539
+ type:
1540
+ type: string
1541
+ Taxon:
1542
+ required:
1543
+ - data
1544
+ - included
1545
+ properties:
1546
+ data:
1547
+ $ref: '#/components/schemas/TaxonAttributesAndRelationships'
1548
+ included:
1549
+ type: array
1550
+ items:
1551
+ oneOf:
1552
+ - $ref: '#/components/schemas/ProductAttributesAndRelationships'
1553
+ - $ref: '#/components/schemas/TaxonAttributesAndRelationships'
1554
+ - $ref: '#/components/schemas/TaxonomyAttributesAndRelationships'
1555
+ - $ref: '#/components/schemas/Image'
1556
+ TaxonAttributes:
1557
+ type: object
1558
+ properties:
1559
+ name:
1560
+ type: string
1561
+ example: 'T-shirts'
1562
+ pretty_name:
1563
+ type: string
1564
+ example: 'Clothes > T-shirts'
1565
+ permalink:
1566
+ type: string
1567
+ example: 't-shirts'
1568
+ seo_title:
1569
+ type: string
1570
+ example: 'Clothes - T-shirts'
1571
+ meta_title:
1572
+ type: string
1573
+ example: 'T-shirts'
1574
+ meta_description:
1575
+ type: string
1576
+ example: 'A list of cool t-shirts '
1577
+ meta_keywords:
1578
+ type: string
1579
+ example: 't-shirts, cool'
1580
+ left:
1581
+ type: integer
1582
+ example: 1
1583
+ right:
1584
+ type: integer
1585
+ example: 2
1586
+ position:
1587
+ type: integer
1588
+ example: 0
1589
+ depth:
1590
+ type: integer
1591
+ example: 1
1592
+ is_root:
1593
+ type: boolean
1594
+ example: true
1595
+ description: 'Indicates if the Taxon is the root node of this Taxonomy tree'
1596
+ is_child:
1597
+ type: boolean
1598
+ example: true
1599
+ description: 'Returns true is this is a child node of this Taxonomy tree'
1600
+ is_leaf:
1601
+ type: boolean
1602
+ example: false
1603
+ description: 'Returns true if this is the end of a branch of this Taxonomy tree'
1604
+ updated_at:
1605
+ type: string
1606
+ example: '2018-06-18T10:57:29.704Z'
1607
+ TaxonRelationships:
1608
+ type: object
1609
+ properties:
1610
+ parent:
1611
+ type: object
1612
+ description: 'Parent node'
1613
+ properties:
1614
+ data:
1615
+ $ref: '#/components/schemas/Relation'
1616
+ children:
1617
+ type: object
1618
+ description: 'List of child nodes'
1619
+ properties:
1620
+ data:
1621
+ type: array
1622
+ items:
1623
+ $ref: '#/components/schemas/Relation'
1624
+ taxonomy:
1625
+ type: object
1626
+ description: 'Taxonomy associated with this Taxon'
1627
+ properties:
1628
+ data:
1629
+ $ref: '#/components/schemas/Relation'
1630
+ image:
1631
+ type: object
1632
+ description: 'Image associated with Taxon'
1633
+ properties:
1634
+ data:
1635
+ $ref: '#/components/schemas/Relation'
1636
+ products:
1637
+ type: object
1638
+ description: 'List of active and available Products associated with this Taxon'
1639
+ properties:
1640
+ data:
1641
+ type: array
1642
+ items:
1643
+ $ref: '#/components/schemas/Relation'
1644
+ TaxonAttributesAndRelationships:
1645
+ properties:
1646
+ id:
1647
+ type: string
1648
+ example: '1'
1649
+ type:
1650
+ type: string
1651
+ default: 'taxon'
1652
+ attributes:
1653
+ $ref: '#/components/schemas/TaxonAttributes'
1654
+ relationships:
1655
+ $ref: '#/components/schemas/TaxonRelationships'
1656
+ TaxonsList:
1657
+ required:
1658
+ - links
1659
+ - data
1660
+ - included
1661
+ properties:
1662
+ links:
1663
+ $ref: '#/components/schemas/ListLinks'
1664
+ meta:
1665
+ $ref: '#/components/schemas/ListMeta'
1666
+ data:
1667
+ type: array
1668
+ items:
1669
+ $ref: '#/components/schemas/TaxonAttributesAndRelationships'
1670
+ included:
1671
+ type: array
1672
+ items:
1673
+ oneOf:
1674
+ - $ref: '#/components/schemas/TaxonAttributesAndRelationships'
1675
+ - $ref: '#/components/schemas/TaxonImage'
1676
+ - $ref: '#/components/schemas/TaxonomyAttributesAndRelationships'
1677
+ - $ref: '#/components/schemas/ProductAttributesAndRelationships'
1678
+ TaxonImage:
1679
+ required:
1680
+ - data
1681
+ properties:
1682
+ data:
1683
+ type: object
1684
+ properties:
1685
+ id:
1686
+ type: string
1687
+ example: '1'
1688
+ type:
1689
+ type: string
1690
+ default: 'taxon_image'
1691
+ attributes:
1692
+ type: object
1693
+ properties:
1694
+ position:
1695
+ type: integer
1696
+ example: 0
1697
+ description: 'Sort order of images set in the Admin Panel'
1698
+ styles:
1699
+ type: array
1700
+ description: 'An array of pre-scaled image styles'
1701
+ items:
1702
+ $ref: '#/components/schemas/ImageStyle'
1703
+ TaxonomyAttributesAndRelationships:
1704
+ type: object
1705
+ properties:
1706
+ id:
1707
+ type: string
1708
+ example: '1'
1709
+ type:
1710
+ type: string
1711
+ default: 'taxonomy'
1712
+ attributes:
1713
+ $ref: '#/components/schemas/TaxonomyAttributes'
1714
+ TaxonomyAttributes:
1715
+ type: object
1716
+ properties:
1717
+ name:
1718
+ type: string
1719
+ example: 'Categories'
1720
+ position:
1721
+ type: integer
1722
+ example: 0
1723
+ OptionType:
1724
+ required:
1725
+ - data
1726
+ properties:
1727
+ data:
1728
+ type: object
1729
+ properties:
1730
+ id:
1731
+ type: string
1732
+ example: '1'
1733
+ type:
1734
+ type: string
1735
+ default: 'option_type'
1736
+ attributes:
1737
+ type: object
1738
+ properties:
1739
+ name:
1740
+ type: string
1741
+ example: 'color'
1742
+ presentation:
1743
+ type: string
1744
+ example: 'Color'
1745
+ position:
1746
+ type: integer
1747
+ example: 1
1748
+ OptionValue:
1749
+ required:
1750
+ - data
1751
+ properties:
1752
+ data:
1753
+ type: object
1754
+ properties:
1755
+ id:
1756
+ type: string
1757
+ example: '1'
1758
+ type:
1759
+ type: string
1760
+ default: 'option_value'
1761
+ attributes:
1762
+ type: object
1763
+ properties:
1764
+ name:
1765
+ type: string
1766
+ example: 'red'
1767
+ presentation:
1768
+ type: string
1769
+ example: 'Red'
1770
+ position:
1771
+ type: integer
1772
+ example: 1
1773
+ relationships:
1774
+ type: object
1775
+ properties:
1776
+ option_type:
1777
+ type: object
1778
+ properties:
1779
+ data:
1780
+ $ref: '#/components/schemas/Relation'
1781
+ Property:
1782
+ required:
1783
+ - data
1784
+ properties:
1785
+ data:
1786
+ type: object
1787
+ properties:
1788
+ id:
1789
+ type: string
1790
+ example: '1'
1791
+ type:
1792
+ type: string
1793
+ default: 'property'
1794
+ attributes:
1795
+ type: object
1796
+ properties:
1797
+ name:
1798
+ type: string
1799
+ example: 'material'
1800
+ presentation:
1801
+ type: string
1802
+ example: 'Material'
1803
+ ProductProperty:
1804
+ required:
1805
+ - data
1806
+ properties:
1807
+ data:
1808
+ type: object
1809
+ properties:
1810
+ id:
1811
+ type: string
1812
+ example: '1'
1813
+ type:
1814
+ type: string
1815
+ default: 'product_property'
1816
+ attributes:
1817
+ type: object
1818
+ properties:
1819
+ name:
1820
+ type: string
1821
+ example: 'silk'
1822
+ presentation:
1823
+ type: string
1824
+ example: 'Silk'
1825
+ relationships:
1826
+ type: object
1827
+ properties:
1828
+ property:
1829
+ type: object
1830
+ properties:
1831
+ data:
1832
+ $ref: '#/components/schemas/Property'
1833
+ Variant:
1834
+ required:
1835
+ - data
1836
+ - included
1837
+ properties:
1838
+ data:
1839
+ $ref: '#/components/schemas/VariantAttributesAndRelationships'
1840
+ included:
1841
+ type: array
1842
+ items:
1843
+ oneOf:
1844
+ - $ref: '#/components/schemas/Image'
1845
+ - $ref: '#/components/schemas/OptionValue'
1846
+ - $ref: '#/components/schemas/OptionType'
1847
+ VariantAttributes:
1848
+ type: object
1849
+ properties:
1850
+ name:
1851
+ type: string
1852
+ example: 'Example product'
1853
+ description: 'Product name'
1854
+ sku:
1855
+ type: string
1856
+ example: 'SKU-1001'
1857
+ price:
1858
+ type: string
1859
+ example: '15.99'
1860
+ currency:
1861
+ type: string
1862
+ example: 'USD'
1863
+ display_price:
1864
+ type: string
1865
+ example: '$15.99'
1866
+ weight:
1867
+ type: string
1868
+ example: '10'
1869
+ height:
1870
+ type: string
1871
+ example: '10'
1872
+ width:
1873
+ type: string
1874
+ example: '10'
1875
+ depth:
1876
+ type: string
1877
+ example: '10'
1878
+ is_master:
1879
+ type: boolean
1880
+ example: false
1881
+ description: 'Indicates if Variant is the master Variant'
1882
+ options_text:
1883
+ type: string
1884
+ example: 'Size: small, Color: red'
1885
+ slug:
1886
+ type: string
1887
+ example: 'example-product'
1888
+ description: 'Product slug'
1889
+ description:
1890
+ type: string
1891
+ example: 'Example description'
1892
+ description: 'Product description'
1893
+ purchasable:
1894
+ type: boolean
1895
+ example: true
1896
+ description: 'Indicates if Variant is in stock or backorderable'
1897
+ in_stock:
1898
+ type: boolean
1899
+ example: true
1900
+ description: 'Indicates if Variant is in stock'
1901
+ backorderable:
1902
+ type: boolean
1903
+ example: true
1904
+ description: 'Indicates if Variant is backorderable'
1905
+ VariantRelationships:
1906
+ type: object
1907
+ properties:
1908
+ product:
1909
+ type: object
1910
+ properties:
1911
+ data:
1912
+ $ref: '#/components/schemas/Relation'
1913
+ images:
1914
+ type: object
1915
+ properties:
1916
+ data:
1917
+ type: array
1918
+ items:
1919
+ $ref: '#/components/schemas/Relation'
1920
+ option_values:
1921
+ type: object
1922
+ properties:
1923
+ data:
1924
+ type: array
1925
+ items:
1926
+ $ref: '#/components/schemas/Relation'
1927
+ VariantAttributesAndRelationships:
1928
+ properties:
1929
+ id:
1930
+ type: string
1931
+ example: '1'
1932
+ type:
1933
+ type: string
1934
+ default: 'variant'
1935
+ attributes:
1936
+ $ref: '#/components/schemas/VariantAttributes'
1937
+ relationships:
1938
+ $ref: '#/components/schemas/VariantRelationships'
1939
+ Country:
1940
+ required:
1941
+ - data
1942
+ - included
1943
+ properties:
1944
+ data:
1945
+ $ref: '#/components/schemas/CountryAttributesAndRelationships'
1946
+ included:
1947
+ type: array
1948
+ items:
1949
+ oneOf:
1950
+ - $ref: '#/components/schemas/State'
1951
+ CountriesList:
1952
+ required:
1953
+ - data
1954
+ properties:
1955
+ data:
1956
+ type: array
1957
+ items:
1958
+ $ref: '#/components/schemas/CountryAttributesAndRelationships'
1959
+ CountryAttributes:
1960
+ type: object
1961
+ properties:
1962
+ iso:
1963
+ type: string
1964
+ example: 'us'
1965
+ iso3:
1966
+ type: string
1967
+ example: 'usa'
1968
+ iso_name:
1969
+ type: string
1970
+ example: 'UNITED STATES'
1971
+ name:
1972
+ type: string
1973
+ example: 'United States'
1974
+ states_required:
1975
+ type: boolean
1976
+ example: true
1977
+ zipcode_required:
1978
+ type: boolean
1979
+ example: true
1980
+ default:
1981
+ type: boolean
1982
+ example: true
1983
+ CountryRelationships:
1984
+ type: object
1985
+ properties:
1986
+ states:
1987
+ type: object
1988
+ description: 'States associated with this Country'
1989
+ properties:
1990
+ data:
1991
+ $ref: '#/components/schemas/Relation'
1992
+ CountryAttributesAndRelationships:
1993
+ properties:
1994
+ id:
1995
+ type: string
1996
+ example: '1'
1997
+ type:
1998
+ type: string
1999
+ default: 'country'
2000
+ attributes:
2001
+ $ref: '#/components/schemas/CountryAttributes'
2002
+ relationships:
2003
+ $ref: '#/components/schemas/CountryRelationships'
2004
+ State:
2005
+ type: object
2006
+ properties:
2007
+ abbr:
2008
+ type: string
2009
+ example: 'NY'
2010
+ name:
2011
+ type: string
2012
+ example: 'New York'
2013
+ PaymentMethodsList:
2014
+ required:
2015
+ - data
2016
+ properties:
2017
+ data:
2018
+ type: array
2019
+ items:
2020
+ $ref: '#/components/schemas/PaymentMethod'
2021
+ PaymentMethod:
2022
+ properties:
2023
+ id:
2024
+ type: string
2025
+ example: '1'
2026
+ type:
2027
+ type: string
2028
+ default: 'payment_method'
2029
+ attributes:
2030
+ type: object
2031
+ properties:
2032
+ type:
2033
+ type: string
2034
+ example: 'Spree::Gateway::StripeGateway'
2035
+ name:
2036
+ type: string
2037
+ example: 'Stripe'
2038
+ description:
2039
+ type: string
2040
+ example: 'Stripe Payments'
2041
+ ShipmentAttributesWithoutRelationsips:
2042
+ properties:
2043
+ id:
2044
+ type: string
2045
+ example: '1'
2046
+ type:
2047
+ type: string
2048
+ default: 'shipment'
2049
+ attributes:
2050
+ $ref: '#/components/schemas/ShipmentAttributes'
2051
+ relationships:
2052
+ type: object
2053
+ ShipmentAttributesAndRelationsips:
2054
+ properties:
2055
+ id:
2056
+ type: string
2057
+ example: '1'
2058
+ type:
2059
+ type: string
2060
+ default: 'shipment'
2061
+ attributes:
2062
+ $ref: '#/components/schemas/ShipmentAttributes'
2063
+ relationships:
2064
+ properties:
2065
+ shipping_rates:
2066
+ properties:
2067
+ data:
2068
+ type: array
2069
+ items:
2070
+ oneOf:
2071
+ - $ref: '#/components/schemas/Relation'
2072
+ ShipmentAttributes:
2073
+ properties:
2074
+ number:
2075
+ type: string
2076
+ example: 'H121354'
2077
+ description: 'Unique Shipment identifier'
2078
+ free:
2079
+ type: boolean
2080
+ example: true
2081
+ description: 'Indicates if the Shipping Rate is free, eg. when Free shipping promo applied to Cart'
2082
+ final_price:
2083
+ type: string
2084
+ example: '10.0'
2085
+ description: 'Price to be presented for the Customer'
2086
+ display_final_price:
2087
+ type: string
2088
+ example: '$10.00'
2089
+ tracking_url:
2090
+ type: string
2091
+ example: 'https://tools.usps.com/go/TrackConfirmAction?tRef=fullpage&tLc=2&text28777=&tLabels=4123412434%2C'
2092
+ description: 'Tracking URL to the service provider website'
2093
+ state:
2094
+ type: string
2095
+ example: 'shipped'
2096
+ description: >-
2097
+ Status of the Shipment. For list of all available statuses please refer:
2098
+ <a href="https://guides.spreecommerce.org/developer/shipments.html#overview" target="_blank" rel="noopener">
2099
+ Shipment section in Spree Guides
2100
+ </a>
2101
+ shipped_at:
2102
+ type: string
2103
+ format: 'date-time'
2104
+ example: '2019-01-02 13:42:12 UTC'
2105
+ description: 'Date when Shipment was being sent from the warehouse'
2106
+ ShippingRatesList:
2107
+ required:
2108
+ - data
2109
+ - included
2110
+ properties:
2111
+ data:
2112
+ type: array
2113
+ items:
2114
+ $ref: '#/components/schemas/ShipmentAttributesAndRelationsips'
2115
+ included:
2116
+ type: array
2117
+ items:
2118
+ oneOf:
2119
+ - $ref: '#/components/schemas/ShippingRate'
2120
+ ShippingRate:
2121
+ properties:
2122
+ id:
2123
+ type: string
2124
+ example: '1'
2125
+ type:
2126
+ type: string
2127
+ default: 'shipping_rate'
2128
+ attributes:
2129
+ type: object
2130
+ properties:
2131
+ name:
2132
+ type: string
2133
+ example: 'USPS Ground'
2134
+ selected:
2135
+ type: boolean
2136
+ example: true
2137
+ free:
2138
+ type: boolean
2139
+ example: true
2140
+ description: 'Indicates if the Shipping Rate is free, eg. when Free shipping promo applied to Cart'
2141
+ final_price:
2142
+ type: string
2143
+ example: '10.0'
2144
+ description: 'Price to be presented for the Customer'
2145
+ display_final_price:
2146
+ type: string
2147
+ example: '$10.00'
2148
+ cost:
2149
+ type: string
2150
+ example: '10.0'
2151
+ description: 'Price of the service without discounts applied'
2152
+ display_cost:
2153
+ type: string
2154
+ example: '$10.00'
2155
+ tax_amount:
2156
+ type: string
2157
+ example: '0.0'
2158
+ description: 'Eligible tax for service (if any)'
2159
+ display_tax_amount:
2160
+ type: string
2161
+ example: '$0.00'
2162
+ shipping_method_id:
2163
+ type: integer
2164
+ example: 1
2165
+ description: 'ID of a Shipping Method. You will need this for the Checkout Update action'
2166
+ Account:
2167
+ required:
2168
+ - data
2169
+ - included
2170
+ properties:
2171
+ data:
2172
+ $ref: '#/components/schemas/AccountAttributesAndRelationships'
2173
+ included:
2174
+ type: array
2175
+ items:
2176
+ oneOf:
2177
+ - $ref: '#/components/schemas/Address'
2178
+ AccountAttributes:
2179
+ type: object
2180
+ properties:
2181
+ email:
2182
+ type: string
2183
+ example: 'spree@example.com'
2184
+ store_credits:
2185
+ type: number
2186
+ example: 150.75
2187
+ completed_orders:
2188
+ type: number
2189
+ example: 3
2190
+ AccountRelationships:
2191
+ type: object
2192
+ properties:
2193
+ default_billing_address:
2194
+ type: object
2195
+ description: 'Default billing address associated with this Account'
2196
+ properties:
2197
+ data:
2198
+ $ref: '#/components/schemas/Relation'
2199
+ default_shipping_address:
2200
+ type: object
2201
+ description: 'Default shipping address associated with this Account'
2202
+ properties:
2203
+ data:
2204
+ $ref: '#/components/schemas/Relation'
2205
+ AccountAttributesAndRelationships:
2206
+ properties:
2207
+ id:
2208
+ type: string
2209
+ example: '1'
2210
+ type:
2211
+ type: string
2212
+ default: 'user'
2213
+ attributes:
2214
+ $ref: '#/components/schemas/AccountAttributes'
2215
+ relationships:
2216
+ $ref: '#/components/schemas/AccountRelationships'
2217
+ AddressPayload:
2218
+ properties:
2219
+ firstname:
2220
+ type: string
2221
+ lastname:
2222
+ type: string
2223
+ address1:
2224
+ type: string
2225
+ description: 'Street address'
2226
+ address2:
2227
+ type: string
2228
+ description: 'Additional address information, floor no etc'
2229
+ city:
2230
+ type: string
2231
+ description: 'City, town'
2232
+ phone:
2233
+ type: string
2234
+ zipcode:
2235
+ type: string
2236
+ description: 'Valid zipcode, will be validated against the selected Country'
2237
+ state_name:
2238
+ type: string
2239
+ description: 'State/region/province 2 letter abbrevation'
2240
+ country_id:
2241
+ type: number
2242
+ description: 'ID number of Country in the database'
2243
+ example:
2244
+ firstname: 'John'
2245
+ lastname: 'Snow'
2246
+ address1: '7735 Old Georgetown Road'
2247
+ address2: '2nd Floor'
2248
+ city: 'Bethesda'
2249
+ phone: '3014445002'
2250
+ zipcode: '20814'
2251
+ state_name: 'MD'
2252
+ country_id: 232
2253
+
2254
+ parameters:
2255
+ CreditCardIncludeParam:
2256
+ name: include
2257
+ in: query
2258
+ required: false
2259
+ schema:
2260
+ type: string
2261
+ example: 'payment_method'
2262
+ description: >-
2263
+ <p>Specify what related resources (relationships) you would like to receive in the response body.</p>
2264
+ <p>You can also fetch relationships of relationships.</p>
2265
+ <p>
2266
+ Format:
2267
+ <ul>
2268
+ <li>payment_method</li>
2269
+ </ul>
2270
+ <p>
2271
+ More information:
2272
+ <a href="https://jsonapi.org/format/#fetching-includes" target="_blank" rel="noopener">
2273
+ https://jsonapi.org/format/#fetching-includes
2274
+ </a>
2275
+ </p>
2276
+ IdOrPermalink:
2277
+ name: id
2278
+ in: path
2279
+ required: true
2280
+ description: ID or a permalink
2281
+ schema:
2282
+ type: string
2283
+ examples:
2284
+ ID:
2285
+ value: '1'
2286
+ Permalink:
2287
+ value: 'some-product'
2288
+ LineItemId:
2289
+ name: line_item_id
2290
+ in: path
2291
+ required: true
2292
+ description: Line Item ID
2293
+ schema:
2294
+ type: string
2295
+ example: '1'
2296
+ PageParam:
2297
+ name: page
2298
+ in: query
2299
+ description: Number of requested page when paginating collection
2300
+ schema:
2301
+ type: integer
2302
+ example: 1
2303
+ PerPageParam:
2304
+ name: per_page
2305
+ in: query
2306
+ description: Number of requested records per page when paginating collection
2307
+ schema:
2308
+ type: integer
2309
+ example: 10
2310
+ CartIncludeParam:
2311
+ name: include
2312
+ in: query
2313
+ schema:
2314
+ type: string
2315
+ description: >-
2316
+ <p>Specify what related resources (relationships) you would like to receive in the response body.</p>
2317
+ <p>You can also fetch relationships of relationships.</p>
2318
+ <p>
2319
+ Format:
2320
+ <ul>
2321
+ <li>line_items,variants,promotions</li>
2322
+ <li>variants,variants.images</li>
2323
+ </ul>
2324
+ <p>
2325
+ More information:
2326
+ <a href="https://jsonapi.org/format/#fetching-includes" target="_blank" rel="noopener">
2327
+ https://jsonapi.org/format/#fetching-includes
2328
+ </a>
2329
+ </p>
2330
+ example: 'line_items,variants,variants.images,billing_address,shipping_address,user,payments,shipments,promotions'
2331
+ ProductIncludeParam:
2332
+ name: include
2333
+ in: query
2334
+ schema:
2335
+ type: string
2336
+ description: >-
2337
+ <p>Specify what related resources (relationships) you would like to receive in the response body.</p>
2338
+ <p>You can also fetch relationships of relationships.</p>
2339
+ <p>
2340
+ Format:
2341
+ <ul>
2342
+ <li>default_variant,variants,option_types,product_properties,taxons,images</li>
2343
+ <li>variants,variants.images,variants.option_values</li>
2344
+ </ul>
2345
+ <p>
2346
+ More information:
2347
+ <a href="https://jsonapi.org/format/#fetching-includes" target="_blank" rel="noopener">
2348
+ https://jsonapi.org/format/#fetching-includes
2349
+ </a>
2350
+ </p>
2351
+ example: 'default_variant,variants,option_types,product_properties,taxons,images'
2352
+ TaxonIncludeParam:
2353
+ name: include
2354
+ in: query
2355
+ schema:
2356
+ type: string
2357
+ description: >-
2358
+ <p>Specify what related resources (relationships) you would like to receive in the response body.</p>
2359
+ <p>You can also fetch relationships of relationships.</p>
2360
+ <p>
2361
+ Format:
2362
+ <ul>
2363
+ <li>parent,taxonomy,children,image,products</li>
2364
+ <li>children.children</li>
2365
+ <li>parent.children</li>
2366
+ <li>children,products.default_variant</li>
2367
+ </ul>
2368
+ <p>
2369
+ More information:
2370
+ <a href="https://jsonapi.org/format/#fetching-includes" target="_blank" rel="noopener">
2371
+ https://jsonapi.org/format/#fetching-includes
2372
+ </a>
2373
+ </p>
2374
+ example: 'parent,taxonomy,children,image,products'
2375
+ IsoOrIso3:
2376
+ name: iso
2377
+ in: path
2378
+ required: true
2379
+ description: ISO or ISO3
2380
+ schema:
2381
+ type: string
2382
+ CountryIncludeParam:
2383
+ name: include
2384
+ in: query
2385
+ schema:
2386
+ type: string
2387
+ description: >-
2388
+ Pass `states` as value to include States / Regions for each Country
2389
+ example: 'states'
2390
+ AccountIncludeParam:
2391
+ name: include
2392
+ in: query
2393
+ schema:
2394
+ type: string
2395
+ description: >-
2396
+ Pass `default_billing_address` and/or `default_shipping_address` as value to include selected addresses information
2397
+ example: 'default_billing_address,default_shipping_address'
2398
+ FilterByIds:
2399
+ in: query
2400
+ name: filter[ids]
2401
+ schema:
2402
+ type: string
2403
+ example: 1,2,3
2404
+ description: Fetch only resources with corresponding IDs
2405
+ FilterByName:
2406
+ in: query
2407
+ name: filter[name]
2408
+ schema:
2409
+ type: string
2410
+ example: rails
2411
+ description: Find resources with matching name (supports wild-card, partial-word match search)
2412
+ SparseFieldsParam:
2413
+ in: query
2414
+ name: fields
2415
+ style: deepObject
2416
+ description: >-
2417
+ <p>Specify what attributes for given types you would like to receive in the response body.</p>
2418
+ <p>
2419
+ Format:
2420
+ <ul>
2421
+ <li>fields[cart]=total,currency,number</li>
2422
+ </ul>
2423
+ <p>
2424
+ More information:
2425
+ <a href="https://jsonapi.org/format/#fetching-sparse-fieldsets" target="_blank" rel="noopener">
2426
+ https://jsonapi.org/format/#fetching-sparse-fieldsets
2427
+ </a>
2428
+ </p>
2429
+ example: { "cart": "total,currency,number" }
2430
+ schema:
2431
+ type: object
2432
+ responses:
2433
+ 404NotFound:
2434
+ description: Resource not found
2435
+ content:
2436
+ application/json:
2437
+ schema:
2438
+ $ref: '#/components/schemas/Error'
2439
+ 403Forbidden:
2440
+ description: You are not authorized to access this page.
2441
+ content:
2442
+ application/json:
2443
+ schema:
2444
+ $ref: '#/components/schemas/Error'