Callaba
Toggle documentation navigation
Callaba home

SRT servers

Use SRT servers to give remote encoders or partner systems secure, low-latency contribution through managed SRT ingest endpoints. Control publisher and receiver access, monitor live transport health in the authenticated Callaba operator experience, and prepare primary and backup PULL routes for reconnect and fallback after a disconnect.

What it doesReceive a reliable SRT contribution feed

Choose this whenYou need managed SRT ingest with access rules, transport telemetry, and primary/backup failover.

Use another module whenUse SRT Routes for unchanged forwarding; use Restreams for transcoding, overlays, or another output protocol.

1SRT source2Monitor and recover3Route or record
POST /api/srt-servers/create
9 endpoints

Before you start

All management methods require a valid x-access-token. Reserve reachable SRT ports, coordinate latency and passphrase settings with the sender, and define publisher and receiver access before sharing connection details.

What you can do

  • create and update configure ports, latency, bandwidth, receive buffer, passphrase, access, callbacks, and routing hosts.
  • getAll, getCount, and getById inspect servers.
  • start and stop control the listener.
  • switchTo validates and stores a preferred configured PULL route. Apply the saved preference with a controlled stop and start maintenance sequence.
  • remove deletes the server.

Example workflow

  1. Create a listener with the required port, latency, passphrase, and access rules.
  2. Add primary and backup routing hosts when failover is required.
  3. Start the server and connect the publisher.
  4. Watch live bitrate, estimated bandwidth, round-trip time, buffers, and loss counters in the Callaba operator experience.
  5. Interrupt the primary source during a controlled acceptance test and confirm in the authenticated operator experience that the configured reconnect and routing-host loop reaches a prepared backup.

Common use cases

  • Receive encrypted contribution from a remote camera or venue encoder.
  • Operate configured primary and backup SRT PULL feeds with reconnect and fallback behavior after a disconnect.
  • Control publisher and receiver access for partners or guest connections.
  • Monitor contribution health and connection origin during a live event.

Limits and troubleshooting

The sender and listener must agree on mode, port, latency, stream identity, and passphrase. Failover is not universally hitless: detection and recovery time depend on the real source, destination, reconnect interval, buffer, latency, and network. switchTo saves a configured route preference but does not reload a running relay. Apply it with a controlled stop and start, then verify live SRT health in the authenticated Callaba operator experience.

Next steps

Verify the live feed, then connect the server to SRT routes, Restreams, Recordings, Multiview, or Web players.

REST solution recipe

Build an SRT server gateway for contribution

Create a secure SRT ingest boundary for a remote production feed, start it, and confirm the saved access and routing configuration before routing the signal downstream.

  1. Create the SRT gatewaySet ports, latency, passphrase, publisher and receiver access, and routing.POST /api/srt-servers/create
  2. Start contribution ingestStart the listener before sharing connection details with the source.POST /api/srt-servers/start
  3. Review the saved gatewayConfirm ports, access records, routing hosts, and active state through the authenticated resource.POST /api/srt-servers/getById

A successful create response confirms configuration, not media health. Start the resource, then verify its runtime statistics before sending production traffic.

REST solution recipe

Prepare and validate an SRT primary/backup route set

Configure approved primary and backup sources on one PULL server, review the saved route set, and validate reconnect behavior during a controlled source interruption.

  1. Configure the source setCreate a PULL server with the primary and backup URLs in routing_hosts.POST /api/srt-servers/create
  2. Review the saved route setConfirm the server uses PULL routing and contains every approved primary and backup host.POST /api/srt-servers/getById
  3. Start the configured relayStart the server only after the route order and connection settings have been reviewed.POST /api/srt-servers/start
  4. Close the acceptance window safelyAfter validating primary loss and backup recovery in the operator experience, stop the temporary acceptance runtime when required.POST /api/srt-servers/stop
  5. Finalize the production route setApply any reviewed timeout or route-order corrections while the server is in a controlled maintenance state.POST /api/srt-servers/update

This is reconnect-based recovery between configured sources, not packet-level hitless path redundancy. Validate recovery with real media in the authenticated Callaba operator experience.

Maintenance-safe REST workflow

Apply a preferred SRT source on the next controlled start

Review the configured PULL routes, stop the relay in a planned window, store the preferred source, and start the server so Engine regenerates the runtime with that preference.

  1. Register primary and backupCreate a PULL server whose routing_hosts contains every URL the policy is allowed to select.POST /api/srt-servers/create
  2. Review the allowed route setConfirm PULL mode and the exact saved URLs before entering the maintenance window.POST /api/srt-servers/getById
  3. Stop the running relayEnter a controlled maintenance state before changing the saved route preference.POST /api/srt-servers/stop
  4. Store the preferred sourceSend the server id and one exact srt_url already present in routing_hosts.POST /api/srt-servers/switchTo
  5. Regenerate and startStart the server so the relay configuration is regenerated with the saved route preference, then verify live media in the operator experience.POST /api/srt-servers/start

switchTo validates and saves the configured route preference; it does not reload a running relay. Treat stop, switchTo, and start as one planned maintenance transaction.

REST solution recipe

Control SRT publisher and receiver access

Choose an open guest boundary, an IP allowlist, or a passphrase-protected listener when you create the server, then inspect the populated access records before distributing connection details.

  1. Create the access boundarySet stream_control_type and access_settings for the chosen policy together with ports, latency, and optional passphrase.POST /api/srt-servers/create
  2. Verify saved access recordsRead the populated access relation and confirm publisher and receiver roles before sharing URLs.POST /api/srt-servers/getById
  3. Rotate the policy safelySend the complete desired server and access state when moving between guest, allowlist, or protected operation.POST /api/srt-servers/update

CONTROL_ACCESS_ALLOW_ALL accepts arbitrary publisher or receiver identities and should be limited to intentional guest workflows. Use CONTROL_ACCESS_IP_ADDRESS plus access_settings for known hosts; add an SRT passphrase when transport encryption is required.

POST
/api/srt-servers/create
API token required

Create an SRT listener with its ports, latency, buffering, encryption, routing, monitoring, and access-control settings. Send the dashboard-issued JWT in the x-access-token header.

Choose routing_type for a standalone, push, or pull listener. Do not send a separate server_fc field; Callaba calculates flow control from server_rcvbuf.

Units are significant: server_latency is milliseconds, server_timeout is seconds, server_maxbw is bytes per second, and server_rcvbuf is bytes.

Request examples

Choose a preset for no routing, public-IP routing, Callaba routing, or security and monitoring. A vMix Script example is available for operator-driven provisioning.

Common use cases

  • Provide OBS, a field encoder, or a partner feed with a stable contribution endpoint.
  • Configure push or pull routing for a backup source or a managed handoff.
  • Apply a passphrase, access rules, and event/statistics callbacks to an ingest boundary that operations must monitor.
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
Copy code
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,
"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
Copy code
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,
"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
Copy code
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,
"routing": "PUBLIC_IP",
"routing_type": "PULL",
"routing_hosts": [
{
"routing_host": "198.51.100.22",
"routing_port": 1935,
"routing_server_name": "primary-edge-srt"
},
{
"routing_host": "203.0.113.50",
"routing_port": 1935,
"routing_server_name": "backup-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
Copy code
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,
"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
Copy code
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,
"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
Copy code
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,
"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
Copy code
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,
"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. Each entry requires host and role_name when stream_control_type is 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
Copy code
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,
"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
Copy direct link

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
Copy direct link

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
Copy direct link

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
Copy direct link

Dashboard label: Port.

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

server_receiver_port
integer
Copy direct link

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
Copy direct link

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
Copy direct link

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
Copy direct link

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
Copy direct link

Dashboard label: Receiver buffer size.

This field is expressed in bytes. The REST API accepts 12058624 to 200000000.

The dashboard starts at 12058624 and recommends 48234496 for production. Flow control is derived from this receive buffer, so you do not send a separate server_fc field.

Security and identity
passphrase
string
Copy direct link

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.

Routing and backup
routing
string
Copy direct link

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
Copy direct link

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

routing_hosts
array
Copy direct link

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
Copy direct link

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

stats_interval
integer
Copy direct link

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
Copy direct link

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
Copy direct link

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
Copy code
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
Copy direct link

Resource id returned when you create or list the SRT server.

id
string
Copy direct link

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

server_name
string
Copy direct link

Name stored for the created SRT server.

server_name_code
string
Copy direct link

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

server_type
string
Copy direct link

Type of the created server, for example SERVER_TYPE_SRT.

server_port
string
Copy direct link

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

server_receiver_port
string
Copy direct link

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

server_port_id
string
Copy direct link

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

server_receiver_port_id
string
Copy direct link

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

Runtime profile
server_latency
integer
Copy direct link

Configured latency value in milliseconds.

server_maxbw
integer
Copy direct link

Configured maximum bandwidth in Byte/s.

server_timeout
string
Copy direct link

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

server_rcvbuf
integer
Copy direct link

Receive buffer size in bytes. Flow control is derived from this value.

server_active
boolean
Copy direct link

Whether the created server is enabled immediately after creation.

Security, routing, and monitoring
passphrase
string
Copy direct link

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
Copy direct link

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

server_player
string
Copy direct link

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

routing_hosts
array
Copy direct link

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

stats_interval
integer
Copy direct link

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

Access and metadata
access
array
Copy direct link

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

server_user_id
string
Copy direct link

Owner user identifier attached by the backend.

server_created
string
Copy direct link

Creation timestamp returned by the live product.

server_modified
string
Copy direct link

Last modification timestamp returned by the live product.

__v
integer
Copy direct link

Document version field returned by the model serialization.

success
boolean
Copy direct link

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
Copy code
{
"_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
}
POST
/api/srt-servers/getCount
API token required
POST
/api/srt-servers/getAll
API token required
POST
/api/srt-servers/getById
API token required
POST
/api/srt-servers/start
API token required
POST
/api/srt-servers/stop
API token required
POST
/api/srt-servers/switchTo
API token required
POST
/api/srt-servers/update
API token required
DELETE
/api/srt-servers/remove
API token required