NDI adapters

NDI adapters expose a managed source in Callaba as a named NDI device for downstream systems. Use this when the source arrives as SRT, RTMP, or a conference participant, but the receiving side needs NDI.

In production, this module solves a handoff problem: keep ingest and source control where they are, while publishing a stable NDI output for a switcher, graphics engine, multiviewer, or room workflow.

  • Select the source you already manage.
  • Assign a stable ndi_device_name that operators recognize.
  • Start and stop the adapter deliberately so the NDI output appears only when it is needed.

For recurring events, create adapters ahead of time and reuse the same device names. After startup, verify runtime health with process stats instead of relying on saved configuration alone.

Examples by preset

Each preset below creates the same result: a discoverable NDI device backed by a different source type.

SRT server to NDI device

Use this when remote cameras or contribution feeds arrive over SRT, but the control room or graphics system expects NDI.

{
  "restream_name": "Camera 1 to Cloud NDI via SRT",
  "input": {
    "input_type": "INPUT_TYPE_SRT_SOFTWARE",
    "application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
    "input_module_id": "66015d2997300f9385d32c00",
    "input_stream_url": "",
    "input_stream_listen_port": {},
    "input_settings": {},
    "input_stream_id": "",
    "entity_name": "Camera 1 to Cloud NDI via SRT",
    "module_name": "MODULE_RESTREAM"
  },
  "output": {
    "output_type": "OUTPUT_TYPE_NDI_DEVICE",
    "application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
    "output_stream_url": "",
    "output_stream_listen_port": {},
    "output_settings": {
      "ndi_device_name": "Cloud NDI Camera 1",
      "timestamp_offset": 0,
      "av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
    },
    "output_stream_key": "",
    "entity_name": "Camera 1 to Cloud NDI via SRT",
    "module_name": "MODULE_RESTREAM"
  },
  "module_name": "MODULE_NDI_ADAPTERS",
  "active": true
}

RTMP server to NDI device

Use this when a venue, encoder, or cloud workflow publishes RTMP and the downstream production stack needs an NDI source with a fixed name.

{
  "restream_name": "RTMP stage feed to Cloud NDI",
  "input": {
    "input_type": "INPUT_TYPE_RTMP_SOFTWARE",
    "application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
    "input_module_id": "66015d2997300f9385d32c10",
    "input_stream_url": "",
    "input_stream_listen_port": {},
    "input_settings": {},
    "input_stream_id": "",
    "entity_name": "RTMP stage feed to Cloud NDI",
    "module_name": "MODULE_RESTREAM"
  },
  "output": {
    "output_type": "OUTPUT_TYPE_NDI_DEVICE",
    "application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
    "output_stream_url": "",
    "output_stream_listen_port": {},
    "output_settings": {
      "ndi_device_name": "Cloud NDI Stage Feed",
      "timestamp_offset": 0,
      "av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
    },
    "output_stream_key": "",
    "entity_name": "RTMP stage feed to Cloud NDI",
    "module_name": "MODULE_RESTREAM"
  },
  "module_name": "MODULE_NDI_ADAPTERS",
  "active": true
}

Conference participant to NDI device

Use this to expose a single speaker or guest from a conference as an NDI source for switching, recording, replay, or graphics.

{
  "restream_name": "Speaker feed to Cloud NDI",
  "input": {
    "input_type": "INPUT_TYPE_MODULE_CONFERENCES_PARTICIPANT",
    "application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
    "input_module_id": "66015d2997300f9385d32c20",
    "input_stream_url": "",
    "input_stream_listen_port": {},
    "input_settings": {},
    "input_stream_id": "",
    "entity_name": "Speaker feed to Cloud NDI",
    "module_name": "MODULE_RESTREAM"
  },
  "output": {
    "output_type": "OUTPUT_TYPE_NDI_DEVICE",
    "application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
    "output_stream_url": "",
    "output_stream_listen_port": {},
    "output_settings": {
      "ndi_device_name": "Cloud NDI Speaker",
      "timestamp_offset": 0,
      "av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
    },
    "output_stream_key": "",
    "entity_name": "Speaker feed to Cloud NDI",
    "module_name": "MODULE_RESTREAM"
  },
  "module_name": "MODULE_NDI_ADAPTERS",
  "active": true
}

Operational workflows

Feed an NDI-based production space without changing ingest

Keep SRT, RTMP, or conference ingest under centralized control and present the destination side as NDI. This is the common fit when engineering prefers managed contribution protocols but operators still work from NDI sources.

  • Typical use: remote cameras into an NDI switcher, a venue program feed into an NDI graphics station, or a cloud guest into an NDI multiview.
  • Why it matters: downstream systems stay unchanged while the source transport can vary by production.

Keep NDI names stable for operators

Set ndi_device_name to the label operators expect, such as Cloud NDI Camera 1 or Cloud NDI Speaker. Stable naming reduces source-selection mistakes during rehearsals, fast changes, and recurring shows.

  • Typical use: templated control rooms, repeatable event setups, and environments where the same labels must appear every time.
  • Why it matters: the NDI identity remains consistent even if the upstream input module changes.

Treat adapter state as a live signal path

A saved adapter does not guarantee a usable NDI output. Start it intentionally, confirm it is running, and check process stats before air or before routing it to another system.

  • Typical use: pre-show validation, controlled cutovers, and troubleshooting when an NDI source is visible but not healthy.
  • Why it matters: operators can verify readiness before the feed is taken live.
Create NDI adapter
Collapse
POST
/api/restream/create

Use this when a managed source must be published on the network as an NDI device for switchers, graphics systems, or other production clients.

Callaba saves it as a reusable bridge job backed by the restream engine with an NDI-device output, so the object follows the restream schema while staying scoped to MODULE_NDI_ADAPTERS. If operators launch it from vMix, the examples below include a ready-to-adapt vMix Script.

Managed ingest to NDI

Use this preset when one managed SRT server should show up as a named Cloud NDI output.

SRT server to NDI device

This is the most direct operator-facing bridge from an existing SRT ingest boundary into an NDI device contract.

SRT server to NDI device
curl --request POST \
--url http://localhost/api/restream/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": {
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"input_module_id": "66015d2997300f9385d32c00",
"input_stream_url": "",
"input_stream_listen_port": {},
"input_settings": {},
"input_stream_id": "",
"entity_name": "Camera 1 to Cloud NDI via SRT",
"module_name": "MODULE_RESTREAM"
},
"output": {
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"output_stream_url": "",
"output_stream_listen_port": {},
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"output_stream_key": "",
"entity_name": "Camera 1 to Cloud NDI via SRT",
"module_name": "MODULE_RESTREAM"
},
"module_name": "MODULE_NDI_ADAPTERS",
"active": true
}'
RTMP server to NDI device

This is useful for hardware or software sources that already terminate on RTMP inside the platform.

RTMP server to NDI device
curl --request POST \
--url http://localhost/api/restream/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"restream_name": "GoPro RTMP to Cloud NDI",
"input": {
"input_type": "INPUT_TYPE_RTMP_GOPRO",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"input_module_id": "66015d2997300f9385d32c10",
"input_stream_url": "",
"input_stream_listen_port": {},
"input_settings": {},
"input_stream_id": "",
"entity_name": "GoPro RTMP to Cloud NDI",
"module_name": "MODULE_RESTREAM"
},
"output": {
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"output_stream_url": "",
"output_stream_listen_port": {},
"output_settings": {
"ndi_device_name": "Cloud NDI GoPro",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"output_stream_key": "",
"entity_name": "GoPro RTMP to Cloud NDI",
"module_name": "MODULE_RESTREAM"
},
"module_name": "MODULE_NDI_ADAPTERS",
"active": true
}'
Realtime participant to NDI

Use this preset when one participant feed from a video call should be surfaced back into an NDI-aware production environment.

Conference participant to NDI device

This is the conference-side variant of the same adapter pattern.

Conference participant to NDI device
curl --request POST \
--url http://localhost/api/restream/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"restream_name": "Speaker feed to Cloud NDI",
"input": {
"input_type": "INPUT_TYPE_MODULE_CONFERENCES_PARTICIPANT",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"input_module_id": "66015d2997300f9385d32c20",
"input_stream_url": "",
"input_stream_listen_port": {},
"input_settings": {},
"input_stream_id": "",
"entity_name": "Speaker feed to Cloud NDI",
"module_name": "MODULE_RESTREAM"
},
"output": {
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"output_stream_url": "",
"output_stream_listen_port": {},
"output_settings": {
"ndi_device_name": "Cloud NDI Speaker",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"output_stream_key": "",
"entity_name": "Speaker feed to Cloud NDI",
"module_name": "MODULE_RESTREAM"
},
"module_name": "MODULE_NDI_ADAPTERS",
"active": true
}'
Request body parameters
Identity
restream_name
string

Dashboard label: Adapter name.

Human-facing name of the NDI adapter job.

Source
input.input_type
string

Dashboard label: Source Input.

Real supported runtime families include managed SRT server inputs, managed RTMP server inputs, and conference-participant inputs.

input.input_module_id
string

Identifier of the selected source entity in the create form.

Destination
output.output_type
string

Dashboard label: Target Output.

This module pins the output side to OUTPUT_TYPE_NDI_DEVICE.

output.output_settings.ndi_device_name
string

Dashboard label: NDIĀ® Device Name.

Name of the Cloud NDI output device to create.

output.output_settings.timestamp_offset
integer

Dashboard label: Timestamp offset (ns).

Optional timestamp shift in nanoseconds.

output.output_settings.av_stream_control_mode
string

Dashboard label: AV Stream Control.

Controls whether the adapter should publish audio, video, or both.

Runtime
module_name
string

The UI saves this job as MODULE_NDI_ADAPTERS even though it uses the restream backend paths.

active
boolean

Dashboard label: Enable once created.

Controls whether the adapter should start active.

Create NDI adapter
curl --request POST \
--url http://localhost/api/restream/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": {
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"input_module_id": "66015d2997300f9385d32c00",
"input_stream_url": "",
"input_stream_listen_port": {},
"input_settings": {},
"input_stream_id": "",
"entity_name": "Camera 1 to Cloud NDI via SRT",
"module_name": "MODULE_RESTREAM"
},
"output": {
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"output_stream_url": "",
"output_stream_listen_port": {},
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"output_stream_key": "",
"entity_name": "Camera 1 to Cloud NDI via SRT",
"module_name": "MODULE_RESTREAM"
},
"module_name": "MODULE_NDI_ADAPTERS",
"active": true
}'
Response
Identity
_id / id / restream_name
mixed

Identifiers and the saved adapter name.

Source
input[]
array

Saved source definition for the adapter.

Destination
output[]
array

Saved NDI output definition for the adapter.

Runtime
module_name / active / created / modified
mixed

Module marker, active state, and backend-managed timestamps.

Operation result
success
boolean

The model exposes success: true for successful responses.

Response: Create NDI adapter
JSON
{
"_id": "67f200000000000000000001",
"id": "67f200000000000000000001",
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": [
{
"_id": "67f200000000000000000010",
"id": "67f200000000000000000010",
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"input_module_id": "66015d2997300f9385d32c00",
"module_name": "MODULE_RESTREAM"
}
],
"output": [
{
"_id": "67f200000000000000000020",
"id": "67f200000000000000000020",
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"module_name": "MODULE_RESTREAM"
}
],
"module_name": "MODULE_NDI_ADAPTERS",
"active": true,
"created": "2026-03-24T11:00:00.000Z",
"modified": "2026-03-24T11:00:00.000Z",
"success": true
}
Get NDI adapters count
Expand
POST
/api/restream/getCount

Use this with paginated adapter tables or quick bridge inventory checks.

It reports how many NDI adapter jobs are stored under MODULE_NDI_ADAPTERS.

Request body parameters
filter
object

NDI adapter list calls scope this to module_name: MODULE_NDI_ADAPTERS.

Get NDI adapters count
curl --request POST \
--url http://localhost/api/restream/getCount \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"filter": {
"module_name": "MODULE_NDI_ADAPTERS"
}
}'
Response
count
integer

Total number of saved NDI adapter jobs visible to the authenticated user.

Response: Get NDI adapters count
JSON
{
"count": 1
}
Get all NDI adapters
Expand
POST
/api/restream/getAll

Use this for operator dashboards and inventory views that need every saved NDI bridge job.

It lists adapter jobs through the standard restream store, filtered to MODULE_NDI_ADAPTERS, so the objects match the restream job shape.

Request body parameters
limit
integer

Optional page size for the adapter list.

skip
integer

Optional offset for paginated listing.

sort
object

Optional sort descriptor. The store defaults to { created: 1 }.

filter
object

Adapter listings filter to module_name: MODULE_NDI_ADAPTERS.

Get all NDI adapters
curl --request POST \
--url http://localhost/api/restream/getAll \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"limit": 10,
"skip": 0,
"sort": {
"created": 1
},
"filter": {
"module_name": "MODULE_NDI_ADAPTERS"
}
}'
Response
array of adapter objects
array

The backend returns a bare array of restream objects filtered to NDI adapters.

Response: Get all NDI adapters
JSON
[
{
"_id": "67f200000000000000000001",
"id": "67f200000000000000000001",
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": [
{
"_id": "67f200000000000000000010",
"id": "67f200000000000000000010",
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"input_module_id": "66015d2997300f9385d32c00",
"module_name": "MODULE_RESTREAM"
}
],
"output": [
{
"_id": "67f200000000000000000020",
"id": "67f200000000000000000020",
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"module_name": "MODULE_RESTREAM"
}
],
"module_name": "MODULE_NDI_ADAPTERS",
"active": true,
"created": "2026-03-24T11:00:00.000Z",
"modified": "2026-03-24T11:00:00.000Z",
"success": true
}
]
Get NDI adapter by id
Expand
POST
/api/restream/getById

Use this when an operator opens one NDI bridge for inspection, editing, or controlled restart.

It loads the saved source mapping, NDI output settings, and active intent for that adapter.

Request body parameters
id
string

Identifier of the adapter job you want to load.

Get NDI adapter by id
curl --request POST \
--url http://localhost/api/restream/getById \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "67f200000000000000000001"
}'
Response
adapter object
object

The populated restream-backed adapter object.

Response: Get NDI adapter by id
JSON
{
"_id": "67f200000000000000000001",
"id": "67f200000000000000000001",
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": [
{
"_id": "67f200000000000000000010",
"id": "67f200000000000000000010",
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"input_module_id": "66015d2997300f9385d32c00",
"module_name": "MODULE_RESTREAM"
}
],
"output": [
{
"_id": "67f200000000000000000020",
"id": "67f200000000000000000020",
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"module_name": "MODULE_RESTREAM"
}
],
"module_name": "MODULE_NDI_ADAPTERS",
"active": true,
"created": "2026-03-24T11:00:00.000Z",
"modified": "2026-03-24T11:00:00.000Z",
"success": true
}
Update NDI adapter
Expand
POST
/api/restream/update

Use this when the bridge is already provisioned and you need to repoint the source, adjust NDI output settings, or change its active intent.

The adapter stays on the same restream-backed contract under MODULE_NDI_ADAPTERS, so you can revise the bridge without replacing it.

Request body parameters
id
string

Identifier of the adapter job being updated.

adapter payload fields
mixed

The update contract mirrors create and stays on the restream-backed payload shape.

Update NDI adapter
curl --request POST \
--url http://localhost/api/restream/update \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"restream_name": "Camera 1 to Cloud NDI updated",
"input": {
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"input_module_id": "66015d2997300f9385d32c00",
"input_stream_url": "",
"input_stream_listen_port": {},
"input_settings": {},
"input_stream_id": "",
"entity_name": "Camera 1 to Cloud NDI via SRT",
"module_name": "MODULE_RESTREAM"
},
"output": {
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"application": "IO_APPLICATION_CALLABA_CLOUD_INGRESS_API",
"output_stream_url": "",
"output_stream_listen_port": {},
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"output_stream_key": "",
"entity_name": "Camera 1 to Cloud NDI via SRT",
"module_name": "MODULE_RESTREAM"
},
"module_name": "MODULE_NDI_ADAPTERS",
"active": false,
"id": "67f200000000000000000001"
}'
Response
updated adapter object
object

The backend returns the updated adapter object.

Response: Update NDI adapter
JSON
{
"_id": "67f200000000000000000001",
"id": "67f200000000000000000001",
"restream_name": "Camera 1 to Cloud NDI updated",
"input": [
{
"_id": "67f200000000000000000010",
"id": "67f200000000000000000010",
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"input_module_id": "66015d2997300f9385d32c00",
"module_name": "MODULE_RESTREAM"
}
],
"output": [
{
"_id": "67f200000000000000000020",
"id": "67f200000000000000000020",
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"module_name": "MODULE_RESTREAM"
}
],
"module_name": "MODULE_NDI_ADAPTERS",
"active": false,
"created": "2026-03-24T11:00:00.000Z",
"modified": "2026-03-24T11:15:00.000Z",
"success": true
}
Start NDI adapter
Expand
POST
/api/restream/start

Use this at show start or handoff when a saved source should become available on the network as an NDI device.

It activates the existing bridge job without changing its configuration, which makes it a good fit for button-driven operator workflows.

Request body parameters
id
string

Identifier of the adapter job to start.

Start NDI adapter
curl --request POST \
--url http://localhost/api/restream/start \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "67f200000000000000000001"
}'
Response
started adapter object
object

The backend marks the adapter as active and returns the updated object.

Response: Start NDI adapter
JSON
{
"_id": "67f200000000000000000001",
"id": "67f200000000000000000001",
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": [
{
"_id": "67f200000000000000000010",
"id": "67f200000000000000000010",
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"input_module_id": "66015d2997300f9385d32c00",
"module_name": "MODULE_RESTREAM"
}
],
"output": [
{
"_id": "67f200000000000000000020",
"id": "67f200000000000000000020",
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"module_name": "MODULE_RESTREAM"
}
],
"module_name": "MODULE_NDI_ADAPTERS",
"active": true,
"created": "2026-03-24T11:00:00.000Z",
"modified": "2026-03-24T11:20:00.000Z",
"success": true
}
Stop NDI adapter
Expand
POST
/api/restream/stop

Use this to withdraw an NDI device from the network while keeping the saved bridge ready for later reuse.

It is the normal operational companion to start when the feed should go dark but the adapter configuration should stay intact.

Request body parameters
id
string

Identifier of the adapter job to stop.

Stop NDI adapter
curl --request POST \
--url http://localhost/api/restream/stop \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "67f200000000000000000001"
}'
Response
stopped adapter object
object

The backend marks the adapter as inactive and returns the updated object.

Response: Stop NDI adapter
JSON
{
"_id": "67f200000000000000000001",
"id": "67f200000000000000000001",
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": [
{
"_id": "67f200000000000000000010",
"id": "67f200000000000000000010",
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"input_module_id": "66015d2997300f9385d32c00",
"module_name": "MODULE_RESTREAM"
}
],
"output": [
{
"_id": "67f200000000000000000020",
"id": "67f200000000000000000020",
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"module_name": "MODULE_RESTREAM"
}
],
"module_name": "MODULE_NDI_ADAPTERS",
"active": false,
"created": "2026-03-24T11:00:00.000Z",
"modified": "2026-03-24T11:25:00.000Z",
"success": true
}
Remove NDI adapter
Expand
DELETE
/api/restream/remove

Use this to retire an NDI bridge that should no longer appear in operator workflows or be started again.

Because adapters are restream-backed, removal follows the normal job lifecycle; delete only after the NDI output is no longer needed on the network.

Query parameters
id
string

Identifier of the adapter job to delete.

Remove NDI adapter
curl --request DELETE \
--url http://localhost/api/restream/remove \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"id": "67f200000000000000000001"
}'
Response
removed adapter object
object

The docs use the previously loaded adapter object as the reference shape for a successful remove flow.

Response: Remove NDI adapter
JSON
{
"_id": "67f200000000000000000001",
"id": "67f200000000000000000001",
"restream_name": "Camera 1 to Cloud NDI via SRT",
"input": [
{
"_id": "67f200000000000000000010",
"id": "67f200000000000000000010",
"input_type": "INPUT_TYPE_SRT_SOFTWARE",
"input_module_id": "66015d2997300f9385d32c00",
"module_name": "MODULE_RESTREAM"
}
],
"output": [
{
"_id": "67f200000000000000000020",
"id": "67f200000000000000000020",
"output_type": "OUTPUT_TYPE_NDI_DEVICE",
"output_settings": {
"ndi_device_name": "Cloud NDI Camera 1",
"timestamp_offset": 0,
"av_stream_control_mode": "AV_STREAM_CONTROL_VIDEO_AUDIO"
},
"module_name": "MODULE_RESTREAM"
}
],
"module_name": "MODULE_NDI_ADAPTERS",
"active": true,
"created": "2026-03-24T11:00:00.000Z",
"modified": "2026-03-24T11:00:00.000Z",
"success": true
}
Get NDI adapter stat
Expand
POST
/api/restream/getStat

Use this during live operations when you need to know whether the NDI bridge is actually running and moving media.

It reads the live process status rather than the saved job definition, which makes it the right check before or during a show.

Request body parameters
This method has no parameters
Get NDI adapter stat
curl --request POST \
--url http://localhost/api/restream/getStat \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{}'
Response
processData[]
array

Current process-stat rows used by the adapter listing and operational checks.

processData[].bitrate / bitrate_kbits
mixed

Current runtime bitrate values for the adapter process.

processData[].fps / speed / progress
mixed

Current FFmpeg-style progress values for the running bridge.

Response: Get NDI adapter stat
JSON
[
{
"processData": {
"id": "67f200000000000000000001",
"bitrate": "3200.5kbits/s",
"bitrate_kbits": 3200,
"fps": "30",
"speed": "1.00x",
"progress": "continue"
}
}
]