curl --request GET \
--url https://api.cloud.corbado.io/v1/observe/errorFlavours \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cloud.corbado.io/v1/observe/errorFlavours"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cloud.corbado.io/v1/observe/errorFlavours', 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/errorFlavours",
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.cloud.corbado.io/v1/observe/errorFlavours"
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.cloud.corbado.io/v1/observe/errorFlavours")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/errorFlavours")
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[
{
"id": "<string>",
"subFlowType": "<string>",
"stepName": "<string>",
"name": "<string>",
"message": "<string>",
"code": "<string>",
"uiPatterns": "<string>",
"specType": "<string>",
"trigger": "step-error",
"durationBucket": "0",
"firstSeenMs": 123,
"errorID": "<string>",
"assignSource": "manual",
"assignReason": "<string>"
}
]{
"error": {
"message": "Validation failed",
"details": [
{
"field": "projectID",
"message": "required"
}
]
}
}List error flavours
Lists all error flavours of the project (content-addressed raw error signatures; capped per project, so
the full list is returned unpaged). Occurrence statistics are NOT included — counts and recency come
from the subflow-error-flavour-v1 time series, keyed by the raw flavour id in t1.
Required API key permission: observe:errorFlavours:read.
curl --request GET \
--url https://api.cloud.corbado.io/v1/observe/errorFlavours \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cloud.corbado.io/v1/observe/errorFlavours"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cloud.corbado.io/v1/observe/errorFlavours', 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/errorFlavours",
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.cloud.corbado.io/v1/observe/errorFlavours"
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.cloud.corbado.io/v1/observe/errorFlavours")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloud.corbado.io/v1/observe/errorFlavours")
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[
{
"id": "<string>",
"subFlowType": "<string>",
"stepName": "<string>",
"name": "<string>",
"message": "<string>",
"code": "<string>",
"uiPatterns": "<string>",
"specType": "<string>",
"trigger": "step-error",
"durationBucket": "0",
"firstSeenMs": 123,
"errorID": "<string>",
"assignSource": "manual",
"assignReason": "<string>"
}
]{
"error": {
"message": "Validation failed",
"details": [
{
"field": "projectID",
"message": "required"
}
]
}
}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.
Response
All error flavours of the project, sorted by first-seen (descending).
100000Error flavour ID (format erf-<number>).
Subflow type the flavour belongs to (e.g. passkey-login).
Step the error occurred on ("" for subflow-level errors).
Raw error name from the tracking event (e.g. NotAllowedError; "" for code-only and step-incomplete flavours).
Raw error message from the tracking event ("" for code-only and step-incomplete flavours).
Raw error code from the tracking event ("" when the error carried name/message instead).
Canonical comma-joined set of UI patterns observed during the error ("" for none).
Resolved subflow spec type the error occurred under ("" when the subflow has none).
What produced the flavour - an explicit error event, a must-complete step that ended neither finished nor errored, a step the subflow had to reach that never appeared at all, or a subflow with interaction evidence but no step or error event at all.
step-error, step-incomplete, step-missing, no-followup Bucketed step-start to error latency (na when not measurable).
0, le100, le2000, le30000, gt30000, na Timestamp of the occurrence that minted this flavour, in milliseconds since epoch.
ID of the error this flavour is mapped to (format err-<number>); absent while unmapped.
Who made the current error assignment - a human in the Management Console (manual), a deterministic knowledge-base rule (kb), or AI/agent judgment (agent). Absent while unmapped and on assignments made before provenance existed.
manual, kb, agent Human-readable explanation of why this flavour belongs to its error. Absent under the same conditions as assignSource.
Was this page helpful?