Skip to content

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

Activities

Activities represent interactions with contacts — phone calls, emails, and meetings. Each activity type has its own metadata schema.

FieldTypeDescription
iduuidUnique identifier
account_iduuidAccount this activity belongs to
created_byuuid | nullUser who created the activity
activity_typestringType: call, email, meeting
contact_iduuid | nullAssociated contact
company_iduuid | nullAssociated company
project_iduuid | nullAssociated project
occurred_atdatetimeWhen the activity happened
metadataobjectType-specific fields (see below)
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp
created_by_namestringCreator name (read-only, computed)
contact_namestringContact name (read-only, computed)
company_namestringCompany name (read-only, computed)
project_namestringProject name (read-only, computed)
FieldTypeOptionsDescription
directionenuminbound, outboundCall direction
outcomeenumconnected, voicemail, no_answer, busyCall result
duration_secondsintegerCall duration
notesstringCall notes
FieldTypeOptionsDescription
directionenumsent, receivedEmail direction
subjectstringEmail subject line
bodystringEmail body text
sourceenummanual, bccHow the email was logged
FieldTypeOptionsDescription
subjectstringMeeting subject
locationstringMeeting location
duration_minutesintegerDuration in minutes
outcomeenumcompleted, cancelled, no_showMeeting result
notesstringMeeting notes

Endpoint: activities-list

FieldTypeRequiredDescription
contact_iduuidNoFilter by contact
company_iduuidNoFilter by company
project_iduuidNoFilter by project
typesstring[]NoFilter by activity types
cursorstringNoPagination cursor
limitintegerNoResults per page
Terminal window
curl -X POST https://api.driftwoodapp.com/api/activities-list \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"contact_id": "550e8400-e29b-41d4-a716-446655440000",
"types": ["call", "meeting"],
"limit": 20
}'

Response:

{
"ok": true,
"result": {
"items": [
{
"id": "770e8400-...",
"activity_type": "call",
"contact_id": "550e8400-...",
"contact_name": "Jane Smith",
"occurred_at": "2025-06-15T14:30:00Z",
"metadata": {
"direction": "outbound",
"outcome": "connected",
"duration_seconds": 420,
"notes": "Discussed Q3 proposal"
},
"created_by_name": "Alex Johnson",
"created_at": "2025-06-15T14:35:00Z"
}
],
"next_cursor": ""
}
}

Endpoint: activities-get

FieldTypeRequiredDescription
iduuidYesActivity ID

Endpoint: activities-create

FieldTypeRequiredDescription
activity_typestringYescall, email, or meeting
contact_iduuidNo*Associated contact
company_iduuidNo*Associated company
project_iduuidNo*Associated project
occurred_atdatetimeNoWhen it happened (defaults to now)
metadataobjectNoType-specific fields

*At least one of contact_id, company_id, or project_id is required.

Terminal window
curl -X POST https://api.driftwoodapp.com/api/activities-create \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"activity_type": "call",
"contact_id": "550e8400-e29b-41d4-a716-446655440000",
"occurred_at": "2025-06-15T14:30:00Z",
"metadata": {
"direction": "outbound",
"outcome": "connected",
"duration_seconds": 420,
"notes": "Discussed Q3 proposal"
}
}'

Endpoint: activities-update

FieldTypeRequiredDescription
iduuidYesActivity ID
occurred_atdatetimeNoUpdate timestamp
metadataobjectNoUpdate metadata fields

Endpoint: activities-delete

FieldTypeRequiredDescription
iduuidYesActivity ID

Retrieve the metadata schema for each activity type. Useful for building dynamic forms.

Endpoint: activity-schemas-list

Terminal window
curl -X POST https://api.driftwoodapp.com/api/activity-schemas-list \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'

Response:

{
"ok": true,
"result": {
"schemas": [
{
"type": "call",
"label": "Call",
"fields": [
{
"name": "direction",
"type": "enum",
"label": "Direction",
"required": false,
"options": ["inbound", "outbound"]
},
{
"name": "outcome",
"type": "enum",
"label": "Outcome",
"required": false,
"options": ["connected", "voicemail", "no_answer", "busy"]
},
{
"name": "duration_seconds",
"type": "integer",
"label": "Duration (seconds)",
"required": false
},
{
"name": "notes",
"type": "string",
"label": "Notes",
"required": false
}
]
}
]
}
}
CodeDescription
activities.invalid_requestMalformed request body
activities.invalid_idInvalid UUID format
activities.invalid_typeType must be: call, email, meeting
activities.entity_requiredMust provide contact_id, company_id, or project_id
activities.invalid_metadataMetadata doesn’t match schema for the activity type
activities.not_foundActivity does not exist
activities.internalServer error