Download OpenAPI specification:Download
Per-pod store API — Products, Orders, Themes, Analytics
| storeId required | string |
| q required | string |
| page | number Default: 1 |
| limit | number Default: 20 |
| cursor | string |
| sort | string |
| search | string |
| searchBy | string Enum: "all" "title" "sku" "variantTitle" "barcode" Field to search in. Default is "all" which searches across all fields. |
DEPRECATED — use the bulk-jobs pipeline: POST /stores/{storeId}/bulk-uploads to stage the file, then POST /stores/{storeId}/bulk-jobs with operation=IMPORT and entity=product. This endpoint parses the whole file inside the HTTP request, caps at 10 MB, and returns counts with no artifact — so a merchant whose import half succeeded learns HOW MANY rows failed and never WHICH. The pipeline returns three row-aligned files instead: the ID crosswalk, the failed rows with their original columns (re-uploadable after editing), and the rows never attempted. It also supports a dry run, which this does not. Retained per backend-standards.md §7 — the merchant frontend has already moved.
| storeId required | string |
Retrieve simplified product list for catalog product selection.
| storeId required | string |
| offset | number |
| limit | number |
| status | any Filter by status |
| productType | any Filter by product type |
| collection | any Filter by collection ID |
| search | any Search by product name or SKU |
| storeId required | string Store ID |
| page | number |
| limit | number |
| search | string |
| collectionType | string Enum: "MANUAL" "SMART" |
| status | string Enum: "published" "draft" "scheduled" |
| parentId | string |
| sortBy | string Enum: "title" "productCount" "createdAt" "updatedAt" "position" |
| sortOrder | string Enum: "asc" "desc" |
| includeProducts | boolean |
| includeDeleted | boolean |
| storeId required | string Store ID |
| id required | string Collection ID |
Array of product IDs
| productIds | Array of strings |
{- "productIds": [
- "string"
]
}| storeId required | string Store ID |
| id required | string Collection ID |
Array of product IDs
| productIds | Array of strings |
{- "productIds": [
- "string"
]
}| storeId required | string Store ID |
| id required | string Collection ID |
Ordered array of product IDs
| productIds | Array of strings |
{- "productIds": [
- "string"
]
}| storeId required | string Store ID |
| id required | string Collection ID |
Publish date
| publishAt | string <date-time> |
{- "publishAt": "2019-08-24T14:15:22Z"
}Create a named, market-scoped return rule. Only owners and admins can create rules.
| storeId required | string |
{ }Update a default or custom return rule. Only owners and admins can update rules.
| storeId required | string |
| id required | string |
{ }Retrieve a policy by its type (privacy, terms_of_service, etc.). Creates a default empty policy if not exists.
| storeId required | string |
| type required | string Enum: "privacy" "terms_of_service" "shipping" "return_refund" "contact_information" Policy type |
Update an existing policy. Only owners and admins can update policies.
| storeId required | string |
| type required | string Enum: "privacy" "terms_of_service" "shipping" "return_refund" "contact_information" Policy type |
{ }Turn the storefront lock screen on or off. The password is hashed server-side (sha256) and pushed to the edge as a digest — the plaintext is never stored or forwarded. Omit password to keep the current one. edgeSynced: false means the setting was saved but at least one storefront host was not updated at the edge.
| storeId required | string |
| authorization required | string |
{ }{ }| storeId required | string |
| mode | string Enum: "sync" "async" Force sync or async mode |
| file | string <binary> File to upload |
| sourceUrl | string URL to download and upload |
| filename | string Custom filename |
| folder | string Folder path |
| alt | string Alt text |
| tags | Array of strings Tags |
| storeId required | string |
| mediaId required | string |
| productId required | string Product ID |
| position | number Position in media array |
{- "productId": "string",
- "position": 0
}| storeId required | string |
| productId required | string Product ID |
required | Array of objects |
{- "productId": "string",
- "mediaItems": [
- {
- "url": "string",
- "mediaLibraryId": "string",
- "position": 0
}
]
}Translates product/collection/page titles + descriptions into the language code with AI and stores them, so the storefront serves translated content for that locale.
| storeId required | string Store ID |
| code required | string Target language ISO code (e.g. "th") |
Source (default-language) content + the current translation per field, for the manual editor. Paged per resourceType.
| storeId required | string |
| code required | string Target language ISO code |
| limit required | string |
| offset required | string |
| storeId required | string Store ID |
| languageId required | string Language ID |
{ }{ }PRIMARY validation endpoint for all discount code usage. Performs comprehensive validation including status, usage limits, minimum requirements, eligibility, combine rules, and more.
| storeId required | string Store ID (UUID) |
{ }Validates multiple discount codes in sequence, respecting combine rules. Maximum 10 codes per request.
| storeId required | string Store ID (UUID) |
{ }Returns active discount codes matching the search query. Used in Draft Order discount code input autocomplete.
| storeId required | string Store ID (UUID) |
| search | string Search query for code or title |
| limit | string Max results (default 10) |
| channel | string Sales channel filter |
Returns all eligible automatic discounts for the given cart context.
| storeId required | string Store ID (UUID) |
{ }NOT IMPLEMENTED — returns 503. This endpoint has never produced a file: it previously returned a downloadUrl pointing at a route that does not exist. It is retained only so the removal follows the deprecation lifecycle. Use the bulk-jobs export resource once available.
| storeId required | string Store ID (UUID) |
{ }| storeId required | string Store ID (UUID) |
| discountId required | string Discount ID (UUID) |
| commentId required | string Comment ID (UUID) |
{ }Update an existing menu and its items. Only owners and admins can update menus.
| storeId required | string |
| menuId required | string Menu ID |
{ }Create a copy of an existing menu with a new name. Only owners and admins can duplicate menus.
| storeId required | string |
| menuId required | string Menu ID to duplicate |
{ }| storeId required | string |
| title required | string Page title |
| slug | string Page slug (auto-generated if not provided) |
| path | string Page path (e.g., /about) |
| pageType required | string Page type (e.g., page, product, collection) |
| layoutId | string Layout ID to use |
| puckData | object theme editor data |
| seo | object SEO metadata |
| isDefault | boolean Set as default for this page type |
{- "title": "string",
- "slug": "string",
- "path": "string",
- "pageType": "string",
- "layoutId": "string",
- "puckData": { },
- "seo": { },
- "isDefault": true
}{- "success": true,
- "data": { },
- "message": "string",
- "error": { },
- "meta": { }
}| storeId required | string |
{ }{- "success": true,
- "data": { },
- "message": "string",
- "error": { },
- "meta": { }
}| storeId required | string |
{ }{- "success": true,
- "data": { },
- "message": "string",
- "error": { },
- "meta": { }
}| storeId required | string |
| id required | string |
| title | string Page title |
| slug | string Page slug (auto-generated if not provided) |
| path | string Page path (e.g., /about) |
| pageType | string Page type (e.g., page, product, collection) |
| layoutId | string Layout ID to use |
| puckData | object theme editor data |
| seo | object SEO metadata |
| isDefault | boolean Set as default for this page type |
| content | object theme editor content (alias for puckData) |
{- "title": "string",
- "slug": "string",
- "path": "string",
- "pageType": "string",
- "layoutId": "string",
- "puckData": { },
- "seo": { },
- "isDefault": true,
- "content": { }
}{- "success": true,
- "data": { },
- "message": "string",
- "error": { },
- "meta": { }
}| storeId required | string |
| id required | string |
| title | string Page title |
| slug | string Page slug (auto-generated if not provided) |
| path | string Page path (e.g., /about) |
| pageType | string Page type (e.g., page, product, collection) |
| layoutId | string Layout ID to use |
| puckData | object theme editor data |
| seo | object SEO metadata |
| isDefault | boolean Set as default for this page type |
| content | object theme editor content (alias for puckData) |
{- "title": "string",
- "slug": "string",
- "path": "string",
- "pageType": "string",
- "layoutId": "string",
- "puckData": { },
- "seo": { },
- "isDefault": true,
- "content": { }
}{- "success": true,
- "data": { },
- "message": "string",
- "error": { },
- "meta": { }
}Update an existing page. Only owners and admins can update pages.
| storeId required | string |
| pageId required | string Page ID |
| title | string Page title |
| slug | string Page slug (auto-generated if not provided) |
| path | string Page path (e.g., /about) |
| pageType | string Page type (e.g., page, product, collection) |
| layoutId | string Layout ID to use |
| puckData | object theme editor data |
| seo | object SEO metadata |
| isDefault | boolean Set as default for this page type |
| content | object theme editor content (alias for puckData) |
{- "title": "string",
- "slug": "string",
- "path": "string",
- "pageType": "string",
- "layoutId": "string",
- "puckData": { },
- "seo": { },
- "isDefault": true,
- "content": { }
}Retrieve all catalogs for the store with optional filtering and pagination.
| storeId required | string |
| offset | number |
| limit | number |
| sortOrder | string Enum: "asc" "desc" |
| sortBy | string Enum: "name" "updated" "products" |
| marketId | any Filter by market ID |
| status | string Enum: "active" "inactive" "draft" "all" |
| search | any Search by catalog name |
Add products to a catalog. For SPECIFIC catalogs, creates inclusion entries. For ALL catalogs, removes exclusion entries.
| storeId required | string |
| catalogId required | string Catalog ID (UUID) |
{ }Remove products from a catalog. For SPECIFIC catalogs, deletes inclusion entries. For ALL catalogs, creates exclusion entries.
| storeId required | string |
| catalogId required | string Catalog ID (UUID) |
{ }Get a paginated list of product categories. Filter by parentId (null for root), level, or search by name.
| limit | any Items per page (default: 50, max: 100) |
| page | any Page number (default: 1) |
| search | any Search categories by name |
| level | any Filter by hierarchy level (0 = root) |
| parentId | any Filter by parent category ID (null for root categories) |
Get categories with nested children structure. Use childrenDepth to control nesting.
| childrenDepth | any How many levels deep to include children (default: 1, max: 5) |
| limit | any Items per page (default: 50, max: 100) |
| page | any Page number (default: 1) |
| search | any Search categories by name |
| parentId | any Start from a specific parent (null for root) |
Get all attributes (metafields) applicable to this category, including their default values (entries). Includes inherited attributes from parent categories.
| id required | string Category ID |
| includeInherited | boolean Include inherited attributes from parent categories (default: true) |
| storeId required | string |
| orderId required | string |
| transactionId required | string |
{ }| storeId required | string |
| orderId required | string |
| fulfillmentOrderId required | string |
{ }| storeId required | string |
| orderId required | string |
| fulfillmentOrderId required | string |
{ }| storeId required | string |
| orderId required | string |
| fulfillmentOrderId required | string |
{ }| storeId required | string |
| orderId required | string |
| fulfillmentOrderId required | string |
{ }| storeId required | string |
| orderId required | string |
| fulfillmentOrderId required | string |
{ }| storeId required | string |
| orderId required | string |
| fulfillmentId required | string |
| trackingId required | string |
{ } PRIMARY endpoint for cart/order calculations.
Features:
- Line-level discounts (per item)
- Order-level discounts (manual)
- Discount code validation and application
- Destination-based tax calculation
- Shipping cost calculation
Returns:
- subtotal: Sum of line items after line-level discounts
- discount: Total discount (order + codes)
- shipping: Shipping cost (after shipping discounts)
- tax: Calculated tax based on shipping address
- total: Final total
- taxLines: Tax breakdown by jurisdiction
- appliedDiscountCodes: Successfully applied discount codes
- warnings: Any validation warnings
- lineItems: Processed line items with totals
Note: If no shipping address is provided, tax will be 0.
Tax will be calculated when shipping address is added.
| storeId required | string Store ID |
{ }Create a checkout session from cart or line items
| storeId required | string Store ID |
| cartId | string Cart ID to create checkout from |
string Customer email | |
| customerId | string Customer ID (if logged in) |
Array of objects (CheckoutLineItemDto) Line items (if not using cartId) | |
| note | string Customer note |
| presentmentCurrency | string Presentment currency (customer display currency, e.g. JPY) |
{- "cartId": "string",
- "email": "string",
- "customerId": "string",
- "lineItems": [
- {
- "variantId": "string",
- "quantity": 0,
- "properties": { }
}
], - "note": "string",
- "presentmentCurrency": "string"
}Update checkout information (email, addresses, shipping, payment)
| storeId required | string Store ID |
| checkoutId required | string Checkout ID |
string Customer email | |
| phone | string Contact phone number |
| acceptsEmailMarketing | boolean Shopper opted in to email marketing |
| acceptsSmsMarketing | boolean Shopper opted in to SMS marketing |
object Shipping address | |
object Billing address | |
| shippingMethodId | string Shipping method ID, exactly as returned by POST /checkout/:id/shipping-rates. One of: a zone-rate UUID, "ld_ |
| note | string Customer note |
| tipAmount | number >= 0 Gratuity amount in the checkout presentment currency (Settings → Checkout → Tipping) |
| sessionToken | string Session token (required for guest checkout) |
| paymentMethod | object Payment method info (no sensitive data) |
{- "email": "string",
- "phone": "string",
- "acceptsEmailMarketing": true,
- "acceptsSmsMarketing": true,
- "shippingAddress": {
- "firstName": "string",
- "lastName": "string",
- "company": "string",
- "phone": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "country": "TH",
- "postalCode": "string",
- "latitude": 0,
- "longitude": 0
}, - "billingAddress": {
- "firstName": "string",
- "lastName": "string",
- "company": "string",
- "phone": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "country": "TH",
- "postalCode": "string",
- "latitude": 0,
- "longitude": 0
}, - "shippingMethodId": "string",
- "note": "string",
- "tipAmount": 0,
- "sessionToken": "string",
- "paymentMethod": { }
}Calculate available shipping rates for checkout
| storeId required | string Store ID |
| checkoutId required | string Checkout ID |
required | object Shipping address for rate calculation |
| sessionToken | string Session token (required for guest checkout) |
{- "shippingAddress": {
- "firstName": "string",
- "lastName": "string",
- "company": "string",
- "phone": "string",
- "address1": "string",
- "address2": "string",
- "city": "string",
- "province": "string",
- "country": "TH",
- "postalCode": "string",
- "latitude": 0,
- "longitude": 0
}, - "sessionToken": "string"
}[- {
- "id": "string",
- "name": "string",
- "description": "string",
- "code": "string",
- "price": {
- "amount": 50,
- "currency": "THB",
- "formatted": "฿50.00"
}, - "estimatedDelivery": {
- "minDays": 3,
- "maxDays": 5,
- "formatted": "3-5 business days"
}, - "provider": "string"
}
]Apply a discount code to the checkout
| storeId required | string Store ID |
| checkoutId required | string Checkout ID |
| code required | string Discount code |
| sessionToken | string Session token (required for guest checkout) |
{- "code": "SUMMER2025",
- "sessionToken": "string"
}Storefront-safe, read-only gift-card lookup (store-api#540). Confirms the caller owns the checkout session, then returns the card status + spendable balance without redeeming anything. Applying it as tender is a follow-up.
| storeId required | string Store ID |
| checkoutId required | string Checkout ID |
Finalize checkout and create order
| storeId required | string Store ID |
| checkoutId required | string Checkout ID |
| paymentMethodId required | string |
| paymentIntentId | string |
{- "paymentMethodId": "stripe",
- "paymentIntentId": "pi_1234567890"
}| storeId required | string Store ID |
| sortOrder | string Enum: "asc" "desc" |
| sortBy | string |
| dateTo | string <date-time> |
| dateFrom | string <date-time> |
| destinationId | string |
| originId | string |
| status | string Comma-separated statuses |
| search | string |
| limit | number |
| page | number |
| storeId required | string |
| id required | string |
| shipmentId required | string |
{ }| storeId required | string Store ID |
| id required | string Transfer ID |
| commentId required | string Comment ID |
{ }Aggregates PurchaseOrderItem rows by variant so the supplier detail view can render the "products purchased from this supplier" table (standard). Returns the latest supplier SKU + last purchase price per variant.
| storeId required | string Store ID |
| id required | string Supplier ID |
| page | number |
| limit | number |
| search | string |
| storeId required | string |
| id required | string |
| locationId required | string |
| contactId required | string |
{ }| storeId required | string Store ID |
| sortOrder | string Enum: "asc" "desc" |
| sortBy | string |
| dateTo | string <date-time> |
| dateFrom | string <date-time> |
| destinationId | string |
| supplierId | string |
| status | string Comma-separated statuses |
| search | string |
| limit | number |
| page | number |
| storeId required | string Store ID |
| id required | string Purchase Order ID |
| commentId required | string Comment ID |
{ }| storeId required | string |
| id required | string |
{ }{ }| storeId required | string <uuid> |
| page | number |
| limit | number |
| status | string Enum: "ACTIVE" "PAUSED" "CANCELLED" "EXPIRED" "FAILED" |
| customerId | string |
| search | string |
| sortBy | string Enum: "createdAt" "nextBillingDate" "contractNumber" |
| sortOrder | string Enum: "asc" "desc" |
| storeId required | string <uuid> |
| contractId required | string <uuid> |
| reason required | string Cancellation reason |
| feedback | string Additional feedback |
{- "reason": "string",
- "feedback": "string"
}| storeId required | string <uuid> |
| contractId required | string <uuid> |
| skipCycles | number Default: 1 Number of billing cycles to skip |
{- "skipCycles": 1
}Update the payout schedule configuration.
| storeId required | string |
{ }{ }Request an immediate payout to a bank account.
| storeId required | string |
{ }{ }Submit evidence to contest a dispute/chargeback.
| storeId required | string |
| disputeId required | string |
{ }{ }Search across products, orders, customers, collections, pages, navigation, and settings
| storeId required | string |
| q required | string Example: q=coconut Search query string |
| types | Array of strings Items Enum: "products" "orders" "customers" "collections" "pages" Example: types=products&types=customers Resource types to search |
| limit | number [ 1 .. 20 ] Default: 5 Results limit per type |
{- "results": { },
- "navigation": [
- "string"
], - "settings": [
- "string"
], - "total": 0,
- "query": "string",
- "executedIn": 0
}| storeId required | string |
| user-agent required | string |
| referer required | string |
| x-forwarded-for required | string |
{ }| storeId required | string |
| user-agent required | string |
| referer required | string |
| x-forwarded-for required | string |
{ }| storeId required | string |
| user-agent required | string |
| referer required | string |
| x-forwarded-for required | string |
{ }Validates a publishable key (pk_live_* or pk_test_*) and returns the associated storeId
| key required | string The publishable API key to validate |
{- "key": "pk_live_abc123..."
}{- "valid": true,
- "storeId": "b8adcdc8-9238-4168-90f8-77b2d14c211c",
- "type": "PUBLISHABLE",
- "environment": "LIVE"
}| storeId required | string |
| cartId | string |
| variantId required | string |
| quantity required | number [ 1 .. 100 ] |
| customAttributes | object Custom attributes for the cart item |
{- "variantId": "variant_uuid_here",
- "quantity": 2,
- "customAttributes": {
- "giftMessage": "Happy Birthday!",
- "giftWrap": true
}
}| storeId required | string |
| cartId required | string |
| variantId required | string |
| quantity required | number [ 1 .. 100 ] |
| customAttributes | object Custom attributes for the cart item |
{- "variantId": "variant_uuid_here",
- "quantity": 2,
- "customAttributes": {
- "giftMessage": "Happy Birthday!",
- "giftWrap": true
}
}| storeId required | string |
| checkoutId required | string |
| paymentMethodId required | string |
| paymentIntentId | string |
{- "paymentMethodId": "stripe",
- "paymentIntentId": "pi_1234567890"
}Initialize a new payment session for guest or logged-in checkout. Returns clientSecret for Stripe.
| storeId required | string |
| checkoutId required | string Checkout ID |
| amount required | number Payment amount |
| currency required | string Currency code (ISO 4217) |
| paymentMethod | string Enum: "credit_card" "promptpay" "bank_transfer" Payment method (defaults to credit_card) |
| customerEmail | string Customer email |
| metadata | object Additional metadata |
{- "checkoutId": "550e8400-e29b-41d4-a716-446655440000",
- "amount": 1500,
- "currency": "THB",
- "paymentMethod": "credit_card",
- "metadata": { }
}