curl --request POST \
--url https://production-api.joinrings.com/v1/persons/recommended-paths/batch \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"uuids": [
"<string>"
],
"include_items": true,
"limit": 25,
"order": "desc"
}
'import requests
url = "https://production-api.joinrings.com/v1/persons/recommended-paths/batch"
payload = {
"uuids": ["<string>"],
"include_items": True,
"limit": 25,
"order": "desc"
}
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({uuids: ['<string>'], include_items: true, limit: 25, order: 'desc'})
};
fetch('https://production-api.joinrings.com/v1/persons/recommended-paths/batch', 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://production-api.joinrings.com/v1/persons/recommended-paths/batch",
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([
'uuids' => [
'<string>'
],
'include_items' => true,
'limit' => 25,
'order' => 'desc'
]),
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://production-api.joinrings.com/v1/persons/recommended-paths/batch"
payload := strings.NewReader("{\n \"uuids\": [\n \"<string>\"\n ],\n \"include_items\": true,\n \"limit\": 25,\n \"order\": \"desc\"\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://production-api.joinrings.com/v1/persons/recommended-paths/batch")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"uuids\": [\n \"<string>\"\n ],\n \"include_items\": true,\n \"limit\": 25,\n \"order\": \"desc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/persons/recommended-paths/batch")
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 \"uuids\": [\n \"<string>\"\n ],\n \"include_items\": true,\n \"limit\": 25,\n \"order\": \"desc\"\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"items": [
{
"person_uuid": "<string>",
"company_name": "<string>",
"connection_score": 123,
"email": "<string>",
"emails": [
{
"address": "<string>",
"is_primary": false,
"last_seen_at": "<string>"
}
],
"facebook_url": "<string>",
"is_internal": true,
"is_primary_company_recommended": true,
"job_title": "<string>",
"linkedin_url": "<string>",
"logo_url": "<string>",
"name": "<string>",
"path_count": 0,
"paths": [
[
{
"person_uuid": "<string>",
"associations": [
"<string>"
],
"company_name": "<string>",
"connection_score": 123,
"interaction_count": 123,
"job_title": "<string>",
"last_interaction_at": "<string>",
"linkedin_url": "<string>",
"logo_url": "<string>",
"name": "<string>",
"ring_key": "<string>",
"ring_name": "<string>"
}
]
],
"primary_company": {
"logo_url": "<string>",
"name": "<string>",
"uuid": "<string>"
},
"priority_management": [
{
"interaction_count": 123,
"last_activity_date": "<string>",
"person_uuid": "<string>",
"priority_context": [
{}
],
"priority_score": 123,
"rq": 123,
"rq_manual": 123,
"rq_pretty": 123,
"rq_reason": "<string>",
"signal_metadata": {
"associations": 0,
"lists": 0
},
"user_logo_url": "<string>",
"user_name": "<string>",
"user_uuid": "<string>"
}
],
"signal_metadata": {
"associations": 0,
"lists": 0
},
"strength": "<string>",
"tags": [
"<string>"
],
"twitter_url": "<string>"
}
],
"page": 123,
"per_page": 123,
"total": 123,
"target_logo_url": "<string>",
"target_name": "<string>",
"target_uuid": "<string>",
"top_external_contacts": [
{
"person_uuid": "<string>",
"connection_score": 123,
"email": "<string>",
"internal_connectors": [
{
"internal_user_person_uuid": "<string>",
"internal_user_uuid": "<string>",
"last_engaged_at": "<string>",
"name": "<string>",
"path_power_score": 123
}
],
"job_title": "<string>",
"name": "<string>",
"strength": "<string>",
"tags": [
"<string>"
]
}
]
}
]
}Bulk recommended paths (persons)
Body: uuids (person UUIDs, max 100) plus optional limit (top contacts
per target, default 25, max 100), sort_by, and order. results holds
one entry per input UUID, in order; each carries that target’s total and
its top contacts. Targets that are not found come back with empty items
rather than failing the whole batch. (include_items: false is accepted
but only useful on the company batch, where top_external_contacts
remains populated.)
curl --request POST \
--url https://production-api.joinrings.com/v1/persons/recommended-paths/batch \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"uuids": [
"<string>"
],
"include_items": true,
"limit": 25,
"order": "desc"
}
'import requests
url = "https://production-api.joinrings.com/v1/persons/recommended-paths/batch"
payload = {
"uuids": ["<string>"],
"include_items": True,
"limit": 25,
"order": "desc"
}
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({uuids: ['<string>'], include_items: true, limit: 25, order: 'desc'})
};
fetch('https://production-api.joinrings.com/v1/persons/recommended-paths/batch', 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://production-api.joinrings.com/v1/persons/recommended-paths/batch",
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([
'uuids' => [
'<string>'
],
'include_items' => true,
'limit' => 25,
'order' => 'desc'
]),
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://production-api.joinrings.com/v1/persons/recommended-paths/batch"
payload := strings.NewReader("{\n \"uuids\": [\n \"<string>\"\n ],\n \"include_items\": true,\n \"limit\": 25,\n \"order\": \"desc\"\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://production-api.joinrings.com/v1/persons/recommended-paths/batch")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"uuids\": [\n \"<string>\"\n ],\n \"include_items\": true,\n \"limit\": 25,\n \"order\": \"desc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/persons/recommended-paths/batch")
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 \"uuids\": [\n \"<string>\"\n ],\n \"include_items\": true,\n \"limit\": 25,\n \"order\": \"desc\"\n}"
response = http.request(request)
puts response.read_body{
"results": [
{
"items": [
{
"person_uuid": "<string>",
"company_name": "<string>",
"connection_score": 123,
"email": "<string>",
"emails": [
{
"address": "<string>",
"is_primary": false,
"last_seen_at": "<string>"
}
],
"facebook_url": "<string>",
"is_internal": true,
"is_primary_company_recommended": true,
"job_title": "<string>",
"linkedin_url": "<string>",
"logo_url": "<string>",
"name": "<string>",
"path_count": 0,
"paths": [
[
{
"person_uuid": "<string>",
"associations": [
"<string>"
],
"company_name": "<string>",
"connection_score": 123,
"interaction_count": 123,
"job_title": "<string>",
"last_interaction_at": "<string>",
"linkedin_url": "<string>",
"logo_url": "<string>",
"name": "<string>",
"ring_key": "<string>",
"ring_name": "<string>"
}
]
],
"primary_company": {
"logo_url": "<string>",
"name": "<string>",
"uuid": "<string>"
},
"priority_management": [
{
"interaction_count": 123,
"last_activity_date": "<string>",
"person_uuid": "<string>",
"priority_context": [
{}
],
"priority_score": 123,
"rq": 123,
"rq_manual": 123,
"rq_pretty": 123,
"rq_reason": "<string>",
"signal_metadata": {
"associations": 0,
"lists": 0
},
"user_logo_url": "<string>",
"user_name": "<string>",
"user_uuid": "<string>"
}
],
"signal_metadata": {
"associations": 0,
"lists": 0
},
"strength": "<string>",
"tags": [
"<string>"
],
"twitter_url": "<string>"
}
],
"page": 123,
"per_page": 123,
"total": 123,
"target_logo_url": "<string>",
"target_name": "<string>",
"target_uuid": "<string>",
"top_external_contacts": [
{
"person_uuid": "<string>",
"connection_score": 123,
"email": "<string>",
"internal_connectors": [
{
"internal_user_person_uuid": "<string>",
"internal_user_uuid": "<string>",
"last_engaged_at": "<string>",
"name": "<string>",
"path_power_score": 123
}
],
"job_title": "<string>",
"name": "<string>",
"strength": "<string>",
"tags": [
"<string>"
]
}
]
}
]
}Authorizations
Body
When false (companies only), skip the expensive items[] recommended-paths list and return just top_external_contacts per company. Resolved with batched queries, so large batches stay fast. Use this if you only consume top_external_contacts.
Max contacts returned per target (1-100).
Sort order. Default: 'desc' (highest score first)
asc, desc Field to sort by. Valid values: 'score', 'name'
score, name Response
Bulk recommended-paths response.
results holds one RecommendedPathsResponse per input UUID, in the same
order as the request. Targets that are not found come back with empty
items rather than failing the whole batch.
Show child attributes
Show child attributes