Diary entries

Create a diary entry

Logs a daily site-diary entry on behalf of a crew member. The key acts as a tenant Admin, so the body names the crew member (`userId`) the entry is for; the entry is attributed to them and they must be an active tenant member assigned to the project. `entryDate` may not be in the future, and `hours` are 0–14 in 0.25h steps. To attach photos, first upload each via `POST /projects/{id}/diary-photos/upload-url` and pass the returned `storagePath`(s) in `photoPaths`. Editing/deleting entries stays in the app.

POST
/diary-entries

Logs a daily site-diary entry on behalf of a crew member. The key acts as a tenant Admin, so the body names the crew member (userId) the entry is for; the entry is attributed to them and they must be an active tenant member assigned to the project. entryDate may not be in the future, and hours are 0–14 in 0.25h steps. To attach photos, first upload each via POST /projects/{id}/diary-photos/upload-url and pass the returned storagePath(s) in photoPaths. Editing/deleting entries stays in the app.

Authorization

x-api-key<token>

The per-tenant API key, copied from Settings → API & integrations. Sent as the x-api-key request header. The key is tenant-scoped and acts with Admin-equivalent, tenant-wide access.

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/diary-entries" \  -H "Content-Type: application/json" \  -d '{    "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8",    "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b",    "entryDate": "2019-08-24",    "hours": 0  }'
{  "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",  "photoCount": 0}
{  "error": {    "code": "unauthorized",    "message": "Missing or invalid API key."  }}
{  "error": {    "code": "read_only",    "message": "Your subscription is inactive. This action is read-only."  }}
{  "error": {    "code": "not_found",    "message": "Not found."  }}
{  "error": {    "code": "validation",    "message": "One or more inputs are invalid.",    "fields": {      "fieldName": "A message explaining what's wrong with this field."    }  }}