curl --request POST \
--url https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"body": "<string>",
"subject": "<string>"
}
'import requests
url = "https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/"
payload = {
"body": "<string>",
"subject": "<string>"
}
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({body: JSON.stringify('<string>'), subject: '<string>'})
};
fetch('https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/', 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}/edit/",
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([
'body' => '<string>',
'subject' => '<string>'
]),
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.getoneprofile.ai/outreach-tasks/{task_id}/edit/"
payload := strings.NewReader("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\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.getoneprofile.ai/outreach-tasks/{task_id}/edit/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/")
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 \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}"
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>"
}Rewrite a pending task's message
Change what a pending task will send before approving it. An email’s rewrite is stored as the contact’s message override; a LinkedIn note or message is rewritten on the action itself, clipped to LinkedIn’s ceilings the way the step’s own render would be. Only while the task is pending: once the channel has it, the text a person saw is the text that sends.
curl --request POST \
--url https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/ \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"body": "<string>",
"subject": "<string>"
}
'import requests
url = "https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/"
payload = {
"body": "<string>",
"subject": "<string>"
}
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({body: JSON.stringify('<string>'), subject: '<string>'})
};
fetch('https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/', 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}/edit/",
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([
'body' => '<string>',
'subject' => '<string>'
]),
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.getoneprofile.ai/outreach-tasks/{task_id}/edit/"
payload := strings.NewReader("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\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.getoneprofile.ai/outreach-tasks/{task_id}/edit/")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outreach-tasks/{task_id}/edit/")
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 \"body\": \"<string>\",\n \"subject\": \"<string>\"\n}"
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
Body
Rewrite what a pending task will send.
subject left out keeps the subject the task already carries; an
explicit null clears it, which for an email means the follow-up lands
in-thread. The two are told apart on the wire so a client fixing a typo
in the body cannot silently strip a first email's subject.
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?