Public storefront API

Base: https://api.ebda.app/api/v1/public. Name the store with the x-store-domain (or x-store-id) header, see Authentication. Reads are rate limited at 300 requests per minute per IP.

Catalogue

MethodPathNotes
GET/healthLiveness and database check. 200, or 503 when the database is unreachable
GET/productsPaginated. Query: page, limit (max 100), category, search (2+ characters), featured, sort (newest, price_asc, price_desc, best_seller, on_sale — products whose compare-at price is above their price, biggest drop first, at most 12, first page only), minPrice, maxPrice (piastres), cursor, ids
GET/products/:slugOrIdOne product with variants and images
GET/categoriesCategory tree
GET/feed/products.jsonAI product feed (needs the agent_feed feature, paid plans)
GET/redirects/resolveResolve a renamed store slug
GET/storesActive stores, paginated (page, limit up to 100)
GET/stores/:slugOrIdPublic store profile. Reserved slugs return 404 STORE_NOT_FOUND

Cart

Cart endpoints are limited to 30 per minute.

MethodPathNotes
GET/cartCurrent cart
POST/cart/itemsAdd an item
POST/cart/syncReplace the cart from a client copy
DELETE/cartEmpty the cart

Product prices in responses are integer piastres, see Money.

curl "https://api.ebda.app/api/v1/public/products?limit=5&sort=newest" \
  -H "x-store-domain: amelia.ebda.app"