curl --request POST \
--url https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/', 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.getoneprofile.ai/outreach-tasks/{task_id}/approve/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.getoneprofile.ai/outreach-tasks/{task_id}/approve/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"approved_at": "2023-11-07T05:31:56Z",
"approved_by_display_name": "<string>",
"body": "<string>",
"call_brief": "<string>",
"channel": "linkedin",
"contact_label": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"due_at": "2023-11-07T05:31:56Z",
"editable": true,
"enrolment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"linkedin_action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"note": "<string>",
"outcome": "<string>",
"phone_number": "<string>",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rejected_at": "2023-11-07T05:31:56Z",
"rejected_by_display_name": "<string>",
"resolved_at": "2023-11-07T05:31:56Z",
"sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_name": "<string>",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_name": "<string>",
"status": "pending",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_name": "<string>",
"step_position": 123,
"subject": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Approve a task
Let a pending task run, and record who said so. A LinkedIn step is approved on the channel too, in the same transaction, so whichever browser holds the lease performs it on its next pass; an email is sent on the engine’s next tick.
curl --request POST \
--url https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/"
headers = {"X-API-Key": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/', 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.getoneprofile.ai/outreach-tasks/{task_id}/approve/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
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.getoneprofile.ai/outreach-tasks/{task_id}/approve/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outreach-tasks/{task_id}/approve/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"approved_at": "2023-11-07T05:31:56Z",
"approved_by_display_name": "<string>",
"body": "<string>",
"call_brief": "<string>",
"channel": "linkedin",
"contact_label": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"due_at": "2023-11-07T05:31:56Z",
"editable": true,
"enrolment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"linkedin_action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"note": "<string>",
"outcome": "<string>",
"phone_number": "<string>",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rejected_at": "2023-11-07T05:31:56Z",
"rejected_by_display_name": "<string>",
"resolved_at": "2023-11-07T05:31:56Z",
"sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_name": "<string>",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_name": "<string>",
"status": "pending",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_name": "<string>",
"step_position": 123,
"subject": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Path Parameters
Response
Successful Response
One row of the approval queue, every name the page shows resolved server-side.
The task table stores ids; the page shows names. The sequence, the step, the sender and the deciding person are all resolved here rather than by the client, so no raw actor id ever crosses the wire and a sequence or sender since deleted reads as a blank rather than a broken lookup.
Who approved it, as a name. For a call, who made it. Null when nobody has, or the person could not be resolved.
The rendered message as it will send: an email body, a note, a LinkedIn message.
Which channel performs the task once it is allowed to run.
linkedin, email, phone The contact as the queue names them: a name, else an address or a profile URL.
When the channel would run it if nobody were in the way.
Whether the queue may rewrite the message before approving: pending, and a kind that carries text.
The LinkedIn action kind slug, email, or call.
What the person wrote when settling it: the call note, or why they rejected it.
How it ended: a call outcome, or the channel's own terminal word.
Null when nobody in particular sends it, or the sender was deleted.
Null for housekeeping work, or for a sequence since deleted.
Where one task stands.
PENDING is waiting on a person. SCHEDULED is approved, or never needed
approval, and is waiting on the channel to execute it: the browser to
claim the LinkedIn action, the engine to send the email. A LinkedIn task
on an AUTO account is BORN scheduled, because the browser will run it
regardless of what this row says, and a queue showing it as awaiting
approval would be lying. A phone task never has approved_at at all:
nobody approves a call, somebody makes it, and it goes PENDING to DONE
with the outcome recorded. That is why approval is a stamp on the row and
not a status of its own.
DONE, REJECTED and CANCELLED are terminal. DONE is the channel executed it, or the call was worked; REJECTED is a person refused it; CANCELLED is the channel gave up on it — failed, skipped, expired, or the contact was stopped underneath it.
pending, scheduled, done, rejected, cancelled The step as the builder names it; null when the step no longer exists.
The step's customer-visible ordinal, zero-based; null with the name.
Was this page helpful?