Programmatic access to your orders, inventory and listings. Base URL:
https://app.ecomlinx.com/api/v1
Introduction
The EcomLinx REST API lets your ERP, warehouse system or scripts read the orders EcomLinx collects from every channel, read your listings, and read and set stock allocations. It is available on the Scale plan.
All requests go over HTTPS to https://app.ecomlinx.com/api/v1. Responses are JSON with snake_case fields. Dates are ISO 8601 in UTC; a missing value is null, never an empty string.
Get your API key - the account owner creates one in Settings → API Keys. It is shown once; store it as a secret. Anyone holding it can read your orders and change stock allocations.
Authentication
Authenticate using your API key as a Bearer token in the Authorization header.
A missing, wrong or revoked key returns 401. A key stops working on the very next request after it is revoked, the account leaves the Scale plan, or the account is suspended. Call the API from your server - never put the key in a browser or mobile app.
Rate limits
Each API key may make 120 requests per minute. Keys are counted separately, so a second integration gets its own key and its own allowance. Every response says where you stand; going over returns 429 rate_limited with a Retry-After header in seconds.
All errors return a JSON body with error.code and error.message.
Error response
{
"error": {
"code": "insufficient_stock",
"message": "Cannot allocate 120 units - only 100 in stock"
}
}
400bad_requestA parameter or the body is invalid - the message says which
401unauthorizedMissing, invalid or revoked API key
403plan_requiredThe account is not on the Scale plan
403account_suspendedThe account is suspended
404not_foundNo such record in your account
409ambiguous_skuSeveral SKUs share that code - address it by id
409insufficient_stockAllocations would exceed physical stock
429rate_limitedOver the per-key limit - wait Retry-After seconds
500internal_errorOur fault - retry with backoff
Pagination & polling
List endpoints return records oldest change first, with has_more and next_cursor. Pass the cursor back to get the next page. A record that changes while you are paging moves to the end of the stream, so you see it again rather than missing it.
To keep a system in sync, remember the updated_at of the last record you processed and send it as updated_since next time. It is inclusive, so de-duplicate by id.
node - sync new and changed orders
const since = loadCheckpoint(); // e.g. '2026-10-01T00:00:00Z'
let latest = since;
let cursor = null;
while (true) {
const url = new URL('https://app.ecomlinx.com/api/v1/orders');
url.searchParams.set('updated_since', since);
if (cursor) url.searchParams.set('cursor', cursor);
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.ECOMLINX_API_KEY}` } });
if (res.status === 429) { await sleep(Number(res.headers.get('Retry-After')) * 1000); continue; }
if (!res.ok) throw new Error((await res.json()).error.message);
const page = await res.json();
for (const order of page.data) { await upsert(order); latest = order.updated_at; }
if (!page.next_cursor) break;
cursor = page.next_cursor;
}
saveCheckpoint(latest);
Account
GET/me
Check your key
Returns the account and key a request is authenticated as. Make this your first call: a 200 means the key works.
Sets how many units each channel may sell. Channels you leave out are unchanged; 0 stops a channel selling the SKU. The total cannot exceed physical stock (409 insufficient_stock). Marketplaces receive the new numbers on the next channel sync.
Request body
allocationsrequired
objectChannel id to quantity, e.g. { "amazon_in": 40, "flipkart": 30 }. Ids are the ones used in Integrations: amazon_in, amazon_us, amazon_uk, flipkart, meesho, myntra, ajio, nykaa, jiomart, snapdeal, shopify, woocommerce and so on.
Add a URL and choose events in Settings → API Keys → Webhooks; the signing secret is shown once when you add it. Events fire when an order's status is changed in EcomLinx. Delivery is a single attempt with a 5-second timeout, so treat webhooks as a prompt to poll /orders, not as the only record.
Verify each delivery: X-EcomLinx-Signature is sha256= followed by the hex HMAC-SHA256 of the raw request body, keyed with your secret.
There is no official SDK yet. The API is plain REST and JSON, so any HTTP client works - the examples on this page use curl, the fetch built into Node 18+, and Python's requests. Questions: info@ecomlinx.com.