Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Projects

Projects represent work engagements in Driftwood — deals, client projects, partnerships, or any tracked initiative. Projects progress through stages, can be assigned to team members, linked to companies, and have contacts associated with specific roles.

FieldTypeDescription
iduuidUnique identifier
account_iduuidAccount this project belongs to
created_byuuidUser who created the project
namestringProject name
descriptionstringDescription
stagestringCurrent stage: proposal, active, review, complete, archived
company_iduuid | nullAssociated company ID
company_namestringCompany name (read-only, computed)
assigned_touuid | nullAssigned user ID
assigned_namestringAssigned user name (read-only, computed)
valueinteger | nullProject value in cents
start_datestring | nullStart date (YYYY-MM-DD)
end_datestring | nullEnd date (YYYY-MM-DD)
is_retainerbooleanWhether this is a recurring retainer
renewal_datestring | nullNext renewal date (YYYY-MM-DD)
notesstringFree-text notes
tagsstring[]Array of tag strings
custom_fieldsobjectCustom field values
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp
StageDescription
proposalInitial stage — project is being proposed
activeWork is in progress
reviewUnder review
completeWork is finished
archivedNo longer active

Endpoint: projects-list

FieldTypeRequiredDescription
searchstringNoSearch by name
tagsstring[]NoFilter by tags
stagestringNoFilter by stage
company_iduuidNoFilter by company
assigned_touuidNoFilter by assigned user
cursorstringNoPagination cursor
limitintegerNoResults per page
Terminal window
curl -X POST https://api.driftwoodapp.com/api/projects-list \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"stage": "active", "limit": 10}'

Endpoint: projects-get

FieldTypeRequiredDescription
iduuidYesProject ID

Endpoint: projects-create

FieldTypeRequiredDescription
namestringYesProject name
descriptionstringNoDescription
stagestringNoStage (default: proposal)
company_iduuidNoAssociated company
assigned_touuidNoAssigned user
valueintegerNoValue in cents
start_datestringNoStart date (YYYY-MM-DD)
end_datestringNoEnd date (YYYY-MM-DD)
is_retainerbooleanNoRetainer flag
renewal_datestringNoRenewal date (YYYY-MM-DD)
notesstringNoNotes
tagsstring[]NoTags
custom_fieldsobjectNoCustom field values
Terminal window
curl -X POST https://api.driftwoodapp.com/api/projects-create \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Website Redesign",
"company_id": "660e8400-e29b-41d4-a716-446655440001",
"stage": "proposal",
"value": 2500000,
"start_date": "2025-07-01",
"tags": ["design"]
}'

Endpoint: projects-update — partial updates supported.

FieldTypeRequiredDescription
iduuidYesProject ID
All other fields from createNoFields to update

Endpoint: projects-delete

FieldTypeRequiredDescription
iduuidYesProject ID

Associate contacts with projects and assign them roles (e.g., “Stakeholder”, “Decision Maker”).

Endpoint: projects-contacts-list

FieldTypeRequiredDescription
project_iduuidYesProject ID

Response:

{
"ok": true,
"result": {
"contacts": [
{
"project_id": "...",
"contact_id": "...",
"role": "Decision Maker",
"contact_name": "Jane Smith",
"contact_email": "jane@example.com",
"created_at": "2025-06-01T12:00:00Z"
}
]
}
}

Endpoint: projects-contacts-add

FieldTypeRequiredDescription
project_iduuidYesProject ID
contact_iduuidYesContact ID
rolestringNoRole description

Endpoint: projects-contacts-remove

FieldTypeRequiredDescription
project_iduuidYesProject ID
contact_iduuidYesContact ID
CodeDescription
projects.invalid_requestMalformed request body
projects.invalid_idInvalid UUID format
projects.not_foundProject does not exist
projects.name_requiredName is required for creation
projects.invalid_stageStage must be: proposal, active, review, complete, archived
projects.invalid_company_idReferenced company does not exist
projects.invalid_assigned_toReferenced user does not exist
projects.invalid_custom_fieldsCustom field values don’t match definitions
projects.internalServer error