Resolve the authenticated tenant
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.
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.
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
Response Body
application/json
application/json
curl -X GET "https://example.com/whoami"{ "tenantId": "f97df110-f4de-492e-8849-4a6af68026b0", "role": "admin"}{ "error": { "code": "unauthorized", "message": "Missing or invalid API key." }}Create an upgrade Checkout session POST
Returns a freshly-created Stripe Checkout URL to upgrade the tenant off the Free plan (e.g. before adding a second project). The human pays in their own browser; the webhook upgrades the tenant. Admin-equivalent.
Create a diary entry POST
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.