Comprehensive API reference for integrating ERPs, storefronts, and third-party systems with the WACM Shop Module.
Download as Markdownhttps://app.wacm.in/api/v1/shop
API requests require a Bearer Token. Pass it in the HTTP header:
Authorization: Bearer YOUR_API_TOKEN
There are two types of tokens for the Shop API:
Used for the POST /api/shop/erp/sync endpoint only.
Found in: Shop > Integrations > ERP / Custom API
Used for all /api/v1/shop/* endpoints.
Generated via: Settings > API Tokens (create a token with Shop module scope)
Authorization: Bearer YOUR_API_TOKEN
To integrate your ERP or external system with WACM Shop:
For ERP bulk sync: use the ERP Token from Shop > Integrations. For REST API: generate a Sanctum token from Settings > API Tokens.
Make a POST to /api/v1/shop/categories to establish your taxonomy. Save the returned id values.
For bulk sync: POST an array to /api/shop/erp/sync. For single product: POST to /api/v1/shop/products.
Poll GET /api/v1/shop/orders, or register a webhook endpoint to receive real-time events.
Send a PUT to /api/v1/shop/orders/{id}/status with the new status (Pending, Processing, Shipped, Fulfilled, Delivered, Cancelled).
/api/v1/shop/products
Returns all products for the authenticated company. Supports eager-loaded category.
/api/v1/shop/products
Create a new product.
| Parameter | Description |
|---|---|
| name Req | Product name (max 255 chars). |
| price Req | Selling price (min: 0). |
| description | Full product description. |
| compare_at_price | Original/strikethrough price. |
| currency | 3-letter currency code (e.g., INR, USD). |
| stock_quantity | Available inventory count. |
| status | Active, Draft, Archived. Default: Active. |
| external_id | Your system's product ID. |
| image | Product image URL. |
| category_id | ID of the category to assign. |
/api/v1/shop/products/{id}
/api/v1/shop/products/{id}
Update an existing product (same fields as POST, all optional) or delete a product (returns 204 No Content).
{
"data": [
{
"id": 105,
"name": "Summer Dress",
"description": "...",
"price": "49.99",
"compare_at_price": null,
"currency": "INR",
"stock_quantity": 50,
"status": "Active",
"image": "https://...",
"category_id": 3,
"external_id": "SKU-001",
"external_source": "erp",
"created_at": "2024-01-01T00:00:00Z"
}
]
}
/api/v1/shop/categories
Returns all product categories for the authenticated company.
/api/v1/shop/categories
Create a new category.
| Parameter | Description |
|---|---|
| name Req | Category name (max 255 chars). |
| slug Req | URL-friendly identifier (max 255 chars). |
| description | Category description. |
| image | Category image URL. |
/api/v1/shop/categories/{id}
/api/v1/shop/categories/{id}
Update an existing category or delete a category (returns 204 No Content).
/api/v1/shop/orders
/api/v1/shop/orders/{id}
Returns all orders or a specific order by ID. Each order includes nested contact and line-item data.
/api/v1/shop/orders/{id}/status
Update the status of an order.
| Parameter | Description |
|---|---|
| status Req | One of: Pending, Processing, Shipped, Fulfilled, Delivered, Cancelled, Refunded. |
{
"data": {
"id": 42,
"order_number": "ORD-ABC123",
"status": "Shipped",
"total_amount": "99.99",
"currency": "INR",
"customer_name": "John Doe",
"customer_phone": "1234567890",
"tracking_number": "TRACK001",
"tracking_url": "https://track.example.com/TRACK001"
}
}
https://app.wacm.in/api/shop/erp/sync
Bulk-sync products from your ERP system in a single request. Uses a unique ERP Token (not a Sanctum token).
Find your ERP Token in Shop > Integrations > ERP / Custom API tab.
| Field | Description |
|---|---|
| external_id Req | Unique ID from your ERP system. |
| name Req | Product name. |
| description | Product description. |
| price | Selling price. |
| compare_at_price | Original/strikethrough price. |
| stock_quantity | Available inventory. |
| status | Active, Draft, Archived. Default: Active. |
| image | Product image URL. |
Note: Products synced via this endpoint are marked with external_source: "erp". If a product with the same external_id already exists, it will be updated rather than duplicated.
{
"products": [
{
"external_id": "SKU-1001",
"name": "Summer T-Shirt",
"description": "100% cotton blue shirt",
"price": 19.99,
"compare_at_price": 25.00,
"stock_quantity": 50,
"status": "Active",
"image": "https://example.com/shirt.jpg"
},
{
"external_id": "SKU-1002",
"name": "Winter Jacket",
"price": 89.99
}
]
}
{
"success": true,
"message": "Successfully synced 2 products."
}
Receive real-time order events from third-party systems (Zapier, Make, custom ERPs) into WACM.
https://app.wacm.in/api/shop/webhooks/custom/{token}
The ERP Token is used as the webhook token in the URL.
| Field | Description |
|---|---|
| event Req | One of: order.placed, order.status_updated. |
| data.customer_address | Combined shipping address (e.g. "123 Main St, New York") |
| data.status | Pending, Processing, Shipped, Fulfilled, Delivered, Cancelled. |
| data.tracking_url | URL to track shipment. |
{
"event": "order.placed",
"data": {
"order_number": "EXT-100",
"customer_name": "John Doe",
"customer_phone": "1234567890",
"customer_email": "john@example.com",
"total_amount": 45.00,
"currency": "USD",
"items": [
{ "name": "Item 1", "quantity": 1, "price": 45.00 }
]
}
}
{
"event": "order.status_updated",
"data": {
"order_number": "EXT-100",
"status": "Shipped",
"tracking_url": "https://track.example.com/123",
"tracking_number": "123"
}
}
WACM integrates with Shopify via the Admin GraphQL API and webhooks. Products, orders, and abandoned carts sync automatically.
Configure Shopify in Shop > Integrations > Shopify. See the integration settings for the full guide.
For apps created in the Shopify Dev Dashboard. Tokens are automatically refreshed every 24 hours — no manual token management needed.
read_products, read_orders, write_orders, read_fulfillments, read_customers, read_checkouts, write_checkoutsFor existing admin-created custom apps with a static shpat_ token. No longer available for new apps in Shopify Admin.
| Shopify Event | WACM Action |
|---|---|
| products/create | Create/update product |
| products/update | Update product |
| products/delete | Mark product as Draft |
| orders/create | Create order + Flowmaker event |
| orders/fulfilled | Update to "Fulfilled", save tracking |
| orders/cancelled | Update to "Cancelled" |
| checkouts/create | Trigger abandoned cart |
| checkouts/update | Trigger abandoned cart |
| Shopify Field | WACM Product Field |
|---|---|
| id (GID) | external_id |
| title | name |
| descriptionHtml | description |
| status | status |
| variants[0].price | price |
| variants[0].inventoryQuantity | stock_quantity |
https://app.wacm.in/api/shop/webhooks/shopify/{webhook_token}
Shopify → Webhook (HMAC verified) → WebhookController
├── products/* → ShopifySyncService → Shop Products table
├── orders/create → Order + Contact created → Flowmaker events dispatched
├── orders/fulfilled/cancelled → Order status updated
└── checkouts/* → Contact created/updated → EVENT_ABANDONED_CART dispatched
© 2026 WACM. All rights reserved. API Version 1.0.