curl --request POST \
--url https://api.example.com/api/public/tools/list_linkedin_team_connections \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"mode": null,
"ownerUserId": null,
"ownerSearch": null,
"linAccountId": null,
"connectedPersonLinkedInUrl": null,
"connectedPersonPublicIdentifier": null,
"connectedPersonName": null,
"searchQuery": null,
"headlineKeywords": null,
"connectedFromUtc": null,
"connectedToUtc": null,
"limit": null,
"cursor": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_linkedin_team_connections"
payload = {
"mode": None,
"ownerUserId": None,
"ownerSearch": None,
"linAccountId": None,
"connectedPersonLinkedInUrl": None,
"connectedPersonPublicIdentifier": None,
"connectedPersonName": None,
"searchQuery": None,
"headlineKeywords": None,
"connectedFromUtc": None,
"connectedToUtc": None,
"limit": None,
"cursor": 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({
mode: null,
ownerUserId: null,
ownerSearch: null,
linAccountId: null,
connectedPersonLinkedInUrl: null,
connectedPersonPublicIdentifier: null,
connectedPersonName: null,
searchQuery: null,
headlineKeywords: null,
connectedFromUtc: null,
connectedToUtc: null,
limit: null,
cursor: null
})
};
fetch('https://api.example.com/api/public/tools/list_linkedin_team_connections', 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.example.com/api/public/tools/list_linkedin_team_connections",
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([
'mode' => null,
'ownerUserId' => null,
'ownerSearch' => null,
'linAccountId' => null,
'connectedPersonLinkedInUrl' => null,
'connectedPersonPublicIdentifier' => null,
'connectedPersonName' => null,
'searchQuery' => null,
'headlineKeywords' => null,
'connectedFromUtc' => null,
'connectedToUtc' => null,
'limit' => null,
'cursor' => 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://api.example.com/api/public/tools/list_linkedin_team_connections"
payload := strings.NewReader("{\n \"mode\": null,\n \"ownerUserId\": null,\n \"ownerSearch\": null,\n \"linAccountId\": null,\n \"connectedPersonLinkedInUrl\": null,\n \"connectedPersonPublicIdentifier\": null,\n \"connectedPersonName\": null,\n \"searchQuery\": null,\n \"headlineKeywords\": null,\n \"connectedFromUtc\": null,\n \"connectedToUtc\": null,\n \"limit\": null,\n \"cursor\": 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://api.example.com/api/public/tools/list_linkedin_team_connections")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"mode\": null,\n \"ownerUserId\": null,\n \"ownerSearch\": null,\n \"linAccountId\": null,\n \"connectedPersonLinkedInUrl\": null,\n \"connectedPersonPublicIdentifier\": null,\n \"connectedPersonName\": null,\n \"searchQuery\": null,\n \"headlineKeywords\": null,\n \"connectedFromUtc\": null,\n \"connectedToUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_linkedin_team_connections")
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 \"mode\": null,\n \"ownerUserId\": null,\n \"ownerSearch\": null,\n \"linAccountId\": null,\n \"connectedPersonLinkedInUrl\": null,\n \"connectedPersonPublicIdentifier\": null,\n \"connectedPersonName\": null,\n \"searchQuery\": null,\n \"headlineKeywords\": null,\n \"connectedFromUtc\": null,\n \"connectedToUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}"
response = http.request(request)
puts response.read_body{
"summary": "<string>",
"mode": "auto",
"connections": {
"items": [
{
"owner": {
"userId": "<string>",
"teamMembershipId": "<string>",
"name": "<string>",
"email": "<string>"
},
"linkedinAccount": {
"linAccountId": "<string>",
"name": "<string>",
"status": "<string>",
"publicIdentifier": "<string>",
"relationsSyncedAtUtc": "2023-11-07T05:31:56Z",
"relationsSyncPending": true
},
"connection": {
"relationId": "<string>",
"publicIdentifier": "<string>",
"publicProfileUrl": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"fullName": "<string>",
"headline": "<string>",
"memberId": "<string>",
"memberUrn": "<string>",
"connectionUrn": "<string>",
"profilePictureUrl": "<string>",
"createdAtUnix": 123,
"connectedAtUtc": "2023-11-07T05:31:56Z",
"lastSyncedAtUtc": "2023-11-07T05:31:56Z"
}
}
],
"cursor": "<string>",
"totalCount": 123
},
"warnings": [
"<string>"
],
"nextSteps": [
"<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>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}List LinkedIn Team Connections
Returns saved LinkedIn connection data from the FirstTouch database only.
Detailed usage guidance
- With no filters, returns paginated known connections for the current team.
- When the user asks to find, show, or search connections by a role, job title, profession, department, or specialty, you MUST populate headlineKeywords and MUST NOT make an unfiltered call.
- Examples: ‘Sales Persons in my team connections’, ‘people in sales’, ‘CFOs’, ‘marketing leaders’, or ‘React developers’.
- First extract the role-bearing word or phrase; ignore generic group words such as person, people, contacts, and connections.
- For ‘Sales Persons’, sales is the role-bearing term: include ‘sales’ as a fallback, not only ‘salesperson’.
- Derive up to nine precise literal title alternatives plus one broad, meaningful role fallback (ten keywords maximum) and pass them together through headlineKeywords; it matches any alternative only against saved connection headlines.
- When the request limits when the LinkedIn connection was made, populate connectedFromUtc and/or connectedToUtc.
- Resolve relative periods before calling: ‘last week’ is the prior Monday 00:00 UTC (inclusive) through the current Monday 00:00 UTC (exclusive); ‘past 7 days’ is a rolling seven-day range.
- Use other filters for a known person, owner, LinkedIn URL, or public identifier.
- Do not use weak standalone words such as ‘person’, ‘manager’, or ‘director’ as keywords; expand abbreviations where possible.
- This is deterministic keyword matching over saved data, not semantic/RAG search, reads stored FirstTouch data only, and performs no external requests.
curl --request POST \
--url https://api.example.com/api/public/tools/list_linkedin_team_connections \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"mode": null,
"ownerUserId": null,
"ownerSearch": null,
"linAccountId": null,
"connectedPersonLinkedInUrl": null,
"connectedPersonPublicIdentifier": null,
"connectedPersonName": null,
"searchQuery": null,
"headlineKeywords": null,
"connectedFromUtc": null,
"connectedToUtc": null,
"limit": null,
"cursor": null
}
'import requests
url = "https://api.example.com/api/public/tools/list_linkedin_team_connections"
payload = {
"mode": None,
"ownerUserId": None,
"ownerSearch": None,
"linAccountId": None,
"connectedPersonLinkedInUrl": None,
"connectedPersonPublicIdentifier": None,
"connectedPersonName": None,
"searchQuery": None,
"headlineKeywords": None,
"connectedFromUtc": None,
"connectedToUtc": None,
"limit": None,
"cursor": 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({
mode: null,
ownerUserId: null,
ownerSearch: null,
linAccountId: null,
connectedPersonLinkedInUrl: null,
connectedPersonPublicIdentifier: null,
connectedPersonName: null,
searchQuery: null,
headlineKeywords: null,
connectedFromUtc: null,
connectedToUtc: null,
limit: null,
cursor: null
})
};
fetch('https://api.example.com/api/public/tools/list_linkedin_team_connections', 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.example.com/api/public/tools/list_linkedin_team_connections",
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([
'mode' => null,
'ownerUserId' => null,
'ownerSearch' => null,
'linAccountId' => null,
'connectedPersonLinkedInUrl' => null,
'connectedPersonPublicIdentifier' => null,
'connectedPersonName' => null,
'searchQuery' => null,
'headlineKeywords' => null,
'connectedFromUtc' => null,
'connectedToUtc' => null,
'limit' => null,
'cursor' => 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://api.example.com/api/public/tools/list_linkedin_team_connections"
payload := strings.NewReader("{\n \"mode\": null,\n \"ownerUserId\": null,\n \"ownerSearch\": null,\n \"linAccountId\": null,\n \"connectedPersonLinkedInUrl\": null,\n \"connectedPersonPublicIdentifier\": null,\n \"connectedPersonName\": null,\n \"searchQuery\": null,\n \"headlineKeywords\": null,\n \"connectedFromUtc\": null,\n \"connectedToUtc\": null,\n \"limit\": null,\n \"cursor\": 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://api.example.com/api/public/tools/list_linkedin_team_connections")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"mode\": null,\n \"ownerUserId\": null,\n \"ownerSearch\": null,\n \"linAccountId\": null,\n \"connectedPersonLinkedInUrl\": null,\n \"connectedPersonPublicIdentifier\": null,\n \"connectedPersonName\": null,\n \"searchQuery\": null,\n \"headlineKeywords\": null,\n \"connectedFromUtc\": null,\n \"connectedToUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/public/tools/list_linkedin_team_connections")
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 \"mode\": null,\n \"ownerUserId\": null,\n \"ownerSearch\": null,\n \"linAccountId\": null,\n \"connectedPersonLinkedInUrl\": null,\n \"connectedPersonPublicIdentifier\": null,\n \"connectedPersonName\": null,\n \"searchQuery\": null,\n \"headlineKeywords\": null,\n \"connectedFromUtc\": null,\n \"connectedToUtc\": null,\n \"limit\": null,\n \"cursor\": null\n}"
response = http.request(request)
puts response.read_body{
"summary": "<string>",
"mode": "auto",
"connections": {
"items": [
{
"owner": {
"userId": "<string>",
"teamMembershipId": "<string>",
"name": "<string>",
"email": "<string>"
},
"linkedinAccount": {
"linAccountId": "<string>",
"name": "<string>",
"status": "<string>",
"publicIdentifier": "<string>",
"relationsSyncedAtUtc": "2023-11-07T05:31:56Z",
"relationsSyncPending": true
},
"connection": {
"relationId": "<string>",
"publicIdentifier": "<string>",
"publicProfileUrl": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"fullName": "<string>",
"headline": "<string>",
"memberId": "<string>",
"memberUrn": "<string>",
"connectionUrn": "<string>",
"profilePictureUrl": "<string>",
"createdAtUnix": 123,
"connectedAtUtc": "2023-11-07T05:31:56Z",
"lastSyncedAtUtc": "2023-11-07T05:31:56Z"
}
}
],
"cursor": "<string>",
"totalCount": 123
},
"warnings": [
"<string>"
],
"nextSteps": [
"<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>"
}{
"error": "<string>",
"message": "<string>",
"traceId": "<string>"
}Authorizations
Body
Lookup mode.
- Omit or set auto for all known team connections, or when filters make the intent obvious.
- Use connections_of_team_member for 'show Michael's connections'.
- Use team_members_connected_to_person for 'who on our team is connected to Michael'.
auto, connections_of_team_member, team_members_connected_to_person, null FirstTouch team member user id whose LinkedIn account owns the relation list. Use for connections_of_team_member, or to narrow team_members_connected_to_person.
Search team member/account owner by name, email, LinkedIn account name, or LinkedIn public identifier. Example: Michael Kurson.
Exact FirstTouch LinkedIn account id to read or narrow by.
Connected person's LinkedIn profile URL.
Connected person's LinkedIn public identifier, for example michael-kurson.
Connected person's first name, last name, or full name. Example: Michael Kurson.
Generic search over saved connected-person name, headline, LinkedIn URL, and public identifier.
Use for requests about the type of connection rather than a known individual: role, job title, profession, department, or specialty.
- First extract the role-bearing word or phrase; generic group nouns such as person, people, contact, connection, and list are not search keywords.
- When the user asks for 'Sales Persons', 'people in sales', 'CFOs', 'marketing leaders', or 'React developers', populate this argument before calling; do not issue an unfiltered request.
- Supply up to nine precise literal title alternatives plus one broad, meaningful role fallback, with ten keywords maximum.
- A connection matches when its saved headline contains any alternative, case-insensitively.
- Put the user's direct phrase first because it ranks ahead of alternative-only matches, and put the broad fallback last.
- For 'Sales Persons', sales is the role-bearing term and the array MUST include 'sales', not only 'salesperson'.
- Example: ['sales person', 'salesperson', 'sales agent', 'sales representative', 'account executive', 'business development representative', 'sales'].
- Do not submit weak standalone words such as 'person', 'manager', or 'director'.
- Include an acronym only alongside its expanded title.
- Leave mode as auto unless also narrowing by an owner.
- Do not put these alternatives in searchQuery; searchQuery is a separate generic literal filter and combines with this filter.
Inclusive lower bound for when the LinkedIn connection was made, in ISO 8601 UTC form with an explicit offset.
- Use this when the user asks for connections from/since a date or period.
- For 'last week', use the prior Monday at 00:00 UTC.
- Connections without a saved LinkedIn connection date are excluded when this filter is used.
Exclusive upper bound for when the LinkedIn connection was made, in ISO 8601 UTC form with an explicit offset.
- Use with connectedFromUtc for a period.
- For 'last week', use the current Monday at 00:00 UTC.
- Connections without a saved LinkedIn connection date are excluded when this filter is used.
Maximum rows to return. Defaults to 20, max 100.
Pagination cursor returned by a previous list_linkedin_team_connections response.

