List scored content opportunities.
curl --request GET \
--url https://api.parallellabs.app/api/v0/research/opportunities \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/opportunities")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/research/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": [
{
"id": "<string>",
"projectId": "<string>",
"companyId": "<string>",
"title": "<string>",
"type": "keyword_gap",
"targetKeywords": [
{
"keyword": "<string>",
"volume": 123,
"cpc": 123,
"competition": "<string>",
"trend": "<string>"
}
],
"searchIntent": "informational",
"funnelStage": "tofu",
"opportunityScore": 123,
"scoreBreakdown": {},
"brief": {},
"evidence": {},
"status": "new",
"contentId": "<string>",
"monitorId": "<string>",
"created_date": "2023-11-07T05:31:56Z"
}
],
"total": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Content Research
List scored content opportunities.
Pass projectId to scope results to one project’s ICP; omit it to see opportunities across every project for the company.
GET
/
api
/
v0
/
research
/
opportunities
List scored content opportunities.
curl --request GET \
--url https://api.parallellabs.app/api/v0/research/opportunities \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/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://api.parallellabs.app/api/v0/research/opportunities")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/research/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": [
{
"id": "<string>",
"projectId": "<string>",
"companyId": "<string>",
"title": "<string>",
"type": "keyword_gap",
"targetKeywords": [
{
"keyword": "<string>",
"volume": 123,
"cpc": 123,
"competition": "<string>",
"trend": "<string>"
}
],
"searchIntent": "informational",
"funnelStage": "tofu",
"opportunityScore": 123,
"scoreBreakdown": {},
"brief": {},
"evidence": {},
"status": "new",
"contentId": "<string>",
"monitorId": "<string>",
"created_date": "2023-11-07T05:31:56Z"
}
],
"total": 123
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
CompanyApiKeyBearerAuth & CompanyId
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Query Parameters
Company ID that owns the opportunities
Restrict to one project. Omit to return opportunities across all projects.
Page number, 1-indexed
Results per page (max 100)
Filter by status. One of: new, dismissed, generated.
Available options:
new, dismissed, generated Filter by opportunity type. One of: keyword_gap, question, ai_citation_gap, competitor_gap, trending.
Available options:
keyword_gap, question, ai_citation_gap, competitor_gap, trending Filter by funnel stage. One of: tofu, mofu, bofu.
Available options:
tofu, mofu, bofu 
