---
title: "Create a client activity"
method: POST
path: "/v1/clients/{clientId}/activities"
tags: ["Activities"]
---

# Create a client activity

`POST /v1/clients/{clientId}/activities`

## Request

- Base URL: `https://api.frihet.io`
- URL: `https://api.frihet.io/v1/clients/{clientId}/activities`
- Auth: API key in header `X-API-Key`

Add a manual activity to the client timeline. Activities are immutable once created.

## Path parameters

- `clientId` string, required

## Request body

- ActivityCreate
  - `type` 'call' | 'email' | 'email_sent' | 'meeting' | 'note_added' | 'task' | 'stage_changed' | 'client_created', required: CRM activity types accepted for manual/API-created entries. The legacy `email` value is stored as `email_sent`. Invoice, quote and expense system activity types are auto-generated.
  - `title` string, required: Descriptive title for the activity
  - `description` string: Detailed description
  - `metadata` object: Free-form additional data. For `task` activities, use string fields such as `status` and `dueDate` to mirror the client's current next action.

## Response `201`

Activity created

- Activity
  - `id` string: Unique identifier
  - `type` string: Activity type (manual or system-generated)
  - `title` string
  - `description` string
  - `metadata` object
  - `createdAt` string, date-time

## Other responses

- `400`: Bad request - invalid parameters or request body
- `401`: Authentication required or invalid API key
- `404`: Resource not found
- `429`: Rate limit exceeded (100 requests per minute)
- `500`: Internal server error

---

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