Merchant management
Automate the merchant back office without opening the dashboard.
Products, customers, customer groups, price lists, webhooks, media, analytics — everything operator-side except orders.
Everything operator-side that isn't orders: products, customers, customer groups, price lists, webhooks, media, analytics. All under/api/storefront/v1/merchant/; all require a bearer with the appropriate scope.
Products
List
curl "https://aly.store/api/storefront/v1/merchant/products?site_slug=acme&limit=25" \ -H "Authorization: Bearer aly_..."Create
curl -X POST https://aly.store/api/storefront/v1/merchant/products \ -H "Authorization: Bearer aly_..." \ -H "Content-Type: application/json" \ -d '{ "site_slug": "acme", "name": "Linen Tote", "slug": "linen-tote", "price": { "amount": 4200, "currency": "USD" }, "variants": [ { "options": { "color": "natural" }, "stock": 25, "sku": "LT-NAT" } ], "tags": ["bags", "linen"] }'Update
curl -X PATCH https://aly.store/api/storefront/v1/merchant/products/prod_abc \ -H "Authorization: Bearer aly_..." \ -H "Content-Type: application/json" \ -d '{ "price": { "amount": 3900, "currency": "USD" } }'Delete
curl -X DELETE https://aly.store/api/storefront/v1/merchant/products/prod_abc \ -H "Authorization: Bearer aly_..."Customers
GET /merchant/customers— paginated list with optionalemail=+group_id=filters.GET /merchant/customers/{id}— single profile with order summary.PATCH /merchant/customers/{id}— update name, address book.
Customer groups
Segments used by price lists and gated content.
GET /merchant/customer-groupsPOST /merchant/customer-groups— create.POST /merchant/customer-groups/{id}/members— assign a customer.DELETE /merchant/customer-groups/{id}/members/{customerId}— remove.
Price lists
Customer-group-targeted pricing overrides.
curl -X POST https://aly.store/api/storefront/v1/merchant/price-lists \ -H "Authorization: Bearer aly_..." \ -H "Content-Type: application/json" \ -d '{ "site_slug": "acme", "name": "Wholesale", "customer_group_id": "grp_whole", "rules": [ { "type": "percent_off", "value": 30 } ], "active": true }'Webhooks
Register and inspect endpoints. See Webhooks for the full delivery contract.
GET /merchant/webhooksPOST /merchant/webhooks— register a URL + event list.DELETE /merchant/webhooks/{id}GET /merchant/webhooks/{id}/deliveries— delivery log.POST /merchant/webhooks/{id}/deliveries/{deliveryId}/replay
Media
R2-backed assets — images, videos, downloadable digital files.
GET /merchant/media/assetsPOST /merchant/media/assets/upload-url— request a signed PUT URL for direct R2 upload.POST /merchant/media/assets— finalize after the upload completes.DELETE /merchant/media/assets/{id}
Analytics
curl "https://aly.store/api/storefront/v1/merchant/analytics/metrics?site_slug=acme&range=30d" \ -H "Authorization: Bearer aly_..."Two read endpoints:
GET /merchant/analytics/metrics— visits, conversions, revenue, by date range.GET /merchant/analytics/activity— recent events (orders, customer signups, fulfillments).
Coupons + memberships
Coupons and memberships are accessible via MCP (coupons.*, memberships.*) and the editor UI. REST endpoints for them are part of the OpenAPI surface — see openapi.json for current shapes.
Was this page helpful?