curl --request POST \
--url https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"customerLeadId": "<string>",
"primaryPhone": "<string>",
"zipcode": "<string>",
"state": "<string>",
"forwardingPhoneNumber": "<string>",
"variables": {},
"metadata": {
"firstName": "<string>",
"lastName": "<string>"
},
"priorityDate": "2025-01-15T00:00:00Z",
"startAt": "2025-01-15T15:30:00Z",
"attempt": 0
}
'import requests
url = "https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution"
payload = {
"customerLeadId": "<string>",
"primaryPhone": "<string>",
"zipcode": "<string>",
"state": "<string>",
"forwardingPhoneNumber": "<string>",
"variables": {},
"metadata": {
"firstName": "<string>",
"lastName": "<string>"
},
"priorityDate": "2025-01-15T00:00:00Z",
"startAt": "2025-01-15T15:30:00Z",
"attempt": 0
}
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({
customerLeadId: '<string>',
primaryPhone: '<string>',
zipcode: '<string>',
state: '<string>',
forwardingPhoneNumber: '<string>',
variables: {},
metadata: {firstName: '<string>', lastName: '<string>'},
priorityDate: '2025-01-15T00:00:00Z',
startAt: '2025-01-15T15:30:00Z',
attempt: 0
})
};
fetch('https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution', 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://prod.featherhq.com/api/v1/workflow/{workflowId}/execution",
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([
'customerLeadId' => '<string>',
'primaryPhone' => '<string>',
'zipcode' => '<string>',
'state' => '<string>',
'forwardingPhoneNumber' => '<string>',
'variables' => [
],
'metadata' => [
'firstName' => '<string>',
'lastName' => '<string>'
],
'priorityDate' => '2025-01-15T00:00:00Z',
'startAt' => '2025-01-15T15:30:00Z',
'attempt' => 0
]),
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://prod.featherhq.com/api/v1/workflow/{workflowId}/execution"
payload := strings.NewReader("{\n \"customerLeadId\": \"<string>\",\n \"primaryPhone\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"state\": \"<string>\",\n \"forwardingPhoneNumber\": \"<string>\",\n \"variables\": {},\n \"metadata\": {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\"\n },\n \"priorityDate\": \"2025-01-15T00:00:00Z\",\n \"startAt\": \"2025-01-15T15:30:00Z\",\n \"attempt\": 0\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://prod.featherhq.com/api/v1/workflow/{workflowId}/execution")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customerLeadId\": \"<string>\",\n \"primaryPhone\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"state\": \"<string>\",\n \"forwardingPhoneNumber\": \"<string>\",\n \"variables\": {},\n \"metadata\": {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\"\n },\n \"priorityDate\": \"2025-01-15T00:00:00Z\",\n \"startAt\": \"2025-01-15T15:30:00Z\",\n \"attempt\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution")
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 \"customerLeadId\": \"<string>\",\n \"primaryPhone\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"state\": \"<string>\",\n \"forwardingPhoneNumber\": \"<string>\",\n \"variables\": {},\n \"metadata\": {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\"\n },\n \"priorityDate\": \"2025-01-15T00:00:00Z\",\n \"startAt\": \"2025-01-15T15:30:00Z\",\n \"attempt\": 0\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"startedAt": "<string>",
"completedAt": "<string>",
"customerLeadId": "<string>",
"primaryPhone": "<string>",
"metadata": {
"firstName": "<string>",
"lastName": "<string>"
},
"definition": {
"steps": [
{
"order": 2,
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"delayInSecs": 0,
"finishOn": [],
"leaveVoicemail": false,
"initialMessage": "<string>",
"count": 1
}
],
"isInfinite": false
},
"stepExecutions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflowExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order": 123,
"delayInSecs": 123,
"finishOn": [],
"startedAt": "<string>",
"completedAt": "<string>",
"leaveVoicemail": true,
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentCall": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"callStartedAt": "<string>",
"callEndedAt": "<string>",
"callDuration": 123,
"recordingUrl": "<string>",
"supervisorRecordingUrl": "<string>",
"summary": "<string>"
}
}
],
"createdAt": "<string>",
"variables": {},
"stepIndex": 123,
"nextRunAt": "<string>",
"priorityDate": "<string>"
}{
"status": 400,
"message": "Bad request",
"code": "BAD_REQUEST",
"success": false
}{
"status": 402,
"message": "Insufficient credits",
"code": "PAYMENT_REQUIRED",
"success": false
}{
"status": 500,
"message": "Internal server error",
"code": "INTERNAL_SERVER_ERROR",
"success": false
}Create workflow execution
Create a new agent workflow execution
curl --request POST \
--url https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"customerLeadId": "<string>",
"primaryPhone": "<string>",
"zipcode": "<string>",
"state": "<string>",
"forwardingPhoneNumber": "<string>",
"variables": {},
"metadata": {
"firstName": "<string>",
"lastName": "<string>"
},
"priorityDate": "2025-01-15T00:00:00Z",
"startAt": "2025-01-15T15:30:00Z",
"attempt": 0
}
'import requests
url = "https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution"
payload = {
"customerLeadId": "<string>",
"primaryPhone": "<string>",
"zipcode": "<string>",
"state": "<string>",
"forwardingPhoneNumber": "<string>",
"variables": {},
"metadata": {
"firstName": "<string>",
"lastName": "<string>"
},
"priorityDate": "2025-01-15T00:00:00Z",
"startAt": "2025-01-15T15:30:00Z",
"attempt": 0
}
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({
customerLeadId: '<string>',
primaryPhone: '<string>',
zipcode: '<string>',
state: '<string>',
forwardingPhoneNumber: '<string>',
variables: {},
metadata: {firstName: '<string>', lastName: '<string>'},
priorityDate: '2025-01-15T00:00:00Z',
startAt: '2025-01-15T15:30:00Z',
attempt: 0
})
};
fetch('https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution', 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://prod.featherhq.com/api/v1/workflow/{workflowId}/execution",
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([
'customerLeadId' => '<string>',
'primaryPhone' => '<string>',
'zipcode' => '<string>',
'state' => '<string>',
'forwardingPhoneNumber' => '<string>',
'variables' => [
],
'metadata' => [
'firstName' => '<string>',
'lastName' => '<string>'
],
'priorityDate' => '2025-01-15T00:00:00Z',
'startAt' => '2025-01-15T15:30:00Z',
'attempt' => 0
]),
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://prod.featherhq.com/api/v1/workflow/{workflowId}/execution"
payload := strings.NewReader("{\n \"customerLeadId\": \"<string>\",\n \"primaryPhone\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"state\": \"<string>\",\n \"forwardingPhoneNumber\": \"<string>\",\n \"variables\": {},\n \"metadata\": {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\"\n },\n \"priorityDate\": \"2025-01-15T00:00:00Z\",\n \"startAt\": \"2025-01-15T15:30:00Z\",\n \"attempt\": 0\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://prod.featherhq.com/api/v1/workflow/{workflowId}/execution")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customerLeadId\": \"<string>\",\n \"primaryPhone\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"state\": \"<string>\",\n \"forwardingPhoneNumber\": \"<string>\",\n \"variables\": {},\n \"metadata\": {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\"\n },\n \"priorityDate\": \"2025-01-15T00:00:00Z\",\n \"startAt\": \"2025-01-15T15:30:00Z\",\n \"attempt\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod.featherhq.com/api/v1/workflow/{workflowId}/execution")
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 \"customerLeadId\": \"<string>\",\n \"primaryPhone\": \"<string>\",\n \"zipcode\": \"<string>\",\n \"state\": \"<string>\",\n \"forwardingPhoneNumber\": \"<string>\",\n \"variables\": {},\n \"metadata\": {\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\"\n },\n \"priorityDate\": \"2025-01-15T00:00:00Z\",\n \"startAt\": \"2025-01-15T15:30:00Z\",\n \"attempt\": 0\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"startedAt": "<string>",
"completedAt": "<string>",
"customerLeadId": "<string>",
"primaryPhone": "<string>",
"metadata": {
"firstName": "<string>",
"lastName": "<string>"
},
"definition": {
"steps": [
{
"order": 2,
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"delayInSecs": 0,
"finishOn": [],
"leaveVoicemail": false,
"initialMessage": "<string>",
"count": 1
}
],
"isInfinite": false
},
"stepExecutions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflowExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order": 123,
"delayInSecs": 123,
"finishOn": [],
"startedAt": "<string>",
"completedAt": "<string>",
"leaveVoicemail": true,
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentCall": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "<string>",
"callStartedAt": "<string>",
"callEndedAt": "<string>",
"callDuration": 123,
"recordingUrl": "<string>",
"supervisorRecordingUrl": "<string>",
"summary": "<string>"
}
}
],
"createdAt": "<string>",
"variables": {},
"stepIndex": 123,
"nextRunAt": "<string>",
"priorityDate": "<string>"
}{
"status": 400,
"message": "Bad request",
"code": "BAD_REQUEST",
"success": false
}{
"status": 402,
"message": "Insufficient credits",
"code": "PAYMENT_REQUIRED",
"success": false
}{
"status": 500,
"message": "Internal server error",
"code": "INTERNAL_SERVER_ERROR",
"success": false
}Authorizations
Path Parameters
Body
Customer lead identifier
^\+1(\d{10}|\d{3}-\d{3}-\d{4})|^\+[1-9]\d{1,14}$^\d{5}(-?\d{4})?$^\+1(\d{10}|\d{3}-\d{3}-\d{4})|^\+[1-9]\d{1,14}$Variables for the execution
Show child attributes
Show child attributes
Additional metadata for the execution
Show child attributes
Show child attributes
Lead priority date (ISO 8601). Later/newer dates = higher priority. Defaults to creation time.
"2025-01-15T00:00:00Z"
Deferred execution start time (ISO 8601 with timezone). The first workflow step delay is applied after this time.
"2025-01-15T15:30:00Z"
Starting step index for the execution (0-indexed). Must be less than the total number of steps in the workflow.
x >= 00
Response
Agent workflow execution created successfully
Execution ID
Workflow ID
Execution status
CREATED, RUNNING, COMPLETED, FAILED, CANCELLED, PAUSED Execution start timestamp
Execution completion timestamp
Customer lead identifier
Primary phone number
Execution metadata
Show child attributes
Show child attributes
Final execution disposition
COULD_NOT_CONNECT, NO_ANSWER, LEFT_VOICEMAIL, VOICEMAIL_DETECTED, SILENCE_TIMEOUT, BAD_NUMBER, NOT_INTERESTED, WARM_TRANSFER, WARM_TRANSFER_FAILED, CALENDLY, DNC, ENDED, FRAUD, LINE_BUSY, TEXT_CONSENT, CALL_AGAIN Workflow definition snapshot
Show child attributes
Show child attributes
Step executions
Show child attributes
Show child attributes
Creation timestamp
Variables for the execution
Show child attributes
Show child attributes
Current step index being processed
Next scheduled run timestamp
Lead priority date