curl --request GET \
--url https://app.octavehq.com/api/v2/product/list \
--header 'api_key: <api-key>'import requests
url = "https://app.octavehq.com/api/v2/product/list"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.octavehq.com/api/v2/product/list', 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.octavehq.com/api/v2/product/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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://app.octavehq.com/api/v2/product/list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("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://app.octavehq.com/api/v2/product/list")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/product/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"total": 123,
"data": [
{
"oId": "p_1234",
"createdAt": "2021-01-01",
"data": {
"type": "PRODUCT",
"internalName": "<string>",
"summary": "<string>",
"distinctCapabilities": [
"Capability 1",
"Capability 2"
],
"keyFunctionality": [
"Functionality 1",
"Functionality 2"
],
"differentiatedValue": [
"Differentiated Value 1",
"Differentiated Value 2"
],
"statusQuo": [
"Status Quo 1",
"Status Quo 2"
],
"challengesAddressed": [
"Challenge 1",
"Challenge 2"
],
"customerBenefits": [
"Benefit 1",
"Benefit 2"
],
"customFields": [
{
"title": "<string>",
"value": [
"<string>"
]
}
],
"additionalProperties": {}
},
"user": {
"oId": "u_1234",
"firstName": "John",
"lastName": "Doe"
},
"workspace": {
"oId": "wa_1234"
},
"type": "PRODUCT",
"updatedAt": "2021-01-01",
"archivedAt": "2021-01-01",
"deletedAt": "2021-01-01",
"name": "Product Name",
"internalName": "Product Internal Name",
"description": "Product Description",
"primaryUrl": "https://www.product.com",
"releaseNotesUrls": [
"https://www.product.com/changelog"
],
"active": true,
"qualifyingQuestions": [
{
"question": "<string>",
"rationale": "<string>",
"fitType": "GOOD",
"weight": "MEDIUM",
"archivedAt": "2023-11-07T05:31:56Z"
}
]
}
]
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}List Products
Lists product-table rows by default (type=PRODUCT). With type=ALL, returns products, services, and solutions in one paginated result (see response schema).
curl --request GET \
--url https://app.octavehq.com/api/v2/product/list \
--header 'api_key: <api-key>'import requests
url = "https://app.octavehq.com/api/v2/product/list"
headers = {"api_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {api_key: '<api-key>'}};
fetch('https://app.octavehq.com/api/v2/product/list', 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.octavehq.com/api/v2/product/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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://app.octavehq.com/api/v2/product/list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("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://app.octavehq.com/api/v2/product/list")
.header("api_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/product/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["api_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"total": 123,
"data": [
{
"oId": "p_1234",
"createdAt": "2021-01-01",
"data": {
"type": "PRODUCT",
"internalName": "<string>",
"summary": "<string>",
"distinctCapabilities": [
"Capability 1",
"Capability 2"
],
"keyFunctionality": [
"Functionality 1",
"Functionality 2"
],
"differentiatedValue": [
"Differentiated Value 1",
"Differentiated Value 2"
],
"statusQuo": [
"Status Quo 1",
"Status Quo 2"
],
"challengesAddressed": [
"Challenge 1",
"Challenge 2"
],
"customerBenefits": [
"Benefit 1",
"Benefit 2"
],
"customFields": [
{
"title": "<string>",
"value": [
"<string>"
]
}
],
"additionalProperties": {}
},
"user": {
"oId": "u_1234",
"firstName": "John",
"lastName": "Doe"
},
"workspace": {
"oId": "wa_1234"
},
"type": "PRODUCT",
"updatedAt": "2021-01-01",
"archivedAt": "2021-01-01",
"deletedAt": "2021-01-01",
"name": "Product Name",
"internalName": "Product Internal Name",
"description": "Product Description",
"primaryUrl": "https://www.product.com",
"releaseNotesUrls": [
"https://www.product.com/changelog"
],
"active": true,
"qualifyingQuestions": [
{
"question": "<string>",
"rationale": "<string>",
"fitType": "GOOD",
"weight": "MEDIUM",
"archivedAt": "2023-11-07T05:31:56Z"
}
]
}
]
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}Authorizations
Query Parameters
Text
Limit
Offset
When type=ALL, restricts the combined list to rows whose oId is in this filter. Accepts Product, Service, or Solution OIds (each table is queried with the same id). When type is PRODUCT or SERVICE, only the product table is queried, so Service-table-only and Solution OIds typically return no rows.
@deprecated Use offeringOId instead. Same semantics as offeringOId (alias for backward compatibility).
Filter by offering type (PRODUCT, SERVICE, or ALL). When ALL, responses include solutions. Defaults to PRODUCT for backwards compatibility.
PRODUCT, SERVICE, SOLUTION "PRODUCT"
Response
List of offerings: product-table rows when type is PRODUCT or SERVICE; products, services, and solutions when type is ALL.
Show child attributes
Show child attributes
Total matching rows (products only when type=PRODUCT or SERVICE; products, services, and solutions when type=ALL).
When type is ALL, combined offerings (product, service, solution). Otherwise product-table rows with a discriminating type field.
- ProductOffering
- ServiceOffering
- SolutionOffering
Show child attributes
Show child attributes