Spree Commerce Wishlists API
The Wishlists API from Spree Commerce — 9 operation(s) for wishlists.
The Wishlists API from Spree Commerce — 9 operation(s) for wishlists.
openapi: 3.0.3
info:
title: Admin Account / Address Wishlists API
contact:
name: Spree Commerce
url: https://spreecommerce.org
email: hello@spreecommerce.org
description: "Spree Admin API v3 - Administrative API for managing products, orders, and store settings.\n\n## Authentication\n\nThe Admin API requires a secret API key passed in the `x-spree-api-key` header.\nSecret API keys can be generated in the Spree admin dashboard.\n\n## Response Format\n\nAll responses are JSON. List endpoints return paginated responses with `data` and `meta` keys.\nSingle resource endpoints return a flat JSON object.\n\n## Resource IDs\n\nEvery resource is identified by an opaque string ID (e.g. `prod_86Rf07xd4z`,\n`variant_k5nR8xLq`, `or_UkLWZg9DAJ`). Use these IDs everywhere — URL paths,\nrequest bodies, and Ransack filters all accept them directly.\n\n## Error Handling\n\nErrors return a consistent format:\n```json\n{\n \"error\": {\n \"code\": \"validation_error\",\n \"message\": \"Validation failed\",\n \"details\": { \"name\": [\"can't be blank\"] }\n }\n}\n```\n"
version: v3
servers:
- url: http://{defaultHost}
variables:
defaultHost:
default: localhost:3000
tags:
- name: Wishlists
paths:
/api/v2/platform/wishlists:
get:
summary: Return a list of Wishlists
tags:
- Wishlists
security:
- bearer_auth: []
description: Returns a list of Wishlists
operationId: wishlists-list
parameters:
- name: page
in: query
example: 1
schema:
type: integer
- name: per_page
in: query
example: 50
schema:
type: integer
- name: include
in: query
description: 'Select which associated resources you would like to fetch, see: <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
example: wished_items
schema:
type: string
- name: filter[name_cont]
in: query
description: ''
example: Birthday
schema:
type: string
responses:
'200':
description: Records returned
content:
application/vnd.api+json:
examples:
Example:
value:
data:
- id: '22'
type: wishlist
attributes:
name: Black Friday
is_private: true
is_default: false
created_at: '2022-11-08T19:36:06.256Z'
updated_at: '2022-11-08T19:36:06.256Z'
token: PunEhftsfcoHddCoVyqQLTYq
variant_included: false
relationships:
wished_items:
data:
- id: '17'
type: wished_item
- id: '18'
type: wished_item
- id: '23'
type: wishlist
attributes:
name: Birthday
is_private: true
is_default: false
created_at: '2022-11-08T19:36:06.257Z'
updated_at: '2022-11-08T19:36:06.257Z'
token: FYKHQXSsnSwAVEaci7RgbPXq
variant_included: false
relationships:
wished_items:
data:
- id: '19'
type: wished_item
- id: '20'
type: wished_item
meta:
count: 2
total_count: 2
total_pages: 1
links:
self: http://www.example.com/api/v2/platform/wishlists?page=1&per_page=&include=&filter[name_cont]=
next: http://www.example.com/api/v2/platform/wishlists?filter%5Bname_cont%5D=&include=&page=1&per_page=
prev: http://www.example.com/api/v2/platform/wishlists?filter%5Bname_cont%5D=&include=&page=1&per_page=
last: http://www.example.com/api/v2/platform/wishlists?filter%5Bname_cont%5D=&include=&page=1&per_page=
first: http://www.example.com/api/v2/platform/wishlists?filter%5Bname_cont%5D=&include=&page=1&per_page=
schema:
$ref: '#/components/schemas/resources_list'
'401':
description: Authentication Failed
content:
application/vnd.api+json:
examples:
Example:
value:
error: The access token is invalid
schema:
$ref: '#/components/schemas/error'
post:
summary: Create a Wishlist
tags:
- Wishlists
security:
- bearer_auth: []
description: Creates a Wishlist
operationId: create-wishlist
parameters:
- name: include
in: query
description: 'Select which associated resources you would like to fetch, see: <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
example: wished_items
schema:
type: string
responses:
'201':
description: Record created
content:
application/vnd.api+json:
examples:
Example:
value:
data:
id: '26'
type: wishlist
attributes:
name: Wishlist_26
is_private: true
is_default: false
created_at: '2022-11-08T19:36:07.290Z'
updated_at: '2022-11-08T19:36:07.290Z'
token: w7zjAVs9QJd9MLdPXDQcxrqi
variant_included: false
relationships:
wished_items:
data: []
schema:
$ref: '#/components/schemas/resource'
'422':
description: Invalid request
content:
application/vnd.api+json:
examples:
Example:
value:
error: Name can't be blank and User can't be blank
errors:
name:
- can't be blank
user:
- can't be blank
schema:
$ref: '#/components/schemas/validation_errors'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/create_wishlist_params'
/api/v2/platform/wishlists/{id}:
get:
summary: Return a Wishlist
tags:
- Wishlists
security:
- bearer_auth: []
description: Returns a Wishlist
operationId: show-wishlist
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: include
in: query
description: 'Select which associated resources you would like to fetch, see: <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
example: wished_items
schema:
type: string
responses:
'200':
description: Record found
content:
application/vnd.api+json:
examples:
Example:
value:
data:
id: '27'
type: wishlist
attributes:
name: My Wishlist
is_private: true
is_default: false
created_at: '2022-11-08T19:36:07.570Z'
updated_at: '2022-11-08T19:36:07.570Z'
token: mTKMs2ZP2PQc1Gu64XMvPrtk
variant_included: false
relationships:
wished_items:
data: []
schema:
$ref: '#/components/schemas/resource'
'404':
description: Record not found
content:
application/vnd.api+json:
examples:
Example:
value:
error: The resource you were looking for could not be found.
schema:
$ref: '#/components/schemas/error'
'401':
description: Authentication Failed
content:
application/vnd.api+json:
examples:
Example:
value:
error: The access token is invalid
schema:
$ref: '#/components/schemas/error'
patch:
summary: Update a Wishlist
tags:
- Wishlists
security:
- bearer_auth: []
description: Updates a Wishlist
operationId: update-wishlist
parameters:
- name: id
in: path
required: true
schema:
type: string
- name: include
in: query
description: 'Select which associated resources you would like to fetch, see: <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
example: wished_items
schema:
type: string
responses:
'200':
description: Record updated
content:
application/vnd.api+json:
examples:
Example:
value:
data:
id: '29'
type: wishlist
attributes:
name: My Super Wishlist
is_private: true
is_default: false
created_at: '2022-11-08T19:36:08.103Z'
updated_at: '2022-11-08T19:36:08.334Z'
token: W4TY5oxqYi2kvpYs26XUPH3p
variant_included: false
relationships:
wished_items:
data: []
schema:
$ref: '#/components/schemas/resource'
'422':
description: Invalid request
content:
application/vnd.api+json:
examples:
Example:
value:
error: Name can't be blank
errors:
name:
- can't be blank
schema:
$ref: '#/components/schemas/validation_errors'
'404':
description: Record not found
content:
application/vnd.api+json:
examples:
Example:
value:
error: The resource you were looking for could not be found.
schema:
$ref: '#/components/schemas/error'
'401':
description: Authentication Failed
content:
application/vnd.api+json:
examples:
Example:
value:
error: The access token is invalid
schema:
$ref: '#/components/schemas/error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/update_wishlist_params'
delete:
summary: Delete a Wishlist
tags:
- Wishlists
security:
- bearer_auth: []
description: Deletes a Wishlist
operationId: delete-wishlist
parameters:
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: Record deleted
'404':
description: Record not found
content:
application/vnd.api+json:
examples:
Example:
value:
error: The resource you were looking for could not be found.
schema:
$ref: '#/components/schemas/error'
'401':
description: Authentication Failed
content:
application/vnd.api+json:
examples:
Example:
value:
error: The access token is invalid
schema:
$ref: '#/components/schemas/error'
/api/v3/store/wishlists:
get:
summary: List wishlists
tags:
- Wishlists
security:
- api_key: []
bearer_auth: []
description: Returns all wishlists for the authenticated customer
x-codeSamples:
- lang: javascript
label: Spree SDK
source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '<api-key>',\n})\n\nconst wishlists = await client.wishlists.list({}, {\n token: '<token>',\n})"
parameters:
- name: x-spree-api-key
in: header
required: true
schema:
type: string
- name: Authorization
in: header
required: true
schema:
type: string
- name: page
in: query
required: false
schema:
type: integer
- name: limit
in: query
required: false
schema:
type: integer
- name: fields
in: query
required: false
description: Comma-separated list of fields to include (e.g., name,slug,price). id is always included.
schema:
type: string
responses:
'200':
description: wishlists found
content:
application/json:
example:
data:
- id: wl_UkLWZg9DAJ
name: My Wishlist
token: KrDYvpcWeMWWCVsEuRj9V8Xm
is_default: false
is_private: true
meta:
page: 1
limit: 25
count: 1
pages: 1
from: 1
to: 1
in: 1
previous: null
next: null
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Wishlist'
meta:
$ref: '#/components/schemas/PaginationMeta'
'401':
description: unauthorized
content:
application/json:
example:
error:
code: authentication_required
message: Authentication required
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
summary: Create a wishlist
tags:
- Wishlists
security:
- api_key: []
bearer_auth: []
description: Creates a new wishlist for the customer
x-codeSamples:
- lang: javascript
label: Spree SDK
source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '<api-key>',\n})\n\nconst wishlist = await client.wishlists.create({\n name: 'Birthday Ideas',\n is_private: true,\n}, {\n token: '<token>',\n})"
parameters:
- name: x-spree-api-key
in: header
required: true
schema:
type: string
- name: Authorization
in: header
required: true
schema:
type: string
responses:
'201':
description: wishlist created
content:
application/json:
example:
id: wl_gbHJdmfrXB
name: Birthday Ideas
token: LoTGXDT4V69PBMZXRWaS9Sjg
is_default: false
is_private: true
schema:
$ref: '#/components/schemas/Wishlist'
'422':
description: validation error
content:
application/json:
example:
error:
code: validation_error
message: Name can't be blank
details:
name:
- can't be blank
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
example: Birthday Ideas
is_private:
type: boolean
example: true
is_default:
type: boolean
example: false
required:
- name
/api/v3/store/wishlists/{id}:
get:
summary: Get a wishlist
tags:
- Wishlists
security:
- api_key: []
bearer_auth: []
x-codeSamples:
- lang: javascript
label: Spree SDK
source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '<api-key>',\n})\n\nconst wishlist = await client.wishlists.get('wl_abc123', {\n expand: ['wished_items'],\n}, {\n token: '<token>',\n})"
parameters:
- name: x-spree-api-key
in: header
required: true
schema:
type: string
- name: Authorization
in: header
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
- name: expand
in: query
required: false
description: Expand wished_items
schema:
type: string
- name: fields
in: query
required: false
description: Comma-separated list of fields to include (e.g., name,slug,price). id is always included.
schema:
type: string
responses:
'200':
description: wishlist found
content:
application/json:
example:
id: wl_UkLWZg9DAJ
name: My Wishlist
token: K1j4ej8u38Y4P9whWrjPs2R9
is_default: false
is_private: true
schema:
$ref: '#/components/schemas/Wishlist'
'404':
description: wishlist not found
content:
application/json:
example:
error:
code: record_not_found
message: Wishlist not found
schema:
$ref: '#/components/schemas/ErrorResponse'
patch:
summary: Update a wishlist
tags:
- Wishlists
security:
- api_key: []
bearer_auth: []
x-codeSamples:
- lang: javascript
label: Spree SDK
source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '<api-key>',\n})\n\nconst wishlist = await client.wishlists.update('wl_abc123', {\n name: 'Updated Name',\n}, {\n token: '<token>',\n})"
parameters:
- name: x-spree-api-key
in: header
required: true
schema:
type: string
- name: Authorization
in: header
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
responses:
'200':
description: wishlist updated
content:
application/json:
example:
id: wl_UkLWZg9DAJ
name: Updated Name
token: xVUpUiksViqHLiWcenRTEGZx
is_default: false
is_private: true
schema:
$ref: '#/components/schemas/Wishlist'
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
example: Updated Name
is_private:
type: boolean
example: true
is_default:
type: boolean
example: false
delete:
summary: Delete a wishlist
tags:
- Wishlists
security:
- api_key: []
bearer_auth: []
x-codeSamples:
- lang: javascript
label: Spree SDK
source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '<api-key>',\n})\n\nawait client.wishlists.delete('wl_abc123', {\n token: '<token>',\n})"
parameters:
- name: x-spree-api-key
in: header
required: true
schema:
type: string
- name: Authorization
in: header
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: wishlist deleted
/api/v3/store/wishlists/{wishlist_id}/items:
post:
summary: Add item to wishlist
tags:
- Wishlists
security:
- api_key: []
bearer_auth: []
description: Adds a variant to the wishlist
x-codeSamples:
- lang: javascript
label: Spree SDK
source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '<api-key>',\n})\n\nconst item = await client.wishlists.items.create('wl_abc123', {\n variant_id: 'variant_abc123',\n quantity: 1,\n}, {\n token: '<token>',\n})"
parameters:
- name: x-spree-api-key
in: header
required: true
schema:
type: string
- name: Authorization
in: header
required: true
schema:
type: string
- name: wishlist_id
in: path
required: true
schema:
type: string
responses:
'201':
description: item added
content:
application/json:
example:
id: wi_gbHJdmfrXB
variant_id: variant_gbHJdmfrXB
wishlist_id: wl_UkLWZg9DAJ
quantity: 1
variant:
id: variant_gbHJdmfrXB
product_id: prod_gbHJdmfrXB
sku: SKU-239
options_text: ''
track_inventory: true
media_count: 0
thumbnail_url: null
purchasable: true
in_stock: false
backorderable: true
weight: 0.0
height: null
width: null
depth: null
price:
id: price_gbHJdmfrXB
amount: '19.99'
amount_in_cents: 1999
compare_at_amount: null
compare_at_amount_in_cents: null
currency: USD
display_amount: $19.99
display_compare_at_amount: null
price_list_id: null
original_price: null
option_values: []
schema:
$ref: '#/components/schemas/WishlistItem'
requestBody:
content:
application/json:
schema:
type: object
properties:
variant_id:
type: string
example: variant_abc123
quantity:
type: integer
example: 1
required:
- variant_id
/api/v3/store/wishlists/{wishlist_id}/items/{id}:
delete:
summary: Remove item from wishlist
tags:
- Wishlists
security:
- api_key: []
bearer_auth: []
x-codeSamples:
- lang: javascript
label: Spree SDK
source: "import { createClient } from '@spree/sdk'\n\nconst client = createClient({\n baseUrl: 'https://your-store.com',\n publishableKey: '<api-key>',\n})\n\nawait client.wishlists.items.delete('wl_abc123', 'wi_abc123', {\n token: '<token>',\n})"
parameters:
- name: x-spree-api-key
in: header
required: true
schema:
type: string
- name: Authorization
in: header
required: true
schema:
type: string
- name: wishlist_id
in: path
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: string
responses:
'204':
description: item removed
'404':
description: item not found
content:
application/json:
example:
error:
code: record_not_found
message: Wished item not found
/api/v2/storefront/wishlists:
get:
description: Returns all wishlists available to the current user, in the current store.
summary: List all Wishlists
tags:
- Wishlists
operationId: list-wishlists-for-current-user
parameters:
- $ref: '#/components/parameters/WishlistIncludeParam'
- $ref: '#/components/parameters/SparseFieldsWishlist'
- $ref: '#/components/parameters/PerPageParam'
- $ref: '#/components/parameters/WishlistIsVariantIncludedParam'
responses:
'200':
$ref: '#/components/responses/WishlistList'
'403':
$ref: '#/components/responses/403Forbidden'
security:
- bearerAuth: []
post:
description: Creates a new wishlist for the current user in the current store.
summary: Create a Wishlist
tags:
- Wishlists
operationId: create-wishlist
responses:
'200':
$ref: '#/components/responses/Wishlist'
'403':
$ref: '#/components/responses/403Forbidden'
'422':
$ref: '#/components/responses/422UnprocessableEntity'
security:
- bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: The Wishlist name.
is_private:
type: boolean
description: Set the Wishlist to public or private. Defaults to true (private).
is_default:
type: boolean
description: Whether the wishlist is set to the users default wishlist for the current store. Defaults to false.
required:
- name
examples:
Create wishlist:
value:
name: My Wishlist
is_private: false
is_default: true
parameters:
- $ref: '#/components/parameters/SparseFieldsWishlist'
/api/v2/storefront/wishlists/{token}:
get:
description: 'Retrieves a wishlist using the wishlist token.
If the wishlist is publicly viewable, the endpoint will return the requested wishlist regardless of the user. If the wishlist is private, only the wishlist owner can access the wishlist.'
summary: Retrieve a Wishlist
tags:
- Wishlists
operationId: get-wishlist-details
parameters:
- $ref: '#/components/parameters/Token'
- $ref: '#/components/parameters/WishlistIncludeParam'
- $ref: '#/components/parameters/SparseFieldsWishlist'
- $ref: '#/components/parameters/WishlistIsVariantIncludedParam'
responses:
'200':
$ref: '#/components/responses/Wishlist'
'403':
$ref: '#/components/responses/403Forbidden'
patch:
description: Updates the specific Wishlist by setting the values passed in the request body. Any parameters not provided will be left unchanged.
summary: Update a Wishlist
tags:
- Wishlists
operationId: update-wishlist
requestBody:
required: true
content:
application/vnd.api+json:
schema:
type: object
properties:
wishlist:
type: object
properties:
name:
type: string
description: Change the wishlist name.
is_private:
type: boolean
description: Set the wishlist to public or private.
is_default:
type: boolean
description: Make this wishlist the default wishlist.
examples:
Update Name:
value:
wishlist:
name: Birthday Ideas
Set to Private:
value:
wishlist:
is_private: true
Make Default:
value:
wishlist:
is_default: true
description: ''
parameters:
- $ref: '#/components/parameters/Token'
- $ref: '#/components/parameters/SparseFieldsWishlist'
responses:
'200':
$ref: '#/components/responses/Wishlist'
'403':
$ref: '#/components/responses/403Forbidden'
'422':
$ref: '#/components/responses/422UnprocessableEntity'
security:
- bearerAuth: []
delete:
description: This operation deletes the wishlist identified in the URI `token`.
summary: Delete a Wishlist
tags:
- Wishlists
operationId: delete-wishlist
parameters:
- $ref: '#/components/parameters/Token'
responses:
'204':
description: 204 Success - No Content
'403':
$ref: '#/components/responses/403Forbidden'
security:
- bearerAuth: []
/api/v2/storefront/wishlists/default:
get:
description: Returns the default wishlist for the current user, in the current store. If the user does not have a default wishlist in the current store one will be created.
summary: Retrieve the default Wishlist
tags:
- Wishlists
operationId: get-default-wishlist
parameters:
- $ref: '#/components/parameters/WishlistIncludeParam'
- $ref: '#/components/parameters/SparseFieldsWishlist'
- $ref: '#/components/parameters/WishlistIsVariantIncludedParam'
responses:
'200':
$ref: '#/components/responses/Wishlist'
'403':
$ref: '#/components/responses/403Forbidden'
security:
- bearerAuth: []
components:
schemas:
WishedItem:
type: object
x-internal: false
properties:
id:
type: string
type:
type: string
default: wished_item
attributes:
type: object
properties:
quantity:
type: integer
price:
type: string
total:
type: string
display_price:
type: string
display_total:
type: string
relationships:
type: object
properties:
variant:
type: object
properties:
data:
$ref: '#/components/schemas/Relation'
required:
- id
- type
- attributes
- relationships
WishlistIncludes:
x-internal: false
title: Wishlist Includes
allOf:
- $ref: '#/components/schemas/WishedItem'
create_wishlist_params:
type: object
properties:
wishlist:
type: object
required:
- name
# --- truncated at 32 KB (53 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/spree/refs/heads/main/openapi/spree-wishlists-api-openapi.yml