Install
openclaw skills install ecwid-ecommerceEcwid REST API v3 integration for managing e-commerce store data including products, orders, customers, categories, discount coupons, promotions, abandoned carts, and store profile. Use when the user wants to interact with their Ecwid online store.
openclaw skills install ecwid-ecommerceEcwid REST API v3 integration for managing e-commerce store data including products, orders, customers, categories, discount coupons, promotions, abandoned carts, and store profile.
Official docs: https://docs.ecwid.com/api-reference Publisher: https://github.com/droneitgroup
Set up a Direct API (HTTP) connection with the following settings:
| Setting | Value |
|---|---|
| Service name | Ecwid |
| Base URL | https://app.ecwid.com/api/v3/{storeId} (replace {storeId} with your actual store ID) |
| Auth type | Bearer token |
| Token | Your store's secret API token (format: secret_xxxxx) |
| HTTP methods | GET for read-only access. Add POST, PUT, DELETE for write operations. |
secret_ — use this as the Bearer tokenread_store_profile, read_catalog, read_orders, read_customers, read_discount_coupons) and set HTTP methods to GET only.All list endpoints return the same pagination envelope:
{
"total": 150,
"count": 100,
"offset": 0,
"limit": 100,
"items": [...]
}
Use offset and limit query parameters to paginate. Maximum and default limit is 100.
Example: ?offset=0 → ?offset=100 → ?offset=200 ...
All endpoints support the responseFields query parameter to limit which fields are returned:
?responseFields=total,items(id,name,price)
This reduces response size and speeds up requests.
Date parameters accept both:
14478048002023-01-15 19:27:50All requests require the Authorization header:
Authorization: Bearer secret_xxxxx
Scope required: read_catalog
GET /products
| Name | Type | Description |
|---|---|---|
keyword | string | Search term. Searches name, description, SKU, options, category name, gallery image descriptions, attribute values. Add * at end to disable exact match. |
productId | number | Internal product IDs (comma-separated). If set, other search params are ignored. |
sku | string | Exact product or variation SKU match. If set, other params ignored except productId. |
category | string | Category ID to filter products by. |
categories | string | Comma-separated category IDs, e.g. 0,123456,138470508. |
includeProductsFromSubcategories | boolean | Set true to include products from subcategories. |
priceFrom | number | Minimum product price. |
priceTo | number | Maximum product price. |
createdFrom | number/string | Product creation date lower bound. |
createdTo | number/string | Product creation date upper bound. |
updatedFrom | number/string | Product update date lower bound. |
updatedTo | number/string | Product update date upper bound. |
enabled | boolean | true for enabled only, false for disabled only. |
inStock | boolean | true for in-stock only, false for out-of-stock only. |
sortBy | string | One of: RELEVANCE (default), DEFINED_BY_STORE_OWNER, ADDED_TIME_DESC, ADDED_TIME_ASC, NAME_ASC, NAME_DESC, PRICE_ASC, PRICE_DESC, UPDATED_TIME_ASC, UPDATED_TIME_DESC. |
offset | number | Pagination offset. |
limit | number | Max items to return (max/default: 100). |
responseFields | string | Limit response fields. Example: items(id,name,price,sku) |
| Field | Type | Description |
|---|---|---|
id | number | Internal product ID. |
sku | string | Product SKU. |
name | string | Product name. |
price | number | Base product price. |
defaultDisplayedPrice | number | Price shown on storefront (includes taxes). |
compareToPrice | number | Pre-sale / "compare to" price. |
quantity | number | Stock quantity (absent if unlimited is true). |
unlimited | boolean | Whether product has unlimited stock. |
inStock | boolean | Whether in stock. |
enabled | boolean | Whether visible on storefront. |
weight | number | Product weight. |
url | string | Storefront product page URL. |
created | string | Creation datetime. |
updated | string | Last update datetime. |
createTimestamp | number | Creation UNIX timestamp. |
updateTimestamp | number | Last update UNIX timestamp. |
description | string | Product description (HTML). |
categoryIds | array | IDs of assigned categories. |
defaultCategoryId | number | Default category ID. |
imageUrl | string | Main image URL (1200px). |
thumbnailUrl | string | Thumbnail URL (400px). |
originalImageUrl | string | Full-size image URL. |
options | array | Product options (size, color, etc.). |
combinations | array | Product variations. |
attributes | array | Product attributes and values. |
isGiftCard | boolean | Whether this is a gift card. |
curl 'https://app.ecwid.com/api/v3/1003/products?keyword=drone&limit=10' \
-H 'Authorization: Bearer secret_token'
GET /products/{productId}
Returns the full product object directly (not wrapped in pagination envelope). The productId is a number.
Scope required: read_orders
GET /orders
| Name | Type | Description |
|---|---|---|
ids | string | Comma-separated order IDs, internal IDs, prefixes, and suffixes. Example: EG4H2,J77J8 |
keywords | string | Search order ID, transaction ID, addresses, email, tracking code, item SKUs/names, admin notes. |
email | string | Customer email. |
customerId | number | Customer's internal ID. |
productId | number/string | Product IDs in order (comma-separated). |
totalFrom | number | Minimum order total. |
totalTo | number | Maximum order total. |
createdFrom | number/string | Order placement datetime lower bound. |
createdTo | number/string | Order placement datetime upper bound. |
updatedFrom | number/string | Order update datetime lower bound. |
updatedTo | number/string | Order update datetime upper bound. |
paymentStatus | string | Payment status filter. Supports multiple comma-separated values: AWAITING_PAYMENT, PAID, CANCELLED, REFUNDED, PARTIALLY_REFUNDED, INCOMPLETE. |
fulfillmentStatus | string | Fulfillment status filter. Supports multiple comma-separated values: AWAITING_PROCESSING, PROCESSING, SHIPPED, DELIVERED, WILL_NOT_DELIVER, RETURNED, READY_FOR_PICKUP, OUT_FOR_DELIVERY. |
paymentMethod | string | Payment method name. |
shippingMethod | string | Shipping method name. |
couponCode | string | Discount coupon code applied to the order. |
offset | number | Pagination offset. |
limit | number | Max items to return (max/default: 100). |
responseFields | string | Limit response fields. Example: items(id,email,total,paymentStatus) |
| Field | Type | Description |
|---|---|---|
id | string | Order ID (string, not number!) e.g. "ORD001", "XYZ99". |
internalId | number | Internal numeric order ID. |
email | string | Customer email. |
total | number | Order total with all modifiers. |
subtotal | number | Cost of products before modifiers. |
tax | number | Sum of all taxes. |
couponDiscount | number | Discount from coupon. |
discount | number | Sum of all advanced discounts. |
paymentStatus | string | Payment status. |
fulfillmentStatus | string | Fulfillment status. |
paymentMethod | string | Payment method name. |
createDate | string | Order placement datetime. |
updateDate | string | Last update datetime. |
createTimestamp | number | Order placement UNIX timestamp. |
updateTimestamp | number | Last update UNIX timestamp. |
customerId | number | Internal customer ID. |
items | array | Products in the order (with productId, name, price, quantity, sku). |
shippingPerson | object | Shipping address (name, street, city, countryCode, postalCode, phone). |
billingPerson | object | Billing address (same fields as shippingPerson). |
shippingOption | object | Shipping details (shippingMethodName, shippingRate). |
trackingNumber | string | Shipping tracking code. |
privateAdminNotes | string | Private notes by store owner. |
orderComments | string | Customer's order comments. |
curl 'https://app.ecwid.com/api/v3/1003/orders?paymentStatus=PAID&fulfillmentStatus=DELIVERED&limit=10' \
-H 'Authorization: Bearer secret_token'
GET /orders/{orderId}
Returns the full order object directly. Note: orderId is a string (e.g. "ORD001"), not a number.
Scope required: read_customers
GET /customers
| Name | Type | Description |
|---|---|---|
keyword | string | Search customer name and email. |
name | string | Search customer name (billingPerson.name). |
email | string | Search customer email. |
useExactEmailMatch | boolean | true for exact email match (requires email param). |
phone | string | Search customer phone number. |
city | string | Search customer city in shipping address. |
postalCode | string | Search customer ZIP code. |
stateOrProvinceCode | string | Two-digit state code. |
countryCodes | string | Country codes in shipping address. |
companyName | string | Company name in shipping address. |
acceptMarketing | boolean | Filter by marketing email acceptance. |
customerGroupIds | string | Customer group IDs (comma-separated). |
minOrderCount | number | Minimum number of customer orders. |
maxOrderCount | number | Maximum number of customer orders. |
minSalesValue | number | Minimum total order value. |
maxSalesValue | number | Maximum total order value. |
createdFrom | number/string | Registration datetime lower bound. |
createdTo | number/string | Registration datetime upper bound. |
updatedFrom | number/string | Last update datetime lower bound. |
updatedTo | number/string | Last update datetime upper bound. |
sortBy | string | One of: NAME_ASC, NAME_DESC, EMAIL_ASC, EMAIL_DESC, ORDER_COUNT_ASC, ORDER_COUNT_DESC, REGISTERED_DATE_DESC, REGISTERED_DATE_ASC, UPDATED_DATE_DESC, UPDATED_DATE_ASC, SALES_VALUE_ASC, SALES_VALUE_DESC. |
offset | number | Pagination offset. |
limit | number | Max items (max/default: 100). |
responseFields | string | Limit response fields. |
| Field | Type | Description |
|---|---|---|
id | number | Internal customer ID. |
email | string | Customer email. |
name | string | Customer name. |
totalOrderCount | number | Total orders placed. |
registered | string | Registration datetime. |
updated | string | Last update datetime. |
billingPerson | object | Billing name/address. |
shippingAddresses | array | Saved shipping addresses. |
contacts | array | Contact info (email, phone, social media). |
customerGroupId | number | Customer group ID. |
customerGroupName | string | Customer group name. |
taxExempt | boolean | Whether customer is tax exempt. |
acceptMarketing | boolean | Whether customer accepted marketing emails. |
stats | object | Sales stats: numberOfOrders, salesValue, averageOrderValue, firstOrderDate, lastOrderDate. |
privateAdminNotes | string | Private admin notes. |
The response also includes allCustomerCount (total unique customers in store) at the top level.
curl 'https://app.ecwid.com/api/v3/1003/customers?email=john@example.com' \
-H 'Authorization: Bearer secret_token'
GET /customers/{customerId}
Returns the full customer object directly. customerId is a number.
Scope required: read_catalog
GET /categories
| Name | Type | Description |
|---|---|---|
keyword | string | Search category name and description. |
parent | number | Parent category ID — returns only direct children. |
parentIds | string | Comma-separated parent category IDs for descendants search. |
withSubcategories | boolean | true to get full category tree (subcategories of subcategories). |
hidden_categories | boolean | true to include disabled categories. |
offset | number | Pagination offset. |
limit | number | Max items (max/default: 100). |
responseFields | string | Limit response fields. |
| Field | Type | Description |
|---|---|---|
id | number | Internal category ID. |
parentId | number | Parent category ID. |
name | string | Category name. |
url | string | Full storefront URL. |
productCount | number | Products in category and subcategories. |
enabledProductCount | number | Enabled products (requires productIds=true). |
description | string | Category description (HTML). |
enabled | boolean | Whether category is enabled. |
imageUrl | string | Category image (1200px). |
thumbnailUrl | string | Category thumbnail (400px). |
orderBy | number | Sort order (starts from 10, increments by 10). |
productIds | array | Product IDs in category (requires productIds=true query param). |
curl 'https://app.ecwid.com/api/v3/1003/categories?parent=0' \
-H 'Authorization: Bearer secret_token'
GET /categories/{categoryId}
Returns the full category object directly. categoryId is a number.
Scope required: read_discount_coupons
GET /discount_coupons
| Name | Type | Description |
|---|---|---|
code | string | Search by coupon code. |
discount_type | string | Filter by type: ABS, PERCENT, SHIPPING, ABS_AND_SHIPPING, PERCENT_AND_SHIPPING. |
availability | string | Filter by status: ACTIVE, PAUSED, EXPIRED, USEDUP. |
createdFrom | number/string | Creation date lower bound. |
createdTo | number/string | Creation date upper bound. |
updatedFrom | number/string | Update date lower bound. |
updatedTo | number/string | Update date upper bound. |
offset | number | Pagination offset. |
limit | number | Max items (max/default: 100). |
responseFields | string | Limit response fields. |
| Field | Type | Description |
|---|---|---|
id | number | Internal coupon ID. |
name | string | Coupon name. |
code | string | Coupon code used at checkout. |
discountType | string | Type: ABS, PERCENT, SHIPPING, ABS_AND_SHIPPING, PERCENT_AND_SHIPPING. |
status | string | Status: ACTIVE, PAUSED, EXPIRED, USEDUP. |
discount | number | Discount value. |
launchDate | string | Coupon launch date. |
expirationDate | string | Coupon expiration date. |
totalLimit | number | Minimum order subtotal for coupon to apply. |
usesLimit | string | Uses limit: UNLIMITED, ONCEPERCUSTOMER, SINGLE. |
applicationLimit | string | Application limit: UNLIMITED, NEW_CUSTOMER_ONLY, REPEAT_CUSTOMER_ONLY. |
creationDate | string | Coupon creation date. |
updateDate | string | Last update date. |
orderCount | number | Number of orders using this coupon. |
catalogLimit | object | Product/category limitations (products, categories arrays). |
curl 'https://app.ecwid.com/api/v3/1003/discount_coupons?availability=ACTIVE' \
-H 'Authorization: Bearer secret_token'
GET /discount_coupons/{couponId}
Returns the full coupon object directly. couponId is a number.
Scope required: read_promotion
GET /promotions
| Name | Type | Description |
|---|---|---|
responseFields | string | Limit response fields. Example: items(name,enabled) |
Note: Promotions endpoint has minimal filtering — only responseFields is supported.
| Field | Type | Description |
|---|---|---|
id | number | Internal promotion ID. |
name | string | Promotion name visible at checkout. |
enabled | boolean | Whether promotion is active. |
discountBase | string | Discount base: ITEM, SUBTOTAL, SHIPPING. |
discountType | string | Discount type: PERCENT, ABSOLUTE, FIXED_PRICE. |
amount | number | Discount amount. |
triggers | object | Trigger conditions (subtotal, startDate, endDate, customerGroups, minProductQuantityInCart, etc.). |
targets | object | Target limitations (categories, products, shippingMethods, etc.). |
curl 'https://app.ecwid.com/api/v3/1003/promotions' \
-H 'Authorization: Bearer secret_token'
Scope required: read_orders
IMPORTANT: The endpoint path is
/carts, NOT/abandoned_carts. Using/abandoned_cartsreturns a 404 error.
GET /carts
| Name | Type | Description |
|---|---|---|
showHidden | boolean | Set false to exclude deleted carts. |
totalFrom | number | Minimum cart total. |
totalTo | number | Maximum cart total. |
createdFrom | number/string | Cart creation datetime lower bound. |
createdTo | number/string | Cart creation datetime upper bound. |
updatedFrom | number/string | Cart update datetime lower bound. |
updatedTo | number/string | Cart update datetime upper bound. |
email | string | Customer email. |
customerId | number | Customer's internal ID. |
offset | number | Pagination offset. |
limit | number | Max items (max: 100, default: 10). |
responseFields | string | Limit response fields. Example: items(cartId,total,email) |
| Field | Type | Description |
|---|---|---|
cartId | string | Unique cart ID (UUID format), e.g. "6626E60A-A6F9-4CD5-8230-43D5F162E0CD". |
email | string | Customer email. |
total | number | Cart total. |
subtotal | number | Cart subtotal. |
tax | number | Total tax. |
createDate | string | Cart creation datetime. |
updateDate | string | Last update datetime. |
createTimestamp | number | Creation UNIX timestamp. |
updateTimestamp | number | Last update UNIX timestamp. |
customerId | number | Internal customer ID. |
paymentMethod | string | Selected payment method. |
items | array | Products in cart (productId, name, price, quantity, sku). |
billingPerson | object | Billing address. |
shippingPerson | object | Shipping address. |
shippingOption | object | Selected shipping option. |
couponDiscount | number | Discount from coupon. |
discount | number | Sum of all advanced discounts. |
recoveredOrderId | number | Order ID if cart was recovered. |
hidden | boolean | Whether cart is hidden from admin. |
curl 'https://app.ecwid.com/api/v3/1003/carts?email=customer@example.com' \
-H 'Authorization: Bearer secret_token'
GET /carts/{cartId}
Returns the full cart object directly. cartId is a string (UUID format).
Scope required: read_store_profile
GET /profile
Returns store settings including general info, company details, languages, currencies, tax settings, and more.
No query parameters required (supports responseFields for filtering).
curl 'https://app.ecwid.com/api/v3/1003/profile' \
-H 'Authorization: Bearer secret_token'
| Resource | List Endpoint | Single Endpoint | Scope |
|---|---|---|---|
| Products | GET /products | GET /products/{productId} | read_catalog |
| Orders | GET /orders | GET /orders/{orderId} | read_orders |
| Customers | GET /customers | GET /customers/{customerId} | read_customers |
| Categories | GET /categories | GET /categories/{categoryId} | read_catalog |
| Coupons | GET /discount_coupons | GET /discount_coupons/{couponId} | read_discount_coupons |
| Promotions | GET /promotions | — | read_promotion |
| Abandoned Carts | GET /carts | GET /carts/{cartId} | read_orders |
| Store Profile | GET /profile | — | read_store_profile |
| Resource | ID Type | Example |
|---|---|---|
| Products | number | 12345678 |
| Orders | string | "ORD001" |
| Customers | number | 177737165 |
| Categories | number | 9691094 |
| Coupons | number | 162428889 |
| Abandoned Carts | string (UUID) | "6626E60A-A6F9-4CD5-8230-43D5F162E0CD" |