Messaging API
Send LinkedIn messages through your connected accounts and manage reusable message templates. Sends count against the account's daily message limits, the same counters your campaigns use.
Sending Messages
Send Message
/api/messages/sendSend a text message from a connected LinkedIn account. Reply into an existing conversation with chatId, or start a new one with recipientProviderId. The send is rate-limit checked first; when the account's daily message limit is reached or the account is paused, the request is rejected with 429 and never sent.
Request Body
| Parameter | Type | Description |
|---|---|---|
accountIdrequired | string | LinkedIn account ID to send from |
textrequired | string | Message text |
chatId | string | Existing conversation ID to reply into. Provide this or recipientProviderId. |
recipientProviderId | string | Recipient's contact identifier (e.g. from the Pipeline CRM or conversation APIs) to start a new conversation |
recipientName | string | Recipient display name, stored on the message log (only used with recipientProviderId) |
curl --location --request POST 'https://outreach.weezly.com/api/messages/send' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"accountId": "cm3acc123mno",
"recipientProviderId": "contact_abc123",
"recipientName": "Sarah Chen",
"text": "Hi Sarah, great connecting with you!"
}'{
"success": true,
"chatId": "chat_xyz789",
"messageId": "msg_def456"
}{
"error": "daily_limit_reached",
"retryAfter": "2026-08-20T00:00:00.000Z"
}Response Codes
| 200 | Message sent |
| 400 | Missing accountId or text, or neither chatId nor recipientProviderId provided |
| 404 | Account not found |
| 429 | Rate limited. error is daily_limit_reached, account_paused, or too_fast; retryAfter is when to retry |
Voice note and video message sends (/api/messages/send-voice, /api/messages/send-video) exist for the in-app inbox and require media from your recording library; they are not designed for external integrations.
Message Templates
Reusable message bodies with variables like {{firstName}}, {{lastName}}, {{fullName}}, {{company}}, and {{jobTitle}}. Variables are resolved from the conversation's lead when a template is inserted in the inbox; the send endpoint sends text as-is. Up to 50 templates per user.
List Templates
/api/message-templatesList all message templates for the authenticated user, newest first.
curl --location --request GET 'https://outreach.weezly.com/api/message-templates' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{
"templates": [
{
"id": "mt_001",
"name": "Thanks for connecting",
"body": "Hi {{firstName}}, thanks for connecting! I saw you're at {{company}} and wanted to reach out.",
"createdAt": "2026-08-10T09:00:00.000Z",
"updatedAt": "2026-08-10T09:00:00.000Z"
}
]
}Create Template
/api/message-templatesCreate a message template. Names are capped at 100 characters and bodies at 5,000.
Request Body
| Parameter | Type | Description |
|---|---|---|
namerequired | string | Template name (max 100 characters) |
bodyrequired | string | Message body, may contain {{variables}} (max 5,000 characters) |
curl --location --request POST 'https://outreach.weezly.com/api/message-templates' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"name": "Follow up",
"body": "Hi {{firstName}}, just following up on my last message. Would love to hear your thoughts!"
}'{
"template": {
"id": "mt_002",
"name": "Follow up",
"body": "Hi {{firstName}}, just following up on my last message. Would love to hear your thoughts!",
"createdAt": "2026-08-19T10:00:00.000Z",
"updatedAt": "2026-08-19T10:00:00.000Z"
}
}Response Codes
| 200 | Template created |
| 400 | Name and message are required, or the 50-template limit is reached |
Update Template
/api/message-templates/:idUpdate a template. Both name and body must be provided (full replace, not a partial patch).
Request Body
| Parameter | Type | Description |
|---|---|---|
namerequired | string | Template name (max 100 characters) |
bodyrequired | string | Message body (max 5,000 characters) |
curl --location --request PATCH 'https://outreach.weezly.com/api/message-templates/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"name": "Follow up",
"body": "Hi {{firstName}}, circling back on this. Any thoughts?"
}'{
"template": {
"id": "mt_002",
"name": "Follow up",
"body": "Hi {{firstName}}, circling back on this. Any thoughts?",
"createdAt": "2026-08-19T10:00:00.000Z",
"updatedAt": "2026-08-19T11:30:00.000Z"
}
}Response Codes
| 200 | Template updated |
| 400 | Name and message are required |
| 404 | Template not found |
Delete Template
/api/message-templates/:idDelete a message template.
curl --location --request DELETE 'https://outreach.weezly.com/api/message-templates/:id' \
--header 'X-API-KEY: sk_live_YOUR_API_KEY'{ "success": true }Response Codes
| 200 | Template deleted |
| 404 | Template not found |