Create Outreach Dispatch
POST/api/v1/outreach/dispatches
Creates one email, LinkedIn, or WhatsApp outreach task. A successful request returns HTTP 202 Accepted and a task ID.
| Header | Required | Description |
|---|
Authorization | Yes | Bearer sk-revor-.... |
Content-Type | Yes | application/json. |
Idempotency-Key | Recommended | Idempotency key. Use it when retrying the same outreach task. |
Request Body
| Field | Type | Required | Description |
|---|
account_id | string | Yes | Connect account ID. |
channel | string | Yes | email, linkedin, or whatsapp. Must match the account channel. |
action | string | Yes | Must be outreach. |
recipient | object | Yes | Recipient information. |
content | object | Yes | Message content. |
metadata | object | No | Custom context supplied by the integration. |
min_channel_task_interval_seconds | number | No | Minimum interval, in seconds, for tasks on the same channel under the same Revor account. Defaults to 60, minimum 60, maximum 86400. Values below 60 are treated as 60. |
Outreach Interval
min_channel_task_interval_seconds applies only to tasks on the same channel under the same Revor account. Email, LinkedIn, and WhatsApp use separate channel intervals.
When creating outreach tasks in batches, integrations should generate a random interval for each task. A common recommended range is 180 to 360 seconds, instead of using a fixed cadence for every task.
recipient Fields
| Channel | Required Field | Description |
|---|
email | recipient.address | Recipient email address. |
linkedin | recipient.profile_url | LinkedIn profile URL. |
whatsapp | recipient.phone | WhatsApp phone number or contact identifier. |
content Fields
| Channel | Required Field | Optional Field | Description |
|---|
email | content.subject, and at least one of content.text or content.html | content.attachments | Email subject and body. |
linkedin | content.text or at least one attachment | content.attachments | LinkedIn message or invitation text. |
whatsapp | content.text or at least one attachment | content.attachments | WhatsApp message content. |
Attachment object:
| Field | Type | Required | Description |
|---|
filename | string | Yes | File name. |
contentBase64 | string | Yes | File content encoded as base64. |
contentType | string | No | MIME type, such as application/pdf. |
Email Request
curl -X POST "https://revor.ai/api/v1/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, this is a quick API test from Revor AI."
},
"min_channel_task_interval_seconds": 60
}'
LinkedIn Request Example
curl -X POST "https://revor.ai/api/v1/outreach/dispatches" \
-H "Authorization: Bearer sk-revor-REPLACE_ME" \
-H "Content-Type: application/json" \
-d '{
"account_id": "connect_account_xxx",
"channel": "linkedin",
"action": "outreach",
"recipient": {
"profile_url": "https://www.linkedin.com/in/test-user/"
},
"content": {
"text": "Hi Alex, saw your recent work on outbound automation and wanted to connect."
},
"min_channel_task_interval_seconds": 60
}'
WhatsApp Request
curl -X POST "https://revor.ai/api/v1/outreach/dispatches" \
-H "Authorization: Bearer sk-revor-REPLACE_ME" \
-H "Content-Type: application/json" \
-d '{
"account_id": "connect_account_xxx",
"channel": "whatsapp",
"action": "outreach",
"recipient": {
"phone": "+14155552671"
},
"content": {
"text": "Hi Alex, this is a quick WhatsApp message from Revor AI."
},
"min_channel_task_interval_seconds": 60
}'
Response
{
"ok": true,
"request_id": "req_xxx",
"item": {
"id": "job_uuid",
"status": "queued",
"action": "outreach.dispatch",
"channel": "email",
"scheduled_at": "2026-05-20T10:00:00.000Z"
}
}
Response Fields
| Field | Type | Description |
|---|
item.id | string | Task ID. Use it with /api/v1/outreach/jobs/{id}. |
item.status | string | Task status. |
item.action | string | Always outreach.dispatch. |
item.channel | string | Task channel. |
item.scheduled_at | string | null | Scheduled execution time. |
Retrieve Result
A successful creation response does not mean the message has been sent. Use item.id to retrieve the task result:
curl -X GET "https://revor.ai/api/v1/outreach/jobs/job_uuid" \
-H "Authorization: Bearer sk-revor-REPLACE_ME"
Errors
| HTTP | Code | Description |
|---|
400 | account_id_required | account_id is required. |
400 | invalid_channel | The channel value is not supported. |
400 | invalid_action | action must be outreach. |
400 | recipient_address_required | recipient.address is required for email. |
400 | content_subject_required | content.subject is required for email. |
400 | content_text_or_html_required | Email body is required. |
400 | recipient_profile_url_required | recipient.profile_url is required for LinkedIn. |
400 | invalid_profile_url | The LinkedIn URL format is invalid. |
400 | recipient_phone_required | recipient.phone is required for WhatsApp. |
400 | content_text_or_attachment_required | Text or attachment is required. |
401 | api_key_invalid | The API key is invalid. |
403 | permission_denied | The API key does not have access to this endpoint. |
404 | account_not_found | The account_id does not exist or is not accessible. |
409 | account_channel_mismatch | account_id does not match channel. |
409 | connect_account_reconnect_required | The account must be reconnected. |
409 | idempotency_conflict | The idempotency key was reused with a different request body. |
429 | api_rate_limit_exceeded | The request was rate limited. |
502 | action_failed | The outreach action failed. |
503 | task_unavailable | The task could not be created temporarily. |