Attach standalone photos to a project
Register one or more **standalone** photos against the project (no diary entry). The `storagePaths` come from `.../photos/upload-url` after PUTting the bytes out of band. Any crew member assigned to the active project may upload (an Admin/API key passes implicitly). Blocked on read-only/archived projects.
Register one or more standalone photos against the project (no diary
entry). The storagePaths come from .../photos/upload-url after PUTting
the bytes out of band. Any crew member assigned to the active project may
upload (an Admin/API key passes implicitly). Blocked on
read-only/archived projects.
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
Path Parameters
Resource id.
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/projects/497f6eca-6276-4993-bfeb-53cbbbba6f08/photos" \ -H "Content-Type: application/json" \ -d '{ "storagePaths": [ "string" ] }'{ "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "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." } }}Edit a project's induction content PATCH
Updates the induction body (markdown) and/or the acknowledgement (intro + numbered points). Edits apply to future visitors only — past registrations keep their snapshot. Admin or the project's Site Manager.
List a project's photos GET
List this project's photos — both diary photos and standalone uploads — newest first. Visibility is RLS-enforced (an Admin/API key sees the tenant; a Site Manager their projects). Each item carries its `storagePath`.