curl --request POST \
--url https://julian.11x.ai/api/v1/agents/{agentId}/schedule/sequences \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"contacts": [
{
"name": "John Doe",
"phoneNumber": "+15551234567",
"phoneNumberExt": "<string>",
"timezone": "<string>",
"scheduledAt": "2023-11-07T05:31:56Z",
"toEmailAddress": "[email protected]"
}
]
}
'import requests
url = "https://julian.11x.ai/api/v1/agents/{agentId}/schedule/sequences"
payload = { "contacts": [
{
"name": "John Doe",
"phoneNumber": "+15551234567",
"phoneNumberExt": "<string>",
"timezone": "<string>",
"scheduledAt": "2023-11-07T05:31:56Z",
"toEmailAddress": "[email protected]"
}
] }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contacts: [
{
name: 'John Doe',
phoneNumber: '+15551234567',
phoneNumberExt: '<string>',
timezone: '<string>',
scheduledAt: '2023-11-07T05:31:56Z',
toEmailAddress: '[email protected]'
}
]
})
};
fetch('https://julian.11x.ai/api/v1/agents/{agentId}/schedule/sequences', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"batchId": "550e8400-e29b-41d4-a716-446655440000",
"total": 100,
"accepted": 98,
"rejected": [
{
"index": 3,
"phoneNumber": "+15551234567",
"reason": "MISSING_NAME",
"error": "Missing custom input variables: account_id."
}
]
}Enroll multiple contacts
Schedule up to 1,000 contacts in a single request — the API equivalent of CSV import.
Validation is per-contact: valid contacts are scheduled, invalid ones are returned in rejected[] with a reason. The whole batch only fails when no contacts pass validation, the agent is misconfigured, or there aren’t enough credits for the accepted contacts.
A 202 means the accepted contacts passed all upfront checks; sequence creation happens asynchronously in the background. Phone numbers are normalized before duplicate detection, so +15551234567 and +1 (555) 123-4567 collide — only the first occurrence is scheduled unless allowDuplicates is set.
Contact chaining (groupByField): contacts are grouped by the value of the named custom variable. Only the first valid contact in each group is scheduled immediately; the rest activate automatically when an earlier call in the same group does not reach a successful outcome.
curl --request POST \
--url https://julian.11x.ai/api/v1/agents/{agentId}/schedule/sequences \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"contacts": [
{
"name": "John Doe",
"phoneNumber": "+15551234567",
"phoneNumberExt": "<string>",
"timezone": "<string>",
"scheduledAt": "2023-11-07T05:31:56Z",
"toEmailAddress": "[email protected]"
}
]
}
'import requests
url = "https://julian.11x.ai/api/v1/agents/{agentId}/schedule/sequences"
payload = { "contacts": [
{
"name": "John Doe",
"phoneNumber": "+15551234567",
"phoneNumberExt": "<string>",
"timezone": "<string>",
"scheduledAt": "2023-11-07T05:31:56Z",
"toEmailAddress": "[email protected]"
}
] }
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contacts: [
{
name: 'John Doe',
phoneNumber: '+15551234567',
phoneNumberExt: '<string>',
timezone: '<string>',
scheduledAt: '2023-11-07T05:31:56Z',
toEmailAddress: '[email protected]'
}
]
})
};
fetch('https://julian.11x.ai/api/v1/agents/{agentId}/schedule/sequences', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"batchId": "550e8400-e29b-41d4-a716-446655440000",
"total": 100,
"accepted": 98,
"rejected": [
{
"index": 3,
"phoneNumber": "+15551234567",
"reason": "MISSING_NAME",
"error": "Missing custom input variables: account_id."
}
]
}Authorizations
Organization API key. Get it from the 11x team or from the platform.
Headers
Optional, max 255 characters. Retries with the same key won't re-schedule the same batch. The key dedupes on the key alone, not payload content — to resubmit fixed rows after a partial 202, use a new key.
255Path Parameters
ID of the agent, e.g. agent.abc123.
Body
Contacts to enroll (1–1,000).
1 - 1000 elementsShow child attributes
Show child attributes
Default IANA timezone applied to contacts that don't supply their own. If omitted, falls back to the agent's first configured timezone.
"America/New_York"
Group contacts by the value of a custom variable for contact chaining. Only the first valid contact per group is scheduled immediately. Cannot be combined with allowDuplicates.
"account_id"
Custom variable names to title-case before scheduling (e.g. "JOHN" → "John"). Only applied for organizations in the normalization allowlist.
Allow duplicate phone numbers within the batch. Cannot be combined with groupByField.
Response
Batch accepted for asynchronous processing. Check rejected[] for per-contact validation failures — valid contacts are scheduled even when others fail.
"550e8400-e29b-41d4-a716-446655440000"
Total contacts submitted.
100
Contacts that passed validation and will be scheduled.
98
Per-contact validation failures (empty when all passed).
Show child attributes
Show child attributes