Assign a crew member to a project
Adds a Site Crew member to the project's roster (Admin or the project's Site Manager). Idempotent — re-adding is a no-op. Admins are on every project already and can't be rostered.
Adds a Site Crew member to the project's roster (Admin or the project's Site Manager). Idempotent — re-adding is a no-op. Admins are on every project already and can't be rostered.
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/crew" \ -H "Content-Type: application/json" \ -d '{ "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b" }'{ "projectId": "5a8591dd-4039-49df-9202-96385ba3eff8", "userId": "2c4a230c-5085-4924-a3e1-25fb4fc5965b", "assigned": true}{ "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.
Create a project POST
Create a new job site. On the Free plan, exceeding the project cap returns `403` (`project_cap`) with an upgrade Checkout link.