curl --request GET \
--url https://production-api.joinrings.com/v1/companies \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/companies"
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', 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",
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"
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")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/companies")
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{
"items": [
{
"city": "<string>",
"country_code": "<string>",
"description": "<string>",
"last_activity_date": "<string>",
"logo_url": "<string>",
"name": "<string>",
"uuid": "<string>",
"website": "<string>",
"alternate_domain": "<string>",
"company_custom_fields": {},
"entity_lists": [
{
"name": "<string>",
"uuid": "<string>"
}
],
"facebook_url": "<string>",
"headquarters_address": "<string>",
"investor_rings_ai_scores": {
"date_string": "<string>",
"investment_success": {
"delta": 123,
"score": 123
},
"overall_investor": {
"delta": 123,
"score": 123
},
"peer_group_name": "<string>",
"success_trend": {
"delta": 123,
"score": 123
},
"syndicate_quality": {
"delta": 123,
"score": 123
}
},
"last_contact_at": "<string>",
"linkedin_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>",
"operating_rings_ai_scores": {
"date_string": "<string>",
"growth_efficiency": {
"delta": 123,
"score": 123
},
"investment_momentum": {
"delta": 123,
"score": 123
},
"investor_quality": {
"delta": 123,
"score": 123
},
"overall_company": {
"delta": 123,
"score": 123
},
"peer_group_name": "<string>"
},
"pathpower": {
"meta": {},
"score": 123,
"strength_label": "<string>"
},
"rings_industry_tags": [
"<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>"
}
],
"page": 123,
"per_page": 123,
"total": 123,
"has_more": true,
"next_cursor": "<string>"
}List companies
Returns a paginated list of companies visible to the tenant. All filter parameters are optional — omitting all of them returns all companies. Filters compose with AND; comma-separated values within a single filter are OR-matched. See each parameter for exact semantics.
Filters cover identity (name, domain, linkedin_url, description,
social URLs), location (city, state, country), status
(operating_status, acquisition_status, ipo_status), industry tags,
investor and funding attributes, and numeric/date ranges (founding year,
employee count, Rings scores, investment dates).
Use uuids (comma-separated) to hydrate a known set of companies in one
call — this is the batched counterpart to GET /v1/companies/{uuid}.
To resolve a company you only know by domain or name, use
GET /v1/companies/lookup instead.
Sort parameters:
- sort_by: name | last_activity_date (default: unsorted)
- order: asc | desc (default: asc)
Pagination:
- page: Page number (default: 1)
- per_page: Results per page, max 50 (default: 10)
- after: Opaque cursor from a previous response’s
next_cursor. Resumes immediately after that response’s last record, so concurrent writes can’t shift rows between pages the waypageallows.totalis not computed on this path — usehas_more.
Every response carries next_cursor, including page-numbered ones, so a
caller can start with page and switch to cursors mid-scan.
curl --request GET \
--url https://production-api.joinrings.com/v1/companies \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/companies"
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', 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",
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"
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")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/companies")
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{
"items": [
{
"city": "<string>",
"country_code": "<string>",
"description": "<string>",
"last_activity_date": "<string>",
"logo_url": "<string>",
"name": "<string>",
"uuid": "<string>",
"website": "<string>",
"alternate_domain": "<string>",
"company_custom_fields": {},
"entity_lists": [
{
"name": "<string>",
"uuid": "<string>"
}
],
"facebook_url": "<string>",
"headquarters_address": "<string>",
"investor_rings_ai_scores": {
"date_string": "<string>",
"investment_success": {
"delta": 123,
"score": 123
},
"overall_investor": {
"delta": 123,
"score": 123
},
"peer_group_name": "<string>",
"success_trend": {
"delta": 123,
"score": 123
},
"syndicate_quality": {
"delta": 123,
"score": 123
}
},
"last_contact_at": "<string>",
"linkedin_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>",
"operating_rings_ai_scores": {
"date_string": "<string>",
"growth_efficiency": {
"delta": 123,
"score": 123
},
"investment_momentum": {
"delta": 123,
"score": 123
},
"investor_quality": {
"delta": 123,
"score": 123
},
"overall_company": {
"delta": 123,
"score": 123
},
"peer_group_name": "<string>"
},
"pathpower": {
"meta": {},
"score": 123,
"strength_label": "<string>"
},
"rings_industry_tags": [
"<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>"
}
],
"page": 123,
"per_page": 123,
"total": 123,
"has_more": true,
"next_cursor": "<string>"
}Authorizations
Query Parameters
Page number, 1-indexed. Clamped to >= 1.
Results per page (default 10). Clamped to the range 1-50 (values outside are silently capped, not rejected).
Opaque cursor from a previous response's next_cursor. When supplied, the page starts immediately after the last record of that response and page is ignored — unlike page, this cannot skip or repeat records when the data changes mid-scan. Filters and sort must stay identical for the whole scan; changing one is a 400. Not supported by every list endpoint — those that support it return next_cursor.
Case-insensitive substring match on company name.
Exact match on the company's LinkedIn URL.
Website domain to match (e.g. 'acme.com'), same semantics as the domain parameter on GET /v1/companies/lookup.
Return only companies modified at or after this ISO 8601 timestamp (e.g. '2025-01-01T00:00:00Z'). Tracks the last time Rings updated the record, from any source.
Field to sort by. Valid values: 'name', 'last_activity_date'
name, last_activity_date Sort order. Valid values: 'asc' (ascending) or 'desc' (descending)
asc, desc Case-insensitive substring match on description.
Case-insensitive substring match on facebook_url.
Case-insensitive substring match on twitter_url.
Case-insensitive substring match on city.
State or region name, matched against its canonical name (scoped to country when provided).
Country name or ISO code, matched against its canonical name.
Comma-separated operating statuses (OR-matched).
Comma-separated acquisition statuses (OR-matched).
Comma-separated IPO statuses (OR-matched).
Comma-separated investor types (OR-matched). Spaces are normalised to underscores to match stored values.
Comma-separated last funding-round investment types (OR-matched).
Comma-separated NPI investment types (OR-matched).
Comma-separated company UUIDs to restrict results to.
Comma-separated Rings industry tags. Combined per rings_industry_tags_operator (AND requires every tag, OR requires any).
Logical operator for rings_industry_tags. 'AND' (default) requires all tags; 'OR' requires any.
AND, OR Minimum founding year (inclusive).
Maximum founding year (inclusive).
Minimum Rings score (inclusive).
Maximum Rings score (inclusive).
Minimum employee count (inclusive).
Maximum employee count (inclusive).
Minimum overall operating Rings AI score (inclusive).
Maximum overall operating Rings AI score (inclusive).
Minimum overall investor Rings AI score (inclusive).
Maximum overall investor Rings AI score (inclusive).
Start of last funding-round investment date range (ISO 8601 date). Applied with last_investment_date_to.
End of last funding-round investment date range (ISO 8601 date). Applied with last_investment_date_from.
Start of NPI date range (ISO 8601 date). Applied with npi_date_to.
End of NPI date range (ISO 8601 date). Applied with npi_date_from.