Get Flow Workspace
curl --request POST \
--url https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"flowPlanId": "<string>",
"awaitingLimit": 25,
"awaitingCursor": null,
"awaitingSearchQuery": null,
"signalPreviewCursor": null
}
'import requests
url = "https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace"
payload = {
"flowPlanId": "<string>",
"awaitingLimit": 25,
"awaitingCursor": None,
"awaitingSearchQuery": None,
"signalPreviewCursor": None
}
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({
flowPlanId: '<string>',
awaitingLimit: 25,
awaitingCursor: null,
awaitingSearchQuery: null,
signalPreviewCursor: null
})
};
fetch('https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace', 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://gateway.firsttouch.ai/api/public/tools/get_flow_workspace",
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([
'flowPlanId' => '<string>',
'awaitingLimit' => 25,
'awaitingCursor' => null,
'awaitingSearchQuery' => null,
'signalPreviewCursor' => null
]),
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://gateway.firsttouch.ai/api/public/tools/get_flow_workspace"
payload := strings.NewReader("{\n \"flowPlanId\": \"<string>\",\n \"awaitingLimit\": 25,\n \"awaitingCursor\": null,\n \"awaitingSearchQuery\": null,\n \"signalPreviewCursor\": null\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://gateway.firsttouch.ai/api/public/tools/get_flow_workspace")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"flowPlanId\": \"<string>\",\n \"awaitingLimit\": 25,\n \"awaitingCursor\": null,\n \"awaitingSearchQuery\": null,\n \"signalPreviewCursor\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace")
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 \"flowPlanId\": \"<string>\",\n \"awaitingLimit\": 25,\n \"awaitingCursor\": null,\n \"awaitingSearchQuery\": null,\n \"signalPreviewCursor\": null\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Flow Plans
Get Flow Workspace
Get the current workspace for an existing flow: flow details, live details for its configured candidates, linked source status, estimated single-enrollment credit cost, awaiting contacts or signal events, enrollment counts/statistics, variable guidance, and available enrollment actions.
Usage notes
- candidateDetails is the source of truth for candidate account state; do not infer LinkedIn availability from the deprecated reassignment payload linkedin_account_id.
- Use this for flow-level enrollment statistics; use list_flow_plan_enrollments for this flow’s page-style rows, list_enrollments for advanced multi-flow enrollment search, and get_flow_enrollment for one enrollment’s actions/warnings.
POST
/
api
/
public
/
tools
/
get_flow_workspace
Get Flow Workspace
curl --request POST \
--url https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"flowPlanId": "<string>",
"awaitingLimit": 25,
"awaitingCursor": null,
"awaitingSearchQuery": null,
"signalPreviewCursor": null
}
'import requests
url = "https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace"
payload = {
"flowPlanId": "<string>",
"awaitingLimit": 25,
"awaitingCursor": None,
"awaitingSearchQuery": None,
"signalPreviewCursor": None
}
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({
flowPlanId: '<string>',
awaitingLimit: 25,
awaitingCursor: null,
awaitingSearchQuery: null,
signalPreviewCursor: null
})
};
fetch('https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace', 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://gateway.firsttouch.ai/api/public/tools/get_flow_workspace",
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([
'flowPlanId' => '<string>',
'awaitingLimit' => 25,
'awaitingCursor' => null,
'awaitingSearchQuery' => null,
'signalPreviewCursor' => null
]),
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://gateway.firsttouch.ai/api/public/tools/get_flow_workspace"
payload := strings.NewReader("{\n \"flowPlanId\": \"<string>\",\n \"awaitingLimit\": 25,\n \"awaitingCursor\": null,\n \"awaitingSearchQuery\": null,\n \"signalPreviewCursor\": null\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://gateway.firsttouch.ai/api/public/tools/get_flow_workspace")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"flowPlanId\": \"<string>\",\n \"awaitingLimit\": 25,\n \"awaitingCursor\": null,\n \"awaitingSearchQuery\": null,\n \"signalPreviewCursor\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://gateway.firsttouch.ai/api/public/tools/get_flow_workspace")
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 \"flowPlanId\": \"<string>\",\n \"awaitingLimit\": 25,\n \"awaitingCursor\": null,\n \"awaitingSearchQuery\": null,\n \"signalPreviewCursor\": null\n}"
response = http.request(request)
puts response.read_body{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Authorizations
Body
application/json
Existing flow plan id. Use the exact flowPlanId returned by create_flow_plan, list_flow_plans, get_flow_workspace, or add_dynamic_action.
Max awaiting contacts or signal events to return.
Cursor returned in awaiting.cursor for the next awaiting page.
Search text for awaiting contacts.
Cursor returned in sourceStatus.signalPreview.cursor for the next signal event preview page.
Response
Tool result.