Analytics

Get a deal metric

GET/analytics/deals/{id}

Returns one named count or breakdown over your deals, as a value or a series; each slug and its item shape is described under id.

Use GET /analytics/deals/{deal_id}/overview for one deal, or GET /analytics/reports/deals for a row per deal. Counts the deals GET /deals lists for you; figures come from the analytics store, which trails live data until synced. Each slug takes one range filter, named under id; another is 422. An unknown metric is a 404. It only reads: nothing is sent or written.

Path parameters

  • idstringRequired#

    What to count. Each value is described under x-enum-descriptions.

    One of: status-counts, published-count, structure-counts, asset-class-counts, sector-counts, total-funding-sought, draft, awaiting-approval, live-count, closed-count, published-since, funded-count, uptake, unseen-count, enquiries, average-days-to-complete, status-series, uptake-series, capital-raising-series, launched-vs-logins

Query parameters

  • filter[created_at]string (date-time)#

    Only deals created in a range, written filter[created_at][gte]=2026-10-01. Takes gt, gte, lt and lte. With none, all deals count. Taken by the slugs whose range is created_at; any other slug answers 422.

  • filter[published_at]string (date-time)#

    Only deals published in a range, written filter[published_at][gte]=2026-10-01. Takes gt, gte, lt and lte. Taken only by published-since.

  • filter[occurred_at]string (date-time)#

    Only events in a range, written filter[occurred_at][gte]=2026-10-01. Takes gt, gte, lt and lte. Taken by enquiries and the three time series, where it sets the window of buckets; with none, a series covers the last 12 months, 12 weeks or 30 days ending now.

  • filter[status]string#

    Only deals in this status: draft, awaiting_approval, ready_to_publish, published, retired, in_progress or rejected. Takes one status. Taken only by structure-counts, asset-class-counts and sector-counts, which also base their percentages on it; any other slug answers 422.

    One of: draft, awaiting_approval, ready_to_publish, published, retired, in_progress, rejected
  • granularitystring#

    The bucket size of a time series: day, week (starting Monday) or month. Defaults to month. Taken only by uptake-series, capital-raising-series and launched-vs-logins; any other slug answers 422. A window of more than 366 buckets is 422 validation_failed on filter.occurred_at.

    One of: day, week, monthDefault: "month"

Responses

200

The metric.

AnalyticsMetric
{
  "data": {
    "metric": "status-counts",
    "category": "deals",
    "filter": {
      "created_at": {
        "gte": "2026-01-01T00:00:00Z"
      }
    },
    "series": [
      {
        "key": "draft",
        "value": 9
      },
      {
        "key": "awaiting_approval",
        "value": 3
      },
      {
        "key": "ready_to_publish",
        "value": 0
      },
      {
        "key": "published",
        "value": 24
      },
      {
        "key": "retired",
        "value": 15
      },
      {
        "key": "in_progress",
        "value": 2
      },
      {
        "key": "rejected",
        "value": 0
      }
    ]
  }
}
401

Authentication failed. error.code is one of invalid_token, expired, revoked.

Error
403

Authorization failed. error.code is one of org_disabled, ip_blocked, missing_scope, scope_disabled, user_disabled.

Error
404

Resource not found (error.code = not_found).

Error
422

The request can't be processed (HTTP 422): validation_failed with one ErrorDetail per problem, or a code documented on the operation.

Error
429

Rate limit exceeded (error.code = rate_limited).

Error

Examples

curl https://your-org-domain/kong/core/api/v2/analytics/deals/{id}\
  -H "Authorization: Bearer $HELM_API_KEY"\
  -H "Content-Type: application/json"