ToolsLinkedIn Actions
Send InMail
Queue a LinkedIn InMail (premium seats only - capability_missing on free seats; body cap ~1900, subject 200; rate-safe).
Tool: send_inmail
Fails with active_campaign_conflict if the person is on an active sequence - recover with stop_sequence_and_send.
Parameters
| Param | Type | Required | Description |
|---|---|---|---|
person_id | string (slug or UUID) | no | Recipient (no connection required). One of person_id / linkedin_url is required. |
linkedin_url | string | no | OR act by LinkedIn profile URL - matches the existing person; someone not yet imported is created, enriched (best-effort), and filed into today's misc lead group. A URL pasted into person_id is treated the same way. Alias: profile_url. |
body | string | yes | InMail body, max ~1900 chars. Alias: text. |
subject | string | no | Subject line, max 200 chars. |
connected_account_id | string (slug or UUID) | no | Seat to act as. Alias: account_id. |
Template variables ({{first_name}}, {{custom.<key>}}, ...) render at queue time: unknown names →
validation_error; names the person has no value for →missing_variables- empty text is never sent.Premium seats only - free seats fail fast with
capability_missing.Blocked with
active_campaign_conflictwhen the person is on an active sequence.The sample shows the queue-time envelope; the InMail goes out on the drip tick.
Sample request
{
"person_id": "marco-rossi-0004",
"subject": "Quick question about Acme's onboarding",
"body": "Hi Marco — no connection needed for this one. Two quick questions..."
}