Skip to main content
POST
Log Deal Activity
Uses the shared ActivityBody shape also used on Accounts and Activities. The meeting-flavoured fields are persisted for every activity type — nothing branches on type. attendees, transcript, recording_url, location and provider collapse into the activities.metadata JSONB column; due_at and duration_minutes are not metadata — they go into their own activities.due_at / activities.duration_minutes columns.
A transcript sent here lands in activities.metadata.transcript, which nothing in the backend reads. Generate Call Intelligence works off the transcript_text column (falling back to the activity body), and List Meetings derives has_transcript from that same column — so a transcript supplied through this endpoint is invisible to both. Put the text in body if you need Call Intelligence to see it.

Auth

Requires a CRM manage scope and an active organization on the token. Any *:manage scope qualifies — in practice contacts:manage, deals:manage, companies:manage, or activities:manage.

Response

201 with {"id": "<activity id>"}. Also records a track_activity_logged analytics event.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

deal_id
string
required

The deal's id.

Body

application/json
type
string
default:note

Activity type: note, call, meeting, email, or task.

summary
string | null

Short headline for the activity; stored as the subject column.

body
string | null

Free-text body/notes content.

direction
string | null

Direction for calls/emails, e.g. inbound or outbound.

contact_id
string | null

Contact this activity is associated with.

due_at
string | null

ISO 8601 scheduled time. Persisted for any activity type, not just meetings, and it drives the generated effective_time column (COALESCE(due_at, created_at)) that the activity feed sorts by and that exclude_future filters on.

duration_minutes
integer | null

Duration in minutes. Persisted for any activity type, not just meetings.

attendees
MeetingAttendee · object[] | null

Attendee list, stored in metadata. Persisted for any activity type, not just meetings.

transcript
string | null

Transcript text, stored in metadata. Persisted for any activity type, not just meetings.

recording_url
string | null

Absolute http(s) URL to a recording, stored in metadata. Persisted for any activity type, not just meetings.

location
string | null

Location or video-call link, stored in metadata. Persisted for any activity type, not just meetings.

provider
string | null

Source provider, e.g. gcal, zoom, teams, or manual, stored in metadata. Persisted for any activity type, not just meetings.

Response

Successful Response