`GET /api/marketplace/seller/ledger/board` — the #691 §E server-paginated seller-earnings board: filtered+paged ledger rows + total + (optional) facets + the whole-set KPI + the 30-day net series.
const url = 'https://example.com/api/marketplace/seller/ledger/board';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/marketplace/seller/ledger/boardParameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Exact entry_type facet (sale | refund | payout | runner_usage | …).
Exact status facet (available | held | pending | paid | …).
Free-text search over the ledger entry description.
Whitelisted sort key: created_at | entry_type | gross_minor | net_minor | platform_fee_minor | provider_fee_minor | status.
Sort direction asc | desc (default desc).
Recompute the seller-wide facets (default true).
Responses
Section titled “Responses”One page of the earnings board: the page rows, the filtered total, optional facets and the whole-set KPI – one entry per currency, ordered by currency.
object
The entry-type / status facet chips ({value,count}, largest-first).
object
One filter-chip value and its count. Counts are workspace-wide (independent of the active filter — the chip totals do not shift as the user filters).
object
How many rows fall in this bucket.
The bucket value (e.g. a scope, a role, a framework).
One filter-chip value and its count. Counts are workspace-wide (independent of the active filter — the chip totals do not shift as the user filters).
object
How many rows fall in this bucket.
The bucket value (e.g. a scope, a role, a framework).
A double-entry ledger row for seller earnings. Every sale, refund,
chargeback, adjustment, and payout is recorded as a separate entry.
net_minor = gross_minor - platform_fee_minor - provider_fee_minor.
object
One currency’s headline earnings KPI, over the seller’s WHOLE ledger (facet-invariant), plus that currency’s 30-day net series (oldest -> newest, zero-filled, always 30 values).
#1086 find 14 – the board used to carry ONE currency-blind KPI object plus one currency-blind series, which the FE labelled “EUR” by hand. The page now carries one of these per currency the seller actually holds, so every figure is denominated and nothing is summed across denominations.
object
Examplegenerated
{ "facets": { "entry_types": [ { "count": 1, "value": "example" } ], "statuses": [ { "count": 1, "value": "example" } ] }, "items": [ { "created_at": "2026-04-15T12:00:00Z", "currency": "example", "description": "example", "entry_type": "example", "fee_policy_snapshot": "example", "gross_minor": 1, "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "net_minor": 1, "payout_item_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "platform_fee_minor": 1, "provider_fee_minor": 1, "purchase_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "runner_usage_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "seller_profile_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "status": "example", "updated_at": "2026-04-15T12:00:00Z" } ], "kpi": [ { "available_minor": 1, "average_minor": 1, "count": 1, "currency": "example", "current_month_minor": 1, "held_minor": 1, "paid_minor": 1, "series": [ 1 ] } ], "total": 1}