curl --request GET \
--url https://app.reechee.io/api/v1/opportunities/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.reechee.io/api/v1/opportunities/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.reechee.io/api/v1/opportunities/{id}', 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://app.reechee.io/api/v1/opportunities/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.reechee.io/api/v1/opportunities/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.reechee.io/api/v1/opportunities/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.reechee.io/api/v1/opportunities/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_viewed": true,
"buying_committee": {
"summary": {
"version": 1,
"candidate_count": 123,
"stored_count": 123,
"cap": 10,
"truncated": true
},
"is_revealed": true,
"members": [
{}
]
},
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"source": "review",
"is_committee_revealed": true,
"is_reviewer_revealed": true,
"is_reviewer_email_revealed": true,
"is_reviewer_phone_revealed": true,
"reviewer_email": "<string>",
"reviewer_phone": "<string>",
"reviewer_email_not_found": true,
"reviewer_phone_not_found": true,
"reviewer_email_source": "<string>",
"reviewer_phone_source": "<string>",
"frustration_tier": "severe",
"mention": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"text": "<string>",
"posted_at": "2023-11-07T05:31:56Z",
"sentiment": "<string>",
"has_buying_signal": true,
"pain_points": {},
"author_name": "<string>",
"author_headline": "<string>",
"author_title": "<string>",
"author_bio": "<string>",
"author_profile_url": "<string>",
"author_city": "<string>",
"author_country": "<string>",
"author_company_name": "<string>",
"author_company_logo": "<string>",
"author_company_linkedin_url": "<string>",
"author_company_website": "<string>",
"author_company_size": "<string>",
"author_company_industry": "<string>",
"author_company_description": "<string>",
"subreddit": "<string>",
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"logo_url": "<string>"
}
},
"review": {
"review_title": "<string>",
"pros": "<string>",
"cons": "<string>",
"general_comments": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"platform": "<string>",
"reviewer_name": "<string>",
"reviewer_title": "<string>",
"reviewer_company": "<string>",
"reviewer_company_logo": "<string>",
"rating": 123,
"review_url": "<string>",
"linkedin_lead_url": "<string>",
"linkedin_company_url": "<string>",
"published_at": "2023-11-07T05:31:56Z",
"company_industry": "<string>",
"company_size": "<string>",
"company_country": "<string>",
"company_description": "<string>",
"company_website": "<string>",
"enriched_company_name": "<string>",
"enriched_company_logo": "<string>",
"enriched_company_industry": "<string>",
"enriched_company_size": "<string>",
"enriched_company_country": "<string>",
"enriched_company_website": "<string>",
"enriched_company_linkedin": "<string>",
"enriched_reviewer_name": "<string>",
"enriched_reviewer_title": "<string>",
"enriched_reviewer_linkedin": "<string>",
"enriched_reviewer_city": "<string>",
"enriched_reviewer_country": "<string>",
"pain_points_analysis": {},
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"logo_url": "<string>"
}
}
}
}{
"success": false,
"error": {
"code": "unauthorized",
"message": "API key required. Start free at https://app.reechee.io/sign-up (no card needed), then create an API key in Settings or connect through OAuth."
}
}{
"success": false,
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"details": {
"retry_after_seconds": 12,
"limit": 60,
"remaining": 0
}
}
}Get an opportunity
Full detail for one opportunity. Requires an API key. Check source first:
"review" populates review (reviewer, company, star rating, review_url,
the extracted pain_points_analysis, and stored full-review fields
review_title, pros, cons, and general_comments). On pricing version 2,
all four full-review fields are null until this team’s reviewer reveal,
even if the company is already known through another reviewer. After reveal,
and on legacy pricing version 1, they contain the stored text or null when
missing. List responses do not include these full-review fields.
"linkedin" / "reddit" populate mention (the post, its author, and the
author’s company - not unlock-gated, since a social author is already
public). Unlock-gated fields - the reviewer’s personal LinkedIn, email, and
phone, and the buying committee - are redacted to null unless the team has
unlocked them; the is_*_revealed flags and buying_committee.is_revealed
tell you the state.
curl --request GET \
--url https://app.reechee.io/api/v1/opportunities/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.reechee.io/api/v1/opportunities/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.reechee.io/api/v1/opportunities/{id}', 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://app.reechee.io/api/v1/opportunities/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://app.reechee.io/api/v1/opportunities/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.reechee.io/api/v1/opportunities/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.reechee.io/api/v1/opportunities/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_viewed": true,
"buying_committee": {
"summary": {
"version": 1,
"candidate_count": 123,
"stored_count": 123,
"cap": 10,
"truncated": true
},
"is_revealed": true,
"members": [
{}
]
},
"status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"source": "review",
"is_committee_revealed": true,
"is_reviewer_revealed": true,
"is_reviewer_email_revealed": true,
"is_reviewer_phone_revealed": true,
"reviewer_email": "<string>",
"reviewer_phone": "<string>",
"reviewer_email_not_found": true,
"reviewer_phone_not_found": true,
"reviewer_email_source": "<string>",
"reviewer_phone_source": "<string>",
"frustration_tier": "severe",
"mention": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"text": "<string>",
"posted_at": "2023-11-07T05:31:56Z",
"sentiment": "<string>",
"has_buying_signal": true,
"pain_points": {},
"author_name": "<string>",
"author_headline": "<string>",
"author_title": "<string>",
"author_bio": "<string>",
"author_profile_url": "<string>",
"author_city": "<string>",
"author_country": "<string>",
"author_company_name": "<string>",
"author_company_logo": "<string>",
"author_company_linkedin_url": "<string>",
"author_company_website": "<string>",
"author_company_size": "<string>",
"author_company_industry": "<string>",
"author_company_description": "<string>",
"subreddit": "<string>",
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"logo_url": "<string>"
}
},
"review": {
"review_title": "<string>",
"pros": "<string>",
"cons": "<string>",
"general_comments": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"platform": "<string>",
"reviewer_name": "<string>",
"reviewer_title": "<string>",
"reviewer_company": "<string>",
"reviewer_company_logo": "<string>",
"rating": 123,
"review_url": "<string>",
"linkedin_lead_url": "<string>",
"linkedin_company_url": "<string>",
"published_at": "2023-11-07T05:31:56Z",
"company_industry": "<string>",
"company_size": "<string>",
"company_country": "<string>",
"company_description": "<string>",
"company_website": "<string>",
"enriched_company_name": "<string>",
"enriched_company_logo": "<string>",
"enriched_company_industry": "<string>",
"enriched_company_size": "<string>",
"enriched_company_country": "<string>",
"enriched_company_website": "<string>",
"enriched_company_linkedin": "<string>",
"enriched_reviewer_name": "<string>",
"enriched_reviewer_title": "<string>",
"enriched_reviewer_linkedin": "<string>",
"enriched_reviewer_city": "<string>",
"enriched_reviewer_country": "<string>",
"pain_points_analysis": {},
"product": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"logo_url": "<string>"
}
}
}
}{
"success": false,
"error": {
"code": "unauthorized",
"message": "API key required. Start free at https://app.reechee.io/sign-up (no card needed), then create an API key in Settings or connect through OAuth."
}
}{
"success": false,
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"success": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"details": {
"retry_after_seconds": 12,
"limit": 60,
"remaining": 0
}
}
}Authorizations
An API key, sent as Authorization: Bearer rch_live_…. Create and
revoke keys in the app under Settings → API keys. A Connected (OAuth) access
token from the MCP Connect flow is accepted in the same header.
Path Parameters
Opportunity id (uuid).