Skip to Content
HelvetlyDocs
API referenceEngagements

Log work on 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.

POST
/api/v1/engagements/{id}/entries

Adds an entry (quantity, date, note, who did it) and answers it with its recomputed period. The date picks the period; 422 validation_failed when it is outside every period, in the future or outside the engagement. Not idempotent: a retry logs the work twice.

Authorization

bearerAuth
headerAuthorizationBearer <token>

A personal API token, hvt_…, with scopes such as read:* or write:invoices

Path Parameters

id*string

The engagement's id.

Request Body

application/json
  1. body
date?string

Default today. Not before the engagement starts, not in the future, not after it ends.

Formatdate
quantity?|

Above 0 up to 10000, up to 3 decimals. Required on create.

note?|
Lengthlength <= 500
performed_by?|

A member's user id. Default on create: the caller.

Response Body

Created

application/json
  1. response
data*

The saved entry and its period, recomputed.

Example Request
curl -X POST 'https://app.helvetly.com/api/v1/engagements/string/entries' \  -H 'Content-Type: application/json' \  -d '{  "date": "2026-03-14",  "quantity": "1.5",  "note": "Server migration"}'
Example Response
{  "data": {    "entry": {      "id": "string",      "period_id": "string",      "date": "2019-08-24",      "quantity": "string",      "note": "string",      "performed_by": {        "id": "string",        "name": "string"      },      "invoice": {        "id": "string",        "number": "string",        "status": "string",        "kind": "string"      },      "created_at": "2019-08-24T14:15:22Z",      "created_by": {        "id": "string",        "name": "string"      }    },    "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",      "invoices": [        {          "id": "string",          "number": "string",          "status": "string",          "kind": "string"        }      ]    }  }}