Bulk Calls JSON API
Engagement Hub supports bulk engagements via file upload (POST /bulk-calls/upload) and JSON submit (POST /bulk-calls/submit). CRM integrations and the Follow Up Boss campaign embed use the JSON endpoint.
Authentication
Same as file upload: API key with call_management permission.
Authorization: Bearer {API_KEY}
POST /bulk-calls/submit
Campaign-level body
| Field | Required | Description |
|---|---|---|
domain_name | Yes | Hub domain slug |
rows | Yes | Array of contact rows (max 1000) |
call_type | No | Default informational |
language | No | Default en |
campaign_name | No | Stored as batch file_name |
source_system | No | e.g. twenty, followupboss |
source_org_id | No | Workspace ID or domain slug |
source_object | No | Default person |
Per-row fields
| Field | Required | Description |
|---|---|---|
instruction | Yes | Agent instruction for this contact |
phone_number | For phone/SMS | E.164 or North American number |
email or email_address | For channel=email | Recipient email |
name | No | Display name |
channel | No | phone, sms, email, etc. |
call_type | No | Row override |
scheduled_time | No | ISO or common datetime formats |
user_phone_number | No | Initiator/broker phone |
email_template_name | No | Hub email layout name |
email_subject | No | Email subject |
email_template_id | No | Hub template id |
email_template_params | No | Object of placeholder values |
source_record_id | No | CRM person id for sync |
crm_contact_id | No | Optional contact hint |
Example (Aventora CRM)
{
"domain_name": "aventora",
"campaign_name": "June SMS follow-up",
"source_system": "twenty",
"source_org_id": "workspace-uuid",
"call_type": "informational",
"rows": [
{
"phone_number": "+14165550000",
"instruction": "Confirm appointment time",
"name": "Jane Doe",
"channel": "sms",
"source_record_id": "person-uuid"
}
]
}
Response
{
"success": true,
"batch_id": "uuid",
"queued_calls": 10,
"skipped_calls": 2,
"errors": ["Row 3: skipped — duplicate customer"],
"message": "Batch created with 10 calls. Processing will start shortly."
}
Batch status
GET /bulk-calls/batchesGET /bulk-calls/batches/{batch_id}
Limits
- Max 1000 rows per submit (request timeout safety)
BULK_CALL_RATE_LIMITapplies when the worker calls/startper rowcustomer_dedup_daysapplies to bulk rows