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.
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.
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." } }}Resolve the authenticated tenant GET
Echoes the tenant and role the presented API key resolves to. Useful as an "is my key valid?" check. Returns `401` if the key is missing/invalid.
List diary entries GET
Lists the tenant's diary entries, most-recent-first, paginated. Filters map onto the domain browse: `project` and `user` are repeatable.