Enqueue profiles
Enqueue LinkedIn profiles for enrichment in bulk.
https://api.up2data.ai/api/open-refresh/profiles-bulkEnqueue LinkedIn profiles for enrichment in bulk. Provide many profile URLs or LinkedIn slugs in a single request; results are delivered by webhook or read back with queues-list. See Profile for the full shape.
Make sure you have enough credits before enqueuing a large batch - see the credit pill above for the exact rate.
Your profiles array is normalized and de-duplicated before anything is charged, so you pay for enqueued, not for what you sent. Two entries that resolve to the same profile count as one, and entries that are empty or contain mojibake are dropped. skipped reports what was removed and why. Slugs are compared case-insensitively, but the value you sent is used as-is when crawling, so case-sensitive URN ids such as ACwAAD... still resolve correctly. If nothing survives filtering, you get a 400 and no queue is created.
Set withFollowersAndConnections to also collect connectionsCount and followersCount for each profile - see the credit pill above for the added rate, and the queue takes longer to process. The credits are charged when you enqueue, so a profile whose counts turn out to be unavailable is still billed at the higher rate. Without the flag, neither field is guaranteed - treat both as absent.
Set withFullSkillsAndEndorsements to true to receive skillsWithEndorsements, every skill on the profile paired with the number of endorsements it has. This costs additional credits on top of the base rate, and the queue takes longer to process. It also lifts the cap on skills: without the flag that array holds at most the first 20 skills a profile lists, and with it you get the complete set. Skills with no endorsements are returned with endorsementCount of 0, not omitted. Without the flag, skillsWithEndorsements is absent entirely.
#Request
| Field | Type | Notes |
|---|---|---|
namerequired | string | Name for the enrichment job. |
profilesrequired | string[] | LinkedIn profile URLs or bare slugs. |
priorityrequired | number | 1 = High, 2 = Normal, 3 = Low. |
withFollowersAndConnections | boolean | Optional, defaults to false. |
withFullSkillsAndEndorsements | boolean | Optional, defaults to false. |
webhookTags | string[] | Optional, defaults to every webhook on the team. Send [] to switch callbacks off - see the Webhooks guide. |
#Call it
curl -X POST "https://api.up2data.ai/api/open-refresh/profiles-bulk" \
-H "Authorization: YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Q1 Leads Enrichment",
"profiles": [
"https://www.linkedin.com/in/johndoe",
"https://www.linkedin.com/in/janedoe",
"johndoe123"
],
"priority": 2,
"withFollowersAndConnections": true,
"withFullSkillsAndEndorsements": true,
"webhookTags": [
"prod"
]
}'import requests
url = "https://api.up2data.ai/api/open-refresh/profiles-bulk"
headers = {
"Authorization": "YOUR_ACCESS_TOKEN",
"Content-Type": "application/json",
}
payload = {
"name": "Q1 Leads Enrichment",
"profiles": [
"https://www.linkedin.com/in/johndoe",
"https://www.linkedin.com/in/janedoe",
"johndoe123"
],
"priority": 2,
"withFollowersAndConnections": True,
"withFullSkillsAndEndorsements": True,
"webhookTags": [
"prod"
]
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())const url = "https://api.up2data.ai/api/open-refresh/profiles-bulk";
const headers = {
"Authorization": "YOUR_ACCESS_TOKEN",
"Content-Type": "application/json",
};
const body = {
"name": "Q1 Leads Enrichment",
"profiles": [
"https://www.linkedin.com/in/johndoe",
"https://www.linkedin.com/in/janedoe",
"johndoe123"
],
"priority": 2,
"withFollowersAndConnections": true,
"withFullSkillsAndEndorsements": true,
"webhookTags": [
"prod"
]
};
const response = await fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
});
const data = await response.json();
console.log(data);package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
url := "https://api.up2data.ai/api/open-refresh/profiles-bulk"
body := bytes.NewBufferString(`{
"name": "Q1 Leads Enrichment",
"profiles": [
"https://www.linkedin.com/in/johndoe",
"https://www.linkedin.com/in/janedoe",
"johndoe123"
],
"priority": 2,
"withFollowersAndConnections": true,
"withFullSkillsAndEndorsements": true,
"webhookTags": [
"prod"
]
}`)
req, err := http.NewRequest("POST", url, body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "YOUR_ACCESS_TOKEN")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
respBody, _ := io.ReadAll(resp.Body)
fmt.Println(string(respBody))
}#Response
{
"message": "3 items have been enqueued.",
"queueId": "507f1f77bcf86cd799439011",
"enqueued": 3,
"skipped": {
"invalid": 0,
"duplicates": 0
},
"webhooks": [
{
"_id": "6512c1a4f1b2c3d4e5f60789",
"name": "Production",
"url": "https://api.example.com/hooks/up2data"
}
]
}{
"message": "No valid profiles to enqueue: of 4 submitted, 1 were invalid and 3 were duplicates."
}#Webhook payload
{
"queueId": "507f1f77bcf86cd799439011",
"name": "Q1 Leads Enrichment",
"url": "https://www.linkedin.com/in/johndoe",
"type": "Profile",
"status": 200,
"_id": "8f14e45fceea167a5a36dedd4bea2543",
"result": { ... }
}#Errors
| Status | Type | When |
|---|---|---|
| 400 | No valid profiles to enqueue | Every entry in profiles was invalid or a duplicate after normalization, so no queue was created. |
| 400 | No webhook matches webhookTags | One or more webhookTags do not match any webhook on the team. |
See the Errors guide for every error type this version can return.