Skip to main content
POST
/
topics
/
details
/
search
Search topics (POST)
curl --request POST \
  --url https://api.streamkap.com/topics/details/search \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "entity_id": [
    "<string>"
  ],
  "snapshot": [
    "<string>"
  ],
  "value_format": "<string>",
  "has_errors": true,
  "orphaned": true,
  "partition_skew": true,
  "tag_ids": [
    "<string>"
  ]
}
'
import requests

url = "https://api.streamkap.com/topics/details/search"

payload = {
"entity_id": ["<string>"],
"snapshot": ["<string>"],
"value_format": "<string>",
"has_errors": True,
"orphaned": True,
"partition_skew": True,
"tag_ids": ["<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({
entity_id: ['<string>'],
snapshot: ['<string>'],
value_format: '<string>',
has_errors: true,
orphaned: true,
partition_skew: true,
tag_ids: ['<string>']
})
};

fetch('https://api.streamkap.com/topics/details/search', 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/topics/details/search",
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([
'entity_id' => [
'<string>'
],
'snapshot' => [
'<string>'
],
'value_format' => '<string>',
'has_errors' => true,
'orphaned' => true,
'partition_skew' => true,
'tag_ids' => [
'<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.streamkap.com/topics/details/search"

payload := strings.NewReader("{\n \"entity_id\": [\n \"<string>\"\n ],\n \"snapshot\": [\n \"<string>\"\n ],\n \"value_format\": \"<string>\",\n \"has_errors\": true,\n \"orphaned\": true,\n \"partition_skew\": true,\n \"tag_ids\": [\n \"<string>\"\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.streamkap.com/topics/details/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"entity_id\": [\n \"<string>\"\n ],\n \"snapshot\": [\n \"<string>\"\n ],\n \"value_format\": \"<string>\",\n \"has_errors\": true,\n \"orphaned\": true,\n \"partition_skew\": true,\n \"tag_ids\": [\n \"<string>\"\n ]\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.streamkap.com/topics/details/search")

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 \"entity_id\": [\n \"<string>\"\n ],\n \"snapshot\": [\n \"<string>\"\n ],\n \"value_format\": \"<string>\",\n \"has_errors\": true,\n \"orphaned\": true,\n \"partition_skew\": true,\n \"tag_ids\": [\n \"<string>\"\n ]\n}"

response = http.request(request)
puts response.read_body
{
  "result": [
    {
      "id": "<string>",
      "name": "<string>",
      "entity": {
        "entity_id": "<string>",
        "name": "<string>",
        "topic_ids": [
          "<string>"
        ],
        "topic_db_ids": [
          "<string>"
        ],
        "display_name": "<string>",
        "filtered_snapshot_language": "<string>"
      },
      "prefix": "<string>",
      "serialization": {
        "key_format": "unknown",
        "value_format": "unknown",
        "key_converter": "<string>",
        "value_converter": "<string>",
        "schema_registry_enabled": false
      },
      "tags": [
        "<string>"
      ]
    }
  ],
  "page": 1,
  "page_size": 10,
  "total": 123,
  "has_next": true
}
{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

entity_type
string | null

Filter by entity type(s). Single value (e.g., 'sources') or comma-separated (e.g., 'sources,transforms'). Valid types: sources, destinations, transforms, pipelines, manual.

topic_id
string | null
partial_name
string | null

Topic id

page
integer
default:1
page_size
integer
default:10
entity_id
string | null

Filter by specific entity IDs (comma-separated list)

include_dlq
boolean
default:true

Include Dead Letter Queue (DLQ) topics in results. Set to false to exclude DLQ topics.

include_internal
boolean
default:false

Local/admin-app only: include Streamkap/KC internal topics (streamkap_signal, streamkap_state, KC offsets/configs/status) in the result. Internal topics carry connector='internal:'.

snapshot
string | null

Filter topics by snapshot status. Comma-separated for multiple statuses (e.g., 'running', 'completed,failed'). Valid statuses: running, completed, failed, pending, cancelled

eta
string | null

Filter by snapshot ETA in milliseconds. Format: 'operator:value' (e.g., 'gt:60000', 'lte:300000'). Valid operators: gt (>), lt (<), gte (>=), lte (<=), eq (=), ne (!=). Topics without ETA (null/0) are excluded when filtering.

timestamp_from
string | null

Start timestamp for filtering topics by activity period (ISO 8601 format)

timestamp_to
string | null

End timestamp for filtering topics by activity period (ISO 8601 format)

time_type
enum<string> | null

Time aggregation type for filtering active topics (only applies when timestamp_from/to are specified)

Available options:
timeseries,
timesummary,
latest
value_format
string | null

Filter by serialization value format. Valid values: avro, json, json_schema, protobuf, string, bytearray. Case-insensitive. Omit or pass null to return all formats.

has_errors
boolean | null

Filter topics by error status. true = only topics with recordErrorTotal > 0, false = only topics with recordErrorTotal == 0, null/omit = return all topics.

orphaned
boolean | null

Filter by orphaned status. true = only topics with 0 destinations, false = only topics with destinations.

partition_skew
boolean | null

Filter by partition skew. true = only topics where max partition lag > 2x average.

sort
string | null

Sort field. Valid values: DB fields (name, connector, entity_type, entity_name), snapshot_status (sources only), or Kafka-admin fields (partition_count, replication_factor, retention_ms, lastMessageTimestamp).

sort_dir
enum<string>
default:asc
Available options:
asc,
desc
tag_ids
string | null

Filter by tag IDs. Comma-separated list (e.g., 'tag1,tag2'). Use with tag_filter_operation to control AND/OR logic.

tag_filter_operation
enum<string> | null
default:or

Tag filter logic: 'or' (default) matches any tag, 'and' matches all tags.

Available options:
and,
or

Body

application/json

Body model for POST /topics/details/search requests.

Supports large lists of entity IDs that would exceed URL length limits when using GET. Body parameters take precedence over query parameters when both are provided.

entity_id

List of entity IDs (as array) or comma-separated string. Body takes precedence over query params.

snapshot

List of snapshot statuses (as array) or comma-separated string. Body takes precedence over query params. Valid statuses: running, completed, failed, pending, cancelled

value_format
string | null

Filter by serialization value format. Valid values: avro, json, json_schema, protobuf, string, bytearray. Case-insensitive. Body takes precedence over query params.

has_errors
boolean | null

Filter topics by error status. true = only topics with errors, false = only topics without errors. Body takes precedence over query params.

orphaned
boolean | null

Filter by orphaned status. true = only topics with 0 destinations, false = only topics with destinations. Body takes precedence over query params.

partition_skew
boolean | null

Filter by partition skew. true = only topics where max partition lag > 2x average. Body takes precedence over query params.

tag_ids

List of tag IDs (as array) or comma-separated string. Body takes precedence over query params.

tag_filter_operation
enum<string> | null

Tag filter logic: 'or' (default) matches any tag, 'and' matches all tags. Body takes precedence over query params.

Available options:
and,
or

Response

Successful Response

result
TopicDetailsRes · object[]
required
page
integer
default:1

Current page number

page_size
integer
default:10

Results per page

total
integer | null

Total number of results

has_next
boolean | null

Whether more pages exist