Skip to content
Treva

Sellora REST API v1.0.0

Headless / mobile access to the Sellora store.

Envelope. Successful responses are {data, meta?, links?} (plus an optional message). Errors are {message, errors?} with the proper HTTP status (401, 403, 404, 422, 429, 503).

Authentication. POST /auth/login returns a Bearer token (Laravel Sanctum): send Authorization: Bearer <token>.

Guest cart. The first cart write returns X-Cart-Token; send it on every cart / checkout call until the customer signs in.

Localisation. Accept-Language selects the language, X-Currency the display currency; all money values are {amount, formatted, currency}.

Rate limits. 60 requests/minute for guests (per IP), 120 for authenticated tokens (per user); credential and public-write endpoints allow 10/minute per IP. Limit headers: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After on 429.

Base URL: https://selloralaravel.pdthemes.de/api/v1

Bootstrap

get /bootstrap App bootstrap

Store info, active theme key and design tokens, languages, currencies, menus (main, categories, footer), the category tree, enabled features, public payment-method info and countries. Call it once at start-up and whenever the user changes language or currency.

Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/bootstrap"
Response 200
{
    "data": {
        "store": {
            "name": "Loom",
            "tagline": "Clothes worth keeping",
            "logo": "http://localhost/assets/images/sellora/logo.svg",
            "logo_dark": "http://localhost/assets/images/sellora/logo-white.svg",
            "favicon": "http://localhost/assets/images/sellora/icon-32.png",
            "email": "hello@loom.store",
            "phone": "1-800-555-0199",
            "country": "US",
            "version": "1.0.0"
        },
        "theme": {
            "key": "fashion",
            "tokens": {
                "--mk-bg": "#ffffff",
                "--mk-text": "#151412",
                "--mk-body": "#75706a",
                "--mk-line": "#e8e3dc",
                "--mk-surface": "#f5f2ed",
                "--mk-card": "#ffffff",
                "--mk-media": "#f2eee8",
                "--mk-header": "#ffffff",
                "--mk-header-glass": "rgba(255, 255, 255, 0.9)",
                "--mk-dark": "#151412",
                "--mk-dark-2": "#26231f",
                "--mk-on-dark": "#ffffff",
                "--mk-btn": "#151412",
                "--mk-btn-hover": "#2f2b27",
                "--mk-on-btn": "#ffffff",
                "--mk-accent": "#b5532f",
                "--mk-accent-rgb": "181 83 47",
                "--mk-accent-dark": "#97411f",
                "--mk-accent-soft": "#f7ebe3",
                "--mk-accent-bright": "#f0a07d",
                "--mk-on-accent": "#ffffff",
                "--mk-pop": "#f5c7a9",
                "--mk-sale": "#b5532f",
                "--mk-sale-soft": "#f7ebe3",
                "--mk-sale-text": "#97411f",
                "--mk-star": "#151412",
                "--mk-radius": "14px",
                "--mk-radius-lg": "18px",
                "--mk-radius-sm": "10px",
                "--mk-radius-xl": "0px",
                "--mk-media-ratio": "3 / 4",
                "--mk-media-inset": "9%",
                "--mk-display": "\"Helvetica Now Display\", \"Inter\", sans-serif",
                "--mk-sans": "\"Inter\", \"Helvetica Now Display\", system-ui, sans-serif",
                "--mk-news-bg": "linear-gradient(120deg, #151412 0%, #2c2621 100%)",
                "color-scheme": "light"
            }
        },
        "locale": "en",
        "default_locale": "en",
        "languages": [
            {
                "code": "en",
                "name": "English",
                "native_name": "English",
                "direction": "ltr",
                "is_default": true
            }
        ],
        "currency": "USD",
        "default_currency": "USD",
        "currencies": [
            {
                "code": "USD",
                "name": "US Dollar",
                "symbol": "$",
                "symbol_position": "before",
                "decimals": 2,
                "rate": 1,
                "is_default": true,
                "example": "$1,234.50"
            },
            {
                "code": "EUR",
                "name": "Euro",
                "symbol": "€",
                "symbol_position": "after_sp",
                "decimals": 2,
                "rate": 0.92,
                "is_default": false,
                "example": "1.135,74 €"
            }
        ],
        "menus": {
            "main": [
                {
                    "id": 19,
                    "title": "New in",
                    "type": "custom",
                    "url": "http://localhost/shop?sort=newest",
                    "icon": null,
                    "badge": "New",
                    "new_tab": false,
                    "children": []
                },
                {
                    "id": 20,
                    "title": "Women",
                    "type": "category",
                    "url": "http://localhost/category/women",
                    "icon": null,
                    "badge": null,
                    "new_tab": false,
                    "children": []
                }
            ],
            "categories": [
                {
                    "id": 24,
                    "title": "Coats",
                    "type": "category",
                    "url": "http://localhost/category/coats-jackets",
                    "icon": null,
                    "badge": null,
                    "new_tab": false,
                    "children": []
                },
                {
                    "id": 25,
                    "title": "Knitwear",
                    "type": "category",
                    "url": "http://localhost/category/knitwear",
                    "icon": null,
                    "badge": null,
                    "new_tab": false,
                    "children": []
                }
            ],
            "footer": {
                "column_1": [
                    {
                        "id": 35,
                        "title": "New in",
                        "type": "custom",
                        "url": "http://localhost/shop?sort=newest",
                        "icon": null,
                        "badge": null,
                        "new_tab": false,
                        "children": []
                    },
                    {
                        "id": 36,
                        "title": "Shop the look",
                        "type": "custom",
                        "url": "http://localhost/#look",
                        "icon": null,
                        "badge": null,
                        "new_tab": false,
                        "children": []
                    }
                ],
                "column_2": [
                    {
                        "id": 40,
                        "title": "Track an order",
                        "type": "custom",
                        "url": "http://localhost/track-order",
                        "icon": null,
                        "badge": null,
                        "new_tab": false,
                        "children": []
                    },
                    {
                        "id": 41,
                        "title": "Delivery",
                        "type": "page",
                        "url": "http://localhost/page/shipping-policy",
                        "icon": null,
                        "badge": null,
                        "new_tab": false,
                        "children": []
                    }
                ]
            }
        },
        "categories": [
            {
                "id": 1,
                "parent_id": null,
                "slug": "women",
                "name": "Women",
                "description": "Dresses, knitwear, coats and everyday separates from independent womenswear labels. Cut for real bodies and built to be worn for years.",
                "url": "http://localhost/category/women",
                "image": {
                    "url": "http://localhost/assets/images/product/product-fashion-23.png",
                    "alt": "Women",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/product/product-fashion-23.png",
                        "small": "http://localhost/assets/images/product/product-fashion-23.png",
                        "medium": "http://localhost/assets/images/product/product-fashion-23.png",
                        "large": "http://localhost/assets/images/product/product-fashion-23.png"
                    }
                },
                "banner": null,
                "icon": "i-hanger",
                "is_featured": false,
                "children": [
                    {
                        "id": 2,
                        "parent_id": 1,
                        "slug": "dresses",
                        "name": "Dresses",
                        "description": "Slip dresses, knit dresses and shirt dresses for work, weekends and everything in between. Fluid fabrics that move with you.",
                        "url": "http://localhost/category/dresses",
                        "image": {
                            "url": "http://localhost/assets/images/product/product-fashion-35.png",
                            "alt": "Dresses",
                            "sizes": {
                                "thumb": "http://localhost/assets/images/product/product-fashion-35.png",
                                "small": "http://localhost/assets/images/product/product-fashion-35.png",
                                "medium": "http://localhost/assets/images/product/product-fashion-35.png",
                                "large": "http://localhost/assets/images/product/product-fashion-35.png"
                            }
                        },
                        "banner": null,
                        "icon": "i-hanger",
                        "is_featured": true,
                        "children": []
                    },
                    {
                        "id": 3,
                        "parent_id": 1,
                        "slug": "knitwear",
                        "name": "Knitwear",
                        "description": "Chunky turtlenecks, cable jumpers and cropped cardigans in wool, merino and recycled blends. Warm, soft and made to layer.",
                        "url": "http://localhost/category/knitwear",
                        "image": {
                            "url": "http://localhost/assets/images/product/product-fashion-27.png",
                            "alt": "Knitwear",
                            "sizes": {
                                "thumb": "http://localhost/assets/images/product/product-fashion-27.png",
                                "small": "http://localhost/assets/images/product/product-fashion-27.png",
                                "medium": "http://localhost/assets/images/product/product-fashion-27.png",
                                "large": "http://localhost/assets/images/product/product-fashion-27.png"
                            }
                        },
                        "banner": null,
                        "icon": "i-shirt",
                        "is_featured": true,
                        "children": []
                    }
                ]
            },
            {
                "id": 5,
                "parent_id": null,
                "slug": "men",
                "name": "Men",
                "description": "Overshirts, hoodies, outerwear and relaxed tailoring for the modern wardrobe. Honest fabrics, simple shapes and a considered fit.",
                "url": "http://localhost/category/men",
                "image": {
                    "url": "http://localhost/assets/images/articles/article-fashion-06.png",
                    "alt": "Men",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/articles/article-fashion-06.png",
                        "small": "http://localhost/assets/images/articles/article-fashion-06.png",
                        "medium": "http://localhost/assets/images/articles/article-fashion-06.png",
                        "large": "http://localhost/assets/images/articles/article-fashion-06.png"
                    }
                },
                "banner": null,
                "icon": "i-shirt",
                "is_featured": true,
                "children": [
                    {
                        "id": 6,
                        "parent_id": 5,
                        "slug": "shirts",
                        "name": "Shirts",
                        "description": "Chambray, flannel, silk-blend and oxford shirts in easy fits. Wear them buttoned up or open over a tee.",
                        "url": "http://localhost/category/shirts",
                        "image": {
                            "url": "http://localhost/assets/images/articles/article-fashion-08.png",
                            "alt": "Shirts",
                            "sizes": {
                                "thumb": "http://localhost/assets/images/articles/article-fashion-08.png",
                                "small": "http://localhost/assets/images/articles/article-fashion-08.png",
                                "medium": "http://localhost/assets/images/articles/article-fashion-08.png",
                                "large": "http://localhost/assets/images/articles/article-fashion-08.png"
                            }
                        },
                        "banner": null,
                        "icon": "i-shirt",
                        "is_featured": false,
                        "children": []
                    }
                ]
            }
        ],
        "features": {
            "reviews": true,
            "guest_reviews": true,
            "wishlist": true,
            "guest_wishlist": true,
            "compare": true,
            "questions": true,
            "stock_alerts": true,
            "coupons": true,
            "guest_checkout": true,
            "newsletter": true,
            "reward_points": false,
            "email_verification": false
        },
        "checkout": {
            "min_order_amount": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "phone_required": true,
            "terms_required": true,
            "order_note": true
        },
        "payment_methods": [
            {
                "key": "cod",
                "title": "Cash on Delivery",
                "description": "Pay with cash when your order is delivered.",
                "instructions": "Please have the exact amount ready when the courier arrives.",
                "offline": true
            },
            {
                "key": "bank_transfer",
                "title": "Bank Transfer",
                "description": "Transfer the order total to our bank account. Your order ships once the payment is received.",
                "instructions": "Bank: Example Bank\nAccount name: Sellora Store\nIBAN: XX00 0000 0000 0000 0000\nUse your order number as the payment reference.",
                "offline": true
            }
        ],
        "countries": [
            {
                "code": "AF",
                "name": "Afghanistan"
            },
            {
                "code": "AX",
                "name": "Åland Islands"
            }
        ]
    }
}

Errors: 429

get /home Home screen sections

The active home sections of the storefront theme (hero, carousels, category strips ...) in display order, each with type, variant, settings and resolved items. Empty sections are omitted.

Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/home"
Response 200
{
    "data": [
        {
            "id": 1,
            "type": "hero",
            "variant": "full",
            "title": "Hero slider",
            "settings": {
                "slider_key": "home-hero",
                "aria_label": "Featured collections",
                "side_blocks": [],
                "left_blocks": [],
                "right_blocks": [],
                "row_blocks": [],
                "sidebar_title": "Categories",
                "sidebar_all_text": "Browse all categories",
                "sidebar_limit": 9,
                "slider_id": 1
            },
            "items": {
                "slides": [
                    {
                        "id": 1,
                        "slider_id": 1,
                        "title": {
                            "en": "Statement *shades* & sharp outerwear"
                        },
                        "subtitle": {
                            "en": "From *$69*"
                        },
                        "description": {
                            "en": "Oversized frames, double-breasted coats and the knits to wear underneath."
                        },
                        "badge": {
                            "en": "New season"
                        },
                        "image": {
                            "url": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                            "alt": null,
                            "sizes": {
                                "thumb": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                                "small": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                                "medium": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                                "large": "http://localhost/assets/images/other/image-fashion-eight-01.jpg"
                            }
                        },
                        "mobile_image": "assets/images/other/image-fashion-eight-01.jpg",
                        "button_text": {
                            "en": "Shop the edit"
                        },
                        "button_url": "route:front.shop?sort=newest",
                        "button_2_text": null,
                        "button_2_url": null,
                        "settings": {
                            "bg": "#ece5da",
                            "button_style": "ink",
                            "dark": false,
                            "image_alt": "Two models in white oval sunglasses, a black coat and a graphic yellow top"
                        },
                        "position": 1,
                        "is_active": true,
                        "created_at": "2026-10-02T12:56:53.000000Z",
                        "updated_at": "2026-10-02T12:56:53.000000Z"
                    },
                    {
                        "id": 2,
                        "slider_id": 1,
                        "title": {
                            "en": "Soft knits in *warm* tones"
                        },
                        "subtitle": {
                            "en": "Now *-25%*"
                        },
                        "description": {
                            "en": "Cable knits, turtlenecks and cardigans in wool you'll wear for years."
                        },
                        "badge": {
                            "en": "Knitwear week"
                        },
                        "image": {
                            "url": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                            "alt": null,
                            "sizes": {
                                "thumb": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                                "small": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                                "medium": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                                "large": "http://localhost/assets/images/other/image-fashion-eight-03.jpg"
                            }
                        },
                        "mobile_image": "assets/images/other/image-fashion-eight-03.jpg",
                        "button_text": {
                            "en": "Shop knitwear"
                        },
                        "button_url": "category:knitwear",
                        "button_2_text": null,
                        "button_2_url": null,
                        "settings": {
                            "bg": "#211d1a",
                            "class": "lm-slide-dark",
                            "button_style": "light",
                            "dark": true,
                            "image_alt": "Model pulling an ecru cable-knit jumper over her face"
                        },
                        "position": 2,
                        "is_active": true,
                        "created_at": "2026-10-02T12:56:53.000000Z",
                        "updated_at": "2026-10-02T12:56:53.000000Z"
                    }
                ],
                "sideBlocks": [],
                "leftBlocks": [],
                "rightBlocks": [],
                "rowBlocks": [],
                "sidebarCategories": []
            }
        },
        {
            "id": 2,
            "type": "category_strip",
            "variant": "portraits",
            "title": "Shop the edit",
            "settings": {
                "anchor": "shop-by",
                "eyebrow": "Departments",
                "eyebrow_icon": "",
                "title": "Shop the edit",
                "link_text": "All categories",
                "link_url": "route:front.shop",
                "source": "featured",
                "category_slug": null,
                "category_slugs": [],
                "limit": 6,
                "count_label": ":count styles",
                "key": "",
                "tiles": []
            },
            "items": {
                "categories": [
                    {
                        "id": 2,
                        "parent_id": 1,
                        "slug": "dresses",
                        "name": "Dresses",
                        "description": "Slip dresses, knit dresses and shirt dresses for work, weekends and everything in between. Fluid fabrics that move with you.",
                        "url": "http://localhost/category/dresses",
                        "image": {
                            "url": "http://localhost/assets/images/product/product-fashion-35.png",
                            "alt": "Dresses",
                            "sizes": {
                                "thumb": "http://localhost/assets/images/product/product-fashion-35.png",
                                "small": "http://localhost/assets/images/product/product-fashion-35.png",
                                "medium": "http://localhost/assets/images/product/product-fashion-35.png",
                                "large": "http://localhost/assets/images/product/product-fashion-35.png"
                            }
                        },
                        "banner": null,
                        "icon": "i-hanger",
                        "is_featured": true,
                        "products_count": 2
                    },
                    {
                        "id": 3,
                        "parent_id": 1,
                        "slug": "knitwear",
                        "name": "Knitwear",
                        "description": "Chunky turtlenecks, cable jumpers and cropped cardigans in wool, merino and recycled blends. Warm, soft and made to layer.",
                        "url": "http://localhost/category/knitwear",
                        "image": {
                            "url": "http://localhost/assets/images/product/product-fashion-27.png",
                            "alt": "Knitwear",
                            "sizes": {
                                "thumb": "http://localhost/assets/images/product/product-fashion-27.png",
                                "small": "http://localhost/assets/images/product/product-fashion-27.png",
                                "medium": "http://localhost/assets/images/product/product-fashion-27.png",
                                "large": "http://localhost/assets/images/product/product-fashion-27.png"
                            }
                        },
                        "banner": null,
                        "icon": "i-shirt",
                        "is_featured": true,
                        "products_count": 6
                    }
                ]
            }
        }
    ],
    "meta": {
        "theme": "fashion"
    }
}

Errors: 429

Auth

post /auth/register Create an account

Rate limit: 10/min per IP.

Request body (JSON)
first_name*stringFirst name
last_namestringLast name
email*stringUnique e-mail address
phonestringPhone (required when the store requires it)
password*stringMin. 8 characters
password_confirmation*stringMust match password
terms*booleanMust be true
newsletterbooleanSubscribe to the newsletter
device_namestringLabel of the token, e.g. the device
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/auth/register" \
  -H "Content-Type: application/json" \
  -d '{"first_name":"Jane","last_name":"Doe","email":"jane.doe@example.com","phone":"+1 555 0100","password":"Secret123","password_confirmation":"Secret123","terms":true,"newsletter":false,"device_name":"iPhone 15"}'
Response 201
{
    "data": {
        "token": "10|xyMenAO09kOjJvHfAgYVoQ8ewfC3VkSFhucTeoQ917867a79",
        "token_type": "Bearer",
        "user": {
            "id": 6,
            "first_name": "Jane",
            "last_name": "Doe",
            "name": "Jane Doe",
            "email": "jane.doe@example.com",
            "phone": "+1 555 0100",
            "avatar": null,
            "locale": "en",
            "currency": "USD",
            "dob": null,
            "gender": null,
            "newsletter": false,
            "points_balance": 0,
            "email_verified": false,
            "created_at": "2026-10-02T13:01:39+00:00"
        }
    },
    "message": "Welcome, Jane! Your account is ready."
}

Errors: 422, 429

post /auth/login Sign in and get a Bearer token

Send X-Cart-Token to merge the guest cart into the account cart on sign-in. Failed attempts are throttled per e-mail and IP. Rate limit: 10/min per IP.

Request body (JSON)
email*stringE-mail address
password*stringPassword
device_namestringLabel of the token
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{"email":"jane.doe@example.com","password":"Secret123","device_name":"iPhone 15"}'
Response 200
{
    "data": {
        "token": "11|K1SYozn7DZe4qAJNQ5HEhatRunW3xbPdXUWDndfU5a5857de",
        "token_type": "Bearer",
        "user": {
            "id": 6,
            "first_name": "Jane",
            "last_name": "Doe",
            "name": "Jane Doe",
            "email": "jane.doe@example.com",
            "phone": "+1 555 0100",
            "avatar": null,
            "locale": "en",
            "currency": "USD",
            "dob": null,
            "gender": null,
            "newsletter": false,
            "points_balance": 0,
            "email_verified": false,
            "created_at": "2026-10-02T13:01:39+00:00"
        }
    },
    "message": "Welcome back, Jane!"
}

Errors: 422, 429

post /auth/logout Revoke the current token Auth required
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/auth/logout" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "message": "You have been signed out."
}

Errors: 401, 429

get /auth/me Current customer Auth required
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/auth/me" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": {
        "id": 6,
        "first_name": "Jane",
        "last_name": "Doe",
        "name": "Jane Doe",
        "email": "jane.doe@example.com",
        "phone": "+1 555 0100",
        "avatar": null,
        "locale": "en",
        "currency": "USD",
        "dob": null,
        "gender": null,
        "newsletter": false,
        "points_balance": 0,
        "email_verified": false,
        "created_at": "2026-10-02T13:01:39+00:00"
    }
}

Errors: 401, 429

put /auth/me Update the profile Auth required

Every field is optional. Changing the e-mail or the password requires current_password.

Request body (JSON)
first_namestringFirst name
last_namestringLast name
emailstringNew e-mail (needs current_password)
phonestringPhone
dobstringDate of birth (YYYY-MM-DD)
genderstringfemale, male, other or prefer_not
localestringPreferred language code
currencystringPreferred currency code
newsletterbooleanNewsletter opt-in
current_passwordstringRequired with email / password changes
passwordstringNew password (with password_confirmation)
Example request
curl -X PUT "https://selloralaravel.pdthemes.de/api/v1/auth/me" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"first_name":"Janet","last_name":"Doe","newsletter":true}'
Response 200
{
    "data": {
        "id": 6,
        "first_name": "Janet",
        "last_name": "Doe",
        "name": "Janet Doe",
        "email": "jane.doe@example.com",
        "phone": "+1 555 0100",
        "avatar": null,
        "locale": "en",
        "currency": "USD",
        "dob": null,
        "gender": null,
        "newsletter": true,
        "points_balance": 0,
        "email_verified": false,
        "created_at": "2026-10-02T13:01:39+00:00"
    },
    "message": "Your profile has been updated."
}

Errors: 422, 401, 429

post /auth/password/forgot Send a password-reset e-mail

Always answers 200, so it cannot be used to discover registered addresses. Rate limit: 10/min per IP.

Request body (JSON)
email*stringAccount e-mail
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/auth/password/forgot" \
  -H "Content-Type: application/json" \
  -d '{"email":"jane.doe@example.com"}'
Response 200
{
    "message": "If an account exists for that e-mail address, a password reset link is on its way. Please check your inbox."
}

Errors: 429

Catalog

get /categories Category tree
Parameters
flatquerybooleanReturn a flat list with products_count instead of the tree
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/categories"
Response 200
{
    "data": [
        {
            "id": 1,
            "parent_id": null,
            "slug": "women",
            "name": "Women",
            "description": "Dresses, knitwear, coats and everyday separates from independent womenswear labels. Cut for real bodies and built to be worn for years.",
            "url": "http://localhost/category/women",
            "image": {
                "url": "http://localhost/assets/images/product/product-fashion-23.png",
                "alt": "Women",
                "sizes": {
                    "thumb": "http://localhost/assets/images/product/product-fashion-23.png",
                    "small": "http://localhost/assets/images/product/product-fashion-23.png",
                    "medium": "http://localhost/assets/images/product/product-fashion-23.png",
                    "large": "http://localhost/assets/images/product/product-fashion-23.png"
                }
            },
            "banner": null,
            "icon": "i-hanger",
            "is_featured": false,
            "children": [
                {
                    "id": 2,
                    "parent_id": 1,
                    "slug": "dresses",
                    "name": "Dresses",
                    "description": "Slip dresses, knit dresses and shirt dresses for work, weekends and everything in between. Fluid fabrics that move with you.",
                    "url": "http://localhost/category/dresses",
                    "image": {
                        "url": "http://localhost/assets/images/product/product-fashion-35.png",
                        "alt": "Dresses",
                        "sizes": {
                            "thumb": "http://localhost/assets/images/product/product-fashion-35.png",
                            "small": "http://localhost/assets/images/product/product-fashion-35.png",
                            "medium": "http://localhost/assets/images/product/product-fashion-35.png",
                            "large": "http://localhost/assets/images/product/product-fashion-35.png"
                        }
                    },
                    "banner": null,
                    "icon": "i-hanger",
                    "is_featured": true,
                    "children": []
                },
                {
                    "id": 3,
                    "parent_id": 1,
                    "slug": "knitwear",
                    "name": "Knitwear",
                    "description": "Chunky turtlenecks, cable jumpers and cropped cardigans in wool, merino and recycled blends. Warm, soft and made to layer.",
                    "url": "http://localhost/category/knitwear",
                    "image": {
                        "url": "http://localhost/assets/images/product/product-fashion-27.png",
                        "alt": "Knitwear",
                        "sizes": {
                            "thumb": "http://localhost/assets/images/product/product-fashion-27.png",
                            "small": "http://localhost/assets/images/product/product-fashion-27.png",
                            "medium": "http://localhost/assets/images/product/product-fashion-27.png",
                            "large": "http://localhost/assets/images/product/product-fashion-27.png"
                        }
                    },
                    "banner": null,
                    "icon": "i-shirt",
                    "is_featured": true,
                    "children": []
                }
            ]
        },
        {
            "id": 5,
            "parent_id": null,
            "slug": "men",
            "name": "Men",
            "description": "Overshirts, hoodies, outerwear and relaxed tailoring for the modern wardrobe. Honest fabrics, simple shapes and a considered fit.",
            "url": "http://localhost/category/men",
            "image": {
                "url": "http://localhost/assets/images/articles/article-fashion-06.png",
                "alt": "Men",
                "sizes": {
                    "thumb": "http://localhost/assets/images/articles/article-fashion-06.png",
                    "small": "http://localhost/assets/images/articles/article-fashion-06.png",
                    "medium": "http://localhost/assets/images/articles/article-fashion-06.png",
                    "large": "http://localhost/assets/images/articles/article-fashion-06.png"
                }
            },
            "banner": null,
            "icon": "i-shirt",
            "is_featured": true,
            "children": [
                {
                    "id": 6,
                    "parent_id": 5,
                    "slug": "shirts",
                    "name": "Shirts",
                    "description": "Chambray, flannel, silk-blend and oxford shirts in easy fits. Wear them buttoned up or open over a tee.",
                    "url": "http://localhost/category/shirts",
                    "image": {
                        "url": "http://localhost/assets/images/articles/article-fashion-08.png",
                        "alt": "Shirts",
                        "sizes": {
                            "thumb": "http://localhost/assets/images/articles/article-fashion-08.png",
                            "small": "http://localhost/assets/images/articles/article-fashion-08.png",
                            "medium": "http://localhost/assets/images/articles/article-fashion-08.png",
                            "large": "http://localhost/assets/images/articles/article-fashion-08.png"
                        }
                    },
                    "banner": null,
                    "icon": "i-shirt",
                    "is_featured": false,
                    "children": []
                }
            ]
        }
    ]
}

Errors: 429

get /categories/{slug} Category detail
Parameters
slug*pathstringCategory slug
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/categories/{slug}"
Response 200
{
    "data": {
        "id": 1,
        "parent_id": null,
        "slug": "women",
        "name": "Women",
        "description": "Dresses, knitwear, coats and everyday separates from independent womenswear labels. Cut for real bodies and built to be worn for years.",
        "url": "http://localhost/category/women",
        "image": {
            "url": "http://localhost/assets/images/product/product-fashion-23.png",
            "alt": "Women",
            "sizes": {
                "thumb": "http://localhost/assets/images/product/product-fashion-23.png",
                "small": "http://localhost/assets/images/product/product-fashion-23.png",
                "medium": "http://localhost/assets/images/product/product-fashion-23.png",
                "large": "http://localhost/assets/images/product/product-fashion-23.png"
            }
        },
        "banner": null,
        "icon": "i-hanger",
        "is_featured": false,
        "products_count": 5,
        "children": [
            {
                "id": 2,
                "parent_id": 1,
                "slug": "dresses",
                "name": "Dresses",
                "description": "Slip dresses, knit dresses and shirt dresses for work, weekends and everything in between. Fluid fabrics that move with you.",
                "url": "http://localhost/category/dresses",
                "image": {
                    "url": "http://localhost/assets/images/product/product-fashion-35.png",
                    "alt": "Dresses",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/product/product-fashion-35.png",
                        "small": "http://localhost/assets/images/product/product-fashion-35.png",
                        "medium": "http://localhost/assets/images/product/product-fashion-35.png",
                        "large": "http://localhost/assets/images/product/product-fashion-35.png"
                    }
                },
                "banner": null,
                "icon": "i-hanger",
                "is_featured": true
            },
            {
                "id": 3,
                "parent_id": 1,
                "slug": "knitwear",
                "name": "Knitwear",
                "description": "Chunky turtlenecks, cable jumpers and cropped cardigans in wool, merino and recycled blends. Warm, soft and made to layer.",
                "url": "http://localhost/category/knitwear",
                "image": {
                    "url": "http://localhost/assets/images/product/product-fashion-27.png",
                    "alt": "Knitwear",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/product/product-fashion-27.png",
                        "small": "http://localhost/assets/images/product/product-fashion-27.png",
                        "medium": "http://localhost/assets/images/product/product-fashion-27.png",
                        "large": "http://localhost/assets/images/product/product-fashion-27.png"
                    }
                },
                "banner": null,
                "icon": "i-shirt",
                "is_featured": true
            }
        ],
        "breadcrumbs": [
            {
                "name": "",
                "url": "http://localhost/category/women"
            }
        ],
        "seo": {
            "title": "Women",
            "description": "Dresses, knitwear, coats and everyday separates from independent womenswear labels. Cut for real bodies and built to be worn for years."
        }
    }
}

Errors: 404, 429

get /brands Brands
Parameters
featuredquerybooleanOnly featured brands
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/brands"
Response 200
{
    "data": [
        {
            "id": 1,
            "slug": "sable",
            "name": "Sable",
            "description": "Sable designs evening-ready knitwear and dresses with a soft, body-skimming silhouette. Everything is cut and finished in small runs in Porto.",
            "logo": null,
            "banner": null,
            "website": "https://sable.example.com",
            "is_featured": true,
            "products_count": 5
        },
        {
            "id": 2,
            "slug": "maison-arlo",
            "name": "Maison Arlo",
            "description": "Maison Arlo makes coats and tailoring with a Parisian ease: wool blends, clean lapels and linings worth turning inside out. Each piece is designed to outlast...",
            "logo": null,
            "banner": null,
            "website": "https://maisonarlo.example.com",
            "is_featured": true,
            "products_count": 4
        }
    ]
}

Errors: 429

get /products Product listing with filters

Same filters as the storefront. Price filters are expressed in the request currency (X-Currency). Append facets=1 to receive meta.facets (categories, brands, attributes, price range, rating counts) computed on the current search/category context.

Parameters
qquerystringSearch term
categoryquerystringCategory slug or id (includes sub-categories)
brandquerystringBrand slug/id; repeat as brand[] or comma-separate
attr[{attribute-slug}]querystringAttribute value slugs/ids, e.g. attr[color]=red,blue
min_pricequerynumberMinimum price
max_pricequerynumberMaximum price
ratingqueryintegerMinimum average rating (1-5)
in_stockquerybooleanOnly in-stock products
on_salequerybooleanOnly discounted products
newquerybooleanOnly new arrivals
sortquerystringfeatured, newest, price_asc, price_desc, rating, bestselling, name_asc, name_desc
per_pagequeryinteger1-96
pagequeryintegerPage number
facetsquerybooleanInclude meta.facets
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/products"
Response 200
{
    "data": [
        {
            "id": 51,
            "slug": "hair-tie-set-neutrals",
            "type": "simple",
            "name": "Hair Tie Set, Neutrals",
            "sku": "LM-ACC-0150",
            "url": "http://localhost/product/hair-tie-set-neutrals",
            "image": {
                "url": "http://localhost/assets/images/product/product-fashion-45.png",
                "alt": "Hair Tie Set, Neutrals",
                "sizes": {
                    "thumb": "http://localhost/assets/images/product/product-fashion-45.png",
                    "small": "http://localhost/assets/images/product/product-fashion-45.png",
                    "medium": "http://localhost/assets/images/product/product-fashion-45.png",
                    "large": "http://localhost/assets/images/product/product-fashion-45.png"
                }
            },
            "hover_image": null,
            "price": {
                "amount": 12,
                "formatted": "$12",
                "currency": "USD"
            },
            "old_price": null,
            "price_range": null,
            "discount_percent": 0,
            "rating": {
                "average": 4.6,
                "count": 1840
            },
            "in_stock": true,
            "stock_status": "in_stock",
            "has_variants": false,
            "badges": [
                {
                    "key": "bestseller",
                    "label": "Bestseller",
                    "color": "primary"
                }
            ],
            "is_new": false,
            "is_featured": true,
            "brand": {
                "id": 8,
                "name": "Hollis",
                "slug": "hollis"
            },
            "categories": [
                {
                    "id": 14,
                    "name": "Accessories",
                    "slug": "accessories"
                }
            ]
        },
        {
            "id": 62,
            "slug": "mini-huggie-hoops",
            "type": "simple",
            "name": "Mini Huggie Hoops",
            "sku": "LM-ERR-0161",
            "url": "http://localhost/product/mini-huggie-hoops",
            "image": {
                "url": "http://localhost/assets/images/product/product-fashion-40.png",
                "alt": "Mini Huggie Hoops",
                "sizes": {
                    "thumb": "http://localhost/assets/images/product/product-fashion-40.png",
                    "small": "http://localhost/assets/images/product/product-fashion-40.png",
                    "medium": "http://localhost/assets/images/product/product-fashion-40.png",
                    "large": "http://localhost/assets/images/product/product-fashion-40.png"
                }
            },
            "hover_image": "http://localhost/assets/images/product/product-modal-05.png",
            "price": {
                "amount": 35,
                "formatted": "$35",
                "currency": "USD"
            },
            "old_price": null,
            "price_range": null,
            "discount_percent": 0,
            "rating": {
                "average": 4.8,
                "count": 1106
            },
            "in_stock": true,
            "stock_status": "in_stock",
            "has_variants": false,
            "badges": [
                {
                    "key": "new",
                    "label": "New",
                    "color": "success"
                }
            ],
            "is_new": true,
            "is_featured": true,
            "brand": {
                "id": 7,
                "name": "Alukas & Co",
                "slug": "alukas-and-co"
            },
            "categories": [
                {
                    "id": 13,
                    "name": "Earrings & rings",
                    "slug": "earrings-rings"
                }
            ]
        }
    ],
    "links": {
        "first": "http://localhost/api/v1/products?per_page=2&sort=price_asc&facets=1&page=1",
        "last": "http://localhost/api/v1/products?per_page=2&sort=price_asc&facets=1&page=34",
        "prev": null,
        "next": "http://localhost/api/v1/products?per_page=2&sort=price_asc&facets=1&page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 34,
        "links": [
            {
                "url": null,
                "label": "pagination.previous",
                "page": null,
                "active": false
            },
            {
                "url": "http://localhost/api/v1/products?per_page=2&sort=price_asc&facets=1&page=1",
                "label": "1",
                "page": 1,
                "active": true
            }
        ],
        "path": "http://localhost/api/v1/products",
        "per_page": 2,
        "to": 2,
        "total": 68,
        "facets": {
            "categories": [
                {
                    "id": 1,
                    "name": "Women",
                    "slug": "women",
                    "url": "http://localhost/category/women",
                    "count": 18
                },
                {
                    "id": 5,
                    "name": "Men",
                    "slug": "men",
                    "url": "http://localhost/category/men",
                    "count": 15
                }
            ],
            "brands": [
                {
                    "id": 7,
                    "name": "Alukas & Co",
                    "slug": "alukas-and-co",
                    "logo_url": null,
                    "count": 17
                },
                {
                    "id": 5,
                    "name": "Atelier Noon",
                    "slug": "atelier-noon",
                    "logo_url": null,
                    "count": 10
                }
            ],
            "attributes": [
                {
                    "id": 1,
                    "name": "Color",
                    "slug": "color",
                    "type": "swatch",
                    "values": [
                        {
                            "id": 6,
                            "label": "Forest",
                            "slug": "forest",
                            "color": "#1f5a45",
                            "image": null,
                            "count": 1
                        },
                        {
                            "id": 7,
                            "label": "Ink blue",
                            "slug": "ink-blue",
                            "color": "#233f73",
                            "image": null,
                            "count": 1
                        }
                    ]
                },
                {
                    "id": 2,
                    "name": "Size",
                    "slug": "size",
                    "type": "button",
                    "values": [
                        {
                            "id": 22,
                            "label": "XS",
                            "slug": "xs",
                            "color": null,
                            "image": null,
                            "count": 33
                        },
                        {
                            "id": 23,
                            "label": "S",
                            "slug": "s",
                            "color": null,
                            "image": null,
                            "count": 33
                        }
                    ]
                }
            ],
            "price": {
                "min": 12,
                "max": 299,
                "currency": "USD",
                "symbol": "$"
            },
            "ratings": {
                "4": 68,
                "3": 68,
                "2": 68,
                "1": 68
            },
            "in_stock": 65,
            "on_sale": 30,
            "total": 68
        }
    }
}

Errors: 429

get /products/{slug} Product detail

Full detail: gallery, variants with their attribute values and prices, custom options, specifications, rating distribution, related product ids, stock and flash-sale information. Cost prices are never exposed.

Parameters
slug*pathstringProduct slug
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/products/{slug}"
Response 200
{
    "data": {
        "id": 1,
        "slug": "double-breasted-wool-blend-coat",
        "type": "variable",
        "name": "Double-Breasted Wool-Blend Coat",
        "sku": "LM-COT-0100",
        "url": "http://localhost/product/double-breasted-wool-blend-coat",
        "image": {
            "url": "http://localhost/assets/images/product/product-modal-02.png",
            "alt": "Double-Breasted Wool-Blend Coat",
            "sizes": {
                "thumb": "http://localhost/assets/images/product/product-modal-02.png",
                "small": "http://localhost/assets/images/product/product-modal-02.png",
                "medium": "http://localhost/assets/images/product/product-modal-02.png",
                "large": "http://localhost/assets/images/product/product-modal-02.png"
            }
        },
        "hover_image": "http://localhost/assets/images/product/product-modal-01.png",
        "price": {
            "amount": 189,
            "formatted": "$189",
            "currency": "USD"
        },
        "old_price": {
            "amount": 249,
            "formatted": "$249",
            "currency": "USD"
        },
        "price_range": null,
        "discount_percent": 24,
        "rating": {
            "average": 4.8,
            "count": 412
        },
        "in_stock": true,
        "stock_status": "in_stock",
        "has_variants": true,
        "badges": [
            {
                "key": "sale",
                "label": "-24%",
                "color": "danger"
            },
            {
                "key": "hot",
                "label": "Hot",
                "color": "primary"
            }
        ],
        "is_new": false,
        "is_featured": false,
        "brand": {
            "id": 2,
            "name": "Maison Arlo",
            "slug": "maison-arlo"
        },
        "categories": [
            {
                "id": 4,
                "name": "Coats & jackets",
                "slug": "coats-jackets"
            }
        ],
        "short_description": "Warm, structured and easy to layer. Details: wool blend, dropped shoulders and relaxed, hip-length fit.",
        "description": "Double-Breasted Wool-Blend Coat: Maison Arlo's take on the one coat you'll reach for from the first frost to the last. The wool blend gives it structure with...",
        "specifications": [
            {
                "key": "Material",
                "value": "Wool blend"
            },
            {
                "key": "Fit",
                "value": "Dropped shoulders"
            }
        ],
        "images": [
            {
                "url": "http://localhost/assets/images/product/product-modal-02.png",
                "alt": "Double-Breasted Wool-Blend Coat",
                "sizes": {
                    "thumb": "http://localhost/assets/images/product/product-modal-02.png",
                    "small": "http://localhost/assets/images/product/product-modal-02.png",
                    "medium": "http://localhost/assets/images/product/product-modal-02.png",
                    "large": "http://localhost/assets/images/product/product-modal-02.png"
                }
            },
            {
                "url": "http://localhost/assets/images/product/product-modal-01.png",
                "alt": "Double-Breasted Wool-Blend Coat",
                "sizes": {
                    "thumb": "http://localhost/assets/images/product/product-modal-01.png",
                    "small": "http://localhost/assets/images/product/product-modal-01.png",
                    "medium": "http://localhost/assets/images/product/product-modal-01.png",
                    "large": "http://localhost/assets/images/product/product-modal-01.png"
                }
            }
        ],
        "video_url": null,
        "attributes": [
            {
                "id": 2,
                "name": "Size",
                "slug": "size",
                "type": "button",
                "values": [
                    {
                        "id": 22,
                        "label": "XS",
                        "slug": "xs",
                        "color": null,
                        "image": null
                    },
                    {
                        "id": 23,
                        "label": "S",
                        "slug": "s",
                        "color": null,
                        "image": null
                    }
                ]
            }
        ],
        "variants": [
            {
                "id": 1,
                "name": "XS",
                "sku": "LM-COT-0100-XS",
                "value_ids": [
                    22
                ],
                "values": [
                    {
                        "attribute": "Size",
                        "attribute_id": 2,
                        "id": 22,
                        "label": "XS"
                    }
                ],
                "price": {
                    "amount": 189,
                    "formatted": "$189",
                    "currency": "USD"
                },
                "old_price": {
                    "amount": 249,
                    "formatted": "$249",
                    "currency": "USD"
                },
                "discount_percent": 24,
                "in_stock": false,
                "available_qty": 0,
                "image": null,
                "is_default": false
            },
            {
                "id": 2,
                "name": "S",
                "sku": "LM-COT-0100-S",
                "value_ids": [
                    23
                ],
                "values": [
                    {
                        "attribute": "Size",
                        "attribute_id": 2,
                        "id": 23,
                        "label": "S"
                    }
                ],
                "price": {
                    "amount": 189,
                    "formatted": "$189",
                    "currency": "USD"
                },
                "old_price": {
                    "amount": 249,
                    "formatted": "$249",
                    "currency": "USD"
                },
                "discount_percent": 24,
                "in_stock": true,
                "available_qty": 12,
                "image": null,
                "is_default": true
            }
        ],
        "options": [],
        "tags": [
            {
                "id": 19,
                "name": "Outerwear",
                "slug": "outerwear"
            },
            {
                "id": 20,
                "name": "Sale",
                "slug": "sale"
            }
        ],
        "stock": {
            "status": "in_stock",
            "label": "In stock",
            "available_qty": 72,
            "min_qty": 1,
            "max_qty": null
        },
        "shipping": {
            "requires_shipping": true,
            "weight": 1.1
        },
        "flash_sale": {
            "ends_at": "2026-10-04T12:56:53+00:00",
            "price": {
                "amount": 189,
                "formatted": "$189",
                "currency": "USD"
            },
            "quantity": 40,
            "sold": 21
        },
        "rating_distribution": {
            "average": 4.8,
            "total": 8,
            "counts": [
                7,
                0
            ],
            "percents": [
                88,
                0
            ]
        },
        "related_ids": [
            3,
            5
        ],
        "seo": {
            "title": "Double-Breasted Wool-Blend Coat | Loom",
            "description": "Warm, structured and easy to layer. Details: wool blend, dropped shoulders and relaxed, hip-length fit."
        }
    }
}

Errors: 404, 429

get /search/suggest Live search suggestions
Parameters
q*querystringAt least 2 characters
limitqueryinteger1-24 products
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/search/suggest"
Response 200
{
    "data": {
        "products": [
            {
                "id": 2,
                "name": "Belted Cotton Trench Coat",
                "url": "http://localhost/product/belted-cotton-trench-coat",
                "image": "http://localhost/assets/images/product/product-modal-01.png",
                "price": "$159",
                "old_price": "$199",
                "in_stock": true,
                "rating": 4.7,
                "brand": "Northe",
                "category": "Coats & jackets",
                "sku": "LM-COT-0101"
            },
            {
                "id": 19,
                "name": "Herringbone Wool Overcoat",
                "url": "http://localhost/product/herringbone-wool-overcoat",
                "image": "http://localhost/assets/images/product/product-fashion-11.png",
                "price": "$219",
                "old_price": "$279",
                "in_stock": true,
                "rating": 4.8,
                "brand": "Atelier Noon",
                "category": "Men",
                "sku": "LM-MEN-0118"
            }
        ],
        "categories": [],
        "brands": [],
        "total": 4,
        "term": "Belted"
    }
}

Errors: 429

get /flash-sales/current Running flash sale

data is null when no flash sale is running.

Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/flash-sales/current"
Response 200
{
    "data": {
        "id": 1,
        "slug": "flash-deals",
        "name": "Mid-season sale",
        "starts_at": "2026-10-01T16:56:53+00:00",
        "ends_at": "2026-10-04T12:56:53+00:00",
        "seconds_left": 172513,
        "products": [
            {
                "id": 1,
                "slug": "double-breasted-wool-blend-coat",
                "type": "variable",
                "name": "Double-Breasted Wool-Blend Coat",
                "sku": "LM-COT-0100",
                "url": "http://localhost/product/double-breasted-wool-blend-coat",
                "image": {
                    "url": "http://localhost/assets/images/product/product-modal-02.png",
                    "alt": "Double-Breasted Wool-Blend Coat",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/product/product-modal-02.png",
                        "small": "http://localhost/assets/images/product/product-modal-02.png",
                        "medium": "http://localhost/assets/images/product/product-modal-02.png",
                        "large": "http://localhost/assets/images/product/product-modal-02.png"
                    }
                },
                "hover_image": "http://localhost/assets/images/product/product-modal-01.png",
                "price": {
                    "amount": 189,
                    "formatted": "$189",
                    "currency": "USD"
                },
                "old_price": {
                    "amount": 249,
                    "formatted": "$249",
                    "currency": "USD"
                },
                "price_range": null,
                "discount_percent": 24,
                "rating": {
                    "average": 4.8,
                    "count": 412
                },
                "in_stock": true,
                "stock_status": "in_stock",
                "has_variants": true,
                "badges": [
                    {
                        "key": "sale",
                        "label": "-24%",
                        "color": "danger"
                    },
                    {
                        "key": "hot",
                        "label": "Hot",
                        "color": "primary"
                    }
                ],
                "is_new": false,
                "is_featured": false,
                "brand": {
                    "id": 2,
                    "name": "Maison Arlo",
                    "slug": "maison-arlo"
                },
                "categories": [
                    {
                        "id": 4,
                        "name": "Coats & jackets",
                        "slug": "coats-jackets"
                    }
                ]
            },
            {
                "id": 2,
                "slug": "belted-cotton-trench-coat",
                "type": "variable",
                "name": "Belted Cotton Trench Coat",
                "sku": "LM-COT-0101",
                "url": "http://localhost/product/belted-cotton-trench-coat",
                "image": {
                    "url": "http://localhost/assets/images/product/product-modal-01.png",
                    "alt": "Belted Cotton Trench Coat",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/product/product-modal-01.png",
                        "small": "http://localhost/assets/images/product/product-modal-01.png",
                        "medium": "http://localhost/assets/images/product/product-modal-01.png",
                        "large": "http://localhost/assets/images/product/product-modal-01.png"
                    }
                },
                "hover_image": "http://localhost/assets/images/product/product-comparison-05.png",
                "price": {
                    "amount": 159,
                    "formatted": "$159",
                    "currency": "USD"
                },
                "old_price": {
                    "amount": 199,
                    "formatted": "$199",
                    "currency": "USD"
                },
                "price_range": null,
                "discount_percent": 20,
                "rating": {
                    "average": 4.7,
                    "count": 688
                },
                "in_stock": true,
                "stock_status": "in_stock",
                "has_variants": true,
                "badges": [
                    {
                        "key": "sale",
                        "label": "-20%",
                        "color": "danger"
                    }
                ],
                "is_new": false,
                "is_featured": true,
                "brand": {
                    "id": 4,
                    "name": "Northe",
                    "slug": "northe"
                },
                "categories": [
                    {
                        "id": 4,
                        "name": "Coats & jackets",
                        "slug": "coats-jackets"
                    }
                ]
            }
        ]
    }
}

Errors: 429

Reviews

get /products/{slug}/reviews Approved reviews of a product

meta.summary carries the average, total and per-star counts.

Parameters
slug*pathstringProduct slug
ratingqueryintegerOnly this star rating
sortquerystringnewest, helpful, highest or lowest
per_pagequeryinteger1-100
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/products/{slug}/reviews"
Response 200
{
    "data": [
        {
            "id": 9,
            "rating": 5,
            "title": "Beautiful quality",
            "comment": "Honestly the best coat I've bought this year. It goes with almost everything in my wardrobe. Stitching and finishing are neat all the way through. Five stars...",
            "author": "Skye M.",
            "verified_purchase": true,
            "images": [],
            "helpful_count": 26,
            "reply": null,
            "replied_at": null,
            "created_at": "2026-09-05T05:34:53+00:00"
        },
        {
            "id": 13,
            "rating": 5,
            "title": "Perfect fit",
            "comment": "The coat arrived two days early and was wrapped beautifully. The drape is gorgeous, and it feels comfortable all day. Packaging was minimal and recycled, whi...",
            "author": "Ben B.",
            "verified_purchase": false,
            "images": [],
            "helpful_count": 10,
            "reply": null,
            "replied_at": null,
            "created_at": "2026-08-22T09:32:53+00:00"
        }
    ],
    "links": {
        "first": "http://localhost/api/v1/products/belted-cotton-trench-coat/reviews?page=1",
        "last": "http://localhost/api/v1/products/belted-cotton-trench-coat/reviews?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "pagination.previous",
                "page": null,
                "active": false
            },
            {
                "url": "http://localhost/api/v1/products/belted-cotton-trench-coat/reviews?page=1",
                "label": "1",
                "page": 1,
                "active": true
            }
        ],
        "path": "http://localhost/api/v1/products/belted-cotton-trench-coat/reviews",
        "per_page": 10,
        "to": 6,
        "total": 6,
        "summary": {
            "average": 4.7,
            "total": 6,
            "counts": {
                "5": 5,
                "4": 0,
                "3": 1,
                "2": 0,
                "1": 0
            },
            "percents": {
                "5": 83,
                "4": 0,
                "3": 17,
                "2": 0,
                "1": 0
            }
        }
    }
}

Errors: 429

post /products/{slug}/reviews Write a review Auth required

One review per customer and product. Reviews are held for moderation unless the store auto-approves them (pending tells which).

Parameters
slug*pathstringProduct slug
Request body (JSON)
rating*integer1-5
titlestringHeadline
comment*string10-3000 characters
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/products/{slug}/reviews" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"rating":5,"title":"Love it","comment":"Great quality and fast delivery."}'
Response 201
{
    "data": {
        "id": 444,
        "pending": true
    },
    "message": "Thanks for your review! It will appear once our team has checked it."
}

Errors: 422, 401, 429

Cart

get /cart Get the cart

Signed-in customers always get their account cart. Guests identify their cart with the X-Cart-Token header: the first write (add to cart) returns a new token in the X-Cart-Token response header; store it and send it on every cart / checkout request.

X-Cart-Token (header): guest cart token.

Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/cart"
Response 200
{
    "data": {
        "count": 2,
        "items_count": 2,
        "lines": 1,
        "total": 290,
        "total_formatted": "$290",
        "currency": "USD",
        "items": [
            {
                "id": 13,
                "product_id": 46,
                "variant_id": null,
                "name": "Leather Messenger Bag, Olive",
                "url": "http://localhost/product/leather-messenger-bag-olive",
                "image": "http://localhost/assets/images/category/category-fashion-02.png",
                "sku": "LM-BAG-0145",
                "variant": null,
                "options": "",
                "options_list": [],
                "qty": 2,
                "min_qty": 1,
                "max_qty": 60,
                "unit_price": 145,
                "unit_price_formatted": "$145",
                "regular_price_formatted": null,
                "discount_percent": 0,
                "line_total": 290,
                "line_total_formatted": "$290",
                "problem": null,
                "downloadable": false
            }
        ],
        "coupon": null,
        "totals": {
            "subtotal": 290,
            "subtotal_formatted": "$290",
            "discount": 0,
            "discount_formatted": "$0",
            "net_formatted": "$290",
            "shipping": 0,
            "shipping_formatted": "Free",
            "shipping_name": "Free shipping",
            "shipping_method_id": 2,
            "shipping_required": true,
            "shipping_estimated": true,
            "shipping_available": true,
            "tax": 20.3,
            "tax_formatted": "$20.30",
            "tax_inclusive": false,
            "tax_breakdown": [
                {
                    "name": "US Sales Tax",
                    "rate": 7,
                    "amount_formatted": "$20.30"
                }
            ],
            "points": 0,
            "points_discount": 0,
            "points_discount_formatted": "−$0",
            "total": 310.3,
            "total_formatted": "$310.30"
        },
        "free_shipping": {
            "threshold": 75,
            "threshold_formatted": "$75",
            "remaining": 0,
            "remaining_formatted": "$0",
            "percent": 100,
            "reached": true
        },
        "problems": [],
        "notices": [],
        "empty": false
    }
}

Errors: 429

delete /cart Empty the cart

X-Cart-Token (header): guest cart token.

Example request
curl -X DELETE "https://selloralaravel.pdthemes.de/api/v1/cart"
Response 200
{
    "data": {
        "count": 0,
        "items_count": 0,
        "lines": 0,
        "total": 0,
        "total_formatted": "$0",
        "currency": "USD",
        "items": [],
        "coupon": null,
        "totals": {
            "subtotal": 0,
            "subtotal_formatted": "$0",
            "discount": 0,
            "discount_formatted": "$0",
            "net_formatted": "$0",
            "shipping": 0,
            "shipping_formatted": "Not required",
            "shipping_name": null,
            "shipping_method_id": null,
            "shipping_required": false,
            "shipping_estimated": false,
            "shipping_available": true,
            "tax": 0,
            "tax_formatted": "$0",
            "tax_inclusive": false,
            "tax_breakdown": [],
            "points": 0,
            "points_discount": 0,
            "points_discount_formatted": "−$0",
            "total": 0,
            "total_formatted": "$0"
        },
        "free_shipping": null,
        "problems": [],
        "notices": [],
        "empty": true
    },
    "message": "Your cart is now empty."
}

Errors: 429

post /cart/items Add a product

X-Cart-Token (header): guest cart token.

Request body (JSON)
product_id*integerProduct id
variant_idintegerRequired for variable products
qtyintegerQuantity (default 1)
optionsobjectCustom option values keyed by option id
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/cart/items" \
  -H "Content-Type: application/json" \
  -d '{"product_id":1,"qty":2}'
Response 201
{
    "data": {
        "count": 2,
        "items_count": 2,
        "lines": 1,
        "total": 290,
        "total_formatted": "$290",
        "currency": "USD",
        "items": [
            {
                "id": 13,
                "product_id": 46,
                "variant_id": null,
                "name": "Leather Messenger Bag, Olive",
                "url": "http://localhost/product/leather-messenger-bag-olive",
                "image": "http://localhost/assets/images/category/category-fashion-02.png",
                "sku": "LM-BAG-0145",
                "variant": null,
                "options": "",
                "options_list": [],
                "qty": 2,
                "min_qty": 1,
                "max_qty": 60,
                "unit_price": 145,
                "unit_price_formatted": "$145",
                "regular_price_formatted": null,
                "discount_percent": 0,
                "line_total": 290,
                "line_total_formatted": "$290",
                "problem": null,
                "downloadable": false
            }
        ],
        "coupon": null,
        "totals": {
            "subtotal": 290,
            "subtotal_formatted": "$290",
            "discount": 0,
            "discount_formatted": "$0",
            "net_formatted": "$290",
            "shipping": 0,
            "shipping_formatted": "Free",
            "shipping_name": "Free shipping",
            "shipping_method_id": 2,
            "shipping_required": true,
            "shipping_estimated": true,
            "shipping_available": true,
            "tax": 20.3,
            "tax_formatted": "$20.30",
            "tax_inclusive": false,
            "tax_breakdown": [
                {
                    "name": "US Sales Tax",
                    "rate": 7,
                    "amount_formatted": "$20.30"
                }
            ],
            "points": 0,
            "points_discount": 0,
            "points_discount_formatted": "−$0",
            "total": 310.3,
            "total_formatted": "$310.30"
        },
        "free_shipping": {
            "threshold": 75,
            "threshold_formatted": "$75",
            "remaining": 0,
            "remaining_formatted": "$0",
            "percent": 100,
            "reached": true
        },
        "problems": [],
        "notices": [],
        "empty": false
    },
    "message": "Leather Messenger Bag, Olive was added to your cart.",
    "meta": {
        "item_id": 13
    }
}

Errors: 422, 429

patch /cart/items/{item} Change a line quantity
Parameters
item*pathstringCart line id

X-Cart-Token (header): guest cart token.

Request body (JSON)
qty*integerNew quantity; 0 removes the line
Example request
curl -X PATCH "https://selloralaravel.pdthemes.de/api/v1/cart/items/{item}" \
  -H "Content-Type: application/json" \
  -d '{"qty":3}'
Response 200
{
    "data": {
        "count": 3,
        "items_count": 3,
        "lines": 1,
        "total": 435,
        "total_formatted": "$435",
        "currency": "USD",
        "items": [
            {
                "id": 13,
                "product_id": 46,
                "variant_id": null,
                "name": "Leather Messenger Bag, Olive",
                "url": "http://localhost/product/leather-messenger-bag-olive",
                "image": "http://localhost/assets/images/category/category-fashion-02.png",
                "sku": "LM-BAG-0145",
                "variant": null,
                "options": "",
                "options_list": [],
                "qty": 3,
                "min_qty": 1,
                "max_qty": 60,
                "unit_price": 145,
                "unit_price_formatted": "$145",
                "regular_price_formatted": null,
                "discount_percent": 0,
                "line_total": 435,
                "line_total_formatted": "$435",
                "problem": null,
                "downloadable": false
            }
        ],
        "coupon": null,
        "totals": {
            "subtotal": 435,
            "subtotal_formatted": "$435",
            "discount": 0,
            "discount_formatted": "$0",
            "net_formatted": "$435",
            "shipping": 0,
            "shipping_formatted": "Free",
            "shipping_name": "Free shipping",
            "shipping_method_id": 2,
            "shipping_required": true,
            "shipping_estimated": true,
            "shipping_available": true,
            "tax": 30.45,
            "tax_formatted": "$30.45",
            "tax_inclusive": false,
            "tax_breakdown": [
                {
                    "name": "US Sales Tax",
                    "rate": 7,
                    "amount_formatted": "$30.45"
                }
            ],
            "points": 0,
            "points_discount": 0,
            "points_discount_formatted": "−$0",
            "total": 465.45,
            "total_formatted": "$465.45"
        },
        "free_shipping": {
            "threshold": 75,
            "threshold_formatted": "$75",
            "remaining": 0,
            "remaining_formatted": "$0",
            "percent": 100,
            "reached": true
        },
        "problems": [],
        "notices": [],
        "empty": false
    },
    "message": "Cart updated."
}

Errors: 422, 429

delete /cart/items/{item} Remove a line
Parameters
item*pathstringCart line id

X-Cart-Token (header): guest cart token.

Example request
curl -X DELETE "https://selloralaravel.pdthemes.de/api/v1/cart/items/{item}"
Response 200
{
    "data": {
        "count": 0,
        "items_count": 0,
        "lines": 0,
        "total": 0,
        "total_formatted": "$0",
        "currency": "USD",
        "items": [],
        "coupon": null,
        "totals": {
            "subtotal": 0,
            "subtotal_formatted": "$0",
            "discount": 0,
            "discount_formatted": "$0",
            "net_formatted": "$0",
            "shipping": 0,
            "shipping_formatted": "Not required",
            "shipping_name": null,
            "shipping_method_id": null,
            "shipping_required": false,
            "shipping_estimated": false,
            "shipping_available": true,
            "tax": 0,
            "tax_formatted": "$0",
            "tax_inclusive": false,
            "tax_breakdown": [],
            "points": 0,
            "points_discount": 0,
            "points_discount_formatted": "−$0",
            "total": 0,
            "total_formatted": "$0"
        },
        "free_shipping": null,
        "problems": [],
        "notices": [],
        "empty": true
    },
    "message": "Item removed from your cart."
}

Errors: 429

post /cart/coupon Apply a coupon

X-Cart-Token (header): guest cart token.

Request body (JSON)
code*stringCoupon code
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/cart/coupon" \
  -H "Content-Type: application/json" \
  -d '{"code":"WELCOME10"}'
Response 422
{
    "message": "The coupon code \"NOT-A-CODE\" does not exist.",
    "errors": {
        "code": [
            "The coupon code \"NOT-A-CODE\" does not exist."
        ]
    }
}

Errors: 422, 429

delete /cart/coupon Remove the coupon

X-Cart-Token (header): guest cart token.

Example request
curl -X DELETE "https://selloralaravel.pdthemes.de/api/v1/cart/coupon"
Response 200
{
    "data": {
        "count": 0,
        "items_count": 0,
        "lines": 0,
        "total": 0,
        "total_formatted": "$0",
        "currency": "USD",
        "items": [],
        "coupon": null,
        "totals": {
            "subtotal": 0,
            "subtotal_formatted": "$0",
            "discount": 0,
            "discount_formatted": "$0",
            "net_formatted": "$0",
            "shipping": 0,
            "shipping_formatted": "Not required",
            "shipping_name": null,
            "shipping_method_id": null,
            "shipping_required": false,
            "shipping_estimated": false,
            "shipping_available": true,
            "tax": 0,
            "tax_formatted": "$0",
            "tax_inclusive": false,
            "tax_breakdown": [],
            "points": 0,
            "points_discount": 0,
            "points_discount_formatted": "−$0",
            "total": 0,
            "total_formatted": "$0"
        },
        "free_shipping": null,
        "problems": [],
        "notices": [],
        "empty": true
    },
    "message": "Coupon removed."
}

Errors: 429

post /cart/shipping-methods Delivery methods and totals for an address

Stores the address on the cart and returns the available delivery methods, payment methods and the updated totals. Pass shipping_method to select one.

X-Cart-Token (header): guest cart token.

Request body (JSON)
country*stringISO 3166-1 alpha-2
statestringState / province
citystringCity
zipstringPostal code
address_idintegerA saved address of the customer instead of the fields above
shipping_methodintegerSelected method id
pointsintegerReward points to redeem (customers)
emailstringGuest e-mail (for per-customer coupon limits)
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/cart/shipping-methods" \
  -H "Content-Type: application/json" \
  -d '{"country":"US","state":"CA","city":"Los Angeles","zip":"90001"}'
Response 200
{
    "data": {
        "shipping_required": true,
        "shipping_available": true,
        "selected_method": 2,
        "methods": [
            {
                "id": 1,
                "type": "flat_rate",
                "name": "Standard shipping",
                "description": "Tracked delivery in 3–5 business days.",
                "eta": "3–5 business days",
                "cost": {
                    "amount": 5.99,
                    "formatted": "$5.99",
                    "currency": "USD"
                },
                "is_free": false,
                "pickup_address": null,
                "selected": false
            },
            {
                "id": 2,
                "type": "free_shipping",
                "name": "Free shipping",
                "description": "Free standard delivery on orders over $75.",
                "eta": "3–5 business days",
                "cost": {
                    "amount": 0,
                    "formatted": "$0",
                    "currency": "USD"
                },
                "is_free": true,
                "pickup_address": null,
                "selected": true
            }
        ],
        "payment_methods": [
            {
                "key": "cod",
                "title": "Cash on Delivery",
                "description": "Pay with cash when your order is delivered.",
                "instructions": "Please have the exact amount ready when the courier arrives.",
                "offline": true
            },
            {
                "key": "bank_transfer",
                "title": "Bank Transfer",
                "description": "Transfer the order total to our bank account. Your order ships once the payment is received.",
                "instructions": "Bank: Example Bank\nAccount name: Sellora Store\nIBAN: XX00 0000 0000 0000 0000\nUse your order number as the payment reference.",
                "offline": true
            }
        ],
        "cart": {
            "count": 3,
            "items_count": 3,
            "lines": 1,
            "total": 435,
            "total_formatted": "$435",
            "currency": "USD",
            "items": [
                {
                    "id": 13,
                    "product_id": 46,
                    "variant_id": null,
                    "name": "Leather Messenger Bag, Olive",
                    "url": "http://localhost/product/leather-messenger-bag-olive",
                    "image": "http://localhost/assets/images/category/category-fashion-02.png",
                    "sku": "LM-BAG-0145",
                    "variant": null,
                    "options": "",
                    "options_list": [],
                    "qty": 3,
                    "min_qty": 1,
                    "max_qty": 60,
                    "unit_price": 145,
                    "unit_price_formatted": "$145",
                    "regular_price_formatted": null,
                    "discount_percent": 0,
                    "line_total": 435,
                    "line_total_formatted": "$435",
                    "problem": null,
                    "downloadable": false
                }
            ],
            "coupon": null,
            "totals": {
                "subtotal": 435,
                "subtotal_formatted": "$435",
                "discount": 0,
                "discount_formatted": "$0",
                "net_formatted": "$435",
                "shipping": 0,
                "shipping_formatted": "Free",
                "shipping_name": "Free shipping",
                "shipping_method_id": 2,
                "shipping_required": true,
                "shipping_estimated": false,
                "shipping_available": true,
                "tax": 30.45,
                "tax_formatted": "$30.45",
                "tax_inclusive": false,
                "tax_breakdown": [
                    {
                        "name": "US Sales Tax",
                        "rate": 7,
                        "amount_formatted": "$30.45"
                    }
                ],
                "points": 0,
                "points_discount": 0,
                "points_discount_formatted": "−$0",
                "total": 465.45,
                "total_formatted": "$465.45"
            },
            "free_shipping": {
                "threshold": 75,
                "threshold_formatted": "$75",
                "remaining": 0,
                "remaining_formatted": "$0",
                "percent": 100,
                "reached": true
            },
            "problems": [],
            "notices": [],
            "empty": false
        }
    }
}

Errors: 429

post /cart/merge Merge the guest cart after sign-in Auth required

Send both the Bearer token and the guest X-Cart-Token. (Signing in with X-Cart-Token already merges; use this endpoint when the token was obtained earlier.)

X-Cart-Token (header): guest cart token.

Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/cart/merge" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": {
        "count": 1,
        "items_count": 1,
        "lines": 1,
        "total": 145,
        "total_formatted": "$145",
        "currency": "USD",
        "items": [
            {
                "id": 14,
                "product_id": 46,
                "variant_id": null,
                "name": "Leather Messenger Bag, Olive",
                "url": "http://localhost/product/leather-messenger-bag-olive",
                "image": "http://localhost/assets/images/category/category-fashion-02.png",
                "sku": "LM-BAG-0145",
                "variant": null,
                "options": "",
                "options_list": [],
                "qty": 1,
                "min_qty": 1,
                "max_qty": 60,
                "unit_price": 145,
                "unit_price_formatted": "$145",
                "regular_price_formatted": null,
                "discount_percent": 0,
                "line_total": 145,
                "line_total_formatted": "$145",
                "problem": null,
                "downloadable": false
            }
        ],
        "coupon": null,
        "totals": {
            "subtotal": 145,
            "subtotal_formatted": "$145",
            "discount": 0,
            "discount_formatted": "$0",
            "net_formatted": "$145",
            "shipping": 0,
            "shipping_formatted": "Free",
            "shipping_name": "Free shipping",
            "shipping_method_id": 2,
            "shipping_required": true,
            "shipping_estimated": false,
            "shipping_available": true,
            "tax": 10.15,
            "tax_formatted": "$10.15",
            "tax_inclusive": false,
            "tax_breakdown": [
                {
                    "name": "US Sales Tax",
                    "rate": 7,
                    "amount_formatted": "$10.15"
                }
            ],
            "points": 0,
            "points_discount": 0,
            "points_discount_formatted": "−$0",
            "total": 155.15,
            "total_formatted": "$155.15"
        },
        "free_shipping": {
            "threshold": 75,
            "threshold_formatted": "$75",
            "remaining": 0,
            "remaining_formatted": "$0",
            "percent": 100,
            "reached": true
        },
        "problems": [],
        "notices": [],
        "empty": false
    },
    "message": "Your guest cart has been merged into your account cart."
}

Errors: 401, 429

Checkout

post /checkout Place an order

Same payload as the web checkout. payment.type tells what to do next: completed (cash on delivery, bank transfer, free order ... nothing more to do), redirect (open payment.redirect_url in a browser / web view), client (initialise the gateway SDK with payment.client) or failed (retry with POST /orders/{number}/pay).

X-Cart-Token (header): guest cart token.

Request body (JSON)
email*stringCustomer e-mail (ignored for signed-in customers)
first_name*string
last_name*string
phonestringRequired when the store requires it
billing*objectaddress_1, address_2, city, state, zip, country (ISO-2), company
address_idintegerSaved address to bill instead of billing{}
ship_to_differentbooleanUse shipping{} / shipping_address_id
shippingobjectShipping address (first_name, last_name, address_1, city, country ...)
shipping_address_idintegerSaved shipping address
shipping_methodintegerId from /cart/shipping-methods (required for physical goods)
payment_method*stringKey from bootstrap.payment_methods
notestringOrder note
pointsintegerReward points to redeem
create_accountbooleanGuests only: create an account (needs password)
passwordstringPassword for the new account
termsbooleanRequired when the store has a terms page
expected_totalnumberReject the order when the total changed
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/checkout" \
  -H "Content-Type: application/json" \
  -d '{"email":"jane.doe@example.com","first_name":"Jane","last_name":"Doe","phone":"+1 555 0100","billing":{"address_1":"1 Market St","city":"San Francisco","state":"CA","zip":"94105","country":"US"},"ship_to_different":false,"shipping_method":1,"payment_method":"cod","note":"Leave at the door","create_account":false,"terms":true}'
Response 201
{
    "data": {
        "order": {
            "number": "SL-261002-0001",
            "status": {
                "value": "pending",
                "label": "Pending"
            },
            "payment_status": {
                "value": "pending",
                "label": "Pending"
            },
            "payment_method": {
                "key": "cod",
                "name": "Cash on Delivery"
            },
            "shipping_method": "Standard shipping",
            "currency": "USD",
            "subtotal": {
                "amount": 145,
                "formatted": "$145",
                "currency": "USD"
            },
            "discount": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "shipping": {
                "amount": 5.99,
                "formatted": "$5.99",
                "currency": "USD"
            },
            "tax": {
                "amount": 10.15,
                "formatted": "$10.15",
                "currency": "USD"
            },
            "points_discount": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "total": {
                "amount": 161.14,
                "formatted": "$161.14",
                "currency": "USD"
            },
            "coupon_code": null,
            "items_count": 1,
            "can_cancel": true,
            "placed_at": "2026-10-02T13:01:40+00:00",
            "paid_at": null,
            "shipped_at": null,
            "completed_at": null,
            "cancelled_at": null,
            "customer": {
                "email": "jane.doe@example.com",
                "first_name": "Jane",
                "last_name": "Doe",
                "phone": "+1 555 0100"
            },
            "billing_address": {
                "first_name": "Jane",
                "last_name": "Doe",
                "company": null,
                "address_1": "1 Market St",
                "address_2": null,
                "city": "San Francisco",
                "state": "CA",
                "zip": "94105",
                "country": "US",
                "phone": "+1 555 0100"
            },
            "shipping_address": {
                "first_name": "Jane",
                "last_name": "Doe",
                "company": null,
                "address_1": "1 Market St",
                "address_2": null,
                "city": "San Francisco",
                "state": "CA",
                "zip": "94105",
                "country": "US",
                "phone": "+1 555 0100"
            },
            "note": "Leave at the door",
            "tracking": null,
            "items": [
                {
                    "product_id": 46,
                    "variant_id": null,
                    "name": "Leather Messenger Bag, Olive",
                    "sku": "LM-BAG-0145",
                    "image": {
                        "url": "http://localhost/assets/images/category/category-fashion-02.png",
                        "alt": "Leather Messenger Bag, Olive",
                        "sizes": {
                            "thumb": "http://localhost/assets/images/category/category-fashion-02.png",
                            "small": "http://localhost/assets/images/category/category-fashion-02.png",
                            "medium": "http://localhost/assets/images/category/category-fashion-02.png",
                            "large": "http://localhost/assets/images/category/category-fashion-02.png"
                        }
                    },
                    "options": null,
                    "qty": 1,
                    "unit_price": {
                        "amount": 145,
                        "formatted": "$145",
                        "currency": "USD"
                    },
                    "line_total": {
                        "amount": 145,
                        "formatted": "$145",
                        "currency": "USD"
                    }
                }
            ],
            "history": [
                {
                    "status": "pending",
                    "comment": "Order placed.",
                    "at": "2026-10-02T13:01:40+00:00"
                }
            ]
        },
        "payment": {
            "type": "completed",
            "paid": false,
            "success_url": "http://localhost/checkout/success/SL-261002-0001?signature=a2419e98e70790e719b98ef1d8df5ed19c3f173c4444a771ada09e9c80d17256"
        }
    }
}

Errors: 422, 429

Orders

get /orders My orders Auth required
Parameters
statusquerystringFilter by status
per_pagequeryinteger1-100
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/orders" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": [
        {
            "number": "SL-261002-0001",
            "status": {
                "value": "pending",
                "label": "Pending"
            },
            "payment_status": {
                "value": "pending",
                "label": "Pending"
            },
            "payment_method": {
                "key": "cod",
                "name": "Cash on Delivery"
            },
            "shipping_method": "Standard shipping",
            "currency": "USD",
            "subtotal": {
                "amount": 145,
                "formatted": "$145",
                "currency": "USD"
            },
            "discount": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "shipping": {
                "amount": 5.99,
                "formatted": "$5.99",
                "currency": "USD"
            },
            "tax": {
                "amount": 10.15,
                "formatted": "$10.15",
                "currency": "USD"
            },
            "points_discount": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "total": {
                "amount": 161.14,
                "formatted": "$161.14",
                "currency": "USD"
            },
            "coupon_code": null,
            "items_count": null,
            "can_cancel": true,
            "placed_at": "2026-10-02T13:01:40+00:00",
            "paid_at": null,
            "shipped_at": null,
            "completed_at": null,
            "cancelled_at": null
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 10,
        "total": 1
    },
    "links": {
        "next": null,
        "prev": null
    }
}

Errors: 401, 429

get /orders/track Track an order (guests)

Public, rate limited. Answers 404 unless number and e-mail match. Rate limit: 10/min per IP.

Parameters
number*querystringOrder number
email*querystringE-mail used for the order
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/orders/track"
Response 200
{
    "data": {
        "number": "SL-261002-0001",
        "status": {
            "value": "pending",
            "label": "Pending"
        },
        "payment_status": {
            "value": "pending",
            "label": "Pending"
        },
        "payment_method": {
            "key": "cod",
            "name": "Cash on Delivery"
        },
        "shipping_method": "Standard shipping",
        "currency": "USD",
        "subtotal": {
            "amount": 145,
            "formatted": "$145",
            "currency": "USD"
        },
        "discount": {
            "amount": 0,
            "formatted": "$0",
            "currency": "USD"
        },
        "shipping": {
            "amount": 5.99,
            "formatted": "$5.99",
            "currency": "USD"
        },
        "tax": {
            "amount": 10.15,
            "formatted": "$10.15",
            "currency": "USD"
        },
        "points_discount": {
            "amount": 0,
            "formatted": "$0",
            "currency": "USD"
        },
        "total": {
            "amount": 161.14,
            "formatted": "$161.14",
            "currency": "USD"
        },
        "coupon_code": null,
        "items_count": 1,
        "can_cancel": true,
        "placed_at": "2026-10-02T13:01:40+00:00",
        "paid_at": null,
        "shipped_at": null,
        "completed_at": null,
        "cancelled_at": null,
        "customer": {
            "email": "jane.doe@example.com",
            "first_name": "Jane",
            "last_name": "Doe",
            "phone": "+1 555 0100"
        },
        "billing_address": {
            "first_name": "Jane",
            "last_name": "Doe",
            "company": null,
            "address_1": "1 Market St",
            "address_2": null,
            "city": "San Francisco",
            "state": "CA",
            "zip": "94105",
            "country": "US",
            "phone": "+1 555 0100"
        },
        "shipping_address": {
            "first_name": "Jane",
            "last_name": "Doe",
            "company": null,
            "address_1": "1 Market St",
            "address_2": null,
            "city": "San Francisco",
            "state": "CA",
            "zip": "94105",
            "country": "US",
            "phone": "+1 555 0100"
        },
        "note": "Leave at the door",
        "tracking": null,
        "items": [
            {
                "product_id": 46,
                "variant_id": null,
                "name": "Leather Messenger Bag, Olive",
                "sku": "LM-BAG-0145",
                "image": {
                    "url": "http://localhost/assets/images/category/category-fashion-02.png",
                    "alt": "Leather Messenger Bag, Olive",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/category/category-fashion-02.png",
                        "small": "http://localhost/assets/images/category/category-fashion-02.png",
                        "medium": "http://localhost/assets/images/category/category-fashion-02.png",
                        "large": "http://localhost/assets/images/category/category-fashion-02.png"
                    }
                },
                "options": null,
                "qty": 1,
                "unit_price": {
                    "amount": 145,
                    "formatted": "$145",
                    "currency": "USD"
                },
                "line_total": {
                    "amount": 145,
                    "formatted": "$145",
                    "currency": "USD"
                }
            }
        ],
        "history": [
            {
                "status": "pending",
                "comment": "Order placed.",
                "at": "2026-10-02T13:01:40+00:00"
            }
        ]
    }
}

Errors: 404, 429

get /orders/{number} Order detail Auth required

Only the order's owner may read it: another customer's order answers 403, an unknown number 404.

Parameters
number*pathstringOrder number
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/orders/{number}" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": {
        "number": "SL-261002-0001",
        "status": {
            "value": "pending",
            "label": "Pending"
        },
        "payment_status": {
            "value": "pending",
            "label": "Pending"
        },
        "payment_method": {
            "key": "cod",
            "name": "Cash on Delivery"
        },
        "shipping_method": "Standard shipping",
        "currency": "USD",
        "subtotal": {
            "amount": 145,
            "formatted": "$145",
            "currency": "USD"
        },
        "discount": {
            "amount": 0,
            "formatted": "$0",
            "currency": "USD"
        },
        "shipping": {
            "amount": 5.99,
            "formatted": "$5.99",
            "currency": "USD"
        },
        "tax": {
            "amount": 10.15,
            "formatted": "$10.15",
            "currency": "USD"
        },
        "points_discount": {
            "amount": 0,
            "formatted": "$0",
            "currency": "USD"
        },
        "total": {
            "amount": 161.14,
            "formatted": "$161.14",
            "currency": "USD"
        },
        "coupon_code": null,
        "items_count": 1,
        "can_cancel": true,
        "placed_at": "2026-10-02T13:01:40+00:00",
        "paid_at": null,
        "shipped_at": null,
        "completed_at": null,
        "cancelled_at": null,
        "customer": {
            "email": "jane.doe@example.com",
            "first_name": "Jane",
            "last_name": "Doe",
            "phone": "+1 555 0100"
        },
        "billing_address": {
            "first_name": "Jane",
            "last_name": "Doe",
            "company": null,
            "address_1": "1 Market St",
            "address_2": null,
            "city": "San Francisco",
            "state": "CA",
            "zip": "94105",
            "country": "US",
            "phone": "+1 555 0100"
        },
        "shipping_address": {
            "first_name": "Jane",
            "last_name": "Doe",
            "company": null,
            "address_1": "1 Market St",
            "address_2": null,
            "city": "San Francisco",
            "state": "CA",
            "zip": "94105",
            "country": "US",
            "phone": "+1 555 0100"
        },
        "note": "Leave at the door",
        "tracking": null,
        "items": [
            {
                "product_id": 46,
                "variant_id": null,
                "name": "Leather Messenger Bag, Olive",
                "sku": "LM-BAG-0145",
                "image": {
                    "url": "http://localhost/assets/images/category/category-fashion-02.png",
                    "alt": "Leather Messenger Bag, Olive",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/category/category-fashion-02.png",
                        "small": "http://localhost/assets/images/category/category-fashion-02.png",
                        "medium": "http://localhost/assets/images/category/category-fashion-02.png",
                        "large": "http://localhost/assets/images/category/category-fashion-02.png"
                    }
                },
                "options": null,
                "qty": 1,
                "unit_price": {
                    "amount": 145,
                    "formatted": "$145",
                    "currency": "USD"
                },
                "line_total": {
                    "amount": 145,
                    "formatted": "$145",
                    "currency": "USD"
                }
            }
        ],
        "history": [
            {
                "status": "pending",
                "comment": "Order placed.",
                "at": "2026-10-02T13:01:40+00:00"
            }
        ]
    }
}

Errors: 403, 404, 401, 429

post /orders/{number}/cancel Cancel an unpaid order Auth required
Parameters
number*pathstringOrder number
Request body (JSON)
reasonstringFree text (max 500)
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/orders/{number}/cancel" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Ordered by mistake"}'
Response 200
{
    "data": {
        "number": "SL-261002-0001",
        "status": {
            "value": "cancelled",
            "label": "Cancelled"
        },
        "payment_status": {
            "value": "pending",
            "label": "Pending"
        },
        "payment_method": {
            "key": "cod",
            "name": "Cash on Delivery"
        },
        "shipping_method": "Standard shipping",
        "currency": "USD",
        "subtotal": {
            "amount": 145,
            "formatted": "$145",
            "currency": "USD"
        },
        "discount": {
            "amount": 0,
            "formatted": "$0",
            "currency": "USD"
        },
        "shipping": {
            "amount": 5.99,
            "formatted": "$5.99",
            "currency": "USD"
        },
        "tax": {
            "amount": 10.15,
            "formatted": "$10.15",
            "currency": "USD"
        },
        "points_discount": {
            "amount": 0,
            "formatted": "$0",
            "currency": "USD"
        },
        "total": {
            "amount": 161.14,
            "formatted": "$161.14",
            "currency": "USD"
        },
        "coupon_code": null,
        "items_count": 1,
        "can_cancel": false,
        "placed_at": "2026-10-02T13:01:40+00:00",
        "paid_at": null,
        "shipped_at": null,
        "completed_at": null,
        "cancelled_at": "2026-10-02T13:01:40+00:00",
        "customer": {
            "email": "jane.doe@example.com",
            "first_name": "Jane",
            "last_name": "Doe",
            "phone": "+1 555 0100"
        },
        "billing_address": {
            "first_name": "Jane",
            "last_name": "Doe",
            "company": null,
            "address_1": "1 Market St",
            "address_2": null,
            "city": "San Francisco",
            "state": "CA",
            "zip": "94105",
            "country": "US",
            "phone": "+1 555 0100"
        },
        "shipping_address": {
            "first_name": "Jane",
            "last_name": "Doe",
            "company": null,
            "address_1": "1 Market St",
            "address_2": null,
            "city": "San Francisco",
            "state": "CA",
            "zip": "94105",
            "country": "US",
            "phone": "+1 555 0100"
        },
        "note": "Leave at the door",
        "tracking": null,
        "items": [
            {
                "product_id": 46,
                "variant_id": null,
                "name": "Leather Messenger Bag, Olive",
                "sku": "LM-BAG-0145",
                "image": {
                    "url": "http://localhost/assets/images/category/category-fashion-02.png",
                    "alt": "Leather Messenger Bag, Olive",
                    "sizes": {
                        "thumb": "http://localhost/assets/images/category/category-fashion-02.png",
                        "small": "http://localhost/assets/images/category/category-fashion-02.png",
                        "medium": "http://localhost/assets/images/category/category-fashion-02.png",
                        "large": "http://localhost/assets/images/category/category-fashion-02.png"
                    }
                },
                "options": null,
                "qty": 1,
                "unit_price": {
                    "amount": 145,
                    "formatted": "$145",
                    "currency": "USD"
                },
                "line_total": {
                    "amount": 145,
                    "formatted": "$145",
                    "currency": "USD"
                }
            }
        ],
        "history": [
            {
                "status": "pending",
                "comment": "Order placed.",
                "at": "2026-10-02T13:01:40+00:00"
            },
            {
                "status": "cancelled",
                "comment": "Ordered by mistake",
                "at": "2026-10-02T13:01:40+00:00"
            }
        ]
    },
    "message": "Order SL-261002-0001 has been cancelled."
}

Errors: 403, 422, 401, 429

post /orders/{number}/pay Retry the payment Auth required

Same response shape as POST /checkout.

Parameters
number*pathstringOrder number
Request body (JSON)
payment_methodstringSwitch to another gateway
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/orders/{number}/pay" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '[]'
Response 200
{
    "data": {
        "order": {
            "number": "SL-261002-0001",
            "status": {
                "value": "pending",
                "label": "Pending"
            },
            "payment_status": {
                "value": "pending",
                "label": "Pending"
            },
            "payment_method": {
                "key": "cod",
                "name": "Cash on Delivery"
            },
            "shipping_method": "Standard shipping",
            "currency": "USD",
            "subtotal": {
                "amount": 145,
                "formatted": "$145",
                "currency": "USD"
            },
            "discount": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "shipping": {
                "amount": 5.99,
                "formatted": "$5.99",
                "currency": "USD"
            },
            "tax": {
                "amount": 10.15,
                "formatted": "$10.15",
                "currency": "USD"
            },
            "points_discount": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "total": {
                "amount": 161.14,
                "formatted": "$161.14",
                "currency": "USD"
            },
            "coupon_code": null,
            "items_count": 1,
            "can_cancel": true,
            "placed_at": "2026-10-02T13:01:40+00:00",
            "paid_at": null,
            "shipped_at": null,
            "completed_at": null,
            "cancelled_at": null,
            "customer": {
                "email": "jane.doe@example.com",
                "first_name": "Jane",
                "last_name": "Doe",
                "phone": "+1 555 0100"
            },
            "billing_address": {
                "first_name": "Jane",
                "last_name": "Doe",
                "company": null,
                "address_1": "1 Market St",
                "address_2": null,
                "city": "San Francisco",
                "state": "CA",
                "zip": "94105",
                "country": "US",
                "phone": "+1 555 0100"
            },
            "shipping_address": {
                "first_name": "Jane",
                "last_name": "Doe",
                "company": null,
                "address_1": "1 Market St",
                "address_2": null,
                "city": "San Francisco",
                "state": "CA",
                "zip": "94105",
                "country": "US",
                "phone": "+1 555 0100"
            },
            "note": "Leave at the door",
            "tracking": null,
            "items": [
                {
                    "product_id": 46,
                    "variant_id": null,
                    "name": "Leather Messenger Bag, Olive",
                    "sku": "LM-BAG-0145",
                    "image": {
                        "url": "http://localhost/assets/images/category/category-fashion-02.png",
                        "alt": "Leather Messenger Bag, Olive",
                        "sizes": {
                            "thumb": "http://localhost/assets/images/category/category-fashion-02.png",
                            "small": "http://localhost/assets/images/category/category-fashion-02.png",
                            "medium": "http://localhost/assets/images/category/category-fashion-02.png",
                            "large": "http://localhost/assets/images/category/category-fashion-02.png"
                        }
                    },
                    "options": null,
                    "qty": 1,
                    "unit_price": {
                        "amount": 145,
                        "formatted": "$145",
                        "currency": "USD"
                    },
                    "line_total": {
                        "amount": 145,
                        "formatted": "$145",
                        "currency": "USD"
                    }
                }
            ],
            "history": [
                {
                    "status": "pending",
                    "comment": "Order placed.",
                    "at": "2026-10-02T13:01:40+00:00"
                }
            ]
        },
        "payment": {
            "type": "completed",
            "paid": false,
            "success_url": "http://localhost/checkout/success/SL-261002-0001?signature=a2419e98e70790e719b98ef1d8df5ed19c3f173c4444a771ada09e9c80d17256"
        }
    }
}

Errors: 403, 422, 401, 429

Account

get /addresses Address book Auth required
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/addresses" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": [
        {
            "id": 4,
            "first_name": "Jane",
            "last_name": "Doe",
            "company": null,
            "address_1": "1 Market St",
            "address_2": null,
            "city": "San Francisco",
            "state": "CA",
            "zip": "94105",
            "country": "US",
            "country_name": "United States",
            "phone": "+1 555 0100",
            "is_default_shipping": true,
            "is_default_billing": true,
            "formatted": "Jane Doe\n1 Market St\nSan Francisco, California 94105\nUnited States\n+1 555 0100"
        }
    ]
}

Errors: 401, 429

post /addresses Add an address Auth required
Request body (JSON)
first_name*string
last_namestring
companystring
address_1*string
address_2string
city*string
statestring
zipstring
country*stringISO-2
phonestring
is_default_shippingboolean
is_default_billingboolean
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/addresses" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"first_name":"Jane","last_name":"Doe","address_1":"1 Market St","city":"San Francisco","state":"CA","zip":"94105","country":"US","phone":"+1 555 0100","is_default_shipping":false,"is_default_billing":false}'
Response 201
{
    "data": {
        "id": 4,
        "first_name": "Jane",
        "last_name": "Doe",
        "company": null,
        "address_1": "1 Market St",
        "address_2": null,
        "city": "San Francisco",
        "state": "CA",
        "zip": "94105",
        "country": "US",
        "country_name": "United States",
        "phone": "+1 555 0100",
        "is_default_shipping": true,
        "is_default_billing": true,
        "formatted": "Jane Doe\n1 Market St\nSan Francisco, California 94105\nUnited States\n+1 555 0100"
    },
    "message": "The address was saved."
}

Errors: 422, 401, 429

get /addresses/{address} One address Auth required
Parameters
address*pathstringAddress id
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/addresses/{address}" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": {
        "id": 4,
        "first_name": "Jane",
        "last_name": "Doe",
        "company": null,
        "address_1": "1 Market St",
        "address_2": null,
        "city": "San Francisco",
        "state": "CA",
        "zip": "94105",
        "country": "US",
        "country_name": "United States",
        "phone": "+1 555 0100",
        "is_default_shipping": true,
        "is_default_billing": true,
        "formatted": "Jane Doe\n1 Market St\nSan Francisco, California 94105\nUnited States\n+1 555 0100"
    }
}

Errors: 404, 401, 429

put /addresses/{address} Update an address Auth required

Full replacement, same fields as POST /addresses.

Parameters
address*pathstringAddress id
Example request
curl -X PUT "https://selloralaravel.pdthemes.de/api/v1/addresses/{address}" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": {
        "id": 4,
        "first_name": "Jane",
        "last_name": "Doe",
        "company": null,
        "address_1": "1 Market St",
        "address_2": null,
        "city": "Oakland",
        "state": "CA",
        "zip": "94105",
        "country": "US",
        "country_name": "United States",
        "phone": "+1 555 0100",
        "is_default_shipping": true,
        "is_default_billing": true,
        "formatted": "Jane Doe\n1 Market St\nOakland, California 94105\nUnited States\n+1 555 0100"
    },
    "message": "The address was updated."
}

Errors: 404, 422, 401, 429

delete /addresses/{address} Delete an address Auth required
Parameters
address*pathstringAddress id
Example request
curl -X DELETE "https://selloralaravel.pdthemes.de/api/v1/addresses/{address}" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "message": "The address was deleted."
}

Errors: 404, 401, 429

get /wishlist Wishlist products Auth required
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/wishlist" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": [
        {
            "id": 46,
            "slug": "leather-messenger-bag-olive",
            "type": "simple",
            "name": "Leather Messenger Bag, Olive",
            "sku": "LM-BAG-0145",
            "url": "http://localhost/product/leather-messenger-bag-olive",
            "image": {
                "url": "http://localhost/assets/images/category/category-fashion-02.png",
                "alt": "Leather Messenger Bag, Olive",
                "sizes": {
                    "thumb": "http://localhost/assets/images/category/category-fashion-02.png",
                    "small": "http://localhost/assets/images/category/category-fashion-02.png",
                    "medium": "http://localhost/assets/images/category/category-fashion-02.png",
                    "large": "http://localhost/assets/images/category/category-fashion-02.png"
                }
            },
            "hover_image": "http://localhost/assets/images/category/category-fashion-03.png",
            "price": {
                "amount": 145,
                "formatted": "$145",
                "currency": "USD"
            },
            "old_price": null,
            "price_range": null,
            "discount_percent": 0,
            "rating": {
                "average": 4.7,
                "count": 158
            },
            "in_stock": true,
            "stock_status": "in_stock",
            "has_variants": false,
            "badges": [],
            "is_new": false,
            "is_featured": false,
            "brand": {
                "id": 8,
                "name": "Hollis",
                "slug": "hollis"
            },
            "categories": [
                {
                    "id": 15,
                    "name": "Bags",
                    "slug": "bags"
                }
            ]
        }
    ],
    "meta": {
        "count": 1,
        "ids": [
            46
        ]
    }
}

Errors: 401, 429

post /wishlist/toggle Add / remove a product Auth required
Request body (JSON)
product_id*integer
variant_idinteger
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/wishlist/toggle" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"product_id":1}'
Response 200
{
    "data": {
        "added": true,
        "product_id": 46,
        "count": 1
    },
    "message": "Added to your wishlist."
}

Errors: 401, 429

get /notifications Notifications Auth required
Parameters
filterquerystring`unread` for unread only
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/notifications" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": [
        {
            "id": "c6ce8097-bcf6-42d8-bce1-687dc1d29c2b",
            "type": "order_status",
            "title": "Order SL-261002-0001 updated",
            "message": "Your order SL-261002-0001 is now Cancelled.",
            "url": "http://localhost/account/orders/SL-261002-0001",
            "read": false,
            "created_at": "2026-10-02T13:01:40+00:00"
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 15,
        "total": 1,
        "unread": 1
    },
    "links": {
        "next": null,
        "prev": null
    }
}

Errors: 401, 429

post /notifications/read-all Mark all as read Auth required
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/notifications/read-all" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "message": "All notifications are marked as read."
}

Errors: 401, 429

post /notifications/{id}/read Mark one as read Auth required
Parameters
id*pathstringNotification id (UUID)
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/notifications/{id}/read" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "message": "Done."
}

Errors: 404, 401, 429

delete /notifications/{id} Delete a notification Auth required
Parameters
id*pathstringNotification id (UUID)
Example request
curl -X DELETE "https://selloralaravel.pdthemes.de/api/v1/notifications/{id}" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "message": "Done."
}

Errors: 404, 401, 429

get /points Reward points Auth required

meta.summary holds the balance and redemption rules; data is the paginated ledger.

Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/points" \
  -H "Authorization: Bearer <token>"
Response 200
{
    "data": [],
    "meta": {
        "current_page": 1,
        "last_page": 1,
        "per_page": 15,
        "total": 0,
        "summary": {
            "enabled": true,
            "balance": 0,
            "value": {
                "amount": 0,
                "formatted": "$0",
                "currency": "USD"
            },
            "earn_rate": 1,
            "redeem_rate": 100,
            "min_redeem": 100,
            "can_redeem": false
        }
    },
    "links": {
        "next": null,
        "prev": null
    }
}

Errors: 401, 429

Content

get /pages/{slug} CMS page
Parameters
slug*pathstringPage slug, e.g. about-us
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/pages/{slug}"
Response 200
{
    "data": {
        "id": 1,
        "slug": "about-us",
        "title": "About us",
        "excerpt": "Loom started as a rail of 40 pieces in a Lisbon warehouse. Today we stock 300 independent and heritage labels - every one chosen for how it's made and how lo...",
        "body": "Loom started as a rail of 40 pieces in a Lisbon warehouse. Today we stock 300 independent and heritage labels - every one chosen for how it's made and how lo...",
        "image": null,
        "url": "http://localhost/page/about-us",
        "seo": {
            "title": "About us",
            "description": "Loom started as a rail of 40 pieces in a Lisbon warehouse. Today we stock 300 independent and heritage labels - every one chosen for how it's made and how lo..."
        },
        "updated_at": "2026-10-02T12:56:53+00:00"
    }
}

Errors: 404, 429

get /blog Blog posts
Parameters
categoryquerystringBlog category slug
qquerystringSearch title / excerpt
per_pagequeryinteger1-100
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/blog"
Response 200
{
    "data": [
        {
            "id": 1,
            "slug": "the-12-piece-winter-capsule-wardrobe",
            "title": "The 12-piece winter capsule wardrobe",
            "excerpt": "Twelve pieces, forty outfits: how our stylists build a winter wardrobe that works harder than it looks.",
            "image": {
                "url": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                "alt": "The 12-piece winter capsule wardrobe",
                "sizes": {
                    "thumb": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                    "small": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                    "medium": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                    "large": "http://localhost/assets/images/other/image-fashion-eight-01.jpg"
                }
            },
            "url": "http://localhost/blog/the-12-piece-winter-capsule-wardrobe",
            "category": {
                "id": 4,
                "slug": "style-guide",
                "name": "Style guide"
            },
            "author": "Sellora Admin",
            "reading_time": 2,
            "published_at": "2026-09-24T09:30:00+00:00"
        },
        {
            "id": 2,
            "slug": "how-to-care-for-wool-so-it-lasts-a-decade",
            "title": "How to care for wool so it lasts a decade",
            "excerpt": "Washing, drying, de-pilling and storing - the knitwear routine our repair team swears by.",
            "image": {
                "url": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                "alt": "How to care for wool so it lasts a decade",
                "sizes": {
                    "thumb": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                    "small": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                    "medium": "http://localhost/assets/images/other/image-fashion-eight-03.jpg",
                    "large": "http://localhost/assets/images/other/image-fashion-eight-03.jpg"
                }
            },
            "url": "http://localhost/blog/how-to-care-for-wool-so-it-lasts-a-decade",
            "category": {
                "id": 1,
                "slug": "care",
                "name": "Care"
            },
            "author": "Sellora Admin",
            "reading_time": 2,
            "published_at": "2026-09-18T09:30:00+00:00"
        }
    ],
    "meta": {
        "current_page": 1,
        "last_page": 5,
        "per_page": 2,
        "total": 9
    },
    "links": {
        "next": "http://localhost/api/v1/blog?per_page=2&page=2",
        "prev": null
    }
}

Errors: 429

get /blog/categories Blog categories
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/blog/categories"
Response 200
{
    "data": [
        {
            "id": 1,
            "slug": "care",
            "name": "Care",
            "description": "Washing, mending and storing your clothes so they last.",
            "posts_count": 2
        },
        {
            "id": 2,
            "slug": "makers",
            "name": "Makers",
            "description": "Stories from the workshops and studios behind the labels we stock.",
            "posts_count": 1
        }
    ]
}

Errors: 429

get /blog/{slug} Blog post
Parameters
slug*pathstringPost slug
Example request
curl -X GET "https://selloralaravel.pdthemes.de/api/v1/blog/{slug}"
Response 200
{
    "data": {
        "id": 1,
        "slug": "the-12-piece-winter-capsule-wardrobe",
        "title": "The 12-piece winter capsule wardrobe",
        "excerpt": "Twelve pieces, forty outfits: how our stylists build a winter wardrobe that works harder than it looks.",
        "image": {
            "url": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
            "alt": "The 12-piece winter capsule wardrobe",
            "sizes": {
                "thumb": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                "small": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                "medium": "http://localhost/assets/images/other/image-fashion-eight-01.jpg",
                "large": "http://localhost/assets/images/other/image-fashion-eight-01.jpg"
            }
        },
        "url": "http://localhost/blog/the-12-piece-winter-capsule-wardrobe",
        "category": {
            "id": 4,
            "slug": "style-guide",
            "name": "Style guide"
        },
        "author": "Sellora Admin",
        "reading_time": 2,
        "published_at": "2026-09-24T09:30:00+00:00",
        "body": "A capsule wardrobe isn't about owning less for the sake of it - it's about owning pieces that all work together. Our stylists built this one with twelve piec...",
        "tags": [
            {
                "id": 4,
                "name": "Capsule",
                "slug": "capsule"
            },
            {
                "id": 12,
                "name": "Knitwear",
                "slug": "knitwear"
            }
        ],
        "seo": {
            "title": "The 12-piece winter capsule wardrobe",
            "description": "Twelve pieces, forty outfits: how our stylists build a winter wardrobe that works harder than it looks."
        }
    }
}

Errors: 404, 429

post /contact Send a contact message

Rate limit: 10/min per IP.

Request body (JSON)
name*string
email*string
phonestring
subjectstring
orderstringRelated order number
message*string20-2000 characters
consent*booleanMust be true
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/contact" \
  -H "Content-Type: application/json" \
  -d '{"name":"Jane Doe","email":"jane.doe@example.com","subject":"Delivery question","message":"Hello, where can I see the delivery time for my order?","consent":true}'
Response 201
{
    "data": {
        "reference": "#000003"
    },
    "message": "Thanks, your message has been received."
}

Errors: 422, 429

post /newsletter/subscribe Subscribe to the newsletter

Rate limit: 10/min per IP.

Request body (JSON)
email*string
namestring
Example request
curl -X POST "https://selloralaravel.pdthemes.de/api/v1/newsletter/subscribe" \
  -H "Content-Type: application/json" \
  -d '{"email":"jane.doe@example.com"}'
Response 200
{
    "data": {
        "email": "news-83bo@example.com",
        "already": false
    },
    "message": "Thanks for subscribing!"
}

Errors: 422, 429

  • Free delivery over $50
  • 2-year warranty on every product

View full details
Added to cart Checkout