SRT servers

The SRT servers section covers the API endpoints used to provision and operate long-lived SRT ingest endpoints in Callaba Engine. This is the layer you use when an encoder, OBS, or an upstream transport should connect directly to a managed SRT listener.

Compared with SRT routes, an SRT server is the stable ingest boundary itself. The create and update calls do more than assign ports: they also shape latency, buffering, optional passphrase protection, publisher and player prefixes, routing behavior, and optional statistics callbacks.

The operational methods complete that lifecycle. Use start and stop to control the runtime process, getActiveStreams and getEventLogBySRTPort to inspect live connectivity, and /:serverPort/getStatisticHistory when you need the raw in-memory statistics history behind a given server port.

If your team drives these server actions from an operator workflow, the preset examples below also include ready-to-adapt vMix Script tabs alongside the usual API snippets.

Live statistics

See live SRT stats as a moving chart

This demo shows the kind of live statistics you can watch during a real contribution: bitrate, buffer delay, packet flow, receive capacity, and active streams. It is connected to the public demo endpoint at demo.callaba.io and updates from the same live event stream used by the product.

ConnectionConnecting
Last updateWaiting for the first packet
Active streams
Live bitrate
How much video data is currently arriving into the SRT server in real time.
Mbps

Examples by preset

The SRT server create flow naturally breaks into a few preset families. In practice, the most useful presets are a standalone listener with no routing, a listener that participates in PUBLIC_IP routing, a listener that participates in CALLABA routing, and a small set of security or monitoring add-ons such as passphrase protection, statistics callbacks, or IP-based access control.

We use that preset structure below because it is easier to copy from real operating scenarios than from one oversized catch-all payload.

No routing

{
  "server_name": "Standalone ingest",
  "server_type": "SERVER_TYPE_SRT",
  "server_port": 1935,
  "server_receiver_port": 1936,
  "server_latency": 200,
  "server_maxbw": -1,
  "server_timeout": 10,
  "server_rcvbuf": 48234496,
  "server_active": true,
  "routing": "DISABLED",
  "routing_hosts": []
}

PUBLIC_IP routing

{
  "server_name": "Public edge ingest",
  "server_type": "SERVER_TYPE_SRT",
  "server_port": 1935,
  "server_receiver_port": 1936,
  "server_latency": 200,
  "server_maxbw": -1,
  "server_timeout": 10,
  "server_rcvbuf": 48234496,
  "server_active": true,
  "routing": "PUBLIC_IP",
  "routing_type": "PUSH",
  "routing_hosts": [
    {
      "routing_host": "203.0.113.50",
      "routing_port": 1935
    }
  ]
}

CALLABA routing

{
  "server_name": "Callaba routed ingest",
  "server_type": "SERVER_TYPE_SRT",
  "server_port": 1935,
  "server_receiver_port": 1936,
  "server_latency": 200,
  "server_maxbw": -1,
  "server_timeout": 10,
  "server_rcvbuf": 48234496,
  "server_active": true,
  "routing": "CALLABA",
  "routing_type": "PUSH",
  "routing_hosts": [
    {
      "routing_host": "ingest.callaba.cloud",
      "routing_port": 1935,
      "routing_server_name": "callaba-route-primary"
    }
  ]
}

Security and monitoring add-ons

{
  "server_name": "Protected ingest",
  "server_type": "SERVER_TYPE_SRT",
  "server_port": 1935,
  "server_receiver_port": 1936,
  "server_latency": 200,
  "server_maxbw": -1,
  "server_timeout": 10,
  "server_rcvbuf": 48234496,
  "server_active": true,
  "passphrase": "0123456789abcdef",
  "stats_host": "https://monitoring.example.com/api/srt-stats",
  "stats_interval": 2,
  "stream_control_type": "CONTROL_ACCESS_IP_ADDRESS",
  "access_settings": [
    {
      "host": "203.0.113.44",
      "role_name": "publisher"
    },
    {
      "host": "203.0.113.45",
      "role_name": "receiver"
    }
  ]
}

Live SRT statistics

When an SRT server is already running, the next question is usually simple: is the stream healthy right now? This live statistics layer answers that without making you jump between logs, history, and control actions.

Use it when you want to watch bitrate, estimated bandwidth, round-trip time, and active streams while a contribution is live. It is especially useful during setup, QA, operator handoff, and incident response.

The embedded demo below connects to the public statistics stream and draws a moving chart from real websocket updates, so you can immediately see what kind of live signal the product exposes.

Live statistics

See live SRT stats as a moving chart

This demo shows the kind of live statistics you can watch during a real contribution: bitrate, buffer delay, packet flow, receive capacity, and active streams. It is connected to the public demo endpoint at demo.callaba.io and updates from the same live event stream used by the product.

ConnectionConnecting
Last updateWaiting for the first packet
Active streams
Traffic
Buffering
Packets
Quality
Live bitrate
How much video data is currently arriving into the SRT server in real time.
Mbps

What this live layer is good for

  • Use live statistics for: watching stream health, spotting bitrate drops, checking RTT changes, and confirming that a stream is still active
  • Use HTTP endpoints for: provisioning servers, reading event history, and pulling statistics history snapshots later

Implementation notes

  • Path: /ws-api
  • Main live events: MODULE_SRT_SERVERS_STATS and MODULE_SRT_SERVERS_ACTIVE_STREAMS
  • Update pattern: active-stream ids are broadcast roughly every 3 seconds
  • Practical filtering: clients usually group messages by port, role, and id

Workflow examples

These scenarios help frame why an SRT server exists in a production design, not just what the create payload looks like.

Use an SRT server as the stable ingest boundary for external publishers

Create an SRT server when remote encoders, field units, or partner systems should target one controlled ingest endpoint that stays stable over time.

  • Module chain: Publisher / OBS / encoder -> MODULE_SRT_SERVERS
  • Why it helps: ports, passphrase, publisher/player prefixes, and latency policy live in one server object instead of being spread across downstream jobs.
  • Operational fit: good when the ingest boundary should survive changes or restarts in the downstream pipeline.

Use an SRT server in front of routing or restreaming

Use an SRT server when the ingest side belongs to one team, but downstream routing or restreaming may change independently later.

  • Module chain: MODULE_SRT_SERVERS -> MODULE_SRT_ROUTERS or MODULE_RESTREAM
  • Why it helps: the ingest side stays fixed while route or restream jobs can be recreated, redirected, or restarted later.
  • Typical fit: recurring contribution feeds, backup routing, or social distribution that changes more often than the ingest source.

Use an SRT server when monitoring and event history matter

SRT servers are also the better fit when your team needs live operational visibility around the ingest point itself.

  • Useful endpoints: getActiveStreams, getEventLogBySRTPort, and /:serverPort/getStatisticHistory
  • Why it helps: you can separate provisioning from runtime observation and debug connection behavior at the server boundary.
  • Good fit for: support workflows, QA environments, managed events, and any setup where the ingest endpoint is a first-class operational object.
Create SRT server
Collapse
POST
/api/srt-servers/create

Creates a new SRT server resource in Callaba Engine.

The current Swagger definition exposes this method as POST /api/srt-servers/create with an application/json request body called SRT server parameters. The request example defines the API field names and values, while the field descriptions below are aligned with the real dashboard wording and the backend validation rules.

This method is broader than a minimal listener setup. Alongside the basic ports and latency values, the live product also accepts optional passphrase encryption, publisher and player prefixes, routing mode, routing hosts, statistics callbacks, and access-control settings.

The runtime layer chooses the underlying SRT config template from the routing mode: standalone, push, or pull. It also derives some lower-level transport values such as flow-control from server_rcvbuf, so you do not need to send a separate server_fc field yourself.

Units matter here: server_latency is in milliseconds, server_timeout is in seconds, server_maxbw is in bytes per second, and server_rcvbuf is in bytes.

Authentication uses the dashboard-issued JWT token in the x-access-token header.

If this provisioning step is triggered from an operator toolchain, the preset examples below also expose a vMix Script tab so the same server-creation shapes can be adapted for button or shortcut workflows.

Examples by preset

The examples below are grouped by the preset families that matter most when creating an SRT server: No routing, PUBLIC_IP routing, CALLABA routing, and Security and monitoring.

That keeps the create method easier to scan: you can start from the preset that matches your topology and then copy only the extra fields you really need.

Workflow-oriented use cases

These examples are useful when you are deciding why the SRT server should exist in the pipeline, not only how to fill the request body.

Provision a reusable ingest point for OBS or an encoder

Use this pattern when an external publisher should target one stable SRT listener and the downstream modules may change later.

  • Module chain: Publisher / OBS / encoder -> MODULE_SRT_SERVERS
  • Why teams use it: the ingest endpoint, passphrase policy, and prefixes live in one reusable server object.
  • What stays stable: server listen port, receiver port, and server identity.

Provision a routed ingest endpoint for backup or handoff workflows

Use this pattern when the ingest boundary should stay the same, but the server still needs to route through push or pull mode.

  • Module chain: MODULE_SRT_SERVERS -> routed downstream target
  • Why teams use it: routing can be encoded directly into the server contract instead of being managed ad hoc around the ingest source.
  • Typical fit: backup ingress, public-IP routing, or a named Callaba routing host.

Provision a monitored ingress point for operations

Use this pattern when the server itself should be observable as a first-class runtime object after creation.

  • Follow-up methods: start, stop, getActiveStreams, getEventLogBySRTPort, getStatisticHistory
  • Why teams use it: support and QA can inspect the ingest point directly instead of inferring state only from downstream modules.
  • Operational fit: managed events, external publishers, and environments where connection history matters.
No routing

These examples keep routing disabled and rely on the server itself as the stable ingest boundary.

Standalone SRT server

Use this shape when the server should act as a plain local SRT ingest endpoint without any routing layer. It is the simplest contract and the closest to the basic dashboard form.

Standalone SRT server
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "DISABLED",
"routing_hosts": []
}'
PUBLIC_IP routing

The PUBLIC_IP mode is for direct routing to public network addresses. Use PUSH when this server should actively send toward the remote endpoint. Use PULL when the remote side should be treated as the upstream that this server reaches out to.

PUBLIC_IP routing with PUSH

Use this shape when the server should actively push toward a public-IP routing target. Each routing host needs a host and port, while routing_server_name stays optional in this mode.

PUBLIC_IP routing with PUSH
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "PUBLIC_IP",
"routing_type": "PUSH",
"routing_hosts": [
{
"routing_host": "203.0.113.50",
"routing_port": 1935
}
]
}'
PUBLIC_IP routing with PULL

Use this shape when the routed side should be pulled instead of pushed. In practice this is the public-IP sibling of the push example, but with a pull lifecycle.

PUBLIC_IP routing with PULL
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "PUBLIC_IP",
"routing_type": "PULL",
"routing_hosts": [
{
"routing_host": "198.51.100.22",
"routing_port": 1935,
"routing_server_name": "remote-edge-srt"
}
]
}'
CALLABA routing

The CALLABA routing mode uses named routing hosts and is the stricter variant: host, port, and server name are all required. Use PUSH when this server should send into the Callaba-side route, and PULL when the Callaba-side route should behave as the upstream relationship you attach to.

CALLABA routing with PUSH

Use this shape when the server should route toward the Callaba cloud path in push mode. In this routing mode each host item must also carry routing_server_name.

CALLABA routing with PUSH
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "CALLABA",
"routing_type": "PUSH",
"routing_hosts": [
{
"routing_host": "ingest.callaba.cloud",
"routing_port": 1935,
"routing_server_name": "callaba-route-primary"
}
]
}'
CALLABA routing with PULL

Use this shape when the routed Callaba side should be pulled instead of pushed. It keeps the same named routing host contract while switching the routing type.

CALLABA routing with PULL
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "CALLABA",
"routing_type": "PULL",
"routing_hosts": [
{
"routing_host": "ingest.callaba.cloud",
"routing_port": 1935,
"routing_server_name": "callaba-route-backup"
}
]
}'
Security and monitoring

These examples keep the basic ingest shape but turn on one advanced capability at a time so it is easier to copy the exact fields you need.

Passphrase-protected SRT server

Use this shape when the ingest endpoint should require SRT encryption. The example uses a 16-character passphrase, which matches the product guidance for AES-128 sized protection.

Best fit: shared ingest points, partner contribution, or any case where the listener should not accept cleartext SRT sessions by default.

Passphrase-protected SRT server
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "DISABLED",
"routing_hosts": [],
"passphrase": "0123456789abcdef"
}'
SRT server with statistics callback

Use this shape when the server should post SRT statistics to an external monitoring endpoint. The backend validates the callback URL and interval together.

Best fit: managed events, support workflows, and long-running ingest points where you want external telemetry without polling the full server object.

SRT server with statistics callback
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "DISABLED",
"routing_hosts": [],
"stats_host": "https://monitoring.example.com/api/srt-stats",
"stats_interval": 2
}'
SRT server with IP-based access control

Use this shape when only specific publisher or receiver hosts should be allowed. The validation layer checks host and role_name entries when stream_control_type is set to CONTROL_ACCESS_IP_ADDRESS.

Best fit: controlled ingest from known sites or fixed peer addresses. If peers change often, this mode is stricter to operate than a simple open listener.

SRT server with IP-based access control
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true,
"server_publisher": "publisher",
"server_player": "receiver",
"routing": "DISABLED",
"routing_hosts": [],
"stream_control_type": "CONTROL_ACCESS_IP_ADDRESS",
"access_settings": [
{
"host": "203.0.113.44",
"role_name": "publisher"
},
{
"host": "203.0.113.45",
"role_name": "receiver"
}
]
}'
Request body parameters
Basic settings
server_name
string

Dashboard label: Name.

Set such a name for the created item to avoid confusion in the future. The validation layer accepts from 1 to 60 characters.

server_type
string

Current validated API contract accepts SERVER_TYPE_SRT.

The model still defines SERVER_TYPE_WEBRTC, but the live create/update validation currently allows only the SRT server type.

server_active
boolean

Dashboard label: Enable once created.

Enabled is a server state. Disconnecting the server turns off connections and data transfers for all publishers and recipients connected to this SRT server.

Ports and latency
server_port
integer

Dashboard label: Port.

Port used for listening to the SRT server. The live validation accepts values from 1024 to 65535.

server_receiver_port
integer

Dashboard label: Receiver port.

Port used for receiving SRT streams. The current validated API also expects a value from 1024 to 65535.

The runtime has a fallback path when this port is missing, but the public create/update contract still requires it explicitly.

server_latency
integer

Dashboard label: Latency.

Latency is configured in milliseconds. The product guidance recommends using roughly ping × 4, with an absolute practical floor of about 120 ms for stable SRT contribution.

For practical setup guidance, see Find the perfect latency for your SRT setup.

server_maxbw
integer

Dashboard label: Max network bandwidth.

Network bandwidth or bitrate in Byte/s. Use -1 for unlimited. The validation layer currently accepts values up to 3125000000.

server_timeout
integer

Dashboard label: Stream inactivity timeout.

Configured in seconds. When the timeout is reached, the server disconnects the client. -1 means unlimited timeout.

server_rcvbuf
integer

Dashboard label: Receiver buffer size.

This field is expressed in bytes. The current validation range is 12058624 to 200000000.

The dashboard wording uses 12058624 as the default and 48234496 as a recommended production value. The runtime derives flow-control internally from this receive buffer, so you do not send a separate server_fc field.

Security and identity
passphrase
string

Dashboard label: Passphrase.

Optional SRT encryption secret for the ingest endpoint. The dashboard guidance recommends a length of 16, 24, or 32 characters for AES-128, AES-192, and AES-256 sized passphrases.

server_publisher
string

Dashboard label: Domain Publisher.

URL parameter or stream-id prefix for the publisher side. Valid characters are A-Z, a-z, and 0-9. The model defaults to publisher.

server_player
string

Dashboard label: Domain Player.

URL parameter or stream-id prefix for the receiver side. Valid characters are A-Z, a-z, and 0-9. The model defaults to receiver.

Routing and backup
routing
string

Dashboard section: Routing settings.

Controls whether the SRT server runs as a local standalone ingress or as a routed endpoint. The validated values are DISABLED, PUBLIC_IP, and CALLABA.

This choice affects which runtime config template is selected: standalone, push, or pull routing mode.

routing_type
string

Routing strategy used when routing is enabled. The server model defines PUSH and PULL.

routing_hosts
array

List of routing targets.

For CALLABA routing, each item must contain routing_host, routing_port, and routing_server_name. For PUBLIC_IP, the host and port are required while the server name stays optional.

The product also links this mode to backup-stream workflows. See how to set up an SRT backup stream in case of a main stream interruption.

Statistics callbacks
stats_host
string

Optional callback URL for SRT statistics delivery. When set, the value must be a valid http or https URI.

stats_interval
integer

Statistics posting interval in seconds.

Create/update validation accepts values from 1 to 10. If statistics are enabled and no interval is provided, the service falls back to 1 second.

Access control
stream_control_type
string

Control mode for per-stream access validation. When the value is set to IP-address based access control, the backend validates the related access_settings entries as host and role objects.

access_settings
array

Optional list of access rules or stream identities created together with the server.

In responses, these appear as related access records rather than as the original request payload.

Create SRT server
curl --request POST \
--url http://localhost/api/srt-servers/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true
}'
Response
Identity and ports
_id
string

Mongo-style identifier of the created SRT server. The live product returns it on the top level of the response.

id
string

Convenience alias for the server identifier. In the live response, id matches _id.

server_name
string

Name stored for the created SRT server.

server_name_code
string

Slug-style code generated from server_name. The backend derives it with friendly URL normalization.

server_type
string

Type of the created server, for example SERVER_TYPE_SRT.

server_port
string

Listening port returned by the product for the created SRT server.

server_receiver_port
string

Receiver port returned by the product for the created SRT server.

server_port_id
string

Assigned UDP port document for the publisher side of the server.

server_receiver_port_id
string

Assigned UDP port document for the receiver side of the server.

Runtime profile
server_latency
integer

Configured latency value in milliseconds.

server_maxbw
integer

Configured maximum bandwidth in Byte/s.

server_timeout
string

Configured inactivity timeout in seconds. The live document currently serializes it as a string.

server_rcvbuf
integer

Receive buffer size in bytes. Runtime flow-control is derived from this value internally.

server_active
boolean

Whether the created server is enabled immediately after creation.

Security, routing, and monitoring
passphrase
string

Stored encryption field for the server. If passphrase protection is enabled, the backend stores an encoded value rather than a plaintext secret.

server_publisher
string

Publisher-side stream-id or URL prefix stored with the server.

server_player
string

Receiver-side stream-id or URL prefix stored with the server.

routing_hosts
array

Routing targets saved with the server. In the minimal default create flow this is an empty array.

stats_interval
integer

Resolved statistics interval. The live create flow defaults to 1.

Access and metadata
access
array

Related access stream records for this SRT server. getById populates these more deeply than create/update.

server_user_id
string

Owner user identifier attached by the backend.

server_created
string

Creation timestamp returned by the live product.

server_modified
string

Last modification timestamp returned by the live product.

__v
integer

Document version field returned by the model serialization.

success
boolean

The live product returns a boolean success flag together with the created SRT server object. On successful creation it is true.

Response: Create SRT server
JSON
{
"_id": "69c1d2af28c95839e0dfea90",
"__v": 0,
"access": [],
"id": "69c1d2af28c95839e0dfea90",
"passphrase": "",
"routing_hosts": [],
"server_active": true,
"server_created": "2026-03-23T23:54:23.979Z",
"server_latency": 200,
"server_maxbw": -1,
"server_modified": "2026-03-23T23:54:23.983Z",
"server_name": "Awesome SRT server",
"server_name_code": "awesome-srt-server",
"server_player": "receiver",
"server_port": "1935",
"server_port_id": "69c1d2af28c95839e0dfeaa0",
"server_publisher": "publisher",
"server_rcvbuf": 48234496,
"server_receiver_port": "1936",
"server_receiver_port_id": "69c1d2af28c95839e0dfeaa1",
"server_timeout": "60",
"server_type": "SERVER_TYPE_SRT",
"server_user_id": "69360341db559495f643de6a",
"stats_interval": 1,
"success": true
}
Get SRT servers count
Expand
POST
/api/srt-servers/getCount

Returns the number of SRT server documents that match the supplied filter.

Use this method when you need a lightweight inventory count for dashboards, checks, or paginated tooling without loading the full server list.

Request body parameters
Filtering
filter
object

Optional Mongo-style filter object applied before counting. For example, you can count only active SRT servers.

Get SRT servers count
curl --request POST \
--url http://localhost/api/srt-servers/getCount \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"filter": {
"server_active": true
}
}'
Response
Operation result
count
integer

Total number of SRT server documents that match the supplied filter.

Response: Get SRT servers count
JSON
{
"count": 3
}
Get all SRT servers
Expand
POST
/api/srt-servers/getAll

Returns a list of SRT servers from Callaba Engine.

The current Swagger definition exposes this method as POST /api/srt-servers/getAll with an application/json request body used for pagination and sorting.

In live product tests, this method returns a bare array of SRT server objects. The response example below reflects that runtime behavior rather than the minimal Swagger success-only example.

Authentication uses the dashboard-issued JWT token in the x-access-token header.

Request body parameters
Pagination
limit
integer

Maximum number of SRT servers to return in one response page.

skip
integer

Offset used for pagination. Use 0 for the first page.

sort
object

Optional sort object. If omitted, the service defaults to { server_created: 1 }.

Filtering
filter
object

Optional filter object merged into the server query for the current user.

Get all SRT servers
curl --request POST \
--url http://localhost/api/srt-servers/getAll \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"limit": 10,
"skip": 0,
"sort": {
"server_created": 1
}
}'
Response
Response list
[]
array

The live product returns a bare array of SRT server objects rather than a wrapped data envelope.

_id
string

Identifier of each SRT server returned in the array.

server_name
string

Name of the SRT server.

server_type
string

Type of the SRT server, for example SERVER_TYPE_SRT.

server_port
string

Listening port of the SRT server.

server_receiver_port
string

Receiver port of the SRT server.

server_active
boolean

Whether the server is currently enabled.

stats_interval
integer

Resolved statistics interval for each server object when present.

success
boolean

Each returned item currently includes success: true in the live product response.

Response: Get all SRT servers
JSON
[
{
"_id": "69c1d2af28c95839e0dfea90",
"__v": 0,
"access": [],
"id": "69c1d2af28c95839e0dfea90",
"passphrase": "",
"routing_hosts": [],
"server_active": true,
"server_created": "2026-03-23T23:54:23.979Z",
"server_latency": 200,
"server_maxbw": -1,
"server_modified": "2026-03-23T23:54:23.983Z",
"server_name": "Awesome SRT server",
"server_name_code": "awesome-srt-server",
"server_player": "receiver",
"server_port": "1935",
"server_port_id": "69c1d2af28c95839e0dfeaa0",
"server_publisher": "publisher",
"server_rcvbuf": 48234496,
"server_receiver_port": "1936",
"server_receiver_port_id": "69c1d2af28c95839e0dfeaa1",
"server_timeout": "60",
"server_type": "SERVER_TYPE_SRT",
"server_user_id": "69360341db559495f643de6a",
"stats_interval": 1,
"success": true
}
]
Get SRT server by id
Expand
POST
/api/srt-servers/getById

Loads one SRT server by its identifier.

The current Swagger definition exposes this method as POST /api/srt-servers/getById with a small application/json body containing the server id.

In live product tests, this method returns the full SRT server object on the top level of the response together with success: true.

Authentication uses the dashboard-issued JWT token in the x-access-token header.

Request body parameters
Lookup
id
string

Identifier of the SRT server you want to load.

Get SRT server by id
curl --request POST \
--url http://localhost/api/srt-servers/getById \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "SRT_SERVER_ID"
}'
Response
Core server object
_id
string

Identifier of the requested SRT server.

server_name
string

Name of the requested SRT server.

server_type
string

Type of the SRT server.

server_port
string

Listening port of the SRT server.

server_receiver_port
string

Receiver port of the SRT server.

Operational settings
passphrase
string

Stored passphrase field for the server.

server_publisher
string

Publisher prefix stored for the server.

server_player
string

Receiver prefix stored for the server.

routing_hosts
array

Routing hosts stored with the server, when routing is configured.

stats_interval
integer

Configured statistics interval.

Access and status
access
array

The service populates related access stream records on getById, so this endpoint is the best place to inspect the full access layer attached to a server.

server_active
boolean

Whether the server is currently enabled.

success
boolean

The live product returns the requested server object together with success: true.

Response: Get SRT server by id
JSON
{
"_id": "69c1d2af28c95839e0dfea90",
"__v": 0,
"access": [],
"id": "69c1d2af28c95839e0dfea90",
"passphrase": "",
"routing_hosts": [],
"server_active": true,
"server_created": "2026-03-23T23:54:23.979Z",
"server_latency": 200,
"server_maxbw": -1,
"server_modified": "2026-03-23T23:54:23.983Z",
"server_name": "Awesome SRT server",
"server_name_code": "awesome-srt-server",
"server_player": "receiver",
"server_port": "1935",
"server_port_id": "69c1d2af28c95839e0dfeaa0",
"server_publisher": "publisher",
"server_rcvbuf": 48234496,
"server_receiver_port": "1936",
"server_receiver_port_id": "69c1d2af28c95839e0dfeaa1",
"server_timeout": "60",
"server_type": "SERVER_TYPE_SRT",
"server_user_id": "69360341db559495f643de6a",
"stats_interval": 1,
"success": true
}
Start SRT server
Expand
POST
/api/srt-servers/start

Starts an existing SRT server by id.

This method flips the stored server state to active and then launches the underlying runtime process for that server. Use it for operational control after provisioning, rather than recreating the server document every time.

Request body parameters
Operation input
id
string

Identifier of the SRT server to start.

Start SRT server
curl --request POST \
--url http://localhost/api/srt-servers/start \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "SRT_SERVER_ID"
}'
Response
Operation result
server_active
boolean

After a successful start request the live product returns the server object with server_active: true.

server_modified
string

Updated modification timestamp written during the start operation.

success
boolean

The returned document still includes success: true.

Response: Start SRT server
JSON
{
"_id": "69c1d2af28c95839e0dfea90",
"__v": 0,
"access": [],
"id": "69c1d2af28c95839e0dfea90",
"passphrase": "",
"routing_hosts": [],
"server_active": true,
"server_created": "2026-03-23T23:54:23.979Z",
"server_latency": 200,
"server_maxbw": -1,
"server_modified": "2026-03-23T23:54:23.983Z",
"server_name": "Awesome SRT server",
"server_name_code": "awesome-srt-server",
"server_player": "receiver",
"server_port": "1935",
"server_port_id": "69c1d2af28c95839e0dfeaa0",
"server_publisher": "publisher",
"server_rcvbuf": 48234496,
"server_receiver_port": "1936",
"server_receiver_port_id": "69c1d2af28c95839e0dfeaa1",
"server_timeout": "60",
"server_type": "SERVER_TYPE_SRT",
"server_user_id": "69360341db559495f643de6a",
"stats_interval": 1,
"success": true
}
Stop SRT server
Expand
POST
/api/srt-servers/stop

Stops an existing SRT server by id.

This method marks the server as inactive, tears down the runtime process, and clears in-memory runtime structures such as recent statistics and event-log state for that server port.

Request body parameters
Operation input
id
string

Identifier of the SRT server to stop.

Stop SRT server
curl --request POST \
--url http://localhost/api/srt-servers/stop \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "SRT_SERVER_ID"
}'
Response
Operation result
server_active
boolean

After a successful stop request the live product returns the server object with server_active: false.

server_modified
string

Updated modification timestamp written during the stop operation.

success
boolean

The returned document still includes success: true.

Response: Stop SRT server
JSON
{
"_id": "69c1d2af28c95839e0dfea90",
"__v": 0,
"access": [],
"id": "69c1d2af28c95839e0dfea90",
"passphrase": "",
"routing_hosts": [],
"server_active": false,
"server_created": "2026-03-23T23:54:23.979Z",
"server_latency": 200,
"server_maxbw": -1,
"server_modified": "2026-03-23T23:54:23.983Z",
"server_name": "Awesome SRT server",
"server_name_code": "awesome-srt-server",
"server_player": "receiver",
"server_port": "1935",
"server_port_id": "69c1d2af28c95839e0dfeaa0",
"server_publisher": "publisher",
"server_rcvbuf": 48234496,
"server_receiver_port": "1936",
"server_receiver_port_id": "69c1d2af28c95839e0dfeaa1",
"server_timeout": "60",
"server_type": "SERVER_TYPE_SRT",
"server_user_id": "69360341db559495f643de6a",
"stats_interval": 1,
"success": true
}
Get active SRT streams
Expand
POST
/api/srt-servers/getActiveStreams

Returns the current active SRT stream identities together with the in-memory event-log snapshot.

Use this when you want a fast operational view of which remote peers are currently attached and which ports already have recent events recorded.

Request body parameters
This method has no parameters
Get active SRT streams
curl --request POST \
--url http://localhost/api/srt-servers/getActiveStreams \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{}'
Response
Live activity
activeStreams
array

Current array of active SRT stream identities, typically represented as host:peer_port.

eventLog
object

Current in-memory event log snapshot keyed by SRT server port. Each value is the event-log array for that port.

Response: Get active SRT streams
JSON
{
"activeStreams": [
"198.51.100.14:54022"
],
"eventLog": {
"1935": [
{
"event_name": "on_connect",
"module_name": "MODULE_SRT_SERVERS",
"host": "198.51.100.14",
"port": "1935",
"udp_port": "54022",
"stream_id": "publisher/awesome-srt-server/srt-stream-01",
"role_name": "publisher",
"active": true,
"event_created": "2026-03-24T08:10:13.000Z"
}
]
}
}
Get event log by SRT port
Expand
POST
/api/srt-servers/getEventLogBySRTPort

Returns the recent event log for a specific SRT server port.

This is the endpoint to use when you need connection history for a single port, including recent on_connect and on_close entries, peer information, and stream identifiers.

Request body parameters
Lookup
srt_port
string

SRT listen port whose event log you want to inspect.

Pagination
limit
integer

Maximum number of most recent log entries to return.

offset
integer

Optional offset counted from the end of the log buffer when you want older slices.

Get event log by SRT port
curl --request POST \
--url http://localhost/api/srt-servers/getEventLogBySRTPort \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"srt_port": "1935",
"limit": 20,
"offset": 0
}'
Response
Response list
[]
array

Array of recent event-log entries for the selected SRT port. The live API returns an empty array when nothing has happened yet.

Event entry
event_name
string

Name of the event, such as on_connect or on_close.

module_name
string

Origin module for the event, typically MODULE_SRT_SERVERS.

host
string

Remote host associated with the event.

port
string

SRT server port that produced the event.

udp_port
string

Peer UDP port captured for the event.

stream_id
string

Publisher or receiver stream identifier when available.

role_name
string

Role attached to the event, such as publisher or receiver.

active
boolean

Whether the event was recorded while the stream entry was active.

event_created
string

Timestamp attached to the event-log record.

Response: Get event log by SRT port
JSON
[
{
"event_name": "on_connect",
"module_name": "MODULE_SRT_SERVERS",
"host": "198.51.100.14",
"port": "1935",
"udp_port": "54022",
"stream_id": "publisher/awesome-srt-server/srt-stream-01",
"role_name": "publisher",
"active": true,
"event_created": "2026-03-24T08:10:13.000Z"
}
]
Get statistics history by server port
Expand
GET
/api/srt-servers/:serverPort/getStatisticHistory

Returns the raw in-memory statistics history for a specific SRT server port.

The response is keyed by stream id. Each stream id maps to the collected statistics messages for that stream, which makes this endpoint useful for debugging transport behavior after the server has already been running.

Query parameters
Path parameter
serverPort
string

SRT server listen port whose in-memory statistics history you want to retrieve.

Get statistics history by server port
curl --request GET \
--url http://localhost/api/srt-servers/1935/getStatisticHistory \
--header 'x-access-token: <your_api_token>'
Response
Top-level object
stream_id
object key

The top-level response is keyed by stream identifier. Each key points to the recorded statistics history for that stream on the selected server port.

Per-stream history
[]
array

Array of statistics messages collected for that stream. If the server has no history yet, the live endpoint returns an empty array or an empty object branch.

Response: Get statistics history by server port
JSON
{
"publisher/awesome-srt-server/srt-stream-01": []
}
Update SRT server
Expand
POST
/api/srt-servers/update

Updates an existing SRT server resource in Callaba Engine.

The update contract mirrors the create contract closely: you can adjust ports, latency, buffering, passphrase protection, routing, statistics callbacks, and access-control settings in the same request shape, while targeting an existing server id.

If you pass ********** as the passphrase placeholder, the backend preserves the existing encrypted passphrase instead of overwriting it with a new plaintext value.

Authentication uses the dashboard-issued JWT token in the x-access-token header.

Request body parameters
Target
id
string

Identifier of the SRT server you want to update.

Basic settings
server_name
string

Updated display name for the SRT server.

server_type
string

Updated server type. The current validated API still expects SERVER_TYPE_SRT.

server_active
boolean

Updated enabled state for the server.

Ports and latency
server_port
integer

Updated listening port.

server_receiver_port
integer

Updated receiver port.

server_latency
integer

Updated latency value in milliseconds.

server_maxbw
integer

Updated maximum bandwidth in Byte/s.

server_timeout
integer

Updated inactivity timeout in seconds.

server_rcvbuf
integer

Updated receiver buffer size. The live product accepts the same recommended values used during create.

Security and identity
passphrase
string

Updated passphrase. Sending ********** preserves the existing encrypted value in the backend service.

server_publisher
string

Updated publisher prefix.

server_player
string

Updated receiver prefix.

Routing and backup
routing
string

Updated routing mode.

routing_type
string

Updated routing type, such as PUSH or PULL.

routing_hosts
array

Updated routing target list.

Statistics callbacks
stats_host
string

Updated callback URL for SRT statistics.

stats_interval
integer

Updated statistics interval in seconds.

Access control
stream_control_type
string

Updated access-control mode for streams attached to the server.

access_settings
array

Updated access rules or stream identities to recreate alongside the server.

Update SRT server
curl --request POST \
--url http://localhost/api/srt-servers/update \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "SRT_SERVER_ID",
"server_name": "Awesome SRT server",
"server_type": "SERVER_TYPE_SRT",
"server_port": 1935,
"server_receiver_port": 1936,
"server_latency": 200,
"server_maxbw": -1,
"server_timeout": 60,
"server_rcvbuf": 48234496,
"server_active": true
}'
Response
Operation result
_id
string

Identifier of the updated SRT server.

server_name
string

Updated name returned by the product.

server_modified
string

Modification timestamp updated by the product.

success
boolean

The live product returns the updated server object together with success: true.

Response: Update SRT server
JSON
{
"_id": "69c1d2af28c95839e0dfea90",
"__v": 0,
"access": [],
"id": "69c1d2af28c95839e0dfea90",
"passphrase": "",
"routing_hosts": [],
"server_active": true,
"server_created": "2026-03-23T23:54:23.979Z",
"server_latency": 200,
"server_maxbw": -1,
"server_modified": "2026-03-24T00:35:53.847Z",
"server_name": "Awesome SRT server updated",
"server_name_code": "awesome-srt-server-updated",
"server_player": "receiver",
"server_port": "1935",
"server_port_id": "69c1d2af28c95839e0dfeaa0",
"server_publisher": "publisher",
"server_rcvbuf": 48234496,
"server_receiver_port": "1936",
"server_receiver_port_id": "69c1d2af28c95839e0dfeaa1",
"server_timeout": "60",
"server_type": "SERVER_TYPE_SRT",
"server_user_id": "69360341db559495f643de6a",
"stats_interval": 1,
"success": true
}
Remove SRT server
Expand
DELETE
/api/srt-servers/remove

Deletes an SRT server and stops the related server process.

The current Swagger definition exposes this method as DELETE /api/srt-servers/remove with a JSON body containing the server id.

In live product tests, this method returns the deleted SRT server object on the top level of the response together with success: true.

Authentication uses the dashboard-issued JWT token in the x-access-token header.

Query parameters
Operation input
id
string

Identifier of the SRT server to delete.

Remove SRT server
curl --request DELETE \
--url http://localhost/api/srt-servers/remove \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "SRT_SERVER_ID"
}'
Response
Operation result
_id
string

Identifier of the deleted SRT server.

server_name
string

Name of the deleted SRT server.

success
boolean

The live product returns the deleted server object together with success: true.

Response: Remove SRT server
JSON
{
"_id": "69c1d2af28c95839e0dfea90",
"__v": 0,
"access": [],
"id": "69c1d2af28c95839e0dfea90",
"passphrase": "",
"routing_hosts": [],
"server_active": true,
"server_created": "2026-03-23T23:54:23.979Z",
"server_latency": 200,
"server_maxbw": -1,
"server_modified": "2026-03-23T23:54:23.983Z",
"server_name": "Awesome SRT server",
"server_name_code": "awesome-srt-server",
"server_player": "receiver",
"server_port": "1935",
"server_port_id": "69c1d2af28c95839e0dfeaa0",
"server_publisher": "publisher",
"server_rcvbuf": 48234496,
"server_receiver_port": "1936",
"server_receiver_port_id": "69c1d2af28c95839e0dfeaa1",
"server_timeout": "60",
"server_type": "SERVER_TYPE_SRT",
"server_user_id": "69360341db559495f643de6a",
"stats_interval": 1,
"success": true
}