Log an activity (call, note, meeting…)
POST/activities
Always send Idempotency-Key, keyed on your own call/event id. The CRM sits
behind a proxy that retries slow POSTs, so without it a call log that takes >30s to
acknowledge lands on the timeline twice. A retry carrying the same key returns the
ORIGINAL activity with 200 and meta.duplicate: true.
Call provenance rides in metadata. Five keys are accepted and round-tripped:
recording_url (http/https, ≤2048), external_id (≤200), external_source (≤64),
from_number, to_number (≤32) — plus color / priority. An invalid or
over-long value is dropped silently and the write still succeeds — an activity is
never rejected because of a metadata field. Read the response back if you need to
know what stuck.
403 with "code": "module_disabled" means the workspace's plan has no activities
module. Surface that as "call logging unavailable on this plan", not as a generic
failure — the rest of the integration keeps working.
Scope: write:activities. Rate limit: 120/min.
Request
Responses
- 200
- 201
- 403
A retry of an already-logged activity — the ORIGINAL row, with meta.duplicate: true.
One resource, JSON:API shaped.
module_disabled — the workspace's plan has no activities module.