← Dashboard

EasyEcom Export API

Fetch order data programmatically. Works from any tool — Python, Google AppScript, n8n, Zapier, curl, you name it.

Before you can use this API: ask your admin to create a key for you on the dashboard's API tab. They'll give you a long secret that starts with ee_live_. Treat it like a password — anyone with this key can pull your store's order data.

The 60-second first call

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.

How authentication works

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.

What you can ask for

The main endpoint is GET /api/v1/orders. You tell it the date range in the URL.

Parameters

NameRequired?Description
start_daterequiredFirst day to include, format YYYY-MM-DD (e.g. 2026-06-01)
end_daterequiredLast day to include, same format
formatoptionalcsv (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.

Examples in your tool

Python (with 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())

Google Apps Script (for Sheets)

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);
}

n8n / Zapier / Make

Use an "HTTP Request" node. Method: GET. URL: the same URL above. Add a Header: name Authorization, value Bearer YOUR_KEY.

The columns you get back

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

Checking before a big pull

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

How fresh is the data?

The data gets refreshed automatically several times a day. To know exactly how fresh, every response includes a timestamp:

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

What if a refresh is happening right now?

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.

What can go wrong

HTTP codeMeaningWhat to do
400Missing or bad start_date / end_dateCheck the format — needs to be YYYY-MM-DD with hyphens, e.g. 2026-06-01
401Missing key, wrong key, or revoked keyMake sure your Authorization header is exactly Bearer YOUR_KEY. If still failing, your admin may have revoked it.
503Data refresh in progress, or too many simultaneous pulls happening right nowWait a few seconds (busy) or a couple of minutes (refresh) and retry. The Retry-After header tells you exactly how long.
500Server-side problemTell the admin. Include the time it happened.

A few things to know