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.
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.
/api/srt-servers/createBefore 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
createandupdateconfigure ports, latency, bandwidth, receive buffer, passphrase, access, callbacks, and routing hosts.getAll,getCount, andgetByIdinspect servers.startandstopcontrol the listener.switchTovalidates and stores a preferred configured PULL route. Apply the saved preference with a controlledstopandstartmaintenance sequence.removedeletes the server.
Example workflow
- Create a listener with the required port, latency, passphrase, and access rules.
- Add primary and backup routing hosts when failover is required.
- Start the server and connect the publisher.
- Watch live bitrate, estimated bandwidth, round-trip time, buffers, and loss counters in the Callaba operator experience.
- 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.
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.
- Create the SRT gatewaySet ports, latency, passphrase, publisher and receiver access, and routing.
POST /api/srt-servers/create - Start contribution ingestStart the listener before sharing connection details with the source.
POST /api/srt-servers/start - 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.
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.
- Configure the source setCreate a PULL server with the primary and backup URLs in routing_hosts.
POST /api/srt-servers/create - Review the saved route setConfirm the server uses PULL routing and contains every approved primary and backup host.
POST /api/srt-servers/getById - Start the configured relayStart the server only after the route order and connection settings have been reviewed.
POST /api/srt-servers/start - 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 - 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.
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.
- Register primary and backupCreate a PULL server whose routing_hosts contains every URL the policy is allowed to select.
POST /api/srt-servers/create - Review the allowed route setConfirm PULL mode and the exact saved URLs before entering the maintenance window.
POST /api/srt-servers/getById - Stop the running relayEnter a controlled maintenance state before changing the saved route preference.
POST /api/srt-servers/stop - Store the preferred sourceSend the server id and one exact srt_url already present in routing_hosts.
POST /api/srt-servers/switchTo - 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.
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.
- 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 - Verify saved access recordsRead the populated access relation and confirm publisher and receiver roles before sharing URLs.
POST /api/srt-servers/getById - 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.
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.
These examples keep routing disabled and rely on the server itself as the stable ingest boundary.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Dashboard label: Port.
Port used for listening to the SRT server. The live validation accepts values from 1024 to 65535.
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.
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.
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.
Dashboard label: Stream inactivity timeout.
Configured in seconds. When the timeout is reached, the server disconnects the client. -1 means unlimited timeout.
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.
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.
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 strategy used when routing is enabled. The server model defines PUSH and PULL.
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.
Optional callback URL for SRT statistics delivery. When set, the value must be a valid http or https URI.
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.
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.
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.
Resource id returned when you create or list the SRT server.
Convenience alias for the server identifier. In the live response, id matches _id.
Name stored for the created SRT server.
Slug-style code generated from server_name. The backend derives it with friendly URL normalization.
Type of the created server, for example SERVER_TYPE_SRT.
Listening port returned by the product for the created SRT server.
Receiver port returned by the product for the created SRT server.
Assigned UDP port document for the publisher side of the server.
Assigned UDP port document for the receiver side of the server.
Configured latency value in milliseconds.
Configured maximum bandwidth in Byte/s.
Configured inactivity timeout in seconds. The live document currently serializes it as a string.
Receive buffer size in bytes. Flow control is derived from this value.
Whether the created server is enabled immediately after creation.
Stored encryption field for the server. If passphrase protection is enabled, the backend stores an encoded value rather than a plaintext secret.
Publisher-side stream-id or URL prefix stored with the server.
Receiver-side stream-id or URL prefix stored with the server.
Routing targets saved with the server. In the minimal default create flow this is an empty array.
Resolved statistics interval. The live create flow defaults to 1.
Related access stream records for this SRT server. getById populates these more deeply than create/update.
Owner user identifier attached by the backend.
Creation timestamp returned by the live product.
Last modification timestamp returned by the live product.
Document version field returned by the model serialization.
The live product returns a boolean success flag together with the created SRT server object. On successful creation it is true.