curl --request POST \
--url https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"input_data": {
"list_name": "callbacks"
},
"metadata": {
"campaign": "spring-2026"
},
"records": [
{
"name": "Placeholder One",
"phone": "+15555550100"
},
{
"name": "Placeholder Two",
"phone": "+15555550101"
}
],
"source": "api"
}
'import requests
url = "https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger"
payload = {
"input_data": { "list_name": "callbacks" },
"metadata": { "campaign": "spring-2026" },
"records": [
{
"name": "Placeholder One",
"phone": "+15555550100"
},
{
"name": "Placeholder Two",
"phone": "+15555550101"
}
],
"source": "api"
}
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({
input_data: {list_name: 'callbacks'},
metadata: {campaign: 'spring-2026'},
records: [
{name: 'Placeholder One', phone: '+15555550100'},
{name: 'Placeholder Two', phone: '+15555550101'}
],
source: 'api'
})
};
fetch('https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger', 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.getdialed.ai/v1/flows/definitions/{definition_id}/trigger",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input_data' => [
'list_name' => 'callbacks'
],
'metadata' => [
'campaign' => 'spring-2026'
],
'records' => [
[
'name' => 'Placeholder One',
'phone' => '+15555550100'
],
[
'name' => 'Placeholder Two',
'phone' => '+15555550101'
]
],
'source' => 'api'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.getdialed.ai/v1/flows/definitions/{definition_id}/trigger"
payload := strings.NewReader("{\n \"input_data\": {\n \"list_name\": \"callbacks\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"records\": [\n {\n \"name\": \"Placeholder One\",\n \"phone\": \"+15555550100\"\n },\n {\n \"name\": \"Placeholder Two\",\n \"phone\": \"+15555550101\"\n }\n ],\n \"source\": \"api\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.getdialed.ai/v1/flows/definitions/{definition_id}/trigger")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input_data\": {\n \"list_name\": \"callbacks\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"records\": [\n {\n \"name\": \"Placeholder One\",\n \"phone\": \"+15555550100\"\n },\n {\n \"name\": \"Placeholder Two\",\n \"phone\": \"+15555550101\"\n }\n ],\n \"source\": \"api\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input_data\": {\n \"list_name\": \"callbacks\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"records\": [\n {\n \"name\": \"Placeholder One\",\n \"phone\": \"+15555550100\"\n },\n {\n \"name\": \"Placeholder Two\",\n \"phone\": \"+15555550101\"\n }\n ],\n \"source\": \"api\"\n}"
response = http.request(request)
puts response.read_body{
"batch_id": "batch_55667788",
"definition_id": "def_a1b2c3d4",
"status": "pending",
"deduplicated": false
}Trigger a definition
Start a batch from an active definition — one execution per record when records is supplied. For uploads above the inline record limit, seal a record set first and pass record_set_id instead; records and record_set_id are mutually exclusive. A record set is single use. Resubmitting identical record-set content within the dedup window returns 200 with deduplicated: true and the ORIGINAL batch_id — send an Idempotency-Key header to deliberately re-run the same content as a new batch. Admin only. Only active definitions can be triggered (400 otherwise). Cross-tenant access returns 404.
curl --request POST \
--url https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"input_data": {
"list_name": "callbacks"
},
"metadata": {
"campaign": "spring-2026"
},
"records": [
{
"name": "Placeholder One",
"phone": "+15555550100"
},
{
"name": "Placeholder Two",
"phone": "+15555550101"
}
],
"source": "api"
}
'import requests
url = "https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger"
payload = {
"input_data": { "list_name": "callbacks" },
"metadata": { "campaign": "spring-2026" },
"records": [
{
"name": "Placeholder One",
"phone": "+15555550100"
},
{
"name": "Placeholder Two",
"phone": "+15555550101"
}
],
"source": "api"
}
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({
input_data: {list_name: 'callbacks'},
metadata: {campaign: 'spring-2026'},
records: [
{name: 'Placeholder One', phone: '+15555550100'},
{name: 'Placeholder Two', phone: '+15555550101'}
],
source: 'api'
})
};
fetch('https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger', 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.getdialed.ai/v1/flows/definitions/{definition_id}/trigger",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'input_data' => [
'list_name' => 'callbacks'
],
'metadata' => [
'campaign' => 'spring-2026'
],
'records' => [
[
'name' => 'Placeholder One',
'phone' => '+15555550100'
],
[
'name' => 'Placeholder Two',
'phone' => '+15555550101'
]
],
'source' => 'api'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.getdialed.ai/v1/flows/definitions/{definition_id}/trigger"
payload := strings.NewReader("{\n \"input_data\": {\n \"list_name\": \"callbacks\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"records\": [\n {\n \"name\": \"Placeholder One\",\n \"phone\": \"+15555550100\"\n },\n {\n \"name\": \"Placeholder Two\",\n \"phone\": \"+15555550101\"\n }\n ],\n \"source\": \"api\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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.getdialed.ai/v1/flows/definitions/{definition_id}/trigger")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input_data\": {\n \"list_name\": \"callbacks\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"records\": [\n {\n \"name\": \"Placeholder One\",\n \"phone\": \"+15555550100\"\n },\n {\n \"name\": \"Placeholder Two\",\n \"phone\": \"+15555550101\"\n }\n ],\n \"source\": \"api\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getdialed.ai/v1/flows/definitions/{definition_id}/trigger")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input_data\": {\n \"list_name\": \"callbacks\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"records\": [\n {\n \"name\": \"Placeholder One\",\n \"phone\": \"+15555550100\"\n },\n {\n \"name\": \"Placeholder Two\",\n \"phone\": \"+15555550101\"\n }\n ],\n \"source\": \"api\"\n}"
response = http.request(request)
puts response.read_body{
"batch_id": "batch_55667788",
"definition_id": "def_a1b2c3d4",
"status": "pending",
"deduplicated": false
}Authorizations
Headers
Optional. Bulk (record_set_id) triggers only. Supply your own key to deliberately re-run content that was already submitted within the dedup window; omit it to let the server derive the key from the record set's content hash. Ignored on the inline records path.
255Path Parameters
Body
Show child attributes
Show child attributes
Id of a sealed record set to trigger against. Mutually exclusive with records. Use this for uploads above the inline record limit.
Move this batch's work ahead of the rest of its own dispatch lane. high only re-orders work inside your own account's provider budget — it cannot take capacity from another lane, and it never changes how fast the provider accepts calls. Omit it to inherit the flow's own setting.
normal, high Release this batch's records no faster than N every M minutes, optionally confined to a local delivery window. Overrides any pacing policy the flow itself declares; omit it to inherit that policy, and omit both to deliver as fast as your provider budget allows.
Show child attributes
Show child attributes
{
"period_minutes": 15,
"records_per_period": 5000,
"window": {
"days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
],
"end_minute_of_day": 1020,
"start_minute_of_day": 540,
"timezone": "America/Denver"
}
}
Response
Batch started. deduplicated is true when this request matched a recent identical bulk submission — in that case batch_id echoes the ORIGINAL batch, its current status is returned, and nothing new was ingested.
True when this request matched a recent identical bulk submission — batch_id echoes the original batch and nothing new was ingested.
What this trigger's work will cost against your provider budget — present only when the flow dispatches through a rate-limited platform budget, and null otherwise. A spills_past_day_cap warning is informational: the work was accepted and its overflow is paced into the following day, not refused.
Show child attributes
Show child attributes
{
"as_of": "2026-08-14T18:00:00Z",
"bucket": "Upload",
"calls": 20,
"day_remaining_calls": 1100,
"max_records_per_call": 50000,
"pct_of_remaining_day": 1.8,
"queued_estimated_calls": 0,
"records": 1000000,
"spills_past_day_cap": false
}