curl --request GET \
--url https://api.marzipan.co/v1/products \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.marzipan.co/v1/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.marzipan.co/v1/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.marzipan.co/v1/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.marzipan.co/v1/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.marzipan.co/v1/products")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.marzipan.co/v1/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "2e2805a1-738e-4118-8a8b-f9431f0e210c",
"name": "Cellar Selection Malbec",
"slug": "cellar-selection-malbec-2015",
"description": "Id laboris ad aliqua exercitation dolore. Ad, aliqua exercitation dolore est culpa. Dolore est culpa id duis duis labore dolore do ex.",
"productType": "physical",
"sku": "CSMALBC2015",
"collection": "Store",
"status": "active",
"image": {
"id": "0736c529-a33d-4b8c-8126-eb69779dcdad",
"path": "1/0736c529-a33d-4b8c-8126-eb69779dcdad.jpg",
"src": "https://marzipan-cloud-dev.b-cdn.net/1/0736c529-a33d-4b8c-8126-eb69779dcdad.jpg",
"alt": "Cellar Selection Malbec 2015 bottle",
"mimeType": "image/jpeg",
"filename": "0736c529-a33d-4b8c-8126-eb69779dcdad.jpg"
},
"price": "£24.99",
"salePrice": null,
"subscriberPrice": null,
"createdAt": "2024-02-05T23:22:56.000000Z",
"updatedAt": "2024-02-05T23:22:56.000000Z",
"storeSlug": "store",
"subscriptionsSlug": null,
"availability": "all",
"upsellProducts": []
},
{
"id": "df0d13db-1332-4461-b3d1-b2774d47ff5f",
"name": "Chardonnay",
"slug": "chardonnay-2015",
"description": "Lorem sed id, culpa. Culpa id duis duis labore dolore do ex. Duis duis labore, dolore.",
"productType": "physical",
"sku": "CHARD2015",
"collection": "Store",
"status": "active",
"image": {
"id": "1b978a90-3ecb-4f37-b480-9fb81882176e",
"path": "1/1b978a90-3ecb-4f37-b480-9fb81882176e.jpg",
"src": "https://marzipan-cloud-dev.b-cdn.net/1/1b978a90-3ecb-4f37-b480-9fb81882176e.jpg",
"alt": "Chardonnay 2015 bottle",
"mimeType": "image/jpeg",
"filename": "1b978a90-3ecb-4f37-b480-9fb81882176e.jpg"
},
"price": "£23.99",
"salePrice": null,
"subscriberPrice": null,
"createdAt": "2024-02-05T23:22:56.000000Z",
"updatedAt": "2024-02-05T23:22:56.000000Z",
"storeSlug": "store",
"subscriptionsSlug": null,
"availability": "all",
"upsellProducts": []
},
{
"id": "084b80ef-d16d-4531-a25f-40b7ff4c744b",
"name": "Discovery Club",
"slug": "discovery-club",
"description": "Laborum adipiscing, tempor cillum. Cillum exercitation sed officia mollit do dolore.",
"productType": "subscription",
"sku": "DISCCLUB",
"collection": "Club",
"status": "active",
"image": {
"id": "bc1a0d61-e7f9-44d3-ae53-1475b5f9395d",
"path": "1/bc1a0d61-e7f9-44d3-ae53-1475b5f9395d.jpg",
"src": "https://marzipan-cloud-dev.b-cdn.net/1/bc1a0d61-e7f9-44d3-ae53-1475b5f9395d.jpg",
"alt": "Discovery Club subscription box",
"mimeType": "image/jpeg",
"filename": "bc1a0d61-e7f9-44d3-ae53-1475b5f9395d.jpg"
},
"price": "from £0.00",
"salePrice": null,
"subscriberPrice": null,
"createdAt": "2024-02-05T23:22:56.000000Z",
"updatedAt": "2024-02-05T23:22:56.000000Z",
"storeSlug": null,
"subscriptionsSlug": "club",
"availability": "all",
"upsellProducts": [],
"billingFrequency": 6,
"pricingType": "per_item"
}
],
"links": {
"first": "https://api.marzipan.co/v1/products?page=1",
"last": "https://api.marzipan.co/v1/products?page=5",
"prev": null,
"next": "https://api.marzipan.co/v1/products?page=2"
},
"meta": {
"currentPage": 1,
"from": 1,
"path": "https://api.marzipan.co/v1/products",
"perPage": 15,
"to": 15
}
}Products
Get a paginated list of all products with filtering and sorting options. Returns product details including pricing and availability.
curl --request GET \
--url https://api.marzipan.co/v1/products \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.marzipan.co/v1/products"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.marzipan.co/v1/products', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.marzipan.co/v1/products",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.marzipan.co/v1/products"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.marzipan.co/v1/products")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.marzipan.co/v1/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "2e2805a1-738e-4118-8a8b-f9431f0e210c",
"name": "Cellar Selection Malbec",
"slug": "cellar-selection-malbec-2015",
"description": "Id laboris ad aliqua exercitation dolore. Ad, aliqua exercitation dolore est culpa. Dolore est culpa id duis duis labore dolore do ex.",
"productType": "physical",
"sku": "CSMALBC2015",
"collection": "Store",
"status": "active",
"image": {
"id": "0736c529-a33d-4b8c-8126-eb69779dcdad",
"path": "1/0736c529-a33d-4b8c-8126-eb69779dcdad.jpg",
"src": "https://marzipan-cloud-dev.b-cdn.net/1/0736c529-a33d-4b8c-8126-eb69779dcdad.jpg",
"alt": "Cellar Selection Malbec 2015 bottle",
"mimeType": "image/jpeg",
"filename": "0736c529-a33d-4b8c-8126-eb69779dcdad.jpg"
},
"price": "£24.99",
"salePrice": null,
"subscriberPrice": null,
"createdAt": "2024-02-05T23:22:56.000000Z",
"updatedAt": "2024-02-05T23:22:56.000000Z",
"storeSlug": "store",
"subscriptionsSlug": null,
"availability": "all",
"upsellProducts": []
},
{
"id": "df0d13db-1332-4461-b3d1-b2774d47ff5f",
"name": "Chardonnay",
"slug": "chardonnay-2015",
"description": "Lorem sed id, culpa. Culpa id duis duis labore dolore do ex. Duis duis labore, dolore.",
"productType": "physical",
"sku": "CHARD2015",
"collection": "Store",
"status": "active",
"image": {
"id": "1b978a90-3ecb-4f37-b480-9fb81882176e",
"path": "1/1b978a90-3ecb-4f37-b480-9fb81882176e.jpg",
"src": "https://marzipan-cloud-dev.b-cdn.net/1/1b978a90-3ecb-4f37-b480-9fb81882176e.jpg",
"alt": "Chardonnay 2015 bottle",
"mimeType": "image/jpeg",
"filename": "1b978a90-3ecb-4f37-b480-9fb81882176e.jpg"
},
"price": "£23.99",
"salePrice": null,
"subscriberPrice": null,
"createdAt": "2024-02-05T23:22:56.000000Z",
"updatedAt": "2024-02-05T23:22:56.000000Z",
"storeSlug": "store",
"subscriptionsSlug": null,
"availability": "all",
"upsellProducts": []
},
{
"id": "084b80ef-d16d-4531-a25f-40b7ff4c744b",
"name": "Discovery Club",
"slug": "discovery-club",
"description": "Laborum adipiscing, tempor cillum. Cillum exercitation sed officia mollit do dolore.",
"productType": "subscription",
"sku": "DISCCLUB",
"collection": "Club",
"status": "active",
"image": {
"id": "bc1a0d61-e7f9-44d3-ae53-1475b5f9395d",
"path": "1/bc1a0d61-e7f9-44d3-ae53-1475b5f9395d.jpg",
"src": "https://marzipan-cloud-dev.b-cdn.net/1/bc1a0d61-e7f9-44d3-ae53-1475b5f9395d.jpg",
"alt": "Discovery Club subscription box",
"mimeType": "image/jpeg",
"filename": "bc1a0d61-e7f9-44d3-ae53-1475b5f9395d.jpg"
},
"price": "from £0.00",
"salePrice": null,
"subscriberPrice": null,
"createdAt": "2024-02-05T23:22:56.000000Z",
"updatedAt": "2024-02-05T23:22:56.000000Z",
"storeSlug": null,
"subscriptionsSlug": "club",
"availability": "all",
"upsellProducts": [],
"billingFrequency": 6,
"pricingType": "per_item"
}
],
"links": {
"first": "https://api.marzipan.co/v1/products?page=1",
"last": "https://api.marzipan.co/v1/products?page=5",
"prev": null,
"next": "https://api.marzipan.co/v1/products?page=2"
},
"meta": {
"currentPage": 1,
"from": 1,
"path": "https://api.marzipan.co/v1/products",
"perPage": 15,
"to": 15
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your API token.
Query Parameters
Filter products by collection slug or name. Products will be ordered by their position in the collection.
Filter products by attributes using deep object notation. Each attribute filter accepts comma-separated values for OR matching.
Format: attr[attribute_slug]=value1,value2
Example: attr[color]=red,blue&attr[size]=large This returns products that are (red OR blue) AND large.
Show child attributes
Show child attributes
Sort products by field and direction. Format: field.direction (e.g., price.asc, name.desc). Multiple sort options can be comma-separated.
Limit the number of results returned. Maximum 50 per page.
1 <= x <= 50Page number for pagination.
x >= 1Number of items per page. Default is 50.
1 <= x <= 50Comma-separated list of related resources to include in the response.
Available options: linkedSubscriptions (includes full subscription details for products with linked subscriptions).
linkedSubscriptions 
