Scale Plan Feature

EcomLinx API Reference

Programmatic access to your orders, inventory, products, channels, and webhooks. Base URL:

https://api.ecomlinx.com

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

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.

Scale1,000 req / min100 req / sec
Pro200 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
  }
}
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

Products

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"
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 }
}
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_••••••••"
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"
}
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}'
Response
json
{
  "id": "prod_01HX4",
  "name": "Premium Cotton T-Shirt – Blue / M",
  "price": 950,
  "stock": 143,
  "updated_at": "2026-04-17T09:01:44Z"
}

Inventory

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"
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
  }
}
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}'
Response
json
{
  "sku": "BLUE-TEE-M",
  "total_stock": 160,
  "allocations": { "amazon_in": 70, "flipkart": 60, "shopify": 30 },
  "updated_at": "2026-04-17T09:15:00Z"
}

Orders

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
to
stringISO 8601 date
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"
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 }
}
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"}'
Response
json
{
  "id": "ord_8FZ2K",
  "status": "shipped",
  "awb": "161234567890",
  "courier": "Delhivery",
  "updated_at": "2026-04-17T11:30:00Z"
}

Channels

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_••••••••"
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
    }
  ]
}
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_••••••••"
Response
json
{
  "sync_id": "sync_4XP9W",
  "channel": "amazon_in",
  "status": "queued",
  "estimated_seconds": 12,
  "created_at": "2026-04-17T09:00:00Z"
}

Webhooks

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_••••••••"
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"
    }
  ]
}
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"
  }'
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"
}
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_••••••••"
Response
json
{ "deleted": true, "id": "wh_7KL3M" }

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"
  }
}

SDKs & libraries

Official client libraries are available for the most common languages. All SDKs are open-source and maintained by the EcomLinx team.

Node.jsstable
@ecomlinx/node
npm install @ecomlinx/node
Pythonstable
ecomlinx
pip install ecomlinx
PHPbeta
ecomlinx/ecomlinx-php
composer 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.