curl --request GET \
--url https://production-api.joinrings.com/v1/opportunities/{opportunity_uuid} \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/opportunities/{opportunity_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/opportunities/{opportunity_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/opportunities/{opportunity_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/opportunities/{opportunity_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/opportunities/{opportunity_uuid}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/opportunities/{opportunity_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{
"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_field_mapping": {
"fields": [
{
"key": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"choices": [
"<string>"
]
}
],
"standard_key_to_uuid": {},
"unresolved_keys": [
"<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
}Get an opportunity
Returns the complete opportunity including stage, type, owner, intro person, associated persons and companies, custom fields, days in current stage, notes/files count, and activity dates. Returns 404 if the opportunity is not visible in the tenant’s ring.
Each associated person/company carries city, state and country, so
an opportunity’s geography can be read off the record itself instead of
looking every association up individually.
curl --request GET \
--url https://production-api.joinrings.com/v1/opportunities/{opportunity_uuid} \
--header 'x-api-key: <api-key>'import requests
url = "https://production-api.joinrings.com/v1/opportunities/{opportunity_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/opportunities/{opportunity_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/opportunities/{opportunity_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/opportunities/{opportunity_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/opportunities/{opportunity_uuid}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://production-api.joinrings.com/v1/opportunities/{opportunity_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{
"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_field_mapping": {
"fields": [
{
"key": "<string>",
"name": "<string>",
"type": "<string>",
"uuid": "<string>",
"choices": [
"<string>"
]
}
],
"standard_key_to_uuid": {},
"unresolved_keys": [
"<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
}Authorizations
Path Parameters
Response
Single-opportunity response (GET /v1/opportunities/{uuid}).
Extends OpportunityResponse with the tenant's custom-field schema,
which is only computed once per response here — list responses instead
carry it once at the top level (OpportunityListResponse.custom_field_mapping)
rather than repeating it on every item.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes