curl --request POST \
--url https://app.pipecorn.com/api/v2/intents/leads/warm_intros \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"linkedin_url": "https://www.linkedin.com/in/john-doe",
"linkedin_profile_url": "<string>",
"persona_id": "8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b",
"job_titles": [
"Head of Sales",
"VP Sales"
],
"excluded_job_titles": [
"Intern"
],
"limit": 25
}
'import requests
url = "https://app.pipecorn.com/api/v2/intents/leads/warm_intros"
payload = {
"linkedin_url": "https://www.linkedin.com/in/john-doe",
"linkedin_profile_url": "<string>",
"persona_id": "8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b",
"job_titles": ["Head of Sales", "VP Sales"],
"excluded_job_titles": ["Intern"],
"limit": 25
}
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({
linkedin_url: 'https://www.linkedin.com/in/john-doe',
linkedin_profile_url: '<string>',
persona_id: '8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b',
job_titles: ['Head of Sales', 'VP Sales'],
excluded_job_titles: ['Intern'],
limit: 25
})
};
fetch('https://app.pipecorn.com/api/v2/intents/leads/warm_intros', 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://app.pipecorn.com/api/v2/intents/leads/warm_intros",
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([
'linkedin_url' => 'https://www.linkedin.com/in/john-doe',
'linkedin_profile_url' => '<string>',
'persona_id' => '8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b',
'job_titles' => [
'Head of Sales',
'VP Sales'
],
'excluded_job_titles' => [
'Intern'
],
'limit' => 25
]),
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://app.pipecorn.com/api/v2/intents/leads/warm_intros"
payload := strings.NewReader("{\n \"linkedin_url\": \"https://www.linkedin.com/in/john-doe\",\n \"linkedin_profile_url\": \"<string>\",\n \"persona_id\": \"8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b\",\n \"job_titles\": [\n \"Head of Sales\",\n \"VP Sales\"\n ],\n \"excluded_job_titles\": [\n \"Intern\"\n ],\n \"limit\": 25\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://app.pipecorn.com/api/v2/intents/leads/warm_intros")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"linkedin_url\": \"https://www.linkedin.com/in/john-doe\",\n \"linkedin_profile_url\": \"<string>\",\n \"persona_id\": \"8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b\",\n \"job_titles\": [\n \"Head of Sales\",\n \"VP Sales\"\n ],\n \"excluded_job_titles\": [\n \"Intern\"\n ],\n \"limit\": 25\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pipecorn.com/api/v2/intents/leads/warm_intros")
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 \"linkedin_url\": \"https://www.linkedin.com/in/john-doe\",\n \"linkedin_profile_url\": \"<string>\",\n \"persona_id\": \"8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b\",\n \"job_titles\": [\n \"Head of Sales\",\n \"VP Sales\"\n ],\n \"excluded_job_titles\": [\n \"Intern\"\n ],\n \"limit\": 25\n}"
response = http.request(request)
puts response.read_body{
"total_count": 12,
"past_companies": [
{
"id": "1035",
"name": "BNP Paribas"
}
],
"leads": [
{
"first_name": "Jane",
"last_name": "Doe",
"full_name": "Jane Doe",
"headline": "VP Sales at Acme Corp",
"degree": 2,
"current_title": "VP Sales",
"current_company": "Acme Corp",
"linkedin_id": "ACwAABD5FBQ",
"sales_navigator_url": "https://www.linkedin.com/sales/lead/ACwAABD5FBQ,NAME_SEARCH,vIqI/"
}
]
}Find warm intros
Find the people connected to a LinkedIn profile who worked at one of its past companies, optionally filtered by a persona or job titles.
curl --request POST \
--url https://app.pipecorn.com/api/v2/intents/leads/warm_intros \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"linkedin_url": "https://www.linkedin.com/in/john-doe",
"linkedin_profile_url": "<string>",
"persona_id": "8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b",
"job_titles": [
"Head of Sales",
"VP Sales"
],
"excluded_job_titles": [
"Intern"
],
"limit": 25
}
'import requests
url = "https://app.pipecorn.com/api/v2/intents/leads/warm_intros"
payload = {
"linkedin_url": "https://www.linkedin.com/in/john-doe",
"linkedin_profile_url": "<string>",
"persona_id": "8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b",
"job_titles": ["Head of Sales", "VP Sales"],
"excluded_job_titles": ["Intern"],
"limit": 25
}
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({
linkedin_url: 'https://www.linkedin.com/in/john-doe',
linkedin_profile_url: '<string>',
persona_id: '8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b',
job_titles: ['Head of Sales', 'VP Sales'],
excluded_job_titles: ['Intern'],
limit: 25
})
};
fetch('https://app.pipecorn.com/api/v2/intents/leads/warm_intros', 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://app.pipecorn.com/api/v2/intents/leads/warm_intros",
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([
'linkedin_url' => 'https://www.linkedin.com/in/john-doe',
'linkedin_profile_url' => '<string>',
'persona_id' => '8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b',
'job_titles' => [
'Head of Sales',
'VP Sales'
],
'excluded_job_titles' => [
'Intern'
],
'limit' => 25
]),
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://app.pipecorn.com/api/v2/intents/leads/warm_intros"
payload := strings.NewReader("{\n \"linkedin_url\": \"https://www.linkedin.com/in/john-doe\",\n \"linkedin_profile_url\": \"<string>\",\n \"persona_id\": \"8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b\",\n \"job_titles\": [\n \"Head of Sales\",\n \"VP Sales\"\n ],\n \"excluded_job_titles\": [\n \"Intern\"\n ],\n \"limit\": 25\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://app.pipecorn.com/api/v2/intents/leads/warm_intros")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"linkedin_url\": \"https://www.linkedin.com/in/john-doe\",\n \"linkedin_profile_url\": \"<string>\",\n \"persona_id\": \"8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b\",\n \"job_titles\": [\n \"Head of Sales\",\n \"VP Sales\"\n ],\n \"excluded_job_titles\": [\n \"Intern\"\n ],\n \"limit\": 25\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.pipecorn.com/api/v2/intents/leads/warm_intros")
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 \"linkedin_url\": \"https://www.linkedin.com/in/john-doe\",\n \"linkedin_profile_url\": \"<string>\",\n \"persona_id\": \"8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b\",\n \"job_titles\": [\n \"Head of Sales\",\n \"VP Sales\"\n ],\n \"excluded_job_titles\": [\n \"Intern\"\n ],\n \"limit\": 25\n}"
response = http.request(request)
puts response.read_body{
"total_count": 12,
"past_companies": [
{
"id": "1035",
"name": "BNP Paribas"
}
],
"leads": [
{
"first_name": "Jane",
"last_name": "Doe",
"full_name": "Jane Doe",
"headline": "VP Sales at Acme Corp",
"degree": 2,
"current_title": "VP Sales",
"current_company": "Acme Corp",
"linkedin_id": "ACwAABD5FBQ",
"sales_navigator_url": "https://www.linkedin.com/sales/lead/ACwAABD5FBQ,NAME_SEARCH,vIqI/"
}
]
}How it works
-
The target’s profile is read from LinkedIn Sales Navigator. If they aren’t one of your 1st-degree connections, the request stops there with
422. - Their past companies are collected: every company of an ended position, except the company they work at today.
- A Sales Navigator search runs for people who are connections of the target and list one of those past companies. Your own connection degree to them doesn’t matter: 1st, 2nd and 3rd degree all match.
-
Optionally, narrow it down:
persona_id: the persona’s job titles, locations, industries and company sizes are added to the search.- or
job_titles/excluded_job_titles: filter on current titles without creating a persona.
past_companies that were used, so you can see why each lead matched.
If the target has no past company, no search runs: past_companies and leads come back empty.
Example
{
"linkedin_url": "https://www.linkedin.com/in/john-doe",
"job_titles": ["Head of Sales", "VP Sales"],
"excluded_job_titles": ["Intern"],
"limit": 50
}
Requirements
- A connected LinkedIn account with Sales Navigator. Without it the endpoint returns
422. - The target must be one of your 1st-degree connections. Otherwise the endpoint returns
422. persona_id, when given, must be one of your personas (seeGET /personas).
Notes
- Synchronous: the leads are in the response. Up to
limitleads are returned (default 25, max 100);total_countis the full number of matches on Sales Navigator. linkedin_urlaccepts public LinkedIn URLs, Sales Navigator URLs, or internal URNs.linkedin_profile_urlis still accepted as an alias.- Doesn’t consume credits.
Rate Limits
- 1 request per second per user, on top of your plan’s per-minute limit (see Rate Limiting).
Authorizations
Body
LinkedIn profile URL of the person you want an intro to. Must be one of your 1st-degree connections. Accepts public profile URLs (/in/...), Sales Navigator URLs (/sales/lead/...), or internal LinkedIn URNs.
"https://www.linkedin.com/in/john-doe"
Alias of linkedin_url, still accepted. Use linkedin_url in new integrations.
Optional. Id of one of your personas (see GET /personas). Its job titles, locations, industries and company sizes are added to the search. Cannot be combined with job_titles or excluded_job_titles.
"8f2c1b7e-3a4d-4e5f-9a6b-1c2d3e4f5a6b"
Optional. Keep only people whose current title matches one of these. Use it instead of persona_id.
["Head of Sales", "VP Sales"]
Optional. Drop people whose current title matches one of these. Requires job_titles.
["Intern"]
Maximum number of leads to return.
1 <= x <= 10025
Response
Warm intro search completed
Total number of matching people on Sales Navigator. Can exceed the number of leads returned.
12
The target's past companies used as the past-company filter: every company of an ended position, except the company the target works at today. Empty when the target has none, in which case no search is run and leads is empty.
Show child attributes
Show child attributes
People connected to the target who previously worked at one of past_companies
Show child attributes
Show child attributes
Was this page helpful?