Create multiple tasks via CSV upload
curl --request POST \
--url 'https://api.vida.dev/api/v2/tasks/csv?token=' \
--header 'Content-Type: multipart/form-data' \
--form 'csv=@example-file;type=text/csv' \
--form 'contactListName=<string>'import requests
url = "https://api.vida.dev/api/v2/tasks/csv?token="
files = { "csv": ("example-file", open("example-file", "rb"), "text/csv") }
payload = { "contactListName": "<string>" }
response = requests.post(url, data=payload, files=files)
print(response.text)const form = new FormData();
form.append('csv', '<string>');
form.append('contactListName', '<string>');
const options = {method: 'POST'};
options.body = form;
fetch('https://api.vida.dev/api/v2/tasks/csv?token=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vida.dev/api/v2/tasks/csv?token=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vida.dev/api/v2/tasks/csv?token="
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vida.dev/api/v2/tasks/csv?token=")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vida.dev/api/v2/tasks/csv?token=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_bodyTasks
Create multiple tasks via CSV upload
Upload up to 10,000 Tasks. Standard Task headers are case-insensitive; custom meta paths retain their casing. Recognized columns are type, target, context, taskContext, greeting, waitToGreet, accountId, sourceNumber, scheduledFor, message, externalTaskId, goal.description, goal.completionCriteria, retryPolicy.delaysSeconds, retryPolicy.retryOn, and retryPolicy.responseTimeoutSeconds. Arbitrary nested meta.<path> columns are also accepted. For call, text and email Tasks, meta.contact fields populate missing structured Contact fields in the Task organization at creation, including meta.contact.name, meta.contact.email, meta.contact.address.state and meta.contact.customFields.vendorLeadCode. Existing values are preserved, nested objects fill missing leaves, and null or blank values are ignored. Names in context do not populate Contact fields. Target remains the delivery destination and the global profile and outbound caller ID are unchanged. CSV metadata cells are strings; use JSON Task creation for boolean, numeric or array Contact values. For call and text Tasks, sourceNumber selects an attached agent line for all phone attempts without changing Contact pins. Blank cells use automatic routing. Quota or unavailable lines delay the Task without switching numbers. Retry list columns accept JSON arrays or pipe-separated values. Email tasks can use meta.email.subject.
POST
/
api
/
v2
/
tasks
/
csv
Create multiple tasks via CSV upload
curl --request POST \
--url 'https://api.vida.dev/api/v2/tasks/csv?token=' \
--header 'Content-Type: multipart/form-data' \
--form 'csv=@example-file;type=text/csv' \
--form 'contactListName=<string>'import requests
url = "https://api.vida.dev/api/v2/tasks/csv?token="
files = { "csv": ("example-file", open("example-file", "rb"), "text/csv") }
payload = { "contactListName": "<string>" }
response = requests.post(url, data=payload, files=files)
print(response.text)const form = new FormData();
form.append('csv', '<string>');
form.append('contactListName', '<string>');
const options = {method: 'POST'};
options.body = form;
fetch('https://api.vida.dev/api/v2/tasks/csv?token=', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vida.dev/api/v2/tasks/csv?token=",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vida.dev/api/v2/tasks/csv?token="
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vida.dev/api/v2/tasks/csv?token=")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vida.dev/api/v2/tasks/csv?token=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"csv\"; filename=\"example-file\"\r\nContent-Type: text/csv\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"contactListName\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_bodyHeaders
Body
multipart/form-data
Response
Tasks queued