Lead Upload and Execution
Submit phone numbers, per-lead metadata, retry policy and dialling schedule to a configured campaign. For large files use the bulk CSV upload instead.
Choosing an endpoint
| Endpoint | Numbers per request | Typical use |
|---|
POST /v6/lead | Exactly one | Real-time single-number triggers, click-to-call, flow testing. |
POST /v3/lead | Multiple under one leadName | Micro-batches and API-driven campaign feeds. |
POST /lead legacy | Fewer than ten | Existing integrations only. |
POST https://<host>/api/v1/astrixdispatcher/v6/lead?isDND=false
isDND
| Name | Type | Required | Description |
|---|
isDND | boolean | required | false dials every number as submitted. true screens each number against the DND registry and suppresses registered numbers. |
Request parameters
| Name | Type | Required | Description |
|---|
ukey | string | required | User authentication key. |
campaignId | integer | required | Campaign into which the data is uploaded. |
leadName | string | required | Name of the lead set. Unique within the campaign when creating a new set. |
leadId | integer | conditional | Required only when appending to an existing lead set. Omit when creating a new one. |
countofNumbers | integer | optional | Declared count, for reconciliation against totalRecords. Note the lower-case of. |
phoneNumberDetails | array | required | Array of lead objects, one per phone number. |
Example body fields
The samples also send these fields. They appear in the cURL and Python examples in the source documentation.
| Name | Type | Description |
|---|
userId | integer | Present in the sample request body (for example 267). |
retryInfo | object | Retry policy object. See Retry configuration and the nested fields below. |
cli | object | CLI map in the sample, for example { "S1": "1725617007" }. Assigned on the first request for the life of the lead set. |
retryInfo
| Name | Type | Description |
|---|
retryType | string | C (round robin) or R (time based). Upper case, single character. |
retryOnFail | integer | Shown as 3 in the cURL sample. |
retryTimeOnFail | integer | Shown as 0 in the cURL sample. Interval fields are required when retryType is R. |
retryOnNoAns | integer | Shown as 3 in the cURL sample. |
noOfRetry | integer | Shown as 3 in the samples. Total attempts equal leads × (1 + noOfRetry). |
phoneNumberDetails[]
| Name | Type | Description |
|---|
phoneNumber | string | Destination number for the lead (for example 7428193932). |
customerInfo | object | Per-lead metadata. Sample keys: Amount, CustName, DueDate. |
Retry configuration
All counters default to 0, meaning no retry.
| Type | Behaviour | Interval fields |
|---|
C — round robin | Completes a full pass over the lead set, then begins the next retry pass. Retries are spaced by lead set size. | Ignored |
R — time based | A number becomes eligible only after the interval for its disposition has elapsed. | Required |
Examples
cURL
curl --location 'https://<host>/api/v1/astrixdispatcher/v6/lead?isDND=false' \
--header 'Content-Type: application/json' \
--data '{
"leadName": "test",
"campaignId": 1165,
"userId": 267,
"ukey": "YOUR_UKEY",
"retryInfo": {
"retryType": "R",
"retryOnFail": 3, "retryTimeOnFail": 0,
"retryOnNoAns": 3, "noOfRetry": 3
},
"cli": { "S1": "1725617007" },
"phoneNumberDetails": [
{
"phoneNumber": "7428193932",
"customerInfo": {
"Amount": "23424",
"CustName": "Veer",
"DueDate": "04/11/2025"
}
}
]
}'Python
import requests
HOST = "https://<host>"
UKEY = os.environ["FONADA_UKEY"] # never hard-code
payload = {
"leadName": "test",
"campaignId": 1165,
"userId": 267,
"ukey": UKEY,
"retryInfo": {"retryType": "R", "noOfRetry": 3},
"phoneNumberDetails": [{
"phoneNumber": "7428193932",
"customerInfo": {"CustName": "Veer", "Amount": "23424"},
}],
}
r = requests.post(
f"{HOST}/api/v1/astrixdispatcher/v6/lead",
params={"isDND": "false"}, json=payload, timeout=60,
)
r.raise_for_status()
lead_id = r.json()["message"]["leadId"]Response
{
"Status": "200 OK",
"message": {
"leadId": 2296,
"leadName": "test",
"fileName": null,
"totalRecords": 1,
"uploadDtm": "30/08/2025 16:54:08"
}
}Response fields
| Field | Example | Description |
|---|
Status | 200 OK | Top-level status string in the sample response. |
message.leadId | 2296 | Lead set identifier returned after upload. |
message.leadName | test | Echo of the submitted lead name. |
message.fileName | null | File name when applicable; null in the JSON sample. |
message.totalRecords | 1 | Count of records accepted. |
message.uploadDtm | 30/08/2025 16:54:08 | Upload timestamp from the sample. |
Related: Conventions · Voice Bot · CDR Reference