Batch calls
The batchcall resource runs bulk outbound phone campaigns. Upload a recipients file, then launch or schedule the campaign.
Upload recipients
upload reads a .csv, .xls, or .xlsx file (max 5 MB), uploads it, and waits for parsing, returning the parsed batch.
- Node.js
- Go
const batch = await client.batchcall.upload({ filePath: "./leads.csv" });
batch, err := client.BatchCall.Upload(ctx, videosdk.UploadBatchCallParams{FilePath: "./leads.csv"})
Options: filePath (required), batchId (replace the file on an existing batch), waitForParse (default true), poll interval / timeout, an onParsing hook.
Create a campaign
- Node.js
- Go
const campaign = await client.batchcall.create({
batchName: "Q3 outreach",
phoneNumberId: "pn_1",
routingRuleId: "rr_1",
batchId, // from upload
timing: "scheduled",
scheduledDate: "2026-07-01",
scheduledTime: "09:30",
});
campaign, err := client.BatchCall.Create(ctx, videosdk.CreateBatchCallParams{
BatchName: "Q3 outreach",
PhoneNumberID: "pn_1",
RoutingRuleID: "rr_1",
BatchID: batchID, // from upload
Timing: videosdk.BatchCallScheduled,
ScheduledDate: "2026-07-01",
ScheduledTime: "09:30",
})
Required: batchName, phoneNumberId, routingRuleId. Scheduling: timing (immediate or scheduled), timezone, scheduledDate / scheduledTime, allowedFrom / allowedUntil, daysOfWeek. Also retry, webhook, saveAsDraft.
Manage a campaign
- Node.js
- Go
await client.batchcall.list({ status: "running" });
await client.batchcall.get(batchId);
await client.batchcall.update(batchId, { scheduledTime: "10:00" });
await client.batchcall.cancel(batchId, "graceful"); // or "immediate"
await client.batchcall.delete(batchId);
await client.batchcall.stats(batchId);
client.BatchCall.List(ctx, videosdk.ListBatchCallsParams{Status: videosdk.BatchStatusRunning})
client.BatchCall.Get(ctx, batchID)
client.BatchCall.Update(ctx, batchID, videosdk.UpdateBatchCallParams{ScheduledTime: videosdk.String("10:00")})
client.BatchCall.Cancel(ctx, batchID, videosdk.BatchCancelGraceful) // or BatchCancelImmediate
client.BatchCall.Delete(ctx, batchID)
client.BatchCall.Stats(ctx, batchID)
Records
A batch's per-number records live on the records sub-resource.
- Node.js
- Go
await client.batchcall.records.list(batchId, { status: "not connected" });
await client.batchcall.records.update(batchId, recordId, { phoneNumber: "+14155550123" });
await client.batchcall.records.delete(batchId, [recordId]);
const csv = await client.batchcall.records.export(batchId); // CSV text
client.BatchCall.Records.List(ctx, batchID, videosdk.ListBatchCallRecordsParams{Status: "not connected"})
client.BatchCall.Records.Update(ctx, batchID, recordID, videosdk.UpdateBatchCallRecordParams{PhoneNumber: videosdk.String("+14155550123")})
client.BatchCall.Records.Delete(ctx, batchID, []string{recordID})
csv, err := client.BatchCall.Records.Export(ctx, batchID, videosdk.ExportBatchCallRecordsParams{}) // CSV text
Got a Question? Ask us on discord

