/clients/{clientId}/activitiesCreate a manual activityCreates a manual activity for the client. The server always forces source to manual — activities created through the API are manual by definition (the source/operation matrix only permits creating manual activities). A request body that sets source to anything other than manual is rejected with 400 invalid_argument rather than silently overridden.
participants is a flat list of email addresses, stored email-only (no display name, no automatic linking to existing contacts). occurredAt defaults to the current time when omitted.
Parameters
clientIdstring · uuidpathrequiredClient UUID.
Request body
requiredapplication/json
Request body for creating a manual activity. The server forces `source` to `manual`; when present it must equal `manual`.
contentstringFree-text body, stored as the activity's single message. Optional.
occurredAtstring · date-timeWhen the activity occurred. Defaults to now when omitted.
participantsarray of string · emailEmail-only participant list (no display names, no contact linking).
Show child attributes
sourcestringOptional; must be `manual` if provided. The server forces `manual` regardless.
subjectnull | stringtypestringrequired{
"content": "string",
"occurredAt": "2026-06-09T00:00:00Z",
"participants": [
"user@example.com"
],
"source": "manual",
"subject": "string",
"type": "chat"
}Responses
Headers
X-RateLimit-LimitThe request cap for the tighter of the per-organization / per-endpoint windows that applied to this request.
X-RateLimit-RemainingRequests remaining in the current window.
X-RateLimit-ResetUnix timestamp (seconds) when the current window resets.
allOf · 2 options
datavaluerequiredThe response payload — shape depends on the endpoint.
metaobjectrequiredPagination metadata — populated on list endpoints, empty on single-resource endpoints.
Show child attributes
cursornull | stringOpaque cursor to pass to the next request.
hasMoreboolean | nullTrue when further pages of results are available.
dataobjectA communication event linked to a client. Projected from Salfio's Conversation + messages + conversation_clients model family. The `clientId` is the "primary" client derived from the junction table — a conversation linked to multiple clients is surfaced once per linked client (from the list endpoints of each). `content` is the full concatenated body of all messages on the conversation, joined by `\n\n---\n\n` — single-resource GETs never truncate it. It is returned only on single-resource GETs; list endpoints omit it for response-size reasons. Webhook delivery payloads cap `content` at 10 KiB (with a `[content truncated at 10 KiB]` marker) — fetch the activity by ID when you need the full text. `immutable` is derived server-side: non-`manual` sources are always immutable on the v1 surface (per the spec source/operation matrix).
Show child attributes
archivedAtnull | string · date-timeclientIdstring · uuidrequiredcontentstringrequiredFull concatenated message bodies (single-resource GETs only; capped at 10 KiB in webhook deliveries).
createdAtstring · date-timerequiredidstring · uuidrequiredimmutablebooleanrequiredTrue when the activity's source prevents it from being edited or hard-deleted via the API.
occurredAtstring · date-timerequiredparticipantsarray of string · emailrequiredShow child attributes
sourcestringrequiredsubjectnull | stringtypestringrequiredupdatedAtstring · date-timerequired{
"data": {
"archivedAt": "2026-06-09T00:00:00Z",
"clientId": "00000000-0000-0000-0000-000000000000",
"content": "string",
"createdAt": "2026-06-09T00:00:00Z",
"id": "00000000-0000-0000-0000-000000000000",
"immutable": true,
"occurredAt": "2026-06-09T00:00:00Z",
"participants": [
"user@example.com"
],
"source": "fireflies",
"subject": "string",
"type": "chat",
"updatedAt": "2026-06-09T00:00:00Z"
},
"meta": {
"cursor": "string",
"hasMore": true
}
}errorobjectrequiredShow child attributes
codestringrequiredMachine-readable error category.
detailsobjectOptional per-code context (field names, retry windows, …).
messagestringrequiredHuman-readable description — intended for operator logs, not end-user display.
{
"error": {
"code": "invalid_argument",
"message": "limit must be an integer between 1 and 100"
}
}errorobjectrequiredShow child attributes
codestringrequiredMachine-readable error category.
detailsobjectOptional per-code context (field names, retry windows, …).
messagestringrequiredHuman-readable description — intended for operator logs, not end-user display.
{
"error": {
"code": "unauthorized",
"message": "Authentication required"
}
}errorobjectrequiredShow child attributes
codestringrequiredMachine-readable error category.
detailsobjectOptional per-code context (field names, retry windows, …).
messagestringrequiredHuman-readable description — intended for operator logs, not end-user display.
{
"error": {
"code": "not_found",
"message": "client not found"
}
}Headers
Retry-AfterSeconds the client should wait before retrying.
errorobjectrequiredShow child attributes
codestringrequiredMachine-readable error category.
detailsobjectOptional per-code context (field names, retry windows, …).
messagestringrequiredHuman-readable description — intended for operator logs, not end-user display.
{
"error": {
"code": "rate_limited",
"details": {
"retry_after_seconds": 30
},
"message": "Rate limit exceeded"
}
}