---
title: "Log an activity against a contact, account or deal"
method: POST
path: "/crm/activities"
tags: ["CRM"]
---

# Log an activity against a contact, account or deal

`POST /crm/activities`

## Request

- Base URL: `https://developer.solofire.com/v1`
- URL: `https://developer.solofire.com/v1/crm/activities`
- Auth: HTTP bearer

Requires the `crm.write` scope.

## Query parameters

- `contact_id` string
- `account_id` string
- `deal_id` string
- `owner_user_id` string
- `type` string
- `limit` integer
- `cursor` string
- `updated_since` string

## Request body

- object
  - `type` string, required: note, call, email, meeting or sms.
  - `subject` string: Short title.
  - `body` string: The note or summary. Required for a note with no subject.
  - `occurred_at` string: RFC 3339. Defaults to now.
  - `ends_at` string: RFC 3339 end time (meetings).
  - `direction` string: inbound or outbound (calls, emails, sms).
  - `outcome` string: Calls: connected, left_voicemail, left_live_message, no_answer, busy, wrong_number. Meetings: scheduled, completed, rescheduled, no_show, canceled.
  - `duration_minutes` integer: 0 to 1440.
  - `location` string: Meeting location.
  - `attendees` unknown[]: Meeting attendees as {email, name}.
    - unknown
  - `contact_id` string: Contact this is about. At least one of contact_id, account_id, deal_id is required.
  - `account_id` string: Account this is about.
  - `deal_id` string: Deal this is about.
  - `owner_user_id` string: Owning member. Reps always own what they log.
  - `custom_fields` object: Arbitrary key/value metadata.

## Response `201`

Created

- object

## Other responses

- `401`: `unauthorized` No credential was presented. `invalid_token` The API key is unknown, revoked or malformed. `token_expired` The API key has passed its expiry.
- `403`: `insufficient_scope` The credential does not carry the required scope. `forbidden` The member this credential acts as lacks the permission. `feature_not_enabled` API access is not enabled for this company.
- `405`: `method_not_allowed` The path exists but not for this method.
- `413`: `payload_too_large` The request body is too large.
- `422`: `validation_failed` A parameter or body field is invalid.
- `429`: `rate_limited` The credential is over its request budget.
- `500`: `internal_error` Something went wrong on our side.

---

[API](https://skmtc.dev/solofire/apis/solofire-api.md) · [All operations](https://skmtc.dev/solofire/apis/solofire-api/llms.txt) · [OpenAPI document](https://skmtc.dev/solofire/apis/solofire-api/revisions/23e387532175?raw)
