curl --request POST \
--url https://api.linkiasoft.com/api/activities/lead/{leadId} \
--header 'Content-Type: application/json' \
--header 'X-Tenant-Id: <api-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"activity_type": "call",
"subject": "Discussed pricing",
"activity_date": "2026-07-25T10:30:00Z",
"duration_minutes": 15,
"outcome": "follow_up_needed"
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"activity_type": "call",
"subject": "<string>",
"description": "<string>",
"activity_date": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"outcome": "successful",
"created_at": "2023-11-07T05:31:56Z"
}{
"statusCode": 403,
"message": "API key missing required scope(s): conversations:read",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "API key missing required scope(s): conversations:read",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "API key missing required scope(s): conversations:read",
"error": "Forbidden"
}Log an activity or mark a follow-up
Records something that happened on a lead. Marking a lead as needing follow-up is
an activity with outcome: "follow_up_needed" — there is no separate follow-up
flag on the lead itself.
Note this path has no /v1 prefix — it is /api/activities/....
curl --request POST \
--url https://api.linkiasoft.com/api/activities/lead/{leadId} \
--header 'Content-Type: application/json' \
--header 'X-Tenant-Id: <api-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"activity_type": "call",
"subject": "Discussed pricing",
"activity_date": "2026-07-25T10:30:00Z",
"duration_minutes": 15,
"outcome": "follow_up_needed"
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"activity_type": "call",
"subject": "<string>",
"description": "<string>",
"activity_date": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"outcome": "successful",
"created_at": "2023-11-07T05:31:56Z"
}{
"statusCode": 403,
"message": "API key missing required scope(s): conversations:read",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "API key missing required scope(s): conversations:read",
"error": "Forbidden"
}{
"statusCode": 403,
"message": "API key missing required scope(s): conversations:read",
"error": "Forbidden"
}Authorizations
Your workspace API key. Create one in Settings → API Keys; the plaintext value is shown once and never again.
Keys are scoped. A key needs conversations:send to send, conversations:read to
read threads and messages, templates:read to list templates, and channels:read
to list channels. A key missing the scope for an endpoint gets 403.
The CRM endpoints use the same resource:action form: leads:read, leads:create,
leads:update, leads:delete, customers:read, customers:create,
customers:update, customers:delete, customers:manage.
Several resources have no scope of their own and borrow one:
| Resource | Governed by |
|---|---|
| Contacts | customers:* |
| Activities | customers:* for customer activities, leads:* for lead activities |
| Tags | customers:read to list, customers:manage to change |
| Pipeline stages | leads:* |
| Quick replies | quick-replies:read / quick-replies:write |
| WhatsApp groups | wa-groups:manage |
Grant only what the integration needs — a key that only sends notifications should
hold conversations:send and nothing else.
Your workspace UUID. Required on every request in addition to x-api-key.
It does not select the workspace — data access is always scoped to the workspace that owns the API key, and a mismatched value cannot read anyone else's data.
Path Parameters
Body
call, email, meeting, note, task, deal, support_ticket, sms x >= 0follow_up_needed is how a lead is marked as needing follow-up.
successful, follow_up_needed, no_answer, completed, cancelled Response
The logged activity.
call, email, meeting, note, task, deal, support_ticket, sms follow_up_needed is how a lead is marked as needing follow-up.
successful, follow_up_needed, no_answer, completed, cancelled 
