Deals

List deals

GET/deals

Lists the organisation's deals, newest first. Deals carry two independent statuses. status is the fixed publishing lifecycle, from draft to retired. custom_status is the label the organisation shows investors, such as "Live", "Closed" or "Fully subscribed", so a deal being "Closed" is never expressed through status. Filter with filter[custom_status] for those, and read GET /deals/lookups (custom_statuses) for the labels the organisation defines. Add include=custom_status, include=engagement_counts, include=bookmarked, include=team_members or include=key_contacts to expand each deal. Narrow the list with filter[structure], filter[sub_structure], filter[sector], filter[sub_sector], filter[id] and filter[bookmarked]. Use GET /deals/{id} for one deal.

Query parameters

  • limitinteger#

    Page size (1–100). Defaults to 25; values are clamped to the range.

    Default: 25
  • cursorstring#

    Opaque pagination cursor taken from a prior response's meta.next_cursor.

  • fieldsstring#

    Comma-separated top-level fields to return. id is always returned.

  • sortstring#

    Comma-separated fields to sort by: created_at, updated_at or name. Prefix a field with - for descending. Defaults to -created_at. The deal id is always the final tiebreak.

  • includestring#

    Comma-separated optional expansions: custom_status, engagement_counts, bookmarked, team_members, key_contacts. bookmarked adds whether the acting user has bookmarked the deal. The last two return up to 100 records each.

  • filter[q]string#

    Deals whose name, sponsor or external id contains this text, ignoring case.

  • filter[status]string#

    Only deals in this lifecycle status: draft, awaiting_approval, ready_to_publish, published, retired, in_progress or rejected. Takes [in] and [not_in] with a comma-separated list.

  • filter[custom_status]string#

    Only deals with this custom status label, which is where a deal being "Closed" lives. Takes the label, ignoring case, or the status uuid; none matches deals with no label. Takes [in] and [not_in] with a comma-separated list. A value matching no configured status returns an empty page.

  • filter[id]string#

    Only the deals with these ids, each a uuid. Takes [in] and [not_in] with a comma-separated list of up to 100 ids. More than 100, or a value that is not a uuid, returns 422.

  • filter[structure]string#

    Only deals with this structure: direct, fund or tradeable. Takes [in] and [not_in] with a comma-separated list. GET /deals/lookups (structures) lists the values.

  • filter[sub_structure]string#

    Only deals with this sub-structure: debt, equity, hybrid, multi_asset, real_assets, real_estate or earthshot_solution. Takes [in] and [not_in] with a comma-separated list. GET /deals/lookups (sub_structures) lists the values.

  • filter[sector]string#

    Only deals whose type_details.sector is this sector: communication_services, consumer_discretionary, consumer_staples, energy, financials, healthcare, industrials, information_technology, materials, real_estate or utilities. Takes [in] and [not_in] with a comma-separated list; [not_in] also matches deals that have no sector. GET /deals/lookups (sectors) lists the values.

  • filter[sub_sector]string#

    Only deals whose type_details.subSector is this sub-sector. Takes [in] and [not_in] with a comma-separated list; [not_in] also matches deals that have no sub-sector. GET /deals/lookups (sub_sectors) lists the values; any other value returns 422.

  • filter[bookmarked]string#

    true returns only the deals the token's acting user has bookmarked, false only the deals they have not. Combine it with fields=id to read just the bookmarked ids. Set a bookmark with PUT /deals/{deal_id}/bookmark.

    One of: true, false
  • filter[external_id]string#

    The deal with this external id.

  • filter[created_at]string#

    Only deals created in a range, written filter[created_at][gte]=2026-10-01. Takes gt, gte, lt and lte.

  • filter[updated_at]string#

    Only deals last changed in a range, written filter[updated_at][gte]=2026-10-01. Takes gt, gte, lt and lte.

Responses

200

The deals.

Deal[]
{
  "data": [
    {
      "id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "name": "string",
      "status": "draft",
      "external": true,
      "external_id": "string",
      "summary": "string",
      "description": "string",
      "currency": "string",
      "min_investment": 1,
      "structure": "direct",
      "sub_structure": "debt",
      "type_details": {},
      "sponsor": "string",
      "show_funding_secured": true,
      "allow_questions": true,
      "request_further_docs": true,
      "available_from": "2026-06-12T10:00:00+00:00",
      "available_to": "2026-06-12T10:00:00+00:00",
      "transaction_workflow_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "investor_engagement_enabled": true,
      "active_tranche_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "drafted_at": "2026-06-12T10:00:00+00:00",
      "approval_started_at": "2026-06-12T10:00:00+00:00",
      "approved_at": "2026-06-12T10:00:00+00:00",
      "published_at": "2026-06-12T10:00:00+00:00",
      "rejected_at": "2026-06-12T10:00:00+00:00",
      "retired_at": "2026-06-12T10:00:00+00:00",
      "tabs": [
        "string"
      ],
      "image_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "sponsor_image_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "video_id": "string",
      "custom_status_id": "9a9d1c5e-4f2b-4c8e-9a7d-2f1e6b3c4d5a",
      "custom_status": {
        "status": {},
        "previous_status": {}
      },
      "engagement_counts": {
        "comments": 1,
        "questions": 1,
        "due_diligence": 1,
        "enquiries": 1,
        "feedback": 1
      },
      "bookmarked": true,
      "team_members": [
        {}
      ],
      "key_contacts": [
        {}
      ],
      "created_at": "2026-06-12T10:00:00+00:00",
      "updated_at": "2026-06-12T10:00:00+00:00"
    }
  ],
  "meta": {
    "limit": 1,
    "next_cursor": "string",
    "prev_cursor": "string"
  }
}
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
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/deals\
  -H "Authorization: Bearer $HELM_API_KEY"\
  -H "Content-Type: application/json"