Update an engagement
Needs a token with the write:engagements scope. Authentication
Try in Playground sends a real request to app.helvetly.com with a token you paste. It stays in this browser tab only (session storage) and goes to no one else.
Changes only the fields sent. Once the engagement has entries or an advance invoice, client_id, start_date, recurrence and interval are locked (409 engagement_locked), and end_date cannot be before the latest entry. Open and upcoming periods follow a changed quantity or price unless they are invoiced in advance or were set by hand. Safe to retry with the same body.
bearerAuthAuthorizationBearer <token>A personal API token, hvt_…, with scopes such as read:* or write:invoices
id*stringThe engagement's id.
application/json- body
client_id?stringRequired on create. Cannot change once the engagement has entries or an advance invoice.
title?stringRequired on create.
length <= 200description?|length <= 2000product_id?|A catalogue item of the workspace.
unit?|"hour""day""piece""month""km""flat"nullquantity?|The committed quantity per period, above 0 up to 1000000, up to 3 decimals. Required on create.
billing?stringDefault advance.
"advance""arrears"price_basis?stringWhether unit_price includes VAT. Default net.
"net""gross"unit_price?|Per unit, 0 to 100000000.00, 2 decimals. Required on create.
overage_unit_price?||Price per unit above the commitment; null uses unit_price.
currency?stringISO 4217. Default: the client's, else the workspace's.
vat_category?stringS (standard) needs vat_rate above 0; the others need 0.
"S""Z""E""AE""K""G""O"vat_rate?|Percent, e.g. 8.1. Default: the workspace's rate when VAT-registered.
start_date?stringDefault today. Cannot change once the engagement has entries or an advance invoice.
daterecurrence?stringnone is a one-off engagement and needs end_date.
"none""weekly""monthly""quarterly""yearly"interval?integerRepeat every n recurrences. Default 1.
1 <= value <= 12end_date?|Last day; required when recurrence is none.
datereference?|The client's reference or order number.
length <= 100document_id?|A Document of the workspace, e.g. the signed agreement.
rollover?booleanCarry unused quantity into the next period. Needs advance billing and a recurring schedule.
auto_invoice?booleanLet the hourly job draft invoices automatically.
invoice_detail?stringDefault summary.
"summary""per_entry"OK
application/json- response
data*curl -X PATCH 'https://app.helvetly.com/api/v1/engagements/string' \ -H 'Content-Type: application/json' \ -d '{ "client_id": "cli_01HZ", "title": "Support retainer", "unit": "hour", "quantity": "10", "billing": "advance", "unit_price": "150.00", "currency": "CHF", "vat_category": "S", "vat_rate": "8.1", "start_date": "2026-01-01", "recurrence": "monthly", "interval": 1}'{ "data": { "id": "string", "number": 0, "client": { "id": "string", "number": 0, "name": "string" }, "title": "string", "description": "string", "product_id": "string", "unit": "string", "quantity": "string", "billing": "string", "price_basis": "string", "unit_price": "1234.50", "overage_unit_price": "1234.50", "currency": "string", "vat_category": "string", "vat_rate": "string", "start_date": "2019-08-24", "recurrence": "string", "interval": 0, "end_date": "2019-08-24", "reference": "string", "document_id": "string", "cancelled_on": "2019-08-24", "rollover": true, "auto_invoice": true, "invoice_detail": "string", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z", "unit_price_net": "1234.50", "unit_price_gross": "1234.50", "status": "scheduled", "current_period": { "id": "string", "index": 0, "starts_on": "2019-08-24", "ends_on": "2019-08-24", "natural_ends_on": "2019-08-24", "full_quantity": "string", "quantity_manual": true, "quantity": "string", "unit_price": "1234.50", "overage_unit_price": "1234.50", "used": "string", "invoiced_quantity": "string", "advance_invoice": { "id": "string", "number": "string", "status": "string", "kind": "string" }, "unearned": "string", "carried_in": "string", "available": "string", "remaining": "string", "overage": "string", "expected": "string", "state": "string", "uninvoiced_quantity": "string" }, "attention": [ "under_pace" ] }}