List deals
/dealsLists 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
- 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: created_at, updated_at or name. Prefix a field with
-for descending. Defaults to-created_at. The deal id is always the final tiebreak.Comma-separated optional expansions:
custom_status,engagement_counts,bookmarked,team_members,key_contacts.bookmarkedadds whether the acting user has bookmarked the deal. The last two return up to 100 records each.Deals whose name, sponsor or external id contains this text, ignoring case.
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.Only deals with this custom status label, which is where a deal being "Closed" lives. Takes the label, ignoring case, or the status uuid;
nonematches deals with no label. Takes[in]and[not_in]with a comma-separated list. A value matching no configured status returns an empty page.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.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.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.Only deals whose
type_details.sectoris 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.Only deals whose
type_details.subSectoris 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.- One of:
truereturns only the deals the token's acting user has bookmarked,falseonly the deals they have not. Combine it withfields=idto read just the bookmarked ids. Set a bookmark withPUT /deals/{deal_id}/bookmark.true,false The deal with this external id.
Only deals created in a range, written
filter[created_at][gte]=2026-10-01. Takes gt, gte, lt and lte.Only deals last changed in a range, written
filter[updated_at][gte]=2026-10-01. Takes gt, gte, lt and lte.
Responses
{
"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"
}
}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/deals\
-H "Authorization: Bearer $HELM_API_KEY"\
-H "Content-Type: application/json"