Datasets and fields
A dataset is a queryable table you name in the FROM clause of a SoloQL
query. Each dataset exposes a set of fields — some are dimensions you group
and filter by, and some are metrics you measure.
The datasets
Name one of these after FROM:
| Dataset | What it covers |
|---|---|
| sales | Consolidated sales — total, net, and gross sales, orders, customers, discounts, returns, taxes, shipping, and net quantity, sliced by product, channel, customer, or country. |
| orders | Order-level metrics — order count, total price, average order value, and financial and fulfillment status. |
| customers | Customer metrics — customer count, total spent, and average spent. |
| products | Product-level performance across your catalog. |
| inventory | Stock levels across locations and stores. |
| sales_taxes | Tax collected, broken out for reporting. |
| payouts | Shopify Payments payouts — amounts, fees, and dates. |
| discounts | Discount usage and performance. |
| gift_cards | Issued gift cards — balances and status. |
| draft_orders | Draft and invoiced orders. |
| abandoned_checkouts | Carts that never became orders. |
Every dataset carries the store dimension for multi-store consolidation — see
Querying with SoloQL.
Field types and roles
Each field has a type and a role.
Types describe the shape of the value:
string— text (a product title, a status).number— a plain count or quantity.money— a currency amount (auto-converted for cross-store totals).date— a date or timestamp.boolean— true or false.percent— a proportion.
Roles describe how a field is used in a query:
dimension— something you group or filter by (GROUP BY,WHERE).metric— something you measure inSHOW.
Metrics also carry a default_aggregation — one of sum, avg, min, max,
count, or count_distinct — that says how the field rolls up. Dimensions have
a null default aggregation.
Browse every field, per dataset
Each dataset has its own reference page listing every field with its type, role, and — where records are available — whether it can be fetched on a record: Orders, Customers, Products, Sales, Inventory, Sales taxes, Payouts, Discounts, Gift cards, Draft orders, and Abandoned checkouts. They are generated from the same catalog the API serves, so they cannot drift from it.
Discover every field with GET /v1/datasets
GET /v1/datasets is a self-describing catalog — the source of truth for
what you can query. Rather than hard-coding field names, call it and read back
every dataset with its fields:
curl https://api.ecomsolo.com/v1/datasets \
-H "Authorization: Bearer esk_live_..."
The response is an array of datasets, each listing its fields:
[
{
"name": "sales",
"title": "Sales",
"description": "Consolidated sales across all your stores.",
"fields": [
{
"name": "total_sales",
"title": "Total sales",
"description": "Gross sales minus discounts and returns, plus taxes and shipping.",
"type": "money",
"role": "metric",
"default_aggregation": "sum"
},
{
"name": "store",
"title": "Store",
"description": "The connected store the row belongs to.",
"type": "string",
"role": "dimension",
"default_aggregation": null
}
]
}
]
tip
Because the catalog is self-describing, an integration can list datasets and fields at runtime and adapt automatically as new fields are added — no schema to maintain in your own code.