curl --request GET \
--url https://production-api.joinrings.com/v1/persons/{person_uuid} \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/persons/{person_uuid}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://production-api.joinrings.com/v1/persons/{person_uuid}', 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/{person_uuid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://production-api.joinrings.com/v1/persons/{person_uuid}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://production-api.joinrings.com/v1/persons/{person_uuid}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/persons/{person_uuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"company_name": "<string>",
"email": "<string>",
"job_title": "<string>",
"last_activity_date": "<string>",
"linkedin_url": "<string>",
"name": "<string>",
"uuid": "<string>",
"city": "<string>",
"company_pathpower": {
"meta": {},
"score": 123,
"strength_label": "<string>"
},
"country": "<string>",
"current_company": {
"company_name": "<string>",
"logo_url": "<string>",
"uuid": "<string>",
"job_type": "<string>",
"source": "<string>"
},
"current_company_domain": "<string>",
"current_company_name": "<string>",
"current_job_title": "<string>",
"description": "<string>",
"email_3": "<string>",
"email_3_last_seen": "<string>",
"email_4": "<string>",
"email_4_last_seen": "<string>",
"email_5": "<string>",
"email_5_last_seen": "<string>",
"email_last_seen": "<string>",
"entity_lists": [
{
"name": "<string>",
"uuid": "<string>"
}
],
"facebook_url": "<string>",
"investor_types": [
"<string>"
],
"is_primary_company_recommended": true,
"job_changed_at": "<string>",
"last_activity": "<string>",
"last_contact_at": "<string>",
"logo_url": "<string>",
"my_next_meeting_at": "<string>",
"my_next_meeting_title": "<string>",
"next_meeting_at": "<string>",
"next_meeting_title": "<string>",
"next_meeting_with_user_uuid": "<string>",
"pathpower": {
"meta": {},
"score": 123,
"strength_label": "<string>"
},
"phone_numbers": [
"<string>"
],
"previous_job_ended_at": "<string>",
"priority_management": {
"rq": 123,
"rq_manual": 123,
"rq_math": 123
},
"secondary_email": "<string>",
"secondary_email_last_seen": "<string>",
"state": "<string>",
"strongest_relationships": [
{
"internal_user_person_uuid": "<string>",
"internal_user_uuid": "<string>",
"last_engaged_at": "<string>",
"name": "<string>",
"path_power_score": 123
}
],
"twitter_url": "<string>"
}Get a person
Returns the full person record including:
- strongest_relationships: top 2 internal team members with the strongest connection to this person (use for “who internally knows X” without needing recommended-paths)
- pathpower: overall relationship strength score (0.0–1.0)
- priority_management.rq: the canonical relationship quality score (1–3, null when no signal exists). Ignore rq_manual and rq_math — use rq as the single source of truth.
- Secondary emails, phone numbers, entity list memberships, company affiliation.
Returns 404 if the person is not visible to your tenant.
curl --request GET \
--url https://production-api.joinrings.com/v1/persons/{person_uuid} \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/persons/{person_uuid}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://production-api.joinrings.com/v1/persons/{person_uuid}', 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/{person_uuid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://production-api.joinrings.com/v1/persons/{person_uuid}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://production-api.joinrings.com/v1/persons/{person_uuid}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/persons/{person_uuid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"company_name": "<string>",
"email": "<string>",
"job_title": "<string>",
"last_activity_date": "<string>",
"linkedin_url": "<string>",
"name": "<string>",
"uuid": "<string>",
"city": "<string>",
"company_pathpower": {
"meta": {},
"score": 123,
"strength_label": "<string>"
},
"country": "<string>",
"current_company": {
"company_name": "<string>",
"logo_url": "<string>",
"uuid": "<string>",
"job_type": "<string>",
"source": "<string>"
},
"current_company_domain": "<string>",
"current_company_name": "<string>",
"current_job_title": "<string>",
"description": "<string>",
"email_3": "<string>",
"email_3_last_seen": "<string>",
"email_4": "<string>",
"email_4_last_seen": "<string>",
"email_5": "<string>",
"email_5_last_seen": "<string>",
"email_last_seen": "<string>",
"entity_lists": [
{
"name": "<string>",
"uuid": "<string>"
}
],
"facebook_url": "<string>",
"investor_types": [
"<string>"
],
"is_primary_company_recommended": true,
"job_changed_at": "<string>",
"last_activity": "<string>",
"last_contact_at": "<string>",
"logo_url": "<string>",
"my_next_meeting_at": "<string>",
"my_next_meeting_title": "<string>",
"next_meeting_at": "<string>",
"next_meeting_title": "<string>",
"next_meeting_with_user_uuid": "<string>",
"pathpower": {
"meta": {},
"score": 123,
"strength_label": "<string>"
},
"phone_numbers": [
"<string>"
],
"previous_job_ended_at": "<string>",
"priority_management": {
"rq": 123,
"rq_manual": 123,
"rq_math": 123
},
"secondary_email": "<string>",
"secondary_email_last_seen": "<string>",
"state": "<string>",
"strongest_relationships": [
{
"internal_user_person_uuid": "<string>",
"internal_user_uuid": "<string>",
"last_engaged_at": "<string>",
"name": "<string>",
"path_power_score": 123
}
],
"twitter_url": "<string>"
}Authorizations
Path Parameters
Response
Person response schema.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Domain of the company on the person's current employment row. Filterable via ?current_company_domain=.
Name of the company on the person's current (is_current) employment row. Filterable via ?current_company_name=.
Current job title, from the person's enriched employment history. Filterable via ?current_job_title=.
Show child attributes
Show child attributes
ISO 8601 timestamp of when the person moved into their current role (started_at of the is_current row). Filterable via ?job_changed_since / ?job_changed_before.
Most recent tenant-wide contact timestamp, aggregated across all activity types. Alias of last_activity_date — both fields always hold the same value.
ISO 8601 timestamp of the earliest future calendar event involving this person where the calling user (x-rings-user-id) is a participant. null when no user context is provided.
Title of the per-user next meeting. null when no user context is provided.
ISO 8601 timestamp of the earliest future calendar event involving this person, tenant-wide. Cancelled and deleted events are excluded. Updates as calendar changes arrive, with an hourly reconciliation pass.
Title of the tenant-wide next meeting.
UUID of the internal ring member attending the tenant-wide next meeting (prefers the organizer).
Show child attributes
Show child attributes
ISO 8601 timestamp of the most-recent prior job's end date (ended_at of the most-recent non-current row). Filterable via ?previous_job_ended_since / ?previous_job_ended_before.
Show child attributes
Show child attributes
Up to two tenant internal users with the strongest relationship to this person, ranked by priority_management.rq_pretty (desc). Precomputed every ~3 hours; null when no qualifying signals exist.
Show child attributes
Show child attributes