This guide walks you through your first session with Synapse: discovering devices on your network, reviewing and approving them, creating your first signal route, and saving a show profile.
Before you begin, ensure you have:
technician roleDiscovery scans your network for devices across all supported protocols. Start by scanning the protocols relevant to your facility.
const response = await fetch('/api/ncp/discovery', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`,
},
body: JSON.stringify({
protocols: ['mdns', 'dante_discovery', 'usb_enumeration'],
}),
});
const { data: session } = await response.json();
// session.id = UUID of the discovery session
// session.status = 'running'
You can optionally limit discovery to specific network segments by passing segment_ids:
body: JSON.stringify({
protocols: ['mdns', 'dante_discovery'],
segment_ids: ['segment-uuid-1', 'segment-uuid-2'],
})
The session runs asynchronously. Poll the discovery session endpoint to check progress:
const statusResponse = await fetch(`/api/ncp/discovery/${session.id}`, {
headers: { 'Authorization': `Bearer ${accessToken}` },
});
const { data: updatedSession } = await statusResponse.json();
// updatedSession.status = 'completed' | 'running' | 'failed'
// updatedSession.devices_found = number of new devices detected
After discovery completes, list all devices to see what was found:
const devicesResponse = await fetch('/api/ncp/devices?sort_by=created_at&sort_order=desc', {
headers: { 'Authorization': `Bearer ${accessToken}` },
});
const { data } = await devicesResponse.json();
// data.data = array of NCPDevice objects
// data.total = total count
// data.has_more = whether more pages exist
Newly discovered devices that require approval appear with approved: false and status: 'pending_approval'. Filter for unapproved devices:
const pendingResponse = await fetch('/api/ncp/devices?approved=false&status=pending_approval', {
headers: { 'Authorization': `Bearer ${accessToken}` },
});
Each device includes:
| Field | Description |
|---|---|
display_name | Human-readable name (auto-populated from discovery) |
device_class | One of 18 device classifications |
ip_address | Network address (if applicable) |
health_score | 0-100 health rating |
discovery_method | How the device was found (mdns, dante_discovery, etc.) |
capabilities | JSON object describing video/audio/PTZ/tally support |
Approve a pending device to make it available for routing:
const approveResponse = await fetch(`/api/ncp/devices/${deviceId}/approve`, {
method: 'POST',
headers: { 'Authorization': `Bearer ${accessToken}` },
});
After approval, the device status transitions from pending_approval to online (or offline if it is no longer reachable).
Connect a source device to a destination device by creating a signal route:
const routeResponse = await fetch('/api/ncp/routing', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`,
},
body: JSON.stringify({
source_device_id: 'source-uuid',
source_port: 'output_1',
source_protocol: 'ndi',
dest_device_id: 'dest-uuid',
dest_port: 'input_1',
dest_protocol: 'ndi',
signal_type: 'video',
}),
});
const { data: route } = await routeResponse.json();
// route.id = UUID of the new route
// route.status = 'active'
Before creating a route, you can validate compatibility:
const validateResponse = await fetch('/api/ncp/routing/validate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`,
},
body: JSON.stringify({
source: { device_id: 'source-uuid', port: 'output_1', protocol: 'ndi' },
dest: { device_id: 'dest-uuid', port: 'input_1', protocol: 'srt' },
}),
});
const { data: validation } = await validateResponse.json();
// validation.compatible = true/false
// validation.requires_bridge = true (NDI -> SRT needs MXL bridge)
// validation.bridge_type = 'ndi_to_srt'
// validation.estimated_latency_ms = 15
Once your routes are configured, save the current state as a show profile for future recall. Show profile creation is available through the Synapse UI or the API (see Show Profiles for details).
| Goal | Documentation |
|---|---|
| Understand all 18 device classes | Device Management |
| Build complex signal flows | Signal Routing |
| Configure network segments and VLANs | Network Topology |
| Set up automated discovery schedules | Discovery Engine |
| Control access with roles | Access Control |
| Integrate with the API programmatically | API Reference |