curl --request GET \
--url https://api.openpulse.cloud/v1/pipeline/roi \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.openpulse.cloud/v1/pipeline/roi"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.openpulse.cloud/v1/pipeline/roi', 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.openpulse.cloud/v1/pipeline/roi",
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://api.openpulse.cloud/v1/pipeline/roi"
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://api.openpulse.cloud/v1/pipeline/roi")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openpulse.cloud/v1/pipeline/roi")
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{
"windowDays": 123,
"wonCount": 123,
"wonValueMinor": 123,
"lostCount": 123,
"openCount": 123,
"weightedOpenMinor": 123,
"currency": "<string>",
"winRate": 0.5,
"medianCycleDays": 123
}{
"message": "<string>",
"code": "<string>",
"detail": "<unknown>"
}{
"message": "<string>",
"code": "plan_required",
"plan": "op_go"
}{
"message": "<string>",
"code": "<string>",
"detail": "<unknown>"
}{
"message": "<string>",
"code": "<string>",
"detail": "<unknown>"
}Pipeline return over a window
What the pipeline sourced from Open Pulse signals is worth over the window: deals opened, deals won, and value. The answer to ‘is this paying for itself’.
curl --request GET \
--url https://api.openpulse.cloud/v1/pipeline/roi \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.openpulse.cloud/v1/pipeline/roi"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.openpulse.cloud/v1/pipeline/roi', 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.openpulse.cloud/v1/pipeline/roi",
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://api.openpulse.cloud/v1/pipeline/roi"
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://api.openpulse.cloud/v1/pipeline/roi")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openpulse.cloud/v1/pipeline/roi")
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{
"windowDays": 123,
"wonCount": 123,
"wonValueMinor": 123,
"lostCount": 123,
"openCount": 123,
"weightedOpenMinor": 123,
"currency": "<string>",
"winRate": 0.5,
"medianCycleDays": 123
}{
"message": "<string>",
"code": "<string>",
"detail": "<unknown>"
}{
"message": "<string>",
"code": "plan_required",
"plan": "op_go"
}{
"message": "<string>",
"code": "<string>",
"detail": "<unknown>"
}{
"message": "<string>",
"code": "<string>",
"detail": "<unknown>"
}Authorizations
A workspace API key, created in workspace settings and sent as Authorization: Bearer op_live_…. Session cookies are not accepted. Scopes: signals:read, accounts:read, listeners:read, listeners:analyse, pipeline:read, pipeline:write, collections:write, export:read.
Query Parameters
Window length in days. Bounds which deals closed inside it; openCount and weightedOpenMinor describe the board as it is now and ignore this.
x >= 1Response
The window's return, in minor units of one currency.
What the pipeline sourced from Open Pulse signals is worth over a window.
Mixed currencies are not converted. There is no rate here and inventing one would produce a total that looks authoritative and is wrong, so the dominant currency is reported in currency and the figures are stated in it.
The window, in days. Closes are counted inside it; open deals are not.
Deals closed won in the window.
Their total value, in minor units of currency.
Deals closed lost in the window.
Deals currently in an open stage, regardless of the window.
Open value × stage probability. A sales convention rather than a measurement, and labelled as one wherever it is shown.
The currency most deals are actually in, not a default nobody set. GBP when no deal carries one.
3Won ÷ (won + lost). null when nothing has closed, not 0 — a 0% win rate is a claim about performance that "nothing has closed yet" does not make.
0 <= x <= 1Median days from created to closed. null when nothing has closed.
Was this page helpful?