curl --request POST \
--url https://api.edges.run/v1/flows/linkedin-people-enrich/run/async \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"inputs": [
{
"linkedin_profile_url": "<string>",
"custom_data": {
"meta": "<unknown>"
}
}
],
"steps": [],
"parameters": {
"linkedin-extract-people": {},
"linkedin-extract-people-skills": {},
"linkedin-extract-people-experiences": {},
"linkedin-extract-people-educations": {},
"linkedin-extract-company": {},
"fullenrich-enrich-people": {}
},
"identity_ids": [
"44444444-4444-4444-4444-444444444444"
],
"identity_mode": "direct"
}
'import requests
url = "https://api.edges.run/v1/flows/linkedin-people-enrich/run/async"
payload = {
"inputs": [
{
"linkedin_profile_url": "<string>",
"custom_data": { "meta": "<unknown>" }
}
],
"steps": [],
"parameters": {
"linkedin-extract-people": {},
"linkedin-extract-people-skills": {},
"linkedin-extract-people-experiences": {},
"linkedin-extract-people-educations": {},
"linkedin-extract-company": {},
"fullenrich-enrich-people": {}
},
"identity_ids": ["44444444-4444-4444-4444-444444444444"],
"identity_mode": "direct"
}
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({
inputs: [{linkedin_profile_url: '<string>', custom_data: {meta: '<unknown>'}}],
steps: [],
parameters: {
'linkedin-extract-people': {},
'linkedin-extract-people-skills': {},
'linkedin-extract-people-experiences': {},
'linkedin-extract-people-educations': {},
'linkedin-extract-company': {},
'fullenrich-enrich-people': {}
},
identity_ids: ['44444444-4444-4444-4444-444444444444'],
identity_mode: 'direct'
})
};
fetch('https://api.edges.run/v1/flows/linkedin-people-enrich/run/async', 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.edges.run/v1/flows/linkedin-people-enrich/run/async",
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([
'inputs' => [
[
'linkedin_profile_url' => '<string>',
'custom_data' => [
'meta' => '<unknown>'
]
]
],
'steps' => [
],
'parameters' => [
'linkedin-extract-people' => [
],
'linkedin-extract-people-skills' => [
],
'linkedin-extract-people-experiences' => [
],
'linkedin-extract-people-educations' => [
],
'linkedin-extract-company' => [
],
'fullenrich-enrich-people' => [
]
],
'identity_ids' => [
'44444444-4444-4444-4444-444444444444'
],
'identity_mode' => 'direct'
]),
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.edges.run/v1/flows/linkedin-people-enrich/run/async"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"linkedin_profile_url\": \"<string>\",\n \"custom_data\": {\n \"meta\": \"<unknown>\"\n }\n }\n ],\n \"steps\": [],\n \"parameters\": {\n \"linkedin-extract-people\": {},\n \"linkedin-extract-people-skills\": {},\n \"linkedin-extract-people-experiences\": {},\n \"linkedin-extract-people-educations\": {},\n \"linkedin-extract-company\": {},\n \"fullenrich-enrich-people\": {}\n },\n \"identity_ids\": [\n \"44444444-4444-4444-4444-444444444444\"\n ],\n \"identity_mode\": \"direct\"\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.edges.run/v1/flows/linkedin-people-enrich/run/async")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"linkedin_profile_url\": \"<string>\",\n \"custom_data\": {\n \"meta\": \"<unknown>\"\n }\n }\n ],\n \"steps\": [],\n \"parameters\": {\n \"linkedin-extract-people\": {},\n \"linkedin-extract-people-skills\": {},\n \"linkedin-extract-people-experiences\": {},\n \"linkedin-extract-people-educations\": {},\n \"linkedin-extract-company\": {},\n \"fullenrich-enrich-people\": {}\n },\n \"identity_ids\": [\n \"44444444-4444-4444-4444-444444444444\"\n ],\n \"identity_mode\": \"direct\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.edges.run/v1/flows/linkedin-people-enrich/run/async")
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 \"inputs\": [\n {\n \"linkedin_profile_url\": \"<string>\",\n \"custom_data\": {\n \"meta\": \"<unknown>\"\n }\n }\n ],\n \"steps\": [],\n \"parameters\": {\n \"linkedin-extract-people\": {},\n \"linkedin-extract-people-skills\": {},\n \"linkedin-extract-people-experiences\": {},\n \"linkedin-extract-people-educations\": {},\n \"linkedin-extract-company\": {},\n \"fullenrich-enrich-people\": {}\n },\n \"identity_ids\": [\n \"44444444-4444-4444-4444-444444444444\"\n ],\n \"identity_mode\": \"direct\"\n}"
response = http.request(request)
puts response.read_body{
"uid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow": {
"uid": "<string>",
"metadata": {
"account_rotation": true
}
}
}{
"error_label": "<string>",
"error_scope": "input",
"error_ref": "ERR-12345",
"message": "<string>",
"status_code": 123,
"params": {},
"data": {}
}{
"error_label": "<string>",
"error_scope": "input",
"error_ref": "ERR-12345",
"message": "<string>",
"status_code": 123,
"params": {},
"data": {}
}{
"error_label": "<string>",
"error_scope": "input",
"error_ref": "ERR-12345",
"message": "<string>",
"status_code": 123,
"params": {},
"data": {}
}LinkedIn People Enrich
Extract and enrich LinkedIn profile information from a profile URL
curl --request POST \
--url https://api.edges.run/v1/flows/linkedin-people-enrich/run/async \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"inputs": [
{
"linkedin_profile_url": "<string>",
"custom_data": {
"meta": "<unknown>"
}
}
],
"steps": [],
"parameters": {
"linkedin-extract-people": {},
"linkedin-extract-people-skills": {},
"linkedin-extract-people-experiences": {},
"linkedin-extract-people-educations": {},
"linkedin-extract-company": {},
"fullenrich-enrich-people": {}
},
"identity_ids": [
"44444444-4444-4444-4444-444444444444"
],
"identity_mode": "direct"
}
'import requests
url = "https://api.edges.run/v1/flows/linkedin-people-enrich/run/async"
payload = {
"inputs": [
{
"linkedin_profile_url": "<string>",
"custom_data": { "meta": "<unknown>" }
}
],
"steps": [],
"parameters": {
"linkedin-extract-people": {},
"linkedin-extract-people-skills": {},
"linkedin-extract-people-experiences": {},
"linkedin-extract-people-educations": {},
"linkedin-extract-company": {},
"fullenrich-enrich-people": {}
},
"identity_ids": ["44444444-4444-4444-4444-444444444444"],
"identity_mode": "direct"
}
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({
inputs: [{linkedin_profile_url: '<string>', custom_data: {meta: '<unknown>'}}],
steps: [],
parameters: {
'linkedin-extract-people': {},
'linkedin-extract-people-skills': {},
'linkedin-extract-people-experiences': {},
'linkedin-extract-people-educations': {},
'linkedin-extract-company': {},
'fullenrich-enrich-people': {}
},
identity_ids: ['44444444-4444-4444-4444-444444444444'],
identity_mode: 'direct'
})
};
fetch('https://api.edges.run/v1/flows/linkedin-people-enrich/run/async', 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.edges.run/v1/flows/linkedin-people-enrich/run/async",
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([
'inputs' => [
[
'linkedin_profile_url' => '<string>',
'custom_data' => [
'meta' => '<unknown>'
]
]
],
'steps' => [
],
'parameters' => [
'linkedin-extract-people' => [
],
'linkedin-extract-people-skills' => [
],
'linkedin-extract-people-experiences' => [
],
'linkedin-extract-people-educations' => [
],
'linkedin-extract-company' => [
],
'fullenrich-enrich-people' => [
]
],
'identity_ids' => [
'44444444-4444-4444-4444-444444444444'
],
'identity_mode' => 'direct'
]),
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.edges.run/v1/flows/linkedin-people-enrich/run/async"
payload := strings.NewReader("{\n \"inputs\": [\n {\n \"linkedin_profile_url\": \"<string>\",\n \"custom_data\": {\n \"meta\": \"<unknown>\"\n }\n }\n ],\n \"steps\": [],\n \"parameters\": {\n \"linkedin-extract-people\": {},\n \"linkedin-extract-people-skills\": {},\n \"linkedin-extract-people-experiences\": {},\n \"linkedin-extract-people-educations\": {},\n \"linkedin-extract-company\": {},\n \"fullenrich-enrich-people\": {}\n },\n \"identity_ids\": [\n \"44444444-4444-4444-4444-444444444444\"\n ],\n \"identity_mode\": \"direct\"\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.edges.run/v1/flows/linkedin-people-enrich/run/async")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"inputs\": [\n {\n \"linkedin_profile_url\": \"<string>\",\n \"custom_data\": {\n \"meta\": \"<unknown>\"\n }\n }\n ],\n \"steps\": [],\n \"parameters\": {\n \"linkedin-extract-people\": {},\n \"linkedin-extract-people-skills\": {},\n \"linkedin-extract-people-experiences\": {},\n \"linkedin-extract-people-educations\": {},\n \"linkedin-extract-company\": {},\n \"fullenrich-enrich-people\": {}\n },\n \"identity_ids\": [\n \"44444444-4444-4444-4444-444444444444\"\n ],\n \"identity_mode\": \"direct\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.edges.run/v1/flows/linkedin-people-enrich/run/async")
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 \"inputs\": [\n {\n \"linkedin_profile_url\": \"<string>\",\n \"custom_data\": {\n \"meta\": \"<unknown>\"\n }\n }\n ],\n \"steps\": [],\n \"parameters\": {\n \"linkedin-extract-people\": {},\n \"linkedin-extract-people-skills\": {},\n \"linkedin-extract-people-experiences\": {},\n \"linkedin-extract-people-educations\": {},\n \"linkedin-extract-company\": {},\n \"fullenrich-enrich-people\": {}\n },\n \"identity_ids\": [\n \"44444444-4444-4444-4444-444444444444\"\n ],\n \"identity_mode\": \"direct\"\n}"
response = http.request(request)
puts response.read_body{
"uid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow": {
"uid": "<string>",
"metadata": {
"account_rotation": true
}
}
}{
"error_label": "<string>",
"error_scope": "input",
"error_ref": "ERR-12345",
"message": "<string>",
"status_code": 123,
"params": {},
"data": {}
}{
"error_label": "<string>",
"error_scope": "input",
"error_ref": "ERR-12345",
"message": "<string>",
"status_code": 123,
"params": {},
"data": {}
}{
"error_label": "<string>",
"error_scope": "input",
"error_ref": "ERR-12345",
"message": "<string>",
"status_code": 123,
"params": {},
"data": {}
}Inputs
Each item in theinputs array can include:
| Field | Required | Description |
|---|---|---|
linkedin_profile_url | Yes | LinkedIn profile URL (e.g. https://www.linkedin.com/in/example) |
job_title | No | Job title to pass through with the input (e.g. for your own tracking or matching) |
Flow Steps
The flow executes steps in the following order:linkedin-extract-people(required): Extracts detailed information from the specified LinkedIn profile-
Optional enrichment steps (can include any combination)
linkedin-extract-people-experiences: Extracts full experiences data from the profilelinkedin-extract-people-skills: Extracts full skills data from the profilelinkedin-extract-people-educations: Extracts education data from the profilelinkedin-extract-company: Extracts company information for the profile’s current companyfullenrich-enrich-people: Enriches the profile with contact information (emails and/or phone numbers). Credit costs: 2 credits for emails, 20 credits for phones, 22 credits for both.
linkedin-extract-people when present.linkedin-extract-people-experiences or linkedin-extract-people-skills steps: do not enable the skills and experiences parameters on the required linkedin-extract-people step. If they are enabled, the data from the mandatory step will take priority and override the outputs from the optional experiences and skills steps.fullenrich-enrich-people requires profile data from previous steps. If you include a step that has dependencies, the required steps will be automatically activated even if you don’t explicitly include them in your request body.Custom Data
Custom Data
inputs array can include an optional custom_data object. The only valid key inside custom_data is meta. Use meta to attach a free-form object (e.g. your own IDs, tags, or context) that will be passed through and available in the flow output.Example:"inputs": [
{
...
"custom_data": {
"meta": {
"foo": "bar",
"crm_id": 1234
}
}
}
]
meta as a workaround to ship this capability; a more solid implementation will follow soon without breaking changes.Basic profile extraction
Basic profile extraction
curl --request POST \
--url https://api.edges.run/v1/flows/linkedin-people-enrich/run/async \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <your-api-key>' \
--data '{
"inputs": [
{
"linkedin_profile_url": "https://www.linkedin.com/in/example-profile",
"job_title": "Software Engineer"
}
],
"identity_mode": "managed"
}'
Full enrichment with experiences, skills, company, and contact data
Full enrichment with experiences, skills, company, and contact data
curl --request POST \
--url https://api.edges.run/v1/flows/linkedin-people-enrich/run/async \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <your-api-key>' \
--data '{
"steps": [
"linkedin-extract-people-experiences",
"linkedin-extract-people-skills",
"linkedin-extract-company",
"fullenrich-enrich-people"
],
"parameters": {
"linkedin-extract-people": {
"sections": true,
"highlights": true
},
"fullenrich-enrich-people": {
"enrich_level": "emails_and_phones"
}
},
"inputs": [
{
"linkedin_profile_url": "https://www.linkedin.com/in/example-profile"
}
],
"identity_ids": ["44444444-4444-4444-4444-444444444444"]
}'
Why not set experiences/skills on linkedin-extract-people?
Why not set experiences/skills on linkedin-extract-people?
linkedin-extract-people-experiences and linkedin-extract-people-skills steps, leave experiences and skills disabled (or omit them) in the linkedin-extract-people parameters. Otherwise the mandatory step’s data takes priority and overrides the full data from the optional steps.With webhook callback
With webhook callback
curl --request POST \
--url https://api.edges.run/v1/flows/linkedin-people-enrich/run/async \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <your-api-key>' \
--data '{
"inputs": [
{
"linkedin_profile_url": "https://www.linkedin.com/in/example-profile"
}
],
"identity_mode": "managed",
"callback": {
"url": "https://your-app.com/webhook/flow-results",
"headers": {
"Authorization": "Bearer your-webhook-token"
}
}
}'
Authorizations
Body
1 - 1000 elementsShow child attributes
Show child attributes
Optional list of step to run. If not provided, only the required steps will be run.
linkedin-extract-people-skills, linkedin-extract-people-experiences, linkedin-extract-people-educations, linkedin-extract-company, fullenrich-enrich-people Show child attributes
Show child attributes
An array of Identity UUIDs linked to identities (e.g. LinkedIn) used to execute the Action. You must provide at least one valid UID with access to the integration. Do not use account_uid values — only user_uid is supported.
["44444444-4444-4444-4444-444444444444"]
If "auto", the Action will use any identities from the current workspace (unless you have provided a list of identity_ids). "managed" will use the Edges pool of identities for an extra credit cost
direct, auto, managed Show child attributes
Show child attributes
Callbacks
POST{$request.body#/callback/url}onSave
Body
Show child attributes
Show child attributes
Represents an error returned by the API. This schema defines the standard structure of error messages to ensure consistent error handling across the application.
Show child attributes
Show child attributes
Number of results in the current callback
Results of the current callback
Show child attributes
Show child attributes
Response
Callback successfully processed

