curl --request POST \
--url https://api.cloud.corbado.io/v1/observe/funnel/metricSeries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"schemaVersion": "funnel-metric-v1",
"fromDate": "<string>",
"toDate": "<string>",
"metrics": [],
"output": "buckets",
"selections": [
{
"prefix": [
{
"decisionID": "<string>",
"flowType": "<string>",
"specType": "<string>"
}
]
}
],
"filters": {
"applicationIDs": [
"app-12345678910"
],
"osNames": [
"<string>"
],
"browserNames": [
"<string>"
],
"osVersions": [
"<string>"
],
"touchpoints": [
"<string>"
],
"customTags": {},
"outcomes": [],
"attemptNumbers": []
},
"breakdowns": [
{
"omitEmpty": false,
"minWeeklyObservations": 1,
"values": [
"<string>"
]
}
]
}
'import requests
url = "https://api.cloud.corbado.io/v1/observe/funnel/metricSeries"
payload = {
"schemaVersion": "funnel-metric-v1",
"fromDate": "<string>",
"toDate": "<string>",
"metrics": [],
"output": "buckets",
"selections": [{ "prefix": [
{
"decisionID": "<string>",
"flowType": "<string>",
"specType": "<string>"
}
] }],
"filters": {
"applicationIDs": ["app-12345678910"],
"osNames": ["<string>"],
"browserNames": ["<string>"],
"osVersions": ["<string>"],
"touchpoints": ["<string>"],
"customTags": {},
"outcomes": [],
"attemptNumbers": []
},
"breakdowns": [
{
"omitEmpty": False,
"minWeeklyObservations": 1,
"values": ["<string>"]
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
schemaVersion: 'funnel-metric-v1',
fromDate: '<string>',
toDate: '<string>',
metrics: [],
output: 'buckets',
selections: [
{prefix: [{decisionID: '<string>', flowType: '<string>', specType: '<string>'}]}
],
filters: {
applicationIDs: ['app-12345678910'],
osNames: ['<string>'],
browserNames: ['<string>'],
osVersions: ['<string>'],
touchpoints: ['<string>'],
customTags: {},
outcomes: [],
attemptNumbers: []
},
breakdowns: [{omitEmpty: false, minWeeklyObservations: 1, values: ['<string>']}]
})
};
fetch('https://api.cloud.corbado.io/v1/observe/funnel/metricSeries', 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.cloud.corbado.io/v1/observe/funnel/metricSeries",
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([
'schemaVersion' => 'funnel-metric-v1',
'fromDate' => '<string>',
'toDate' => '<string>',
'metrics' => [
],
'output' => 'buckets',
'selections' => [
[
'prefix' => [
[
'decisionID' => '<string>',
'flowType' => '<string>',
'specType' => '<string>'
]
]
]
],
'filters' => [
'applicationIDs' => [
'app-12345678910'
],
'osNames' => [
'<string>'
],
'browserNames' => [
'<string>'
],
'osVersions' => [
'<string>'
],
'touchpoints' => [
'<string>'
],
'customTags' => [
],
'outcomes' => [
],
'attemptNumbers' => [
]
],
'breakdowns' => [
[
'omitEmpty' => false,
'minWeeklyObservations' => 1,
'values' => [
'<string>'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.cloud.corbado.io/v1/observe/funnel/metricSeries"
payload := strings.NewReader("{\n \"schemaVersion\": \"funnel-metric-v1\",\n \"fromDate\": \"<string>\",\n \"toDate\": \"<string>\",\n \"metrics\": [],\n \"output\": \"buckets\",\n \"selections\": [\n {\n \"prefix\": [\n {\n \"decisionID\": \"<string>\",\n \"flowType\": \"<string>\",\n \"specType\": \"<string>\"\n }\n ]\n }\n ],\n \"filters\": {\n \"applicationIDs\": [\n \"app-12345678910\"\n ],\n \"osNames\": [\n \"<string>\"\n ],\n \"browserNames\": [\n \"<string>\"\n ],\n \"osVersions\": [\n \"<string>\"\n ],\n \"touchpoints\": [\n \"<string>\"\n ],\n \"customTags\": {},\n \"outcomes\": [],\n \"attemptNumbers\": []\n },\n \"breakdowns\": [\n {\n \"omitEmpty\": false,\n \"minWeeklyObservations\": 1,\n \"values\": [\n \"<string>\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.cloud.corbado.io/v1/observe/funnel/metricSeries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"schemaVersion\": \"funnel-metric-v1\",\n \"fromDate\": \"<string>\",\n \"toDate\": \"<string>\",\n \"metrics\": [],\n \"output\": \"buckets\",\n \"selections\": [\n {\n \"prefix\": [\n {\n \"decisionID\": \"<string>\",\n \"flowType\": \"<string>\",\n \"specType\": \"<string>\"\n }\n ]\n }\n ],\n \"filters\": {\n \"applicationIDs\": [\n \"app-12345678910\"\n ],\n \"osNames\": [\n \"<string>\"\n ],\n \"browserNames\": [\n \"<string>\"\n ],\n \"osVersions\": [\n \"<string>\"\n ],\n \"touchpoints\": [\n \"<string>\"\n ],\n \"customTags\": {},\n \"outcomes\": [],\n \"attemptNumbers\": []\n },\n \"breakdowns\": [\n {\n \"omitEmpty\": false,\n \"minWeeklyObservations\": 1,\n \"values\": [\n \"<string>\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/funnel/metricSeries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"schemaVersion\": \"funnel-metric-v1\",\n \"fromDate\": \"<string>\",\n \"toDate\": \"<string>\",\n \"metrics\": [],\n \"output\": \"buckets\",\n \"selections\": [\n {\n \"prefix\": [\n {\n \"decisionID\": \"<string>\",\n \"flowType\": \"<string>\",\n \"specType\": \"<string>\"\n }\n ]\n }\n ],\n \"filters\": {\n \"applicationIDs\": [\n \"app-12345678910\"\n ],\n \"osNames\": [\n \"<string>\"\n ],\n \"browserNames\": [\n \"<string>\"\n ],\n \"osVersions\": [\n \"<string>\"\n ],\n \"touchpoints\": [\n \"<string>\"\n ],\n \"customTags\": {},\n \"outcomes\": [],\n \"attemptNumbers\": []\n },\n \"breakdowns\": [\n {\n \"omitEmpty\": false,\n \"minWeeklyObservations\": 1,\n \"values\": [\n \"<string>\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"schemaVersion": "<string>",
"projectID": "<string>",
"name": "<string>",
"timeZone": "<string>",
"timeBasis": "flow-start",
"selection": {
"kind": "node",
"scope": "prefix",
"prefix": [
{
"kind": "decision",
"decisionID": "<string>",
"subflowType": "provideIdentifier",
"flowType": "<string>",
"specType": "<string>",
"terminalType": "decision-unresolved"
}
],
"destination": {
"kind": "decision",
"decisionID": "<string>",
"subflowType": "provideIdentifier",
"flowType": "<string>",
"specType": "<string>",
"terminalType": "decision-unresolved"
}
},
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"buckets": [
{
"time": "2023-11-07T05:31:56Z",
"counts": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"unparsedRows": 123,
"unparsedWeight": 123,
"values": {}
}
],
"coverage": {
"firstBucket": "2023-11-07T05:31:56Z",
"endExclusive": "2023-11-07T05:31:56Z",
"snapshotDate": "2023-12-25",
"completeWindow": true,
"notes": [
"<string>"
]
},
"nodes": "<array>",
"comparison": {
"baseline": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"current": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"differences": {}
},
"breakdowns": [
{
"dimension": "<string>",
"groups": [
{
"value": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"buckets": [
{
"time": "2023-11-07T05:31:56Z",
"counts": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"unparsedRows": 123,
"unparsedWeight": 123,
"values": {}
}
],
"comparison": {
"baseline": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"current": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"differences": {}
}
}
]
}
],
"unavailableMetrics": {},
"diagnostics": {
"rowsScanned": 123,
"rowsMatched": 123,
"rowsUnparsed": 123,
"weightUnparsed": 123
}
}Calculate historical metrics for an exact journey position
Required API key permission: observe:timeSeries:read.
curl --request POST \
--url https://api.cloud.corbado.io/v1/observe/funnel/metricSeries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"schemaVersion": "funnel-metric-v1",
"fromDate": "<string>",
"toDate": "<string>",
"metrics": [],
"output": "buckets",
"selections": [
{
"prefix": [
{
"decisionID": "<string>",
"flowType": "<string>",
"specType": "<string>"
}
]
}
],
"filters": {
"applicationIDs": [
"app-12345678910"
],
"osNames": [
"<string>"
],
"browserNames": [
"<string>"
],
"osVersions": [
"<string>"
],
"touchpoints": [
"<string>"
],
"customTags": {},
"outcomes": [],
"attemptNumbers": []
},
"breakdowns": [
{
"omitEmpty": false,
"minWeeklyObservations": 1,
"values": [
"<string>"
]
}
]
}
'import requests
url = "https://api.cloud.corbado.io/v1/observe/funnel/metricSeries"
payload = {
"schemaVersion": "funnel-metric-v1",
"fromDate": "<string>",
"toDate": "<string>",
"metrics": [],
"output": "buckets",
"selections": [{ "prefix": [
{
"decisionID": "<string>",
"flowType": "<string>",
"specType": "<string>"
}
] }],
"filters": {
"applicationIDs": ["app-12345678910"],
"osNames": ["<string>"],
"browserNames": ["<string>"],
"osVersions": ["<string>"],
"touchpoints": ["<string>"],
"customTags": {},
"outcomes": [],
"attemptNumbers": []
},
"breakdowns": [
{
"omitEmpty": False,
"minWeeklyObservations": 1,
"values": ["<string>"]
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
schemaVersion: 'funnel-metric-v1',
fromDate: '<string>',
toDate: '<string>',
metrics: [],
output: 'buckets',
selections: [
{prefix: [{decisionID: '<string>', flowType: '<string>', specType: '<string>'}]}
],
filters: {
applicationIDs: ['app-12345678910'],
osNames: ['<string>'],
browserNames: ['<string>'],
osVersions: ['<string>'],
touchpoints: ['<string>'],
customTags: {},
outcomes: [],
attemptNumbers: []
},
breakdowns: [{omitEmpty: false, minWeeklyObservations: 1, values: ['<string>']}]
})
};
fetch('https://api.cloud.corbado.io/v1/observe/funnel/metricSeries', 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.cloud.corbado.io/v1/observe/funnel/metricSeries",
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([
'schemaVersion' => 'funnel-metric-v1',
'fromDate' => '<string>',
'toDate' => '<string>',
'metrics' => [
],
'output' => 'buckets',
'selections' => [
[
'prefix' => [
[
'decisionID' => '<string>',
'flowType' => '<string>',
'specType' => '<string>'
]
]
]
],
'filters' => [
'applicationIDs' => [
'app-12345678910'
],
'osNames' => [
'<string>'
],
'browserNames' => [
'<string>'
],
'osVersions' => [
'<string>'
],
'touchpoints' => [
'<string>'
],
'customTags' => [
],
'outcomes' => [
],
'attemptNumbers' => [
]
],
'breakdowns' => [
[
'omitEmpty' => false,
'minWeeklyObservations' => 1,
'values' => [
'<string>'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.cloud.corbado.io/v1/observe/funnel/metricSeries"
payload := strings.NewReader("{\n \"schemaVersion\": \"funnel-metric-v1\",\n \"fromDate\": \"<string>\",\n \"toDate\": \"<string>\",\n \"metrics\": [],\n \"output\": \"buckets\",\n \"selections\": [\n {\n \"prefix\": [\n {\n \"decisionID\": \"<string>\",\n \"flowType\": \"<string>\",\n \"specType\": \"<string>\"\n }\n ]\n }\n ],\n \"filters\": {\n \"applicationIDs\": [\n \"app-12345678910\"\n ],\n \"osNames\": [\n \"<string>\"\n ],\n \"browserNames\": [\n \"<string>\"\n ],\n \"osVersions\": [\n \"<string>\"\n ],\n \"touchpoints\": [\n \"<string>\"\n ],\n \"customTags\": {},\n \"outcomes\": [],\n \"attemptNumbers\": []\n },\n \"breakdowns\": [\n {\n \"omitEmpty\": false,\n \"minWeeklyObservations\": 1,\n \"values\": [\n \"<string>\"\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.cloud.corbado.io/v1/observe/funnel/metricSeries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"schemaVersion\": \"funnel-metric-v1\",\n \"fromDate\": \"<string>\",\n \"toDate\": \"<string>\",\n \"metrics\": [],\n \"output\": \"buckets\",\n \"selections\": [\n {\n \"prefix\": [\n {\n \"decisionID\": \"<string>\",\n \"flowType\": \"<string>\",\n \"specType\": \"<string>\"\n }\n ]\n }\n ],\n \"filters\": {\n \"applicationIDs\": [\n \"app-12345678910\"\n ],\n \"osNames\": [\n \"<string>\"\n ],\n \"browserNames\": [\n \"<string>\"\n ],\n \"osVersions\": [\n \"<string>\"\n ],\n \"touchpoints\": [\n \"<string>\"\n ],\n \"customTags\": {},\n \"outcomes\": [],\n \"attemptNumbers\": []\n },\n \"breakdowns\": [\n {\n \"omitEmpty\": false,\n \"minWeeklyObservations\": 1,\n \"values\": [\n \"<string>\"\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/funnel/metricSeries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"schemaVersion\": \"funnel-metric-v1\",\n \"fromDate\": \"<string>\",\n \"toDate\": \"<string>\",\n \"metrics\": [],\n \"output\": \"buckets\",\n \"selections\": [\n {\n \"prefix\": [\n {\n \"decisionID\": \"<string>\",\n \"flowType\": \"<string>\",\n \"specType\": \"<string>\"\n }\n ]\n }\n ],\n \"filters\": {\n \"applicationIDs\": [\n \"app-12345678910\"\n ],\n \"osNames\": [\n \"<string>\"\n ],\n \"browserNames\": [\n \"<string>\"\n ],\n \"osVersions\": [\n \"<string>\"\n ],\n \"touchpoints\": [\n \"<string>\"\n ],\n \"customTags\": {},\n \"outcomes\": [],\n \"attemptNumbers\": []\n },\n \"breakdowns\": [\n {\n \"omitEmpty\": false,\n \"minWeeklyObservations\": 1,\n \"values\": [\n \"<string>\"\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"schemaVersion": "<string>",
"projectID": "<string>",
"name": "<string>",
"timeZone": "<string>",
"timeBasis": "flow-start",
"selection": {
"kind": "node",
"scope": "prefix",
"prefix": [
{
"kind": "decision",
"decisionID": "<string>",
"subflowType": "provideIdentifier",
"flowType": "<string>",
"specType": "<string>",
"terminalType": "decision-unresolved"
}
],
"destination": {
"kind": "decision",
"decisionID": "<string>",
"subflowType": "provideIdentifier",
"flowType": "<string>",
"specType": "<string>",
"terminalType": "decision-unresolved"
}
},
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"buckets": [
{
"time": "2023-11-07T05:31:56Z",
"counts": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"unparsedRows": 123,
"unparsedWeight": 123,
"values": {}
}
],
"coverage": {
"firstBucket": "2023-11-07T05:31:56Z",
"endExclusive": "2023-11-07T05:31:56Z",
"snapshotDate": "2023-12-25",
"completeWindow": true,
"notes": [
"<string>"
]
},
"nodes": "<array>",
"comparison": {
"baseline": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"current": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"differences": {}
},
"breakdowns": [
{
"dimension": "<string>",
"groups": [
{
"value": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"buckets": [
{
"time": "2023-11-07T05:31:56Z",
"counts": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"unparsedRows": 123,
"unparsedWeight": 123,
"values": {}
}
],
"comparison": {
"baseline": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"current": {
"fromDate": "<string>",
"toDate": "<string>",
"totals": {
"flowsReached": 123,
"attemptsReached": 123,
"completedFlows": 123,
"flowsWithErrors": 123,
"sourceAttempts": 123,
"skippedFlows": 123,
"droppedFlows": 123,
"completedAttempts": 123,
"occurrences": 123,
"subflowOccurrences": 123,
"completedSubflowOccurrences": 123,
"completedHere": 123,
"droppedHere": 123,
"retriedHere": 123,
"continued": 123,
"otherEndings": 123,
"flowsWithRetries": 123,
"repeatedFlows": 123,
"embeddedErrorOccurrences": 123,
"completionDurationBuckets": [
123
],
"completedHereDurationBuckets": [
123
]
},
"summary": {},
"unparsedRows": 123
},
"differences": {}
}
}
]
}
],
"unavailableMetrics": {},
"diagnostics": {
"rowsScanned": 123,
"rowsMatched": 123,
"rowsUnparsed": 123,
"weightUnparsed": 123
}
}Authorizations
Use an Observe API key from the management console. The key selects the project and must grant the permission listed on the operation. Keep this key on your server.
Body
funnel-metric-v1 login-flow-v1, signup-flow-v1, recovery-flow-v1, security-enrollment-flow-v1 Inclusive UTC-naive datetime, YYYY-MM-DDTHH:mm:ss; aligned to project bucket boundaries
Exclusive UTC-naive datetime; later than fromDate; maximum 366 days
daily, hourly 1 - 19 elementsflowsReached, attemptsReached, occurrences, eventualCompletionRate, attemptCompletionRate, flowErrorRate, retriedFlowRate, eventualCompletionTime, subflowCompletionRate, completedHereRate, dropoffRate, retryHereRate, continueRate, completedHereTime, stepErrorRate, edgeShare, eventualSkipRate, eventualDropoffRate, skippedHereRate Required for single-position bucket history. Mutually exclusive with selections. Omission requires selections with output totals; no position discovery is supported.
Show child attributes
Show child attributes
Single selection supports buckets only (the default). Plural selections requires totals, returning no buckets and accepting no comparison or breakdowns. Interval still selects the existing daily/hourly source data.
buckets, totals Explicit node/edge prefixes to calculate together with output totals. Mutually exclusive with selection. Non-root positions are returned in nodes, including zero-volume positions. Root remains the top-level result.
1 - 1000 elementsShow child attributes
Show child attributes
Optional daily comparison. Both periods must be nonempty, contained within the request range, and baseline must end no later than current starts. Unequal lengths are supported. Periods do not change the daily chart or full-range totals.
Show child attributes
Show child attributes
Values within a dimension are ORed; dimensions are ANDed. Omitted filters mean all. Null includes rows where a supported dimension is absent or empty.
Show child attributes
Show child attributes
Independent first-order groupings calculated together in one pass over stored aggregates. Each dimension occurs once. Omit a dimension's values to discover its observed groups in that same pass. The sum of explicit and discovered values across all dimensions multiplied by the number of buckets must not exceed 100000. The baseline is returned once at the top level.
1 - 16 elementsShow child attributes
Show child attributes
Response
Daily or hourly metrics, including empty buckets
flow-start Show child attributes
Show child attributes
Show child attributes
Show child attributes
Full-period metrics calculated from merged counts/histograms. All values are null when candidate paths could not be interpreted. Counts and totals then cover decoded records only.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Present only for batched totals. Explicitly requested non-root node/edge positions in deterministic semantic-prefix order, each with empty buckets and no nested nodes. The top-level result is the root. Unparseable source rows conservatively invalidate all position metrics. No silent truncation.
Show child attributes
Show child attributes
Independent results for a breakdowns request, in request order. An empty groups array means no values passed the requested support screen. Omit breakdowns for baseline metrics only.
16Show child attributes
Show child attributes
Reasons for unavailable or inapplicable metrics; corresponding values are null
Show child attributes
Show child attributes
Calculation timings and processed-cell counts. Shard timings overlap and must not be added as end-to-end latency.
Show child attributes
Show child attributes
Was this page helpful?