Introduction The EcomLinx REST API gives you programmatic access to all your ecommerce data - products, inventory, orders, returns, channels, and webhooks. It is available on the Scale plan .
All requests are made over HTTPS to https://api.ecomlinx.com. Responses are JSON. Dates are ISO 8601 in UTC.
Get your API key - Go to Settings → API Keys in your EcomLinx dashboard to generate a live key. Keep it secret: it grants full access to your workspace.
Authentication Authenticate using your API key as a Bearer token in the Authorization header.
Authentication header
Authorization: Bearer elx_live_sk_4f8a2b1c9d7e3f6a0b5c2d8e1f4a7b3c Copy Requests without a valid key return 401 Unauthorized. Never expose your key in client-side code.
Rate limits Requests are limited per API key. Exceeded limits return 429 Too Many Requests with a Retry-After header.
Scale 1,000 req / min100 req / sec
Pro 200 req / min20 req / secRead-only endpoints only
Errors All errors return a JSON body with error.code and error.message.
Error response
{
"error": {
"code": "not_found",
"message": "Product prod_01HX4 does not exist.",
"status": 404
}
} Copy 400bad_requestMissing or invalid parameters
401unauthorizedInvalid or missing API key
403forbiddenAPI keys are a Scale plan feature
404not_foundResource does not exist
409conflictDuplicate resource or conflicting state
429rate_limitedToo many requests - see rate limits
500internal_errorEcomLinx server error - retry with backoff
GET /v1/products
List products Returns a paginated list of all products in your central catalog.
Query parameters
page
integerPage number, starting from 1 (default: 1) limit
integerResults per page, max 100 (default: 20) channel
stringFilter by channel ID, e.g. amazon_in status
stringlive | suppressed | draft | inactive q
stringSearch by product name or SKU Example request
curl
curl https://api.ecomlinx.com/v1/products \
-H "Authorization: Bearer elx_live_sk_••••••••" \
-G -d "limit=20" -d "channel=amazon_in" Copy Response
json
{
"data": [
{
"id": "prod_01HX4",
"sku": "BLUE-TEE-M",
"name": "Premium Cotton T-Shirt – Blue / M",
"status": "live",
"price": 899,
"stock": 143,
"health_score": 87,
"channels": ["amazon_in", "flipkart", "shopify"],
"updated_at": "2026-04-17T08:22:11Z"
}
],
"meta": { "total": 248, "page": 1, "limit": 20 }
} Copy GET /v1/products/{id}
Get a product Retrieves a single product by its ID, including full channel listing statuses.
Query parameters
idrequired
stringProduct ID Example request
curl
curl https://api.ecomlinx.com/v1/products/prod_01HX4 \
-H "Authorization: Bearer elx_live_sk_••••••••" Copy Response
json
{
"id": "prod_01HX4",
"sku": "BLUE-TEE-M",
"name": "Premium Cotton T-Shirt – Blue / M",
"category": "Apparel > T-Shirts",
"price": 899,
"stock": 143,
"cogs": 280,
"health_score": 87,
"channel_statuses": {
"amazon_in": { "status": "live", "listing_id": "B0CXXXX" },
"flipkart": { "status": "live", "listing_id": "FK123456" },
"meesho": { "status": "suppressed", "reason": "Missing HSN code" }
},
"images": ["https://cdn.example.com/img1.jpg"],
"updated_at": "2026-04-17T08:22:11Z"
} Copy PATCH /v1/products/{id}
Update a product Updates product fields. Only the fields you provide are changed. Changes sync to connected channels automatically.
Request body
name
stringProduct display name price
numberBase price in INR (or currency set on account) stock
integerAbsolute stock quantity status
stringlive | draft | inactive Example request
curl
curl -X PATCH https://api.ecomlinx.com/v1/products/prod_01HX4 \
-H "Authorization: Bearer elx_live_sk_••••••••" \
-H "Content-Type: application/json" \
-d '{"price": 950}' Copy Response
json
{
"id": "prod_01HX4",
"name": "Premium Cotton T-Shirt – Blue / M",
"price": 950,
"stock": 143,
"updated_at": "2026-04-17T09:01:44Z"
} Copy GET /v1/inventory
List inventory Returns stock levels for all SKUs across your connected channels, with velocity and restock forecasts.
Query parameters
status
stringcritical | low | healthy | dead_stock channel
stringFilter allocations by channel ID Example request
curl
curl https://api.ecomlinx.com/v1/inventory \
-H "Authorization: Bearer elx_live_sk_••••••••" \
-G -d "status=critical" Copy Response
json
{
"data": [
{
"sku": "BLUE-TEE-M",
"total_stock": 143,
"status": "healthy",
"velocity": 4.2,
"restock_days": 34,
"allocations": {
"amazon_in": 60,
"flipkart": 50,
"shopify": 33
}
}
],
"summary": {
"total_units": 4821,
"critical_skus": 3,
"out_of_stock": 1
}
} Copy PATCH /v1/inventory/{sku}
Update stock Adjust stock for a SKU. Use `quantity` for absolute set, or `adjust` for a relative +/- delta.
Request body
quantity
integerSet absolute stock level adjust
integerAdd (+) or subtract (-) from current stock allocations
objectPer-channel allocation map, e.g. { "amazon_in": 60 } Example request
curl
curl -X PATCH https://api.ecomlinx.com/v1/inventory/BLUE-TEE-M \
-H "Authorization: Bearer elx_live_sk_••••••••" \
-H "Content-Type: application/json" \
-d '{"adjust": 17}' Copy Response
json
{
"sku": "BLUE-TEE-M",
"total_stock": 160,
"allocations": { "amazon_in": 70, "flipkart": 60, "shopify": 30 },
"updated_at": "2026-04-17T09:15:00Z"
} Copy GET /v1/orders
List orders Returns a unified list of orders across all connected channels, newest first.
Query parameters
status
stringnew | processing | ready | shipped | delivered | cancelled | return channel
stringFilter by channel ID from
stringISO 8601 date, e.g. 2026-04-01 page
integerPage number (default: 1) limit
integerMax 100 (default: 20) Example request
curl
curl https://api.ecomlinx.com/v1/orders \
-H "Authorization: Bearer elx_live_sk_••••••••" \
-G -d "status=new" -d "channel=amazon_in" Copy Response
json
{
"data": [
{
"id": "ord_8FZ2K",
"channel": "amazon_in",
"channel_order_id": "402-1234567-1234567",
"status": "processing",
"customer": { "name": "Priya Sharma", "city": "Mumbai" },
"items": [{ "sku": "BLUE-TEE-M", "qty": 1, "price": 899 }],
"total": 899,
"awb": null,
"sla_deadline": "2026-04-18T10:00:00Z",
"created_at": "2026-04-17T07:45:00Z"
}
],
"meta": { "total": 312, "page": 1, "limit": 20 }
} Copy PATCH /v1/orders/{id}
Update order status Update the status of an order and optionally set tracking details.
Request body
statusrequired
stringprocessing | ready | shipped | delivered | cancelled awb
stringAirway bill / tracking number courier
stringCourier name, e.g. Delhivery Example request
curl
curl -X PATCH https://api.ecomlinx.com/v1/orders/ord_8FZ2K \
-H "Authorization: Bearer elx_live_sk_••••••••" \
-H "Content-Type: application/json" \
-d '{"status":"shipped","awb":"161234567890","courier":"Delhivery"}' Copy Response
json
{
"id": "ord_8FZ2K",
"status": "shipped",
"awb": "161234567890",
"courier": "Delhivery",
"updated_at": "2026-04-17T11:30:00Z"
} Copy GET /v1/channels
List channels Returns all channels connected to your workspace with their current sync status.
Example request
curl
curl https://api.ecomlinx.com/v1/channels \
-H "Authorization: Bearer elx_live_sk_••••••••" Copy Response
json
{
"data": [
{
"id": "amazon_in",
"name": "Amazon India",
"status": "active",
"last_synced": "2026-04-17T08:20:00Z",
"orders_today": 7,
"active_listings": 142
},
{
"id": "flipkart",
"name": "Flipkart",
"status": "active",
"last_synced": "2026-04-17T08:18:00Z",
"orders_today": 4,
"active_listings": 98
}
]
} Copy POST /v1/channels/{id}/sync
Trigger sync Triggers a full data sync for the specified channel. Syncs orders, inventory, and listing statuses. Returns a sync job ID you can poll.
Example request
curl
curl -X POST https://api.ecomlinx.com/v1/channels/amazon_in/sync \
-H "Authorization: Bearer elx_live_sk_••••••••" Copy Response
json
{
"sync_id": "sync_4XP9W",
"channel": "amazon_in",
"status": "queued",
"estimated_seconds": 12,
"created_at": "2026-04-17T09:00:00Z"
} Copy GET /v1/webhooks
List webhooks Returns all webhook endpoints registered on your account.
Example request
curl
curl https://api.ecomlinx.com/v1/webhooks \
-H "Authorization: Bearer elx_live_sk_••••••••" Copy Response
json
{
"data": [
{
"id": "wh_7KL3M",
"url": "https://yourapp.com/hooks/ecomlinx",
"events": ["order.new", "inventory.low", "return.received"],
"status": "active",
"created_at": "2026-03-01T00:00:00Z"
}
]
} Copy POST /v1/webhooks
Register a webhook Registers a new webhook endpoint. We'll send a POST request to your URL for each subscribed event.
Request body
urlrequired
stringHTTPS URL to receive events eventsrequired
string[]Array of event names to subscribe to secret
stringOptional secret for HMAC-SHA256 signature verification Example request
curl
curl -X POST https://api.ecomlinx.com/v1/webhooks \
-H "Authorization: Bearer elx_live_sk_••••••••" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com/hooks/ecomlinx",
"events": ["order.new", "order.shipped"],
"secret": "my_webhook_secret"
}' Copy Response
json
{
"id": "wh_9NQ2R",
"url": "https://yourapp.com/hooks/ecomlinx",
"events": ["order.new", "order.shipped"],
"secret": "whsec_••••••••••••",
"status": "active",
"created_at": "2026-04-17T09:30:00Z"
} Copy DELETE /v1/webhooks/{id}
Delete a webhook Permanently removes a webhook endpoint. No further events will be delivered to it.
Example request
curl
curl -X DELETE https://api.ecomlinx.com/v1/webhooks/wh_7KL3M \
-H "Authorization: Bearer elx_live_sk_••••••••" Copy Response
json
{ "deleted": true, "id": "wh_7KL3M" } Copy Webhook events Each event delivers a JSON payload with event, created_at, and data fields. Verify the signature using the X-EcomLinx-Signature header (HMAC-SHA256 of the raw body with your webhook secret).
order.newA new order arrives on any connected channel
order.shippedAn order status changes to Shipped
order.cancelledAn order is cancelled
inventory.lowA SKU stock falls below its reorder point
inventory.outA SKU reaches zero stock on any channel
return.receivedA return is received and graded
listing.suppressedA listing is suppressed on any channel
channel.errorA marketplace API connection fails
sync.completedA channel sync finishes
Webhook payload example
POST https://yourapp.com/hooks/ecomlinx
X-EcomLinx-Signature: sha256=abc123...
Content-Type: application/json
{
"event": "order.new",
"created_at": "2026-04-17T09:45:00Z",
"data": {
"id": "ord_8FZ2K",
"channel": "amazon_in",
"total": 899,
"status": "new"
}
} Copy SDKs & libraries Official client libraries are available for the most common languages. All SDKs are open-source and maintained by the EcomLinx team.
Node.js stable
@ecomlinx/nodenpm install @ecomlinx/node
Python stable
ecomlinxpip install ecomlinx
PHP beta
ecomlinx/ecomlinx-phpcomposer require ecomlinx/ecomlinx-php
Need another language? The API is standard REST+JSON - any HTTP client works. If you build a community SDK, open a PR at github.com/ecomlinx/api-clientsand we'll link it here.