curl --request GET \
--url https://api.getoneprofile.ai/sender-profiles/{profile_id}/linkedin/history/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/sender-profiles/{profile_id}/linkedin/history/"
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/sender-profiles/{profile_id}/linkedin/history/', 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/sender-profiles/{profile_id}/linkedin/history/",
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/sender-profiles/{profile_id}/linkedin/history/"
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/sender-profiles/{profile_id}/linkedin/history/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sender-profiles/{profile_id}/linkedin/history/")
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{
"items": [
{
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"claimed_at": "2023-11-07T05:31:56Z",
"duration_ms": 123,
"error_code": "selector_missing",
"error_message": "<string>",
"finished_at": "2023-11-07T05:31:56Z",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "profile_view",
"outcome": {
"already_connected": true,
"already_following": true,
"can_send_message": true,
"invitation_pending": true,
"kind": "profile_view",
"member_urn": "<string>",
"member_urns": [
"<string>"
],
"open_profile": true,
"page_loaded": true,
"profile_resolved": true,
"reason": "invitation_already_pending",
"vanity": "<string>"
},
"params": {
"profile_url": "<string>",
"kind": "profile_view",
"read_relationship": false
},
"queued_at": "2023-11-07T05:31:56Z",
"status": "queued",
"acted_at": "2023-11-07T05:31:56Z",
"approved_at": "2023-11-07T05:31:56Z",
"held": false,
"hold": "sequence_paused",
"metered": true,
"requires_approval": false
}
],
"stats": {
"avg_duration_ms": 123,
"failed": 123,
"rejected": 123,
"skipped": 123,
"succeeded": 123,
"total": 123
},
"total": 123
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>",
"issues": [
{
"input": "<string>",
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}List completed LinkedIn steps
Settled actions, newest first, with lifetime outcome counts and timings.
curl --request GET \
--url https://api.getoneprofile.ai/sender-profiles/{profile_id}/linkedin/history/ \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.getoneprofile.ai/sender-profiles/{profile_id}/linkedin/history/"
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/sender-profiles/{profile_id}/linkedin/history/', 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/sender-profiles/{profile_id}/linkedin/history/",
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/sender-profiles/{profile_id}/linkedin/history/"
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/sender-profiles/{profile_id}/linkedin/history/")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.getoneprofile.ai/sender-profiles/{profile_id}/linkedin/history/")
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{
"items": [
{
"account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"claimed_at": "2023-11-07T05:31:56Z",
"duration_ms": 123,
"error_code": "selector_missing",
"error_message": "<string>",
"finished_at": "2023-11-07T05:31:56Z",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "profile_view",
"outcome": {
"already_connected": true,
"already_following": true,
"can_send_message": true,
"invitation_pending": true,
"kind": "profile_view",
"member_urn": "<string>",
"member_urns": [
"<string>"
],
"open_profile": true,
"page_loaded": true,
"profile_resolved": true,
"reason": "invitation_already_pending",
"vanity": "<string>"
},
"params": {
"profile_url": "<string>",
"kind": "profile_view",
"read_relationship": false
},
"queued_at": "2023-11-07T05:31:56Z",
"status": "queued",
"acted_at": "2023-11-07T05:31:56Z",
"approved_at": "2023-11-07T05:31:56Z",
"held": false,
"hold": "sequence_paused",
"metered": true,
"requires_approval": false
}
],
"stats": {
"avg_duration_ms": 123,
"failed": 123,
"rejected": 123,
"skipped": 123,
"succeeded": 123,
"total": 123
},
"total": 123
}{
"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
Query Parameters
What the browser agent is being asked to do.
The four CHECK_*/READ_* kinds are housekeeping: they read our own
outbound invitations, our own newest connections and our own conversations to
detect what the contact did, so they are free and deliberately excluded from
the priced kinds below.
CHECK_CONNECTIONS reads the first batch of the sender's connections list,
newest first: a person found there has accepted, whenever the invitation
went out. It is how an acceptance is noticed at all once an invitation has
fallen out of the ten rows the sent list shows a background tab.
CHECK_INBOX scans the conversation list for threads with new inbound
activity; READ_CONVERSATION opens one of them and reads it in full. The
split keeps LinkedIn activity proportional to real replies: the cheap scan
runs on every sweep, the expensive read only where the scan saw a change.
LIKE_LATEST_POST targets the contact's most recent post at the moment
the browser runs it. A contact with no posts is not a failure: the driver
reports the action SKIPPED, and the sequence advances either way.
Every profile-targeted outcome carries the facts the browser read off the profile, including the three-state Premium "Open Profile" reading; see the section comment above the outcome models.
profile_view, connection_request, send_message, inmail, withdraw_connection_request, follow_contact, like_latest_post, check_sent_invitations, check_connections, check_inbox, read_conversation Where one queued action stands.
Governor-deferral is deliberately NOT a status: an action whose kind has hit
its daily cap stays QUEUED and is simply not handed out, with the reason
travelling on the hand-out response instead. A DEFERRED row would make
the queue lie about what is still waiting to happen.
SKIPPED is "not applicable" (no LinkedIn URL, already connected);
REJECTED is "a human refused it"; FAILED is "we tried and could not".
RESUMING is a step put back in line after an attempt that may have
acted on LinkedIn (its browser was granted the press, or lost track of the
step): it is never "queued", so no path that assumes nothing happened yet
(moving it to another sender, a plain copy, "did not run") ever reads it as
such, and it is handed only to a browser that checks LinkedIn before acting.
queued, resuming, claimed, succeeded, failed, rejected, skipped 1 <= x <= 200x >= 0Was this page helpful?