Revenue
Revenue, fees and profit report (summary plus time series).
Get a revenue report#
Revenue summary and time series for a period. Aggregates orders with status paid, shipped, delivered, refunded or partially_refunded created in [since, until] (max 10,000 orders). Uses booked Stripe fees from settlements where available (test orders: 0), otherwise an estimate. Requires the plan feature reports.
Query parameters
Start (created_at >=). Not validated. Default: now - 30 days.
End (created_at <=). Not validated. Default: now.
Bucket size (case-insensitive; invalid values fall back to day). Buckets are UTC; week buckets are keyed by the Monday date (YYYY-MM-DD), month buckets by YYYY-MM. Default: day.
Include test orders only when exactly "true". Default: false.
Only for OAuth tokens that cover several shops: the shop to query. Must be one of the token's shops (else 403 forbidden). Required when the token covers more than one shop (else 400 shop_required). Optional for API keys (a key belongs to exactly one shop; any other value returns 403).
Response fields
Effective start.
Effective end.
Effective granularity.
Whether test orders were included.
Totals: currency, country, tax_rate_pct, orders_count, gross_cents, net_cents, tax_cents, transaction_fee_cents, platform_fee_cents, refunded_cents, refund_count, profit_cents, net_profit_cents. currency/country/tax_rate_pct come from the shop.
Sorted ascending by bucket: {bucket, ...same fields as summary}. Each bucket repeats currency, country and tax_rate_pct.
Errors
GET /orders/:id/journey (feature browser_tracking) and GET /revenue (feature reports). Checked BEFORE the scope check.
Any endpoint. Response carries header WWW-Authenticate: Bearer resource_metadata="<origin>/.well-known/oauth-protected-resource".
Scope check per endpoint (and per body field on PATCH /orders/:id).
shop_id query parameter names a shop outside the credential's reach.
Multi-shop OAuth token without shop_id.
Any endpoint when the resolved shop has active=false.
Any endpoint. Header Retry-After (seconds until the next minute bucket).
Any endpoint.
curl "https://api.ecomone.shop/api/public/v1/revenue" \
-H "X-Api-Key: $ECOMONE_API_KEY" \
-H "X-Api-Secret: $ECOMONE_API_SECRET"const res = await fetch("https://api.ecomone.shop/api/public/v1/revenue", {
method: "GET",
headers: {
"X-Api-Key": process.env.ECOMONE_API_KEY,
"X-Api-Secret": process.env.ECOMONE_API_SECRET,
},
});
if (!res.ok) throw new Error((await res.json()).message);
const { data } = await res.json();import os, requests
res = requests.get(
"https://api.ecomone.shop/api/public/v1/revenue",
headers={
"X-Api-Key": os.environ["ECOMONE_API_KEY"],
"X-Api-Secret": os.environ["ECOMONE_API_SECRET"],
},
timeout=30,
)
res.raise_for_status()
data = res.json()["data"]{
"data": {
"since": "2026-07-30T00:00:00.000Z",
"until": "2026-08-30T00:00:00.000Z",
"granularity": "day",
"include_test": false,
"summary": {
"currency": "CHF",
"country": "CH",
"tax_rate_pct": 8.1,
"orders_count": 184,
"gross_cents": 1648900,
"net_cents": 1525347,
"tax_cents": 123553,
"transaction_fee_cents": 41220,
"platform_fee_cents": 54100,
"refunded_cents": 24900,
"refund_count": 3,
"profit_cents": 1430027,
"net_profit_cents": 1405127
},
"buckets": [
{
"bucket": "2026-08-29",
"currency": "CHF",
"country": "CH",
"tax_rate_pct": 8.1,
"orders_count": 9,
"gross_cents": 78900,
"net_cents": 72988,
"tax_cents": 5912,
"transaction_fee_cents": 2310,
"platform_fee_cents": 2590,
"refunded_cents": 0,
"refund_count": 0,
"profit_cents": 68088,
"net_profit_cents": 68088
}
]
}
}