List deal analytics
/analytics/reports/dealsLists one row per deal with its details and event counts: views, enquiries, commitments, amounts funded and committed, and whether it has closed. Rows are the deals GET /deals lists for you (an entrepreneur's organisation, else the tenant's), from the analytics store, which trails live data; an unsynced deal has no row. Amounts are in the deal's own currency, never converted. updated_at is when the store last changed the row, not the deal. Use GET /analytics/deals/{id} for one figure over all deals. It only reads.
Query parameters
- Default:
Page size (1–100). Defaults to 25; values are clamped to the range.
25 Opaque pagination cursor taken from a prior response's
meta.next_cursor.Comma-separated top-level fields to return.
idis always returned.Comma-separated fields to sort by: name, status, created_at, published_at, views, unique_viewers, engagements, commitments, committed_amount, funded_amount, funded_percent or last_event_at. Prefix a field with
-for descending. Defaults to-created_at. A deal never published, or with no events, sorts as the oldest.Deals whose name contains this text, ignoring case.
- One of:
Only deals in this stored status: draft, awaiting_approval, ready_to_publish, published, retired, in_progress or rejected. A published deal past its end date is still published here; use
filter[closed]for it. Takes[in]and[not_in]with a comma-separated list.draft,awaiting_approval,ready_to_publish,published,retired,in_progress,rejected Only deals the analytics store first saw in a range, written
filter[created_at][gte]=2026-10-01. Takes gt, gte, lt and lte.Only deals published in a range, written
filter[published_at][gte]=2026-10-01. Takes gt, gte, lt and lte. A deal never published has no published_at and never matches.truegives only closed deals, retired or published and past their end date;falsegives the rest.Only deals by how many views they have, written
filter[views][lte]=0for deals nobody viewed. Takes whole numbers with eq, gt, gte, lt, lte,[in]and[not_in].Only deals by funded_percent, written
filter[funded_percent][gte]=100for fully funded deals. Takes whole numbers with eq, gt, gte, lt, lte,[in]and[not_in]; the two-decimal figure is compared as it is.
Responses
{
"data": [
{
"id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
"name": "string",
"status": "draft",
"currency": "string",
"funding_sought": 1,
"created_at": "2026-06-12T10:00:00+00:00",
"updated_at": "2026-06-12T10:00:00+00:00",
"published_at": "2026-06-12T10:00:00+00:00",
"available_from": "2026-06-12T10:00:00+00:00",
"available_to": "2026-06-12T10:00:00+00:00",
"closed": true,
"views": 1,
"unique_viewers": 1,
"enquiries": 1,
"engagements": 1,
"commitments": 1,
"committed_amount": 1,
"funded_amount": 1,
"funded_percent": 1,
"last_event_at": "2026-06-12T10:00:00+00:00"
}
],
"meta": {
"limit": 1,
"next_cursor": "string",
"prev_cursor": "string"
}
}Authorization failed. error.code is one of org_disabled,
ip_blocked, missing_scope, scope_disabled, user_disabled.
The request can't be processed (HTTP 422): validation_failed with one ErrorDetail per
problem, or a code documented on the operation.
Examples
curl https://your-org-domain/kong/core/api/v2/analytics/reports/deals\
-H "Authorization: Bearer $HELM_API_KEY"\
-H "Content-Type: application/json"