Set or upload the deal sponsor image
/deals/{dealId}/sponsor-imageSets the deal's sponsor image and returns the deal, as GET /deals/{id} does. Send either attachment_id (a file already in the deal's assets folder, as JSON) or file (an image of up to 10 MB, as multipart form data), never both. An uploaded file is stored in the deal's assets folder. A deal with no assets folder returns 409, and an attachment_id that is not in that folder returns 422 exists. A published deal accepts it. It does not take dry_run: sending it returns 422. Emits deal.updated with sponsor_image_id in changed_fields and sends no email. DELETE /deals/{dealId}/sponsor-image undoes it, though an uploaded file stays in the folder. PATCH /deals/{id} with sponsor_image_id sets an existing file.
Path parameters
The deal's public uuid.
Headers
Makes a retry safe. Send a new UUID for each new request and reuse it only to retry that request; the first response is replayed for 24 hours.
Request body
application/json, required
A file in the deal's assets folder.
{
"attachment_id": "6f1c2e8a-1b2c-4d5e-8f90-1a2b3c4d5e6f"
}Responses
{
"data": {
"id": "f6071829-3a4b-4c5d-9e6f-8091a2b3c4d5",
"name": "Series B — Acme Robotics",
"status": "published",
"external": false,
"external_id": "CRM-2026-0042",
"summary": "Late-stage growth round in autonomous logistics.",
"description": "<p>Acme Robotics is raising a Series B.</p>",
"currency": "USD",
"min_investment": 25000,
"structure": "direct",
"sub_structure": "equity",
"type_details": {
"sector": "information_technology",
"growthStage": "growth"
},
"sponsor": "Acme Capital",
"show_funding_secured": true,
"allow_questions": false,
"request_further_docs": false,
"available_from": "2026-07-01T00:00:00+00:00",
"available_to": "2026-09-30T23:59:59+00:00",
"transaction_workflow_id": "1b2c3d4e-5f60-4a7b-8c9d-0e1f2a3b4c5d",
"investor_engagement_enabled": true,
"active_tranche_id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"drafted_at": "2026-06-15T10:30:00+00:00",
"approval_started_at": "2026-06-16T09:00:00+00:00",
"approved_at": "2026-06-17T09:00:00+00:00",
"published_at": "2026-06-18T09:00:00+00:00",
"rejected_at": null,
"retired_at": null,
"tabs": [
"deal",
"documents",
"video"
],
"image_id": "3c4d5e6f-7a8b-4c9d-8e0f-1a2b3c4d5e6f",
"sponsor_image_id": null,
"video_id": "76979871",
"custom_status_id": null,
"created_at": "2026-06-15T10:30:00+00:00",
"updated_at": "2026-06-18T09:00:00+00:00"
}
}Authorization failed. error.code is one of org_disabled,
ip_blocked, missing_scope, scope_disabled, user_disabled.
The request conflicts with existing state (error.code = conflict),
e.g. a compliance flow with the requested name already exists.
Request validation failed (HTTP 422). The body is either the Laravel
validation envelope (message + field-keyed errors) or the API error
envelope for domain rejections (e.g. form_type_not_supported,
folder_locked, parent_not_found, folder_not_empty).
Examples
curl -X POST https://your-org-domain/kong/core/api/v2/deals/{dealId}/sponsor-image\
-H "Authorization: Bearer $HELM_API_KEY"\
-H "Content-Type: application/json"\
-d '{
"attachment_id": "6f1c2e8a-1b2c-4d5e-8f90-1a2b3c4d5e6f"
}'