curl --request GET \
--url https://api.streamkap.com/dashboard/lineage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.streamkap.com/dashboard/lineage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.streamkap.com/dashboard/lineage', 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.streamkap.com/dashboard/lineage",
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.streamkap.com/dashboard/lineage"
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.streamkap.com/dashboard/lineage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.streamkap.com/dashboard/lineage")
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{
"page": 1,
"page_size": 10,
"total": 123,
"has_next": true,
"result": [
{
"id": "<string>",
"entity_id": "<string>",
"name": "<string>",
"type": "<string>",
"connector": "",
"status": "",
"topic_count": 0,
"total_topic_count": 0,
"metrics": {
"max_latency_ms": 0,
"total_speed_rps": 0,
"total_lag": 0,
"max_dest_latency_ms": 0,
"topic_count": 0,
"error_count": 0
},
"snapshot_progress": {
"state": "<string>",
"snapshot_type": "incremental",
"total_topic_count": 0,
"remaining_topic_count": 0,
"done_topic_count": 0,
"cancelled_topic_count": 0,
"failed_topic_count": 0,
"total_table_count": 0,
"remaining_table_count": 0,
"rows_total": 0,
"rows_scanned": 0,
"progress_type": "tables",
"percent_complete": 0,
"eta_ms": 0,
"start_timestamp": "<string>",
"end_timestamp": "<string>"
},
"last_audit_at": "<string>",
"topics": {
"result": [
{
"id": "<string>",
"name": "<string>",
"source": {
"id": "<string>",
"name": "<string>",
"connector": "",
"snapshot_progress": {
"state": "<string>",
"snapshot_type": "incremental",
"total_topic_count": 0,
"remaining_topic_count": 0,
"done_topic_count": 0,
"cancelled_topic_count": 0,
"failed_topic_count": 0,
"total_table_count": 0,
"remaining_table_count": 0,
"rows_total": 0,
"rows_scanned": 0,
"progress_type": "tables",
"percent_complete": 0,
"eta_ms": 0,
"start_timestamp": "<string>",
"end_timestamp": "<string>"
}
},
"metrics": {
"StreamingMilliSecondsBehindSource": 0,
"SnapshotPercentageComplete": 0,
"recordSendTotal": 0,
"sourceRecordWriteTotal": 0,
"snapshotPercentageComplete": 0,
"recordsLag": 0,
"byteTotal": 0,
"sourceRecordPollRate": 0,
"sourceQaCount": 123
},
"snapshot_status": "<string>",
"snapshot_details": [
{
"status": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>",
"duration_ms": 123,
"rows_scanned": 0,
"rows_total": 0,
"trace": "<string>",
"eta_ms": 0
}
],
"transforms": [
{
"id": "<string>",
"name": "<string>",
"status": "",
"metrics": {
"latency": 0
},
"output_topics": [
"<string>"
],
"transform_type": "fan_out",
"destinations": [
{
"id": "<string>",
"name": "<string>",
"connector": "",
"pipeline_id": "",
"pipeline_status": "",
"lag": 123,
"latency_ms": 123,
"qaCount": 123,
"e2e_eta_ms": 123
}
]
}
],
"destinations": [
{
"id": "<string>",
"name": "<string>",
"connector": "",
"pipeline_id": "",
"pipeline_status": "",
"lag": 123,
"latency_ms": 123,
"qaCount": 123,
"e2e_eta_ms": 123
}
]
}
],
"total": 0,
"page": 1,
"has_next": false
}
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get dashboard lineage groups
Returns lineage groups (sources, destinations, or transforms) with aggregated metrics. Use the group_by parameter to select the grouping dimension.
curl --request GET \
--url https://api.streamkap.com/dashboard/lineage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.streamkap.com/dashboard/lineage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.streamkap.com/dashboard/lineage', 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.streamkap.com/dashboard/lineage",
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.streamkap.com/dashboard/lineage"
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.streamkap.com/dashboard/lineage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.streamkap.com/dashboard/lineage")
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{
"page": 1,
"page_size": 10,
"total": 123,
"has_next": true,
"result": [
{
"id": "<string>",
"entity_id": "<string>",
"name": "<string>",
"type": "<string>",
"connector": "",
"status": "",
"topic_count": 0,
"total_topic_count": 0,
"metrics": {
"max_latency_ms": 0,
"total_speed_rps": 0,
"total_lag": 0,
"max_dest_latency_ms": 0,
"topic_count": 0,
"error_count": 0
},
"snapshot_progress": {
"state": "<string>",
"snapshot_type": "incremental",
"total_topic_count": 0,
"remaining_topic_count": 0,
"done_topic_count": 0,
"cancelled_topic_count": 0,
"failed_topic_count": 0,
"total_table_count": 0,
"remaining_table_count": 0,
"rows_total": 0,
"rows_scanned": 0,
"progress_type": "tables",
"percent_complete": 0,
"eta_ms": 0,
"start_timestamp": "<string>",
"end_timestamp": "<string>"
},
"last_audit_at": "<string>",
"topics": {
"result": [
{
"id": "<string>",
"name": "<string>",
"source": {
"id": "<string>",
"name": "<string>",
"connector": "",
"snapshot_progress": {
"state": "<string>",
"snapshot_type": "incremental",
"total_topic_count": 0,
"remaining_topic_count": 0,
"done_topic_count": 0,
"cancelled_topic_count": 0,
"failed_topic_count": 0,
"total_table_count": 0,
"remaining_table_count": 0,
"rows_total": 0,
"rows_scanned": 0,
"progress_type": "tables",
"percent_complete": 0,
"eta_ms": 0,
"start_timestamp": "<string>",
"end_timestamp": "<string>"
}
},
"metrics": {
"StreamingMilliSecondsBehindSource": 0,
"SnapshotPercentageComplete": 0,
"recordSendTotal": 0,
"sourceRecordWriteTotal": 0,
"snapshotPercentageComplete": 0,
"recordsLag": 0,
"byteTotal": 0,
"sourceRecordPollRate": 0,
"sourceQaCount": 123
},
"snapshot_status": "<string>",
"snapshot_details": [
{
"status": "<string>",
"start_timestamp": "<string>",
"end_timestamp": "<string>",
"duration_ms": 123,
"rows_scanned": 0,
"rows_total": 0,
"trace": "<string>",
"eta_ms": 0
}
],
"transforms": [
{
"id": "<string>",
"name": "<string>",
"status": "",
"metrics": {
"latency": 0
},
"output_topics": [
"<string>"
],
"transform_type": "fan_out",
"destinations": [
{
"id": "<string>",
"name": "<string>",
"connector": "",
"pipeline_id": "",
"pipeline_status": "",
"lag": 123,
"latency_ms": 123,
"qaCount": 123,
"e2e_eta_ms": 123
}
]
}
],
"destinations": [
{
"id": "<string>",
"name": "<string>",
"connector": "",
"pipeline_id": "",
"pipeline_status": "",
"lag": 123,
"latency_ms": 123,
"qaCount": 123,
"e2e_eta_ms": 123
}
]
}
],
"total": 0,
"page": 1,
"has_next": false
}
}
]
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Group lineage by entity type
source, destination, transform, source_audit Search filter for group names
Sort field for lineage groups Sort field values for the lineage groups endpoint.
name, topic_count, max_latency, total_speed, error_count Sort direction
asc, desc Page number (1-indexed)
x >= 1Results per page
1 <= x <= 100When false, skip ClickHouse metrics and return metrics as null for faster initial render
Filter groups to those with matching topics (substring, case-insensitive)
Comma-separated source entity IDs to filter groups by
Comma-separated destination entity IDs to filter groups by
Comma-separated transform entity IDs to filter groups by
When true, embed first page of enriched topics in each group
Max topics to embed per group
1 <= x <= 100Sort field for embedded topics
byteTotal, latency, speed, lag, name Sort direction for embedded topics
asc, desc Comma-separated diff% bands for topic filtering (audit tab). Each band is 'min-max' (inclusive). Multi-select: topic passes if its rounded-to-2-decimals max diff% falls in ANY band. Example: '0-0.05,2-10'.
Filter groups by max_latency_ms using "op:value" syntax (e.g. "gt:300000"). Ops: gt|gte|lt|lte|eq|ne.
Filter groups by total_lag using "op:value" syntax (e.g. "gt:1000"). Ops: gt|gte|lt|lte|eq|ne.
Filter groups by snapshot state. Comma-separated list: running|pending|completed|failed|not_started.
Response
Successful Response
Was this page helpful?