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' \
--form 'contactListName=<string>'import requests
url = "https://api.vida.dev/api/v2/tasks/csv?token="
files = { "csv": ("example-file", open("example-file", "rb")) }
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: application/octet-stream\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: application/octet-stream\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: application/octet-stream\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: application/octet-stream\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, 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. 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' \
--form 'contactListName=<string>'import requests
url = "https://api.vida.dev/api/v2/tasks/csv?token="
files = { "csv": ("example-file", open("example-file", "rb")) }
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: application/octet-stream\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: application/octet-stream\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: application/octet-stream\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: application/octet-stream\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_bodyAuthorizations
Vida API Token
Headers
Required for uploads over 1,000 rows. Repeating the same key and payload safely resumes or returns that submission; reusing it for a different payload returns 409.
Show child attributes
Show child attributes
Body
multipart/form-data
Response
Tasks queued