Send one outreach message
POST/api/v2/outreach/dispatches
Uses a connected account to send an Email or WhatsApp message, or perform one LinkedIn outreach action. For an existing LinkedIn connection, it sends a message; otherwise, it sends a connection request with a note.
The endpoint returns HTTP 202 and a job ID. Use the unified jobs endpoint to retrieve the final result.
| Header | Required | Description |
|---|
Authorization | Yes | Bearer sk-revor-.... |
Content-Type | Yes | application/json. |
Idempotency-Key | No | Reliable retry identifier. Reuse it when retrying the same business operation to prevent duplicate sends. |
Request body
| Field | Required | Description |
|---|
account_id | Yes | Obtained from the Connect accounts endpoint. |
channel | Yes | email, linkedin, or whatsapp; must match the account channel. |
action | Yes | Must be outreach. |
recipient | Yes | Recipient details. |
content | Yes | Content to send. |
metadata | No | Custom caller context. |
min_channel_task_interval_seconds | No | Minimum job interval for the same user and channel. Defaults to 60; allowed range is 60-86400 seconds. |
Intervals are independent across channels. For batch submissions, use a different interval between 180 and 360 seconds for each job to avoid a fixed sending cadence.
Channel-specific fields
| Channel | recipient | content |
|---|
| Email | address, optional name | Requires subject and either text or html. |
| LinkedIn | profile_url | Provide text or a valid attachment. Sends a message when connected or a connection request with a note otherwise. |
| WhatsApp | phone | Provide text or a valid attachment. |
Attachments contain filename and contentBase64, with optional contentType.
Email example
curl -X POST "https://revor.ai/api/v2/outreach/dispatches" \
-H "Authorization: Bearer sk-revor-REPLACE_ME" \
-H "Content-Type: application/json" \
-d '{
"account_id": "connect_account_xxx",
"channel": "email",
"action": "outreach",
"recipient": { "address": "[email protected]", "name": "Alex" },
"content": { "subject": "Quick introduction", "text": "Hi Alex, ..." }
}'
Example response
{
"ok": true,
"request_id": "req_xxx",
"item": {
"id": "job_uuid",
"status": "scheduled",
"action": "outreach.dispatch",
"channel": "email",
"scheduled_at": "2026-08-26T10:00:00.000Z"
}
}
Call GET /api/v2/jobs/job_uuid for the result. Successful creation only means that the job was accepted, not that the message was sent.
Common errors
| HTTP | Code | Description |
|---|
400 | account_id_required / invalid_channel / invalid_action | A basic parameter is invalid. |
400 | recipient_address_required / recipient_profile_url_required / recipient_phone_required | The recipient for the selected channel is missing. |
400 | content_subject_required / content_text_or_html_required / content_text_or_attachment_required | Required content for the channel is missing. |
400 | attachment_invalid / attachments_invalid | The attachment format is invalid. |
400 | min_channel_task_interval_seconds_invalid | The channel job interval is outside the allowed range. |
403 | permission_denied | The key cannot create a single outreach action. |
413 | request_payload_too_large | The request body exceeds 12 MB. |
503 | task_unavailable | The job cannot be created temporarily. |