Update an existing engagement by ID
Partially updates an engagement. Only the fields included in the request body are modified — omitted fields are left unchanged. At least one field must be provided.
Updatable Fields:
- Core engagement data (client, fiscal year, partner/manager staff, contacts, start/end dates, billing contact, CC staff, name template)
- Engagement letter template and document template
- Additional clients assigned to the engagement (full replace when provided)
- Linked jobs/projects (full replace when provided)
Validation:
- The engagement must exist (404 if not found)
- The engagement must be in
DRAFTorUNDER_REVISIONstatus (400 otherwise) - All provided IDs (additional client IDs, job IDs, etc.) must reference valid records
- At least one field must be provided (400 if request body is empty)
Replace behavior: When additionalClientIds or jobIds is provided, it fully replaces the existing associations — it is not additive. When jobIds is provided without additionalClientIds, the existing additional clients are preserved.
Note: Nullable fields (e.g. secondaryContactId, endDate) cannot be explicitly cleared to null via this endpoint — omitting them leaves the existing value unchanged.
Real Example:
curl --location --request PATCH 'https://{{host}}/api/v1/engagements/12345' \
--header 'Authorization: bearer {{token}}' \
--header 'Content-Type: application/json' \
--data '{
"fiscalYear": 2025,
"partnerStaffId": 456,
"additionalClientIds": [789, 790]
}'Response Example:
{
"id": 12345
}ID of the partner staff member assigned to the engagement
ID of the manager staff member assigned to the engagement
ID of the secondary contact for this engagement
IDs of staff members to CC on engagement communications
[ 458, 459 ]
ID of the engagement letter template to use
Template string used to generate the engagement name
IDs of additional clients to associate with this engagement. When provided, replaces all existing additional client associations.
[ 790, 791 ]
- Mock serverhttps://api.doc.aiwyn.ai/_mock/bundle/api/v1/engagements/{engagementId}
- Sandboxhttps://demo.api.aiwyn.ai/api/v1/engagements/{engagementId}
- Staginghttps://staging.api.aiwyn.app/api/v1/engagements/{engagementId}
curl -i -X PATCH \
https://api.doc.aiwyn.ai/_mock/bundle/api/v1/engagements/12345 \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"clientId": 789,
"fiscalYear": 2025,
"partnerStaffId": 456,
"managerStaffId": 457,
"primaryContactId": 101,
"secondaryContactId": 102,
"startDate": "2025-01-01",
"endDate": "2025-12-31",
"billingContactId": 103,
"ccStaffIds": [
458,
459
],
"engagementLetterTemplateId": 55,
"documentTemplateId": 66,
"engagementNameTemplate": "{clientName} {fiscalYear} Audit",
"additionalClientIds": [
790,
791
],
"jobIds": [
101,
102
]
}'{ "id": 12345 }