curl --request GET \
--url https://production-api.joinrings.com/v1/companies/lookup \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/companies/lookup"
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/companies/lookup', 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/lookup",
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/companies/lookup"
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/companies/lookup")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/companies/lookup")
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{
"count": 123,
"matches": [
{
"last_activity_date": "<string>",
"linkedin_url": "<string>",
"name": "<string>",
"uuid": "<string>",
"website": "<string>",
"city": "<string>",
"country_code": "<string>",
"description": "<string>",
"entity_lists": [
{
"name": "<string>",
"uuid": "<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>"
},
"rings_industry_tags": [
"<string>"
],
"similarity_score": 123,
"state": "<string>"
}
]
}Lookup a company
Resolves a company you know by an external identifier into a Rings
company_uuid. Searches tenant-visible companies including global
records. At least one of domain, linkedin_url, or name must be provided.
Returns up to limit matches (default 5, max 20), ranked so
tenant-specific records appear before global ones.
Use this before any endpoint that takes a company_uuid. domain and
linkedin_url are the reliable keys; name matches by substring OR
trigram similarity (fuzzy) and can return several candidates — check
similarity_score and confirm against domain or website before
treating a result as the right company.
Resolving three or more companies? Use POST /v1/companies/lookup/batch
(max 100 queries) rather than looping over this endpoint.
curl --request GET \
--url https://production-api.joinrings.com/v1/companies/lookup \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/companies/lookup"
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/companies/lookup', 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/lookup",
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/companies/lookup"
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/companies/lookup")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/companies/lookup")
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{
"count": 123,
"matches": [
{
"last_activity_date": "<string>",
"linkedin_url": "<string>",
"name": "<string>",
"uuid": "<string>",
"website": "<string>",
"city": "<string>",
"country_code": "<string>",
"description": "<string>",
"entity_lists": [
{
"name": "<string>",
"uuid": "<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>"
},
"rings_industry_tags": [
"<string>"
],
"similarity_score": 123,
"state": "<string>"
}
]
}Authorizations
Query Parameters
Website domain to match (e.g. 'acme.com'). At least one of domain, linkedin_url, or name must be provided.
Company LinkedIn URL to match exactly. At least one of domain, linkedin_url, or name must be provided.
Matches company_name_pretty by case-insensitive substring OR trigram similarity (fuzzy), so it catches typos and queries with an extra suffix the stored name doesn't carry (e.g. 'Acme Labs' against 'Acme'). Fuzzy matching only kicks in for queries of 3+ characters; shorter queries stay substring-only. Ranked by similarity_score on each match — substring hits are ranked at or above fuzzy-only ones. At least one of domain, linkedin_url, or name must be provided.
Max results to return (default: 5, max: 20).