curl --request GET \
--url https://production-api.joinrings.com/v1/companies/{company_uuid}/opportunities \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/companies/{company_uuid}/opportunities"
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/{company_uuid}/opportunities', 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/{company_uuid}/opportunities",
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/{company_uuid}/opportunities"
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/{company_uuid}/opportunities")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/companies/{company_uuid}/opportunities")
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": [
{
"uuid": "<string>",
"associations": [
{
"association_type": "<string>",
"context": "<string>",
"created_at": 123,
"entity_type": "PERSON",
"entity_uuid": "<string>",
"last_activity_date": "<string>",
"updated_at": 123,
"uuid": "<string>",
"company": {
"last_activity_date": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"city": "<string>",
"country": "<string>",
"state": "<string>"
},
"person": {
"email": "<string>",
"last_activity_date": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"city": "<string>",
"country": "<string>",
"state": "<string>"
}
}
],
"children_metadata": {
"count": 123,
"probability_sum": 123,
"value_sum": 123,
"weighted_value_sum": 123
},
"close_date": "<string>",
"company_last_activity_date": "<string>",
"created_at": 123,
"created_by": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"custom_fields": [
{}
],
"days_in_stage": 123,
"details": "<string>",
"intro_date": "<string>",
"intro_person": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"last_activity_date": "<string>",
"name": "<string>",
"next_step": "<string>",
"notes_and_files_count": 123,
"owner": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"parent_name": "<string>",
"parent_uuid": "<string>",
"person_last_activity_date": "<string>",
"probability": 123,
"search_string": "<string>",
"source_date": "<string>",
"stage": {
"uuid": "<string>",
"name": "<string>"
},
"type": {
"label": "<string>",
"label_plural": "<string>",
"sub_label": "<string>",
"sub_label_plural": "<string>",
"uuid": "<string>",
"is_hidden": true
},
"updated_at": 123,
"updated_by": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"value": 123,
"weighted_value": 123
}
],
"page": 123,
"per_page": 123,
"total": 123,
"custom_field_mapping": {
"fields": [
{
"key": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"choices": [
"<string>"
]
}
],
"standard_key_to_uuid": {},
"unresolved_keys": [
"<string>"
]
},
"has_more": true,
"next_cursor": "<string>",
"total_value": 123,
"total_weighted_value": 123
}List opportunities for a company
Scoped to opportunities that have the given company as an association.
Only the name, opportunity_type_uuid, and opportunity_stage_uuid
filters from GET /v1/opportunities are applied here; other filter
parameters are accepted but ignored. Sorting and pagination match
GET /v1/opportunities.
curl --request GET \
--url https://production-api.joinrings.com/v1/companies/{company_uuid}/opportunities \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/companies/{company_uuid}/opportunities"
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/{company_uuid}/opportunities', 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/{company_uuid}/opportunities",
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/{company_uuid}/opportunities"
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/{company_uuid}/opportunities")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/companies/{company_uuid}/opportunities")
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": [
{
"uuid": "<string>",
"associations": [
{
"association_type": "<string>",
"context": "<string>",
"created_at": 123,
"entity_type": "PERSON",
"entity_uuid": "<string>",
"last_activity_date": "<string>",
"updated_at": 123,
"uuid": "<string>",
"company": {
"last_activity_date": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"city": "<string>",
"country": "<string>",
"state": "<string>"
},
"person": {
"email": "<string>",
"last_activity_date": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"city": "<string>",
"country": "<string>",
"state": "<string>"
}
}
],
"children_metadata": {
"count": 123,
"probability_sum": 123,
"value_sum": 123,
"weighted_value_sum": 123
},
"close_date": "<string>",
"company_last_activity_date": "<string>",
"created_at": 123,
"created_by": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"custom_fields": [
{}
],
"days_in_stage": 123,
"details": "<string>",
"intro_date": "<string>",
"intro_person": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"last_activity_date": "<string>",
"name": "<string>",
"next_step": "<string>",
"notes_and_files_count": 123,
"owner": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"parent_name": "<string>",
"parent_uuid": "<string>",
"person_last_activity_date": "<string>",
"probability": 123,
"search_string": "<string>",
"source_date": "<string>",
"stage": {
"uuid": "<string>",
"name": "<string>"
},
"type": {
"label": "<string>",
"label_plural": "<string>",
"sub_label": "<string>",
"sub_label_plural": "<string>",
"uuid": "<string>",
"is_hidden": true
},
"updated_at": 123,
"updated_by": {
"uuid": "<string>",
"logo_url": "<string>",
"name": "<string>",
"type": "<string>"
},
"value": 123,
"weighted_value": 123
}
],
"page": 123,
"per_page": 123,
"total": 123,
"custom_field_mapping": {
"fields": [
{
"key": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"choices": [
"<string>"
]
}
],
"standard_key_to_uuid": {},
"unresolved_keys": [
"<string>"
]
},
"has_more": true,
"next_cursor": "<string>",
"total_value": 123,
"total_weighted_value": 123
}Authorizations
Path Parameters
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 opportunity name.
Filter by opportunity type UUID (call GET /v1/opportunity-types to discover valid values).
Filter by opportunity stage UUID (inspect stage.uuid on existing records).
Comma-separated list of opportunity stage UUIDs (IN filter, e.g. for 'Diligence or later').
Search the opportunity name and its associated person/company names. Every whitespace-separated word must appear, in any order. If nothing matches, retries fuzzily so near-misses and typos still return results rather than an empty page, closest match first unless sort_by is given. Broader than name, which only matches the opportunity's own name field. Does not search the opportunity type label.
Comma-separated owner UUID(s); filters by the opportunity owner. Accepts either a user UUID or the person UUID shown as owner.uuid on a record. Returns 400 if none resolve.
Widens owner_user_uuid to also match opportunities with no owner. Has no effect on its own -- unowned opportunities are already returned when no owner filter is set.
true returns only opportunities that have an owner, false only the unassigned ones. Omit to return both.
Filter by the intro person's UUID.
Return parent opportunities that have a sub-opportunity associated with this company UUID.
Return parent opportunities that have a sub-opportunity associated with this person UUID.
Return only the sub-opportunities of this parent opportunity UUID.
'PARENT' for top-level opportunities only, 'CHILD' for sub-opportunities only. Ignored when parent_uuid is set.
PARENT, CHILD Comma-separated company UUID(s); returns opportunities associated with any of them.
Case-insensitive substring on the city of an associated person or company (e.g. 'Los Angeles'). Prefer this over paging the list and filtering client-side.
State/region of an associated person or company. A full name ('Florida') works on its own; a two-letter code ('FL', 'NY') is ISO 3166-2 and requires country, since unscoped 'FL' means Flintshire, GB. Returns 400 if it does not resolve.
Country of an associated person or company, name or ISO code ('US', 'United States'). Returns 400 if unrecognized.
Comma-separated person UUID(s); returns opportunities associated with any of them.
Minimum value, inclusive.
Maximum value, inclusive.
Minimum probability, inclusive.
Maximum probability, inclusive.
ISO 8601 date/datetime; only return opportunities updated at or after this time.
ISO 8601 date/datetime; only return opportunities updated at or before this time.
ISO 8601 date (YYYY-MM-DD). Must be paired with source_date_to — both are required together.
ISO 8601 date (YYYY-MM-DD). Must be paired with source_date_from — both are required together.
ISO 8601 date (YYYY-MM-DD). Must be paired with close_date_to — both are required together.
ISO 8601 date (YYYY-MM-DD). Must be paired with close_date_from — both are required together.
ISO 8601 datetime. Must be paired with last_activity_date_to — both are required together.
ISO 8601 datetime. Must be paired with last_activity_date_from — both are required together.
Sort order. Valid values: 'asc' (ascending) or 'desc' (descending)
asc, desc Field to sort by. Valid values: 'name', 'created_at', 'updated_at', 'value', 'weighted_value', 'probability', 'source_date', 'intro_date', 'close_date', 'last_activity_date', 'details', 'next_step', 'stage' (pipeline stage order), 'owner' (by name), 'intro_person' (by name), 'days_in_stage', 'notes_and_files_count'
name, created_at, updated_at, value, weighted_value, probability, source_date, intro_date, close_date, last_activity_date, details, next_step, stage, owner, intro_person, days_in_stage, notes_and_files_count Response
Paginated list of opportunities.
Show child attributes
Show child attributes
Show child attributes
Show child attributes