curl --request POST \
--url https://app.octavehq.com/api/v2/alternative/create \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"name": "Manual spreadsheet workflow",
"internalName": "Excel + email research stack",
"description": "Prospects stitch together spreadsheets and email to track outreach",
"whereItWorks": [
"Small team with one owner",
"Low deal volume"
],
"whereItBreaks": [
"Cross-team handoffs",
"Compliance review"
],
"whoChampionsThisApproach": [
"Frugal ops lead",
"Founder who built the spreadsheet"
],
"whyOurApproachIsSuperior": [
"Single system of record",
"Auditable workflow"
],
"perceivedBenefits": [
"No new vendor risk",
"Familiar tools"
],
"hiddenCostsAndPitfalls": [
"Tribal knowledge loss",
"Rework when owners rotate"
],
"customFields": [
{
"title": "<string>",
"value": [
"<string>"
]
}
],
"primaryOfferingOId": "o_123456",
"linkingStrategy": {
"mode": "ALL"
}
}
'import requests
url = "https://app.octavehq.com/api/v2/alternative/create"
payload = {
"name": "Manual spreadsheet workflow",
"internalName": "Excel + email research stack",
"description": "Prospects stitch together spreadsheets and email to track outreach",
"whereItWorks": ["Small team with one owner", "Low deal volume"],
"whereItBreaks": ["Cross-team handoffs", "Compliance review"],
"whoChampionsThisApproach": ["Frugal ops lead", "Founder who built the spreadsheet"],
"whyOurApproachIsSuperior": ["Single system of record", "Auditable workflow"],
"perceivedBenefits": ["No new vendor risk", "Familiar tools"],
"hiddenCostsAndPitfalls": ["Tribal knowledge loss", "Rework when owners rotate"],
"customFields": [
{
"title": "<string>",
"value": ["<string>"]
}
],
"primaryOfferingOId": "o_123456",
"linkingStrategy": { "mode": "ALL" }
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Manual spreadsheet workflow',
internalName: 'Excel + email research stack',
description: 'Prospects stitch together spreadsheets and email to track outreach',
whereItWorks: ['Small team with one owner', 'Low deal volume'],
whereItBreaks: ['Cross-team handoffs', 'Compliance review'],
whoChampionsThisApproach: ['Frugal ops lead', 'Founder who built the spreadsheet'],
whyOurApproachIsSuperior: ['Single system of record', 'Auditable workflow'],
perceivedBenefits: ['No new vendor risk', 'Familiar tools'],
hiddenCostsAndPitfalls: ['Tribal knowledge loss', 'Rework when owners rotate'],
customFields: [{title: '<string>', value: ['<string>']}],
primaryOfferingOId: 'o_123456',
linkingStrategy: {mode: 'ALL'}
})
};
fetch('https://app.octavehq.com/api/v2/alternative/create', 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/alternative/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Manual spreadsheet workflow',
'internalName' => 'Excel + email research stack',
'description' => 'Prospects stitch together spreadsheets and email to track outreach',
'whereItWorks' => [
'Small team with one owner',
'Low deal volume'
],
'whereItBreaks' => [
'Cross-team handoffs',
'Compliance review'
],
'whoChampionsThisApproach' => [
'Frugal ops lead',
'Founder who built the spreadsheet'
],
'whyOurApproachIsSuperior' => [
'Single system of record',
'Auditable workflow'
],
'perceivedBenefits' => [
'No new vendor risk',
'Familiar tools'
],
'hiddenCostsAndPitfalls' => [
'Tribal knowledge loss',
'Rework when owners rotate'
],
'customFields' => [
[
'title' => '<string>',
'value' => [
'<string>'
]
]
],
'primaryOfferingOId' => 'o_123456',
'linkingStrategy' => [
'mode' => 'ALL'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.octavehq.com/api/v2/alternative/create"
payload := strings.NewReader("{\n \"name\": \"Manual spreadsheet workflow\",\n \"internalName\": \"Excel + email research stack\",\n \"description\": \"Prospects stitch together spreadsheets and email to track outreach\",\n \"whereItWorks\": [\n \"Small team with one owner\",\n \"Low deal volume\"\n ],\n \"whereItBreaks\": [\n \"Cross-team handoffs\",\n \"Compliance review\"\n ],\n \"whoChampionsThisApproach\": [\n \"Frugal ops lead\",\n \"Founder who built the spreadsheet\"\n ],\n \"whyOurApproachIsSuperior\": [\n \"Single system of record\",\n \"Auditable workflow\"\n ],\n \"perceivedBenefits\": [\n \"No new vendor risk\",\n \"Familiar tools\"\n ],\n \"hiddenCostsAndPitfalls\": [\n \"Tribal knowledge loss\",\n \"Rework when owners rotate\"\n ],\n \"customFields\": [\n {\n \"title\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ],\n \"primaryOfferingOId\": \"o_123456\",\n \"linkingStrategy\": {\n \"mode\": \"ALL\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.octavehq.com/api/v2/alternative/create")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Manual spreadsheet workflow\",\n \"internalName\": \"Excel + email research stack\",\n \"description\": \"Prospects stitch together spreadsheets and email to track outreach\",\n \"whereItWorks\": [\n \"Small team with one owner\",\n \"Low deal volume\"\n ],\n \"whereItBreaks\": [\n \"Cross-team handoffs\",\n \"Compliance review\"\n ],\n \"whoChampionsThisApproach\": [\n \"Frugal ops lead\",\n \"Founder who built the spreadsheet\"\n ],\n \"whyOurApproachIsSuperior\": [\n \"Single system of record\",\n \"Auditable workflow\"\n ],\n \"perceivedBenefits\": [\n \"No new vendor risk\",\n \"Familiar tools\"\n ],\n \"hiddenCostsAndPitfalls\": [\n \"Tribal knowledge loss\",\n \"Rework when owners rotate\"\n ],\n \"customFields\": [\n {\n \"title\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ],\n \"primaryOfferingOId\": \"o_123456\",\n \"linkingStrategy\": {\n \"mode\": \"ALL\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/alternative/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Manual spreadsheet workflow\",\n \"internalName\": \"Excel + email research stack\",\n \"description\": \"Prospects stitch together spreadsheets and email to track outreach\",\n \"whereItWorks\": [\n \"Small team with one owner\",\n \"Low deal volume\"\n ],\n \"whereItBreaks\": [\n \"Cross-team handoffs\",\n \"Compliance review\"\n ],\n \"whoChampionsThisApproach\": [\n \"Frugal ops lead\",\n \"Founder who built the spreadsheet\"\n ],\n \"whyOurApproachIsSuperior\": [\n \"Single system of record\",\n \"Auditable workflow\"\n ],\n \"perceivedBenefits\": [\n \"No new vendor risk\",\n \"Familiar tools\"\n ],\n \"hiddenCostsAndPitfalls\": [\n \"Tribal knowledge loss\",\n \"Rework when owners rotate\"\n ],\n \"customFields\": [\n {\n \"title\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ],\n \"primaryOfferingOId\": \"o_123456\",\n \"linkingStrategy\": {\n \"mode\": \"ALL\"\n }\n}"
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"data": {
"oId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"name": "<string>",
"internalName": "<string>",
"description": "<string>",
"deletedAt": "<string>",
"archivedAt": "<string>",
"active": true,
"data": {
"whereItWorks": [
"<string>"
],
"whereItBreaks": [
"<string>"
],
"whoChampionsThisApproach": [
"<string>"
],
"whyOurApproachIsSuperior": [
"<string>"
],
"perceivedBenefits": [
"<string>"
],
"hiddenCostsAndPitfalls": [
"<string>"
],
"customFields": [
{
"title": "<string>",
"value": [
"<string>"
]
}
]
},
"user": {
"oId": "<string>",
"firstName": "John",
"lastName": "Doe"
},
"workspace": {
"oId": "<string>"
}
}
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}Create Alternative
Create a new alternative (status quo / incumbent / DIY pattern)
curl --request POST \
--url https://app.octavehq.com/api/v2/alternative/create \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"name": "Manual spreadsheet workflow",
"internalName": "Excel + email research stack",
"description": "Prospects stitch together spreadsheets and email to track outreach",
"whereItWorks": [
"Small team with one owner",
"Low deal volume"
],
"whereItBreaks": [
"Cross-team handoffs",
"Compliance review"
],
"whoChampionsThisApproach": [
"Frugal ops lead",
"Founder who built the spreadsheet"
],
"whyOurApproachIsSuperior": [
"Single system of record",
"Auditable workflow"
],
"perceivedBenefits": [
"No new vendor risk",
"Familiar tools"
],
"hiddenCostsAndPitfalls": [
"Tribal knowledge loss",
"Rework when owners rotate"
],
"customFields": [
{
"title": "<string>",
"value": [
"<string>"
]
}
],
"primaryOfferingOId": "o_123456",
"linkingStrategy": {
"mode": "ALL"
}
}
'import requests
url = "https://app.octavehq.com/api/v2/alternative/create"
payload = {
"name": "Manual spreadsheet workflow",
"internalName": "Excel + email research stack",
"description": "Prospects stitch together spreadsheets and email to track outreach",
"whereItWorks": ["Small team with one owner", "Low deal volume"],
"whereItBreaks": ["Cross-team handoffs", "Compliance review"],
"whoChampionsThisApproach": ["Frugal ops lead", "Founder who built the spreadsheet"],
"whyOurApproachIsSuperior": ["Single system of record", "Auditable workflow"],
"perceivedBenefits": ["No new vendor risk", "Familiar tools"],
"hiddenCostsAndPitfalls": ["Tribal knowledge loss", "Rework when owners rotate"],
"customFields": [
{
"title": "<string>",
"value": ["<string>"]
}
],
"primaryOfferingOId": "o_123456",
"linkingStrategy": { "mode": "ALL" }
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Manual spreadsheet workflow',
internalName: 'Excel + email research stack',
description: 'Prospects stitch together spreadsheets and email to track outreach',
whereItWorks: ['Small team with one owner', 'Low deal volume'],
whereItBreaks: ['Cross-team handoffs', 'Compliance review'],
whoChampionsThisApproach: ['Frugal ops lead', 'Founder who built the spreadsheet'],
whyOurApproachIsSuperior: ['Single system of record', 'Auditable workflow'],
perceivedBenefits: ['No new vendor risk', 'Familiar tools'],
hiddenCostsAndPitfalls: ['Tribal knowledge loss', 'Rework when owners rotate'],
customFields: [{title: '<string>', value: ['<string>']}],
primaryOfferingOId: 'o_123456',
linkingStrategy: {mode: 'ALL'}
})
};
fetch('https://app.octavehq.com/api/v2/alternative/create', 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/alternative/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Manual spreadsheet workflow',
'internalName' => 'Excel + email research stack',
'description' => 'Prospects stitch together spreadsheets and email to track outreach',
'whereItWorks' => [
'Small team with one owner',
'Low deal volume'
],
'whereItBreaks' => [
'Cross-team handoffs',
'Compliance review'
],
'whoChampionsThisApproach' => [
'Frugal ops lead',
'Founder who built the spreadsheet'
],
'whyOurApproachIsSuperior' => [
'Single system of record',
'Auditable workflow'
],
'perceivedBenefits' => [
'No new vendor risk',
'Familiar tools'
],
'hiddenCostsAndPitfalls' => [
'Tribal knowledge loss',
'Rework when owners rotate'
],
'customFields' => [
[
'title' => '<string>',
'value' => [
'<string>'
]
]
],
'primaryOfferingOId' => 'o_123456',
'linkingStrategy' => [
'mode' => 'ALL'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.octavehq.com/api/v2/alternative/create"
payload := strings.NewReader("{\n \"name\": \"Manual spreadsheet workflow\",\n \"internalName\": \"Excel + email research stack\",\n \"description\": \"Prospects stitch together spreadsheets and email to track outreach\",\n \"whereItWorks\": [\n \"Small team with one owner\",\n \"Low deal volume\"\n ],\n \"whereItBreaks\": [\n \"Cross-team handoffs\",\n \"Compliance review\"\n ],\n \"whoChampionsThisApproach\": [\n \"Frugal ops lead\",\n \"Founder who built the spreadsheet\"\n ],\n \"whyOurApproachIsSuperior\": [\n \"Single system of record\",\n \"Auditable workflow\"\n ],\n \"perceivedBenefits\": [\n \"No new vendor risk\",\n \"Familiar tools\"\n ],\n \"hiddenCostsAndPitfalls\": [\n \"Tribal knowledge loss\",\n \"Rework when owners rotate\"\n ],\n \"customFields\": [\n {\n \"title\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ],\n \"primaryOfferingOId\": \"o_123456\",\n \"linkingStrategy\": {\n \"mode\": \"ALL\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.octavehq.com/api/v2/alternative/create")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Manual spreadsheet workflow\",\n \"internalName\": \"Excel + email research stack\",\n \"description\": \"Prospects stitch together spreadsheets and email to track outreach\",\n \"whereItWorks\": [\n \"Small team with one owner\",\n \"Low deal volume\"\n ],\n \"whereItBreaks\": [\n \"Cross-team handoffs\",\n \"Compliance review\"\n ],\n \"whoChampionsThisApproach\": [\n \"Frugal ops lead\",\n \"Founder who built the spreadsheet\"\n ],\n \"whyOurApproachIsSuperior\": [\n \"Single system of record\",\n \"Auditable workflow\"\n ],\n \"perceivedBenefits\": [\n \"No new vendor risk\",\n \"Familiar tools\"\n ],\n \"hiddenCostsAndPitfalls\": [\n \"Tribal knowledge loss\",\n \"Rework when owners rotate\"\n ],\n \"customFields\": [\n {\n \"title\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ],\n \"primaryOfferingOId\": \"o_123456\",\n \"linkingStrategy\": {\n \"mode\": \"ALL\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/alternative/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Manual spreadsheet workflow\",\n \"internalName\": \"Excel + email research stack\",\n \"description\": \"Prospects stitch together spreadsheets and email to track outreach\",\n \"whereItWorks\": [\n \"Small team with one owner\",\n \"Low deal volume\"\n ],\n \"whereItBreaks\": [\n \"Cross-team handoffs\",\n \"Compliance review\"\n ],\n \"whoChampionsThisApproach\": [\n \"Frugal ops lead\",\n \"Founder who built the spreadsheet\"\n ],\n \"whyOurApproachIsSuperior\": [\n \"Single system of record\",\n \"Auditable workflow\"\n ],\n \"perceivedBenefits\": [\n \"No new vendor risk\",\n \"Familiar tools\"\n ],\n \"hiddenCostsAndPitfalls\": [\n \"Tribal knowledge loss\",\n \"Rework when owners rotate\"\n ],\n \"customFields\": [\n {\n \"title\": \"<string>\",\n \"value\": [\n \"<string>\"\n ]\n }\n ],\n \"primaryOfferingOId\": \"o_123456\",\n \"linkingStrategy\": {\n \"mode\": \"ALL\"\n }\n}"
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"data": {
"oId": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"name": "<string>",
"internalName": "<string>",
"description": "<string>",
"deletedAt": "<string>",
"archivedAt": "<string>",
"active": true,
"data": {
"whereItWorks": [
"<string>"
],
"whereItBreaks": [
"<string>"
],
"whoChampionsThisApproach": [
"<string>"
],
"whyOurApproachIsSuperior": [
"<string>"
],
"perceivedBenefits": [
"<string>"
],
"hiddenCostsAndPitfalls": [
"<string>"
],
"customFields": [
{
"title": "<string>",
"value": [
"<string>"
]
}
]
},
"user": {
"oId": "<string>",
"firstName": "John",
"lastName": "Doe"
},
"workspace": {
"oId": "<string>"
}
}
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}Authorizations
Body
Alternative creation input
The external name of the status quo / incumbent alternative
1"Manual spreadsheet workflow"
The internal name of the alternative
"Excel + email research stack"
A description of the alternative
"Prospects stitch together spreadsheets and email to track outreach"
Conditions and contexts where this alternative genuinely holds up
[
"Small team with one owner",
"Low deal volume"
]Concrete failure modes and triggers where this approach stops working
["Cross-team handoffs", "Compliance review"]Personas or mindsets that advocate for this path and resist change
[
"Frugal ops lead",
"Founder who built the spreadsheet"
]Specific ways the offering addresses gaps and failure modes of this alternative
[
"Single system of record",
"Auditable workflow"
]Why this approach feels rational, safe, or good enough organizationally
["No new vendor risk", "Familiar tools"]Non-obvious costs, compounding debt, and second-order risks over time
[
"Tribal knowledge loss",
"Rework when owners rotate"
]Custom fields for additional alternative information
Show child attributes
Show child attributes
Primary Offering to use as context when creating alternatives. If not provided, the primary company attached to the Workspace will be used.
"o_123456"
Strategy for linking this alternative to offerings (products/services)
- Option 1
- Option 2
Show child attributes
Show child attributes