curl --request GET \
--url https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/', 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/activity/{activity_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/activity/{activity_id}/"
req, _ := http.NewRequest("GET", 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.get("https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"agent_written": true,
"ask_reason": "low_confidence",
"audience_table_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"background": true,
"body": "<string>",
"channel": "linkedin",
"contact_identity": "<string>",
"contact_label": "<string>",
"decided_at": "2023-11-07T05:31:56Z",
"decided_by_display_name": "<string>",
"decision": "approved",
"detail": "<string>",
"enrolment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error_code": "<string>",
"hand_edited": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"linkedin_action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"looks_good": true,
"mailbox_address": "<string>",
"mailbox_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurred_at": "2023-11-07T05:31:56Z",
"outbound_message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "sent",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_name": "<string>",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_name": "<string>",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_name": "<string>",
"step_position": 123,
"subject": "<string>",
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"acted_at": "2023-11-07T05:31:56Z",
"contact_company": "<string>",
"contact_title": "<string>",
"found_already": false,
"proposed_learning_event_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sent_without_note": false
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Read one activity row
One row of Activity, exactly as the list reads it: what went out (or was refused), as which sender, how it ended and who let it go. A link to one row opens it with this, whichever page of the list it sits on.
curl --request GET \
--url https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/', 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/activity/{activity_id}/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
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/activity/{activity_id}/"
req, _ := http.NewRequest("GET", 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.get("https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/outreach-tasks/activity/{activity_id}/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"agent_written": true,
"ask_reason": "low_confidence",
"audience_table_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"background": true,
"body": "<string>",
"channel": "linkedin",
"contact_identity": "<string>",
"contact_label": "<string>",
"decided_at": "2023-11-07T05:31:56Z",
"decided_by_display_name": "<string>",
"decision": "approved",
"detail": "<string>",
"enrolment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error_code": "<string>",
"hand_edited": true,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "<string>",
"linkedin_action_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"looks_good": true,
"mailbox_address": "<string>",
"mailbox_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"occurred_at": "2023-11-07T05:31:56Z",
"outbound_message_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "sent",
"record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sender_profile_name": "<string>",
"sequence_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_name": "<string>",
"step_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_name": "<string>",
"step_position": 123,
"subject": "<string>",
"task_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"acted_at": "2023-11-07T05:31:56Z",
"contact_company": "<string>",
"contact_title": "<string>",
"found_already": false,
"proposed_learning_event_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sent_without_note": false
}{
"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 email or LinkedIn step that went out as a sender, or a task a person refused.
Whether the outbound agent wrote the words.
Why it was held for a person before it went; null when it was not held.
low_confidence, findings, insufficient_data, policy, always_ask, sequence_manual, step_requires_approval, daily_cap, unverified_sender, suppressed, different_sender, label, question, consecutive_cap, thread_cap, hourly_cap, org_daily_cap, stale_inbound, sequence_gone, bot_question, automated_counterparty, kill_switch, authentication, language, linkedin_only, send_interrupted, sender_switched_to_manual The table the sequence reads its audience from, for opening the contact's row; null outside a sequence or when the sequence is gone.
Whether this is one of our own LinkedIn reads of the sender's account (the inbox, the sent connection requests, the newest connections, one conversation), which acts on nobody.
The words as they went out, or would have for a refusal; for a Browser use run, the site it worked on.
Which channel performs the task once it is allowed to run.
BROWSER is the one channel that performs nothing: a Browser use run
that settled on Needs human leaves a task for a person to pick up what the
agent could not do (BU-08). Its contact already went on down the Needs
human arm, so the task is a to-do with one verb, done, and no approval or
rejection reaches it.
linkedin, email, browser The address or LinkedIn profile behind the label.
The contact as the queue names them: a name, else an address or profile.
Who approved it, refused it or sent it: a person's name, an API key's, or the platform's. Null when nobody did.
Who let one unit of outreach go, or refused it.
APPROVED: a person (or an API key) approved it before it went.
AUTOMATIC: nobody was asked; the sender's or the sequence's rules let
it go. REJECTED: a person refused it, so it never went.
SENT_BY_PERSON: a person wrote it and sent it themselves, from the inbox.
NOT_RECORDED: a LinkedIn step that ran before Activity existed whose
approval a later step of the same contact has since overwritten; saying so
is truer than guessing.
approved, automatic, rejected, sent_by_person, not_recorded Why it failed, in the channel's words, or why the person refused it; for a Browser use run, why it needed a person or failed.
The contact's place in the sequence, for opening them on its Audience tab.
The LinkedIn step's error code, or for a skip its specific reason, for the words every LinkedIn surface gives it.
A person edited the agent's words before they went, so Needs work is refused on them.
The LinkedIn action slug, or email (a sequence's email), reply, or browser_use (a settled Browser use run, on the browser channel).
A person marked the words that went out Looks good (PUT /agent-learnings/sent-messages/{message_id}/looks-good/).
The address an email left from; null for LinkedIn.
When it was sent, when the LinkedIn step ended, or when it was refused.
The outbound agent's message whose words went out (or would have, for a refusal): a sequence's email or LinkedIn step, a connection request's note, an approved reply. A thumbs down on what went out is given on it (message:<id>), whether or not it had a task. Null when the agent wrote none of the words, and on rows from before it was kept that nothing could fill.
How one unit of outreach ended.
SENT is an email the provider accepted, or a LinkedIn message, InMail
or connection request that went out, so one thing reads one way on both
channels (2026-10-21); DONE a LinkedIn step that only acted on a
profile (a view, a follow, a like, a withdrawal). SKIPPED is a step that
did not apply or was passed over in the extension; ALREADY_PENDING the
one skip every LinkedIn surface names apart, a connection request somebody
had already sent; STOPPED one stopped while a browser ran it.
NOT_SENT is a task a person refused, which never reached its channel.
RECEIVED is the one row that is not ours: a message the contact sent us,
or their acceptance of our connection request (ReceivedActivityKind,
review AC-11).
A Browser use run (BU-18) settles DONE on one of its step's outcomes,
NEEDS_HUMAN when it left the contact for a person, or FAILED.
sent, done, failed, skipped, already_pending, stopped, not_sent, received, needs_human The contact's row in the sequence's audience table.
The sender it went out as; null when the sender was since deleted.
The step as its card in the Builder names it; null outside a sequence.
An email's subject line; for a Browser use run, the outcome it settled on (null for Needs human and a failure).
Its task on the Tasks page, when it had one.
The inbox conversation, when there is one.
When a LinkedIn step acted on LinkedIn. Set on a step marked failed means it went through after all, after it was marked failed.
The contact's company, from their audience row.
The contact's job title, from their audience row.
A step that was cut off, came back, and found its own earlier attempt had already done it.
The feedback session waiting on the words that went out (outbound_message_id): notes were given (message:<id>) and what they would teach waits for Looks good, which saves it, or Discard feedback, which drops it. The row's 'Unfinished feedback' chip. Read it with GET /agent-learnings/thumbs-downs/{event_id}/. Null when none waits.
A connection request LinkedIn sent the moment Connect was pressed, before its note could be added: the connection request went, the note did not.
Was this page helpful?