Fetch order data programmatically. Works from any tool — Python, Google AppScript, n8n, Zapier, curl, you name it.
ee_live_. Treat it like a password — anyone with this key can pull your store's order data.
Open a terminal (Mac/Linux Terminal, Windows PowerShell, etc.) and paste this, replacing YOUR_KEY with the secret your admin gave you:
curl -H "Authorization: Bearer YOUR_KEY" \ "https://easyexport.ccapps.xyz/api/v1/orders?start_date=2026-06-01&end_date=2026-06-19" \ -o orders.csv
That downloads orders.csv with every order placed between those dates, with just the columns your key is allowed to see.
Every request needs an HTTP header called Authorization with the value Bearer YOUR_KEY. That's how the server knows who you are.
Authorization: Bearer ee_live_a7f3b8c4d5e6f1a2b3c4d5e6f1a2b3c4
If you leave the header off, or the key is wrong/revoked, you'll get a 401 Unauthorized back.
The main endpoint is GET /api/v1/orders. You tell it the date range in the URL.
| Name | Required? | Description |
|---|---|---|
start_date | required | First day to include, format YYYY-MM-DD (e.g. 2026-06-01) |
end_date | required | Last day to include, same format |
format | optional | csv (default) or json (NDJSON, one order per line) |
The date range is matched against the order date — when the customer placed the order. So asking for 2026-06-01 to 2026-06-19 gives you orders placed in that window, not orders imported into EasyEcom on those days.
requests + pandas)import requests, io import pandas as pd KEY = "ee_live_..." # the secret your admin gave you r = requests.get( "https://easyexport.ccapps.xyz/api/v1/orders", params={"start_date": "2026-06-01", "end_date": "2026-06-19"}, headers={"Authorization": f"Bearer {KEY}"}, ) r.raise_for_status() df = pd.read_csv(io.StringIO(r.text)) print(df.head())
function fetchOrders() { const KEY = 'ee_live_...'; const url = 'https://easyexport.ccapps.xyz/api/v1/orders?start_date=2026-06-01&end_date=2026-06-19'; const response = UrlFetchApp.fetch(url, { headers: { Authorization: 'Bearer ' + KEY } }); const rows = Utilities.parseCsv(response.getContentText()); SpreadsheetApp.getActiveSheet().getRange(1, 1, rows.length, rows[0].length).setValues(rows); }
Use an "HTTP Request" node. Method: GET. URL: the same URL above. Add a Header: name Authorization, value Bearer YOUR_KEY.
Your admin picks which columns your key returns when they create it — and they can change that anytime without giving you a new key. To see what your current key is set to return, hit:
curl -H "Authorization: Bearer YOUR_KEY" https://easyexport.ccapps.xyz/api/v1/me
That returns your key's name, when it was last used, and which columns it's set to return. To see the full list of columns the system could return (so you can ask your admin to add some):
curl -H "Authorization: Bearer YOUR_KEY" https://easyexport.ccapps.xyz/api/v1/columns
If you want to know how many rows you'd get without actually downloading them, use the count endpoint:
curl -H "Authorization: Bearer YOUR_KEY" \ "https://easyexport.ccapps.xyz/api/v1/orders/count?start_date=2026-06-01&end_date=2026-06-19" # → {"count":100426,"start_date":"2026-06-01","end_date":"2026-06-19"}
The data gets refreshed automatically several times a day. To know exactly how fresh, every response includes a timestamp:
/me, /orders/count) include data_freshness_at in the response body — the time the last full refresh finished./orders) include the same info as an X-Data-Freshness response header.So if you call /me first, you can see at a glance: "the data I'm about to pull was last refreshed at 12:04 PM IST."
While the system is mid-refresh, /orders and /orders/count will respond with 503 and a short message:
{
"error": "Data is being refreshed right now. Please retry in a couple of minutes.",
"retry_after_seconds": 120,
"sync_in_progress": true
}
The response also includes a standard Retry-After header set to 120 seconds, so well-behaved HTTP clients can wait + retry automatically. Refreshes typically take 3 to 20 minutes depending on how much data needs to come in.
/me still works during a refresh — call it to check sync_in_progress if you want your script to wait before trying again.
| HTTP code | Meaning | What to do |
|---|---|---|
400 | Missing or bad start_date / end_date | Check the format — needs to be YYYY-MM-DD with hyphens, e.g. 2026-06-01 |
401 | Missing key, wrong key, or revoked key | Make sure your Authorization header is exactly Bearer YOUR_KEY. If still failing, your admin may have revoked it. |
503 | Data refresh in progress, or too many simultaneous pulls happening right now | Wait a few seconds (busy) or a couple of minutes (refresh) and retry. The Retry-After header tells you exactly how long. |
500 | Server-side problem | Tell the admin. Include the time it happened. |