Skip to main content
The CRM endpoints live on a different host from messaging — https://api.linkiasoft.com/api — but take the same API key. Both headers from Authentication apply unchanged.
Read pipeline stages before writing anything that moves a lead. Getting this wrong is the most common way these integrations break.

Stages are keys, not names

A lead’s stage is stored in its status field as a stage key — a stable slug. What you see on the board is the stage’s name, which anyone can rename at any time.
Two rules that follow from this:
  • Send key, never name. status: "qualified" moves a lead; status: "Qualified" does not.
  • Judge outcomes by is_won / is_lost, never by comparing the key to "won". Tenants rename and re-key their stages. A pipeline with closed_deal instead of won is normal, and code matching the literal string silently reports zero conversions.
Fetch the stage list once at startup and cache it, rather than hard-coding keys.

List leads in a stage

When you are reading a whole board, page with offset rather than page. A lead moving out of a stage mid-read shifts a page-numbered window and makes you skip a row. offset wins over page when both are sent.
For column counts without pulling every lead, use GET /v1/leads/stage-counts.

Move a lead to another stage

Moving through the pipeline is just a status update:
Send only the fields you are changing. The same endpoint updates deal details:
To hand a lead to a different rep, use PATCH /v1/leads/{id}/reassign rather than setting assigned_to_user_id directly.

Mark a follow-up

There is no follow-up flag on the lead. A follow-up is an activity whose outcome is follow_up_needed:
activity_type is one of call, email, meeting, note, task, deal, support_ticket, sms. outcome is one of successful, follow_up_needed, no_answer, completed, cancelled.
Activity paths have no /v1 prefix — /api/activities/..., not /api/v1/activities/.... The same is true of contacts. Leads and stages do use /v1.

Contacts at a company

A customer is the company; contacts are the people at it.
Each contact carries mobile alongside phone — prefer mobile when you intend to message them on WhatsApp, and note is_primary marks the main point of contact.

Scopes

Contacts and activities are governed by the customers and leads scopes — there is no contacts or activities scope. A key missing the scope gets 403 naming what it lacks.

Putting it together

The obvious pairing with the Messaging API: when a lead reaches a stage, message them.
1

Detect the change

Poll GET /v1/leads filtered to the stage, or trigger from whatever moved the lead in the first place.
2

Get a number

The lead’s own phone, or the primary contact’s mobile from GET /contacts/customer/{customerId}. Normalize to E.164 with no + — see the quickstart.
3

Send a template

POST /v1/conversations/send on social.linkiasoft.com. Outside the 24-hour window it must be a template.
4

Log what you did

Post an activity against the lead so the rep sees it in the timeline.