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 requestcurl -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 requestcurl -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* | string | First name |
last_name | string | Last name |
email* | string | Unique e-mail address |
phone | string | Phone (required when the store requires it) |
password* | string | Min. 8 characters |
password_confirmation* | string | Must match password |
terms* | boolean | Must be true |
newsletter | boolean | Subscribe to the newsletter |
device_name | string | Label of the token, e.g. the device |
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* | string | E-mail address |
password* | string | Password |
device_name | string | Label of the token |
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
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
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_name | string | First name |
last_name | string | Last name |
email | string | New e-mail (needs current_password) |
phone | string | Phone |
dob | string | Date of birth (YYYY-MM-DD) |
gender | string | female, male, other or prefer_not |
locale | string | Preferred language code |
currency | string | Preferred currency code |
newsletter | boolean | Newsletter opt-in |
current_password | string | Required with email / password changes |
password | string | New password (with password_confirmation) |
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* | string | Account e-mail |
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
flat | query | boolean | Return a flat list with products_count instead of the tree |
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
slug* | path | string | Category slug |
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
featured | query | boolean | Only featured brands |
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.
Parametersq | query | string | Search term |
category | query | string | Category slug or id (includes sub-categories) |
brand | query | string | Brand slug/id; repeat as brand[] or comma-separate |
attr[{attribute-slug}] | query | string | Attribute value slugs/ids, e.g. attr[color]=red,blue |
min_price | query | number | Minimum price |
max_price | query | number | Maximum price |
rating | query | integer | Minimum average rating (1-5) |
in_stock | query | boolean | Only in-stock products |
on_sale | query | boolean | Only discounted products |
new | query | boolean | Only new arrivals |
sort | query | string | featured, newest, price_asc, price_desc, rating, bestselling, name_asc, name_desc |
per_page | query | integer | 1-96 |
page | query | integer | Page number |
facets | query | boolean | Include meta.facets |
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.
Parametersslug* | path | string | Product slug |
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
q* | query | string | At least 2 characters |
limit | query | integer | 1-24 products |
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 requestcurl -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.
Parametersslug* | path | string | Product slug |
rating | query | integer | Only this star rating |
sort | query | string | newest, helpful, highest or lowest |
per_page | query | integer | 1-100 |
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).
Parametersslug* | path | string | Product slug |
rating* | integer | 1-5 |
title | string | Headline |
comment* | string | 10-3000 characters |
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.
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.
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.
product_id* | integer | Product id |
variant_id | integer | Required for variable products |
qty | integer | Quantity (default 1) |
options | object | Custom option values keyed by option id |
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
item* | path | string | Cart line id |
X-Cart-Token (header): guest cart token.
qty* | integer | New quantity; 0 removes the line |
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
item* | path | string | Cart line id |
X-Cart-Token (header): guest cart token.
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.
code* | string | Coupon code |
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.
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.
country* | string | ISO 3166-1 alpha-2 |
state | string | State / province |
city | string | City |
zip | string | Postal code |
address_id | integer | A saved address of the customer instead of the fields above |
shipping_method | integer | Selected method id |
points | integer | Reward points to redeem (customers) |
email | string | Guest e-mail (for per-customer coupon limits) |
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.
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.
email* | string | Customer e-mail (ignored for signed-in customers) |
first_name* | string | |
last_name* | string | |
phone | string | Required when the store requires it |
billing* | object | address_1, address_2, city, state, zip, country (ISO-2), company |
address_id | integer | Saved address to bill instead of billing{} |
ship_to_different | boolean | Use shipping{} / shipping_address_id |
shipping | object | Shipping address (first_name, last_name, address_1, city, country ...) |
shipping_address_id | integer | Saved shipping address |
shipping_method | integer | Id from /cart/shipping-methods (required for physical goods) |
payment_method* | string | Key from bootstrap.payment_methods |
note | string | Order note |
points | integer | Reward points to redeem |
create_account | boolean | Guests only: create an account (needs password) |
password | string | Password for the new account |
terms | boolean | Required when the store has a terms page |
expected_total | number | Reject the order when the total changed |
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
status | query | string | Filter by status |
per_page | query | integer | 1-100 |
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.
Parametersnumber* | query | string | Order number |
email* | query | string | E-mail used for the order |
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.
Parametersnumber* | path | string | Order number |
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
number* | path | string | Order number |
reason | string | Free text (max 500) |
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.
Parametersnumber* | path | string | Order number |
payment_method | string | Switch to another gateway |
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
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
first_name* | string | |
last_name | string | |
company | string | |
address_1* | string | |
address_2 | string | |
city* | string | |
state | string | |
zip | string | |
country* | string | ISO-2 |
phone | string | |
is_default_shipping | boolean | |
is_default_billing | boolean |
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
address* | path | string | Address id |
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.
Parametersaddress* | path | string | Address id |
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
address* | path | string | Address id |
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
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
product_id* | integer | |
variant_id | integer |
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
filter | query | string | `unread` for unread only |
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
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
id* | path | string | Notification id (UUID) |
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
id* | path | string | Notification id (UUID) |
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 requestcurl -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
slug* | path | string | Page slug, e.g. about-us |
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
category | query | string | Blog category slug |
q | query | string | Search title / excerpt |
per_page | query | integer | 1-100 |
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
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
slug* | path | string | Post slug |
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 | |
phone | string | |
subject | string | |
order | string | Related order number |
message* | string | 20-2000 characters |
consent* | boolean | Must be true |
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 | |
name | string |
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