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 transport health, and switch between primary and backup sources.
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.getActiveStreamsreports current stream identities and available connection details.getEventLogBySRTPortreturns connection events for a server port.getStatisticHistoryreturns the available recent transport history for a server port.switchToselects a configured route for supported PULL failover workflows.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 bitrate, estimated bandwidth, round-trip time, active streams, and connection events.
- Allow automatic failover, or use
switchTofor a manual change to an exact configured URL on a supported PULL server.
Common use cases
- Receive encrypted contribution from a remote camera or venue encoder.
- Operate primary and backup SRT feeds with automatic and manual switching.
- 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. switchTo applies only to a supported PULL server and an exact SRT URL already configured in its routing hosts. Live statistics are operational signals; export them when longer retention is required.
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 source state and recent transport history 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 - Check transport historyReview the available per-stream samples for the selected SRT port.
GET /api/srt-servers/:serverPort/getStatisticHistory
A successful create response confirms configuration, not media health. Start the resource, then verify its runtime statistics before sending production traffic.
See the SRT Server productSwitch a primary/backup SRT contribution source by REST API
Configure approved contribution sources on one PULL server, monitor source state and transport history, then switch the active route manually or from your own control policy.
- Configure the source setCreate a PULL server with the primary and backup URLs in routing_hosts.
POST /api/srt-servers/create - Check current activityRead the active stream identities before making a routing decision.
POST /api/srt-servers/getActiveStreams - Inspect connection eventsUse connect and close events for the selected listen port as one health signal.
POST /api/srt-servers/getEventLogBySRTPort - Review recent transport historyCompare the available per-stream history with your own failover thresholds.
GET /api/srt-servers/:serverPort/getStatisticHistory - Switch to the approved backupSend the server id and the exact configured backup srt_url, then repeat the activity and event checks.
POST /api/srt-servers/switchTo
This is route failover between configured sources, not packet-level hitless path redundancy. The server must use PULL routing and the exact SRT URL must already exist in routing_hosts.
See the live video failover productCreate 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.