media server logo
Toggle documentation navigation
Callaba home

SRT routes

Use SRT routes to forward an SRT or UDP input to an SRT destination without adding a transcoding workflow.

What it doesRoute SRT media to a destination

Choose this whenSRT or UDP must be forwarded to SRT without transcoding.

Use another module whenUse Restreams for transcoding, overlays, or protocol changes; use SRT Servers for managed ingest and failover.

1Select SRT input2Set the destination3Start the route
POST /api/srt-routes/create
8 endpoints

Before you start

All methods require a valid x-access-token. Reserve any local listen ports and confirm that URL destinations are reachable. Configure SRT mode, latency, passphrase, and stream identity consistently on both ends.

What you can do

  • create and update configure the input, output, and SRT transport settings.
  • getAll, getCount, and getById inspect routes.
  • start and stop control the transport path.
  • remove deletes a route.

Example workflow

  1. Select an input: local SRT listener, SRT URL, or supported UDP source.
  2. Select an output: local SRT listener or SRT destination URL.
  3. Create the route with the required transport settings.
  4. Start it and verify the source and destination independently.
  5. Use the route output as the stable input for another module when needed.

Common use cases

  • Forward a venue contribution to a regional production instance.
  • Bridge a UDP source into an SRT delivery path without transcoding.
  • Expose one contribution feed through a stable SRT handoff for downstream recording or distribution.

Limits and troubleshooting

A route does not repair an unavailable source or destination. Listener ports must be free, URLs must be reachable, and SRT parameters must be compatible. Use Restreams instead when the workflow needs transcoding, overlays, media modification, or wider output choices.

Next steps

Connect the route to the intended Restream, Recording, or other supported consumer and test the entire path.

REST solution recipe

Route or replicate SRT without transcoding

Create a persistent transport route from an SRT or UDP source to an SRT destination, then start and inspect the saved route.

  1. Create the routeChoose the verified source and SRT destination presets.POST /api/srt-routes/create
  2. Start routingStart after source and destination reachability are confirmed.POST /api/srt-routes/start
  3. Inspect the routeRead the persisted source, destination, and active state.POST /api/srt-routes/getById

Use SRT routes when the handoff stays a transport workflow. Use Restreams when protocol conversion, transcoding, resizing, audio changes, or overlays are required.

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

Create an SRT route with a name, source, destination, and initial active state. Send the dashboard-issued JWT in the x-access-token header.

The response contains the created route and success: true. Its top-level input and output arrays are empty immediately after creation; call getById when you need the expanded linked objects.

Common use cases

  • Keep a stable SRT handoff in front of restream jobs whose destinations change between events.
  • Give scheduled recording jobs a consistent route output instead of binding each job to the original contribution source.
  • Provision a route on demand from vMix; use start and stop for routine operator controls after the route exists.

Request examples

Choose the preset that matches the source and destination, then add only the transport settings required by that path.

SRT listen port

The route listens on a local SRT port and owns the incoming contribution handoff.

SRT listen port to SRT listen port

Destination preset: SRT listen port. The route exposes a local SRT listening port for downstream consumers that connect later.

SRT listen port to SRT listen port
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from SRT listen port to SRT listen port",
"input": {
"input_type": "INPUT_TYPE_SRT_LISTEN",
"input_stream_listen_port": {
"port": 2035,
"transport": "udp"
},
"input_settings": {
"host": "0.0.0.0",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25
},
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_SRT_LISTEN",
"output_stream_listen_port": {
"port": 3035,
"transport": "udp"
},
"output_settings": {
"host": "0.0.0.0",
"mode": "listener",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"sndbuf": 12288000,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25,
"groupconnect": "yes",
"groupminstabletimeo": 60,
"conntimeo": 3000
},
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
SRT listen port to SRT Output URL

Destination preset: SRT Output URL. The route pushes to a downstream SRT destination URL right away.

SRT listen port to SRT Output URL
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from SRT listen port to SRT Output URL",
"input": {
"input_type": "INPUT_TYPE_SRT_LISTEN",
"input_stream_listen_port": {
"port": 2035,
"transport": "udp"
},
"input_settings": {
"host": "0.0.0.0",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25
},
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_SRT_URL",
"output_stream_url": "srt://destination.example.com:1935",
"output_settings": {
"host": "0.0.0.0",
"mode": "listener",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"sndbuf": 12288000,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25,
"groupconnect": "yes",
"groupminstabletimeo": 60,
"conntimeo": 3000
},
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
SRT listen port to UDP Output URL

Destination preset: UDP Output URL. The route hands off to a downstream UDP destination URL when the next hop expects UDP.

SRT listen port to UDP Output URL
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from SRT listen port to UDP Output URL",
"input": {
"input_type": "INPUT_TYPE_SRT_LISTEN",
"input_stream_listen_port": {
"port": 2035,
"transport": "udp"
},
"input_settings": {
"host": "0.0.0.0",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25
},
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_UDP_URL",
"output_stream_url": "udp://destination.example.com:5000",
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
SRT Stream URL

The route pulls from an upstream SRT URL instead of waiting on a local listening port.

SRT Stream URL to SRT listen port

Destination preset: SRT listen port. The route exposes a local SRT listening port for downstream consumers that connect later.

SRT Stream URL to SRT listen port
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from SRT Stream URL to SRT listen port",
"input": {
"input_type": "INPUT_TYPE_SRT_URL",
"input_stream_url": "srt://upstream.example.com:2034?mode=caller",
"input_settings": {
"rcvbuf": 48234496
},
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_SRT_LISTEN",
"output_stream_listen_port": {
"port": 3035,
"transport": "udp"
},
"output_settings": {
"host": "0.0.0.0",
"mode": "listener",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"sndbuf": 12288000,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25,
"groupconnect": "yes",
"groupminstabletimeo": 60,
"conntimeo": 3000
},
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
SRT Stream URL to SRT Output URL

Destination preset: SRT Output URL. The route pushes to a downstream SRT destination URL right away.

SRT Stream URL to SRT Output URL
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from SRT Stream URL to SRT Output URL",
"input": {
"input_type": "INPUT_TYPE_SRT_URL",
"input_stream_url": "srt://upstream.example.com:2034?mode=caller",
"input_settings": {
"rcvbuf": 48234496
},
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_SRT_URL",
"output_stream_url": "srt://destination.example.com:1935",
"output_settings": {
"host": "0.0.0.0",
"mode": "listener",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"sndbuf": 12288000,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25,
"groupconnect": "yes",
"groupminstabletimeo": 60,
"conntimeo": 3000
},
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
SRT Stream URL to UDP Output URL

Destination preset: UDP Output URL. The route hands off to a downstream UDP destination URL when the next hop expects UDP.

SRT Stream URL to UDP Output URL
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from SRT Stream URL to UDP Output URL",
"input": {
"input_type": "INPUT_TYPE_SRT_URL",
"input_stream_url": "srt://upstream.example.com:2034?mode=caller",
"input_settings": {
"rcvbuf": 48234496
},
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_UDP_URL",
"output_stream_url": "udp://destination.example.com:5000",
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
UDP Stream URL

The route reads from a UDP source URL when the upstream side is already exposed as UDP.

UDP Stream URL to SRT listen port

Destination preset: SRT listen port. The route exposes a local SRT listening port for downstream consumers that connect later.

UDP Stream URL to SRT listen port
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from UDP Stream URL to SRT listen port",
"input": {
"input_type": "INPUT_TYPE_UDP_URL",
"input_stream_url": "udp://upstream.example.com:5000",
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_SRT_LISTEN",
"output_stream_listen_port": {
"port": 3035,
"transport": "udp"
},
"output_settings": {
"host": "0.0.0.0",
"mode": "listener",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"sndbuf": 12288000,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25,
"groupconnect": "yes",
"groupminstabletimeo": 60,
"conntimeo": 3000
},
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
UDP Stream URL to SRT Output URL

Destination preset: SRT Output URL. The route pushes to a downstream SRT destination URL right away.

UDP Stream URL to SRT Output URL
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from UDP Stream URL to SRT Output URL",
"input": {
"input_type": "INPUT_TYPE_UDP_URL",
"input_stream_url": "udp://upstream.example.com:5000",
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_SRT_URL",
"output_stream_url": "srt://destination.example.com:1935",
"output_settings": {
"host": "0.0.0.0",
"mode": "listener",
"latency": 500,
"rcvlatency": 200,
"fc": 25600,
"sndbuf": 12288000,
"rcvbuf": 12288000,
"inputbw": 750000,
"oheadbw": 25,
"groupconnect": "yes",
"groupminstabletimeo": 60,
"conntimeo": 3000
},
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
UDP Stream URL to UDP Output URL

Destination preset: UDP Output URL. The route hands off to a downstream UDP destination URL when the next hop expects UDP.

UDP Stream URL to UDP Output URL
Copy code
curl --request POST \
--url http://localhost/api/srt-routes/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"router_name": "Route from UDP Stream URL to UDP Output URL",
"input": {
"input_type": "INPUT_TYPE_UDP_URL",
"input_stream_url": "udp://upstream.example.com:5000",
"module_name": "MODULE_SRT_ROUTERS"
},
"output": {
"output_type": "OUTPUT_TYPE_UDP_URL",
"output_stream_url": "udp://destination.example.com:5000",
"module_name": "MODULE_SRT_ROUTERS"
},
"active": true
}'
Request body parameters
Basic settings
router_name
string
Copy direct link

Dashboard label: Route name.

Characters: A-Z, a-z, 0-9, and -.

Source
input.input_type
string
Copy direct link

Dashboard group: SRT/UDP route source.

The route source type. In the dashboard, the SRT option is shown as SRT Stream URL (srt://). The current example uses INPUT_TYPE_SRT_URL.

input.input_stream_url
string
Copy direct link

Dashboard label: SRT Stream URL (srt://).

Connect to the specified URL address and try to pull the stream. The current example uses a listener URL: srt://0.0.0.0:2034?mode=listener.

Advanced source settings
input.input_settings.rcvbuf
integer
Copy direct link

Dashboard label: Receiver buffer size.

This is an optional advanced SRT input setting. The dashboard tooltip says the default receiver buffer size is 12058624 bytes and the recommended value is 48234496 bytes. Live route tests confirm the API accepts this field and returns it from getById when it is set.

Source
input.module_name
string
Copy direct link

Input module name. Use MODULE_SRT_ROUTERS for an SRT route.

Destination
output.output_type
string
Copy direct link

Dashboard group: SRT route destination.

Dashboard label: Stream destination.

In the dashboard, the SRT destination option is shown as SRT Output URL (srt://). The current example uses OUTPUT_TYPE_SRT_URL.

output.output_stream_url
string
Copy direct link

Dashboard label: Output Stream URL.

Specify the address of the streaming platform or the stream destination. The current example uses srt://0.0.0.0:2035.

output.module_name
string
Copy direct link

Output module name. Use MODULE_SRT_ROUTERS for an SRT route.

Source
input.input_stream_listen_port.port
integer
Copy direct link

Listen source preset: SRT Port.

When the route source is built from the dashboard's listen-port preset, the default port is 2035. This is the practical alternative to input.input_stream_url.

Advanced source settings
input.input_settings.host
string
Copy direct link

Dashboard label: SRT Listen Host.

The local IP address to bind. The dashboard tooltip explicitly calls out 0.0.0.0 for all interfaces and 127.0.0.1 for localhost-only binding. The default is 0.0.0.0.

input.input_settings.latency
integer
Copy direct link

Dashboard label: Latency.

Defines the maximum accepted transmission latency. The current dashboard default for route SRT settings is 500 ms.

input.input_settings.rcvlatency
integer
Copy direct link

Dashboard label: Receiver latency.

Minimum receiver buffering delay before the application gets the packet. The current dashboard default is 200 ms.

input.input_settings.fc
integer
Copy direct link

Dashboard label: Flow control window size.

Limits the maximum number of packets in flight. The current dashboard default is 25600 pkts.

input.input_settings.inputbw
integer
Copy direct link

Dashboard label: Input bandwidth.

Set this to the anticipated bitrate of the live stream. The current dashboard default is 750000 Byte/s.

input.input_settings.oheadbw
integer
Copy direct link

Dashboard label: Recovery bandwidth.

Bandwidth overhead above the input bandwidth, in percent. The current dashboard default is 25%.

input.input_settings.maxbw
integer
Copy direct link

Dashboard label: Bandwidth limit.

Use 0 for the default bandwidth limit.

input.input_settings.streamid
string
Copy direct link

Dashboard label: Stream ID (optional).

Available on the SRT listen/source configuration block.

input.input_settings.passphrase
string
Copy direct link

Dashboard label: Passphrase (optional).

Password for the encrypted transmission. The dashboard tooltip says it must be between 10 and 79 characters.

Destination
output.output_stream_listen_port.port
integer
Copy direct link

Listen destination preset: SRT Port.

When the route destination is built from the dashboard's listen-port preset, the default port is 3035. This is the practical alternative to output.output_stream_url.

Advanced destination settings
output.output_settings.host
string
Copy direct link

Dashboard label: SRT Host.

In listener mode this is the local IP to bind, and in caller or rendezvous mode it is the remote IP to connect to. The current dashboard default is 0.0.0.0.

output.output_settings.mode
string
Copy direct link

Dashboard label: Mode.

Possible values are caller, listener, or rendezvous. The current dashboard default is the second SRT mode option, which corresponds to the default route form shown in the UI.

output.output_settings.latency
integer
Copy direct link

Dashboard label: Latency.

Defines the maximum accepted transmission latency. The current dashboard default is 500 ms.

output.output_settings.rcvlatency
integer
Copy direct link

Dashboard label: Receiver latency.

Minimum receiver buffering delay before data is delivered to the receiving application. The current dashboard default is 200 ms.

output.output_settings.fc
integer
Copy direct link

Dashboard label: Flow control window size.

The current dashboard default is 25600 pkts.

output.output_settings.sndbuf
integer
Copy direct link

Dashboard label: Sender Buffer Size.

The current dashboard default is 12288000 Bytes.

output.output_settings.rcvbuf
integer
Copy direct link

Dashboard label: Receiver Buffer Size.

The current dashboard default is 12288000 Bytes.

output.output_settings.inputbw
integer
Copy direct link

Dashboard label: Input bandwidth.

The current dashboard default is 750000 Byte/s.

output.output_settings.oheadbw
integer
Copy direct link

Dashboard label: Recovery bandwidth.

The current dashboard default is 25%.

output.output_settings.streamid
string
Copy direct link

Dashboard label: Stream ID (optional).

The dashboard tooltip notes that it is settable in Caller mode only.

output.output_settings.passphrase
string
Copy direct link

Dashboard label: Passphrase (optional).

Password for encrypted transmission. The dashboard tooltip says it must be between 10 and 79 characters.

output.output_settings.enforcedencryption
string
Copy direct link

Dashboard label: Enforced encryption.

Requires both connection parties to either use the same passphrase or both omit the passphrase. Otherwise the connection is rejected.

output.output_settings.groupconnect
string
Copy direct link

Dashboard label: Accept group connections.

When enabled on a listener socket, it allows this socket to accept group connections.

output.output_settings.groupminstabletimeo
integer
Copy direct link

Dashboard label: Group stability timeout.

The current dashboard default is 60 ms.

output.output_settings.conntimeo
integer
Copy direct link

Dashboard label: Connection timeout.

Applies to caller and rendezvous connection modes. The current dashboard default is 3000 ms.

Route state
active
boolean
Copy direct link

Dashboard label: Enable once created.

Controls whether the route should be enabled immediately after creation.

Response
_id
string
Copy direct link

Identifier of the newly created SRT route.

id
string
Copy direct link

Convenience alias for the created route identifier. In live responses, id matches _id.

router_name
string
Copy direct link

Name stored for the created route.

input
array
Copy direct link

Immediately after creation, the live product returns an empty input array on the top level. Use getById to fetch expanded input objects.

output
array
Copy direct link

Immediately after creation, the live product returns an empty output array on the top level. Use getById to fetch expanded output objects.

active
boolean
Copy direct link

Whether the route is enabled after creation.

created
string
Copy direct link

Creation timestamp returned by the live product.

success
boolean
Copy direct link

The live product returns a boolean success flag together with the created route object. On success it is true.

Response: Create SRT route
JSON
Copy code
{
"router_name": "Awesome SRT route",
"input": [],
"output": [],
"active": true,
"user_id": "69360341db559495f643de6a",
"created": "2026-03-24T00:45:02.729Z",
"_id": "69c1de8e28c95839e0dffb74",
"__v": 0,
"id": "69c1de8e28c95839e0dffb74",
"success": true
}
POST
/api/srt-routes/getAll
API token required
POST
/api/srt-routes/getById
API token required
POST
/api/srt-routes/update
API token required
POST
/api/srt-routes/start
API token required
POST
/api/srt-routes/stop
API token required
POST
/api/srt-routes/getCount
API token required
DELETE
/api/srt-routes/remove
API token required