curl --request POST \
--url https://production-api.joinrings.com/v1/companies/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/companies/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/companies/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/companies/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/companies/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/companies/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/companies/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 (companies)
Body: uuids (company UUIDs, max 100) plus optional limit (top contacts
per target, default 25, max 100), sort_by, order, and include_items.
results holds one entry per input UUID, in order; each carries that
target’s total, its top contacts, and the company’s
top_external_contacts (top 5 external contacts with role tags and
their strongest internal connectors). Targets that are not found come back
with empty items rather than failing the whole batch.
If you only consume top_external_contacts and target-level fields, pass
include_items: false to skip building items — dramatically faster for
large batches (items comes back empty and total is 0).
curl --request POST \
--url https://production-api.joinrings.com/v1/companies/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/companies/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/companies/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/companies/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/companies/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/companies/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/companies/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