WINK-SecurityCenterTools-Setup-0.9.0.0.exe contains both the APIBridge Metro GUI and the WINKSCData console — pick the components you want during setup. For deployment questions email support@wink.co.
Version 0.9 is the largest functional release of APIBridge Metro since the original public build. It introduces a shared credentials file, a combined installer that bundles the GUI and the headless console, a dynamic SDK version display, and an entire new family of Decoder Tools views that move the product from a "browse and rename" utility into an end-to-end commissioning and routing-repair console.
users.json credentials file — both the GUI and the headless console read a shared JSON credentials file from the EXE folder (portable) or %APPDATA%\WINKStreaming\users.json (per-user). The GUI exposes a new Save Credentials button on the Connect view; the console fills missing -h / -u / -p arguments from the file, with command-line arguments always taking precedence.Engine.ProductVersion (e.g. SDK 5.11.0.0) instead of a hardcoded value. This makes mistaken-DLL situations visible at a glance.ActionManager.DisplayOnAnalogMonitor and RemoveFromAnalogMonitor calls. Closes the historical gap between "monitor name says camera X" and "camera X is actually routed there".NAME, GUID CSV, validate, capacity-check, preview, and apply across hundreds of monitors in one sweep.state all queries (port 5602) that bypass the SDK, and a multi-session bulk exporter for the fastest possible pull on healthy servers.v0.9 is a fresh install on top of the previous v0.7 builds — there is no in-place upgrade from the standalone console-only installer of earlier releases. The user-edited users.json and the DPAPI-encrypted Windows Service settings are not destroyed by uninstall, so re-installing v0.9 in a different folder preserves both.
APIBridge Metro is the WPF graphical operator console for the WINK Streaming Security Center toolset. It connects to Genetec Security Center over the official Genetec SDK and gives operators and integrators a single console for browsing entities, fixing decoder/camera bindings, syncing monitor names, exporting Forge XML for downstream WINK products, and configuring an optional WINKSCDataMonitor Windows Service for unattended change-notification.
This manual is written for operators and integrators who already understand Genetec Security Center concepts (cameras, video units, analog monitors, partitions, the SDK login flow) but need a concrete walk-through of how APIBridge Metro fits in. If you are new to Security Center, work through sections 1–8 in order: the Genetec configuration material in section 6 is the prerequisite for everything that follows.
{install} placeholders refer to the install root (default C:\Program Files\WINKStreaming\SecurityCenterTools).%APPDATA%, %USERPROFILE%) are written with Windows percent-syntax.ActionManager.DisplayOnAnalogMonitor) are written as code spans so they can be searched for in Genetec's own SDK documentation.WF### refers to the WINK Forge analog-monitor pattern WF001, WF002, etc.users.json credentials — write once via the GUI, read by both GUI and console; per-user or portable.APIBridge Metro is designed for:
| Component | Version |
|---|---|
| APIBridge Metro | 0.9.0.0 |
| WINKSCData (console sibling) | 0.9.0.0 |
| Target framework | .NET Framework 4.8 |
| Genetec SDK shipped with GUI build | 5.11.x |
| Genetec SDK shipped with Console build | 5.9.x |
| Supported Security Center server versions | 5.9, 5.10, 5.11, 5.11.3, 5.12 |
The WINK Security Center Tools package is intentionally structured as two cooperating applications that share state through three contracts:
users.json credentials file (per-user or portable).--forge.DisplayOnAnalogMonitor, RemoveFromAnalogMonitor, name changes).| Application | Audience | SDK shipped | Use case |
|---|---|---|---|
| APIBridge Metro | Operators and integrators | 5.11 | Interactive browse, fix, rename, configure the Service. |
| WINKSCData (console) | Scripted / scheduled-task / CI use | 5.9 | Headless --forge, --comparenames, --applyassociations, --reassociate. |
| WINKSCDataMonitor (service) | Unattended deployments | (uses console's 5.9 SDK) | Scheduled Forge export every 20 minutes, diff vs previous, email or HTTP POST on change. |
The two applications can run simultaneously on the same machine — each opens its own SDK session — and they do not share JSONL caches. The console writes to its current working directory; the GUI writes to %USERPROFILE%\Documents. This intentional separation prevents a long-running console job from invalidating a cache the GUI is reading mid-operation.
Area.AnalogMonitors / Area.AddAnalogMonitor APIs that the Organize Areas view depends on. Splitting the two applications across the two SDK versions lets the console keep working against legacy 5.9 servers while the GUI gets the modern Area APIs against current 5.11+ deployments.
| Component | Minimum | Notes |
|---|---|---|
| Operating system | Windows 10 1809 (build 17763), x64 | Windows Server 2019 and newer also supported; older OS is no longer tested. |
| .NET Framework | 4.8 | Pre-installed on Windows 10 1809+ and all Windows 11. Older OS needs the Microsoft redistributable. |
| Visual C++ 2019/2022 Redistributable (x64) | Latest | Required by the CefSharp browser embedded in the GUI's snapshot viewer. The installer does not yet chain it. |
| Disk | ~350 MB | GUI + console + dependencies. JSONL caches and Forge XML in Documents can grow large. |
| Memory | 2 GB free | Higher recommended on deployments exceeding 1,000 monitors. |
| CPU | Any x64 dual-core | Bulk operations are I/O-bound on the SDK, not CPU-bound. |
| Network | TCP 5500 to Security Center server | Default Genetec SDK port. Extract Archive State also needs TCP 5602. |
GSC-1SDK-WINK-FORGE (or any other SDK-enabled license).C:\Program Files and (optionally) register a Windows Service.Test-NetConnection -ComputerName <sc-host> -Port 5500 should succeed.WINK-SecurityCenterTools-Setup-0.9.0.0.exe from the link at the top of this page (or from wink.co/binaries/).C:\Program Files\WINKStreaming\SecurityCenterTools).--forge) — the command-line tool.users.json — see section 7.Version 0.9.0.0) and the loaded SDK version (e.g. SDK 5.11.0.0).APIBridge.Metro v0.9.0.0 starting up and an SDK initialization line.C:\Program Files\WINKStreaming\SecurityCenterTools\ ├── Metro\ │ ├── APIBridge.Metro.exe │ ├── APIBridge.Metro.exe.config │ ├── users.json (blank by default) │ ├── Genetec.Sdk.dll (5.11.x) │ ├── MahApps.Metro.dll │ ├── CefSharp.*.dll (snapshot viewer) │ └── ... ~315 supporting files ├── Console\ │ ├── WINKSCData.exe │ ├── WINKSCData.exe.config │ ├── users.json (blank by default) │ ├── Genetec.Sdk.dll (5.9.x) │ └── ... ~155 supporting files └── USERS-JSON-README.txt
Two distinct Genetec SDK assemblies ship inside the installer — one next to the GUI (SDK 5.11) and one next to the console (SDK 5.9). They cannot share an install folder because Genetec.Sdk.dll is loaded by name from the same directory as the EXE.
This split exists for a reason:
Area.AnalogMonitors / Area.AddAnalogMonitor APIs that only exist in SDK 5.11+.If you connect the GUI to a Security Center 5.9 server, everything except the Organize Areas view works; the Areas view is automatically hidden in that case to avoid confusion.
Standard Add or Remove Programs entry: WINK Streaming — Security Center Tools 0.9.0.0. Uninstall preserves:
users.json files (in both {install}\Metro\/{install}\Console\ and %APPDATA%\WINKStreaming\)%USERPROFILE%\Documents%APPDATA%\WINKStreaming\APIBridge\settings.encryptedThe installed WINKSCDataMonitor service, if present, is stopped and removed during uninstall via sc.exe delete.
Before APIBridge Metro can connect to your Security Center server, three things have to be in place on the Genetec side: an SDK-enabled user account, the right privileges on that account's role, and (optionally but strongly recommended) a partition that scopes what the SDK user can see and modify. This section walks through each step in Config Tool, screenshot by screenshot.
APIBridge Metro requires a dedicated SDK user account. Do not reuse a Security Desk operator account or an administrative account for SDK access — a dedicated account makes the audit trail clean, lets you rotate the SDK password independently, and lets you revoke SDK access without disrupting normal operations.
winkSDK (recommended) or a name consistent with your organization's conventions.users.json in plain text.users.json at the same time the SDK password rotates.
Before granting privileges, verify the account itself is usable:
winkSDK username, and the password you set.At this stage the test should succeed at the connection level but the next sections (browse, decoders, etc.) will be empty because no privileges are granted yet. That is the correct state — proceed to section 6.2.
The SDK user inherits privileges from its assigned role. The simplest production pattern is to create a dedicated role (e.g. WINK SDK Role) and add the winkSDK user to it, so privilege adjustments do not need to be re-applied per-user as your team scales.
| Permission Category | Specific Permission | Purpose |
|---|---|---|
| General | Log on using the SDK | Required for SDK authentication. Without this, nothing else works. |
| Entities | View all entity types | Access cameras, monitors, video units, areas, partitions. |
| Video | View video units | Required for IP and MAC address retrieval. Blank IP/MAC in exports almost always indicates this is missing. |
| Video | View cameras | List and inspect cameras (model, resolution, codec, GPS). |
| Video | View analog monitors | Access decoder information. Required for everything in the Decoder Tools section. |
| Video | Modify analog monitor properties | Update monitor Name and Description. Required for Associate Monitors, Sync Decoder Names, Bulk CSV Association. |
| Hardware | View hardware configuration | Access IP and MAC addresses on Video Units. This is the privilege most often missing on restricted SDK accounts. |
| Actions | Display camera on analog monitor | Required for Apply Associations, Reassociate Unit, Bulk CSV Association write paths. |
| Actions | Remove camera from analog monitor | Required for Reassociate Unit and the "Reassociate" buttons in Apply Associations. |
| Partitions | Add member to partition | Required only for the Add to Partition view. |
| Custom Fields | View custom fields | Required only if you rely on custom attributes in the Forge XML output. |
| Geographic | View geographical locations | Required for GPS coordinates on map-aware cameras. |
winkSDK user).
Once privileges are applied, re-run APIBridge Metro's Connectivity & Permissions verification (section 8.2). The tool will tell you, per privilege, what the SDK user can and cannot see, which is far faster than guessing from a partial export.
For production deployments we strongly recommend creating a dedicated partition for the WINK SDK user. Partitions scope what entities a user can see and act on, and they are the right way to limit blast radius if the SDK credentials are ever compromised or misconfigured.
winkStreamingwinkSDK user.winkStreaming partition to the user's accessible partitions.
The partition is empty by default. Move the entities the SDK user should manage into it:
winkStreaming" — so it does not get lost during a future audit.
If you are using analog monitors (virtual decoders, in Genetec parlance), the way you name them in Security Center directly affects how every Decoder Tools view in APIBridge Metro behaves. This section covers the conventions APIBridge Metro is designed around.
Analog monitors are created against a Video Unit (archiver) in Config Tool. Each monitor represents one "decoder slot" the archiver can route a camera to.
APIBridge Metro's Associate Monitors Evenly, Sync Decoder Names, and Bulk CSV Association views all assume a structured naming convention. The reference pattern used throughout the WINK Forge ecosystem is:
WF###
Where ### is a zero-padded three-digit number (WF001, WF002, … WF999). After APIBridge Metro associates a camera with a monitor, the monitor name takes the canonical form:
{CameraName} - {WF###}-{UdpPort}
For example: Front Entrance - WF301-8001 where 8001 is the monitor's UDP port.
This convention has three benefits:
WF###-{port} fragment lets the console's --applyassociations mode and the GUI's Apply Associations view rediscover the intended routing from the monitor name alone, even after a routing wipe.
When you trigger a rename operation in APIBridge Metro (for example via Sync Decoder Names or Associate Monitors Evenly), Security Center may prompt to rename related devices if the monitor is part of a multi-decoder unit. The dialog looks like this:
After the operation completes, the monitor list reflects the new names immediately:
Original:. This means you can always recover the historical name without consulting an external log.
By convention, monitor UDP ports are assigned sequentially starting at a base (commonly 15000 or 8000) per Video Unit. The deterministic ordering used by Bulk CSV Association is (IP, UDP) ascending — so when CSV input cameras are paired with empty monitors, they go to the lowest-numbered free slot on the lowest-IP unit first. If you want a different ordering, sort the CSV before loading it.
users.jsonBoth APIBridge Metro and the WINKSCData console can read a users.json file at startup so operators do not have to retype host, username, and password every launch. The file is shared between the two applications — write it once via the GUI and the console uses it next time you run a scripted job.
The file is searched for in two locations, first match wins:
{install}\Metro\users.json{install}\Console\users.json%APPDATA%\WINKStreaming\users.json — shared by both apps; this is the path the GUI's Save Credentials button writes to.The two locations are independent. A portable users.json next to the EXE wins over the per-user one — useful when you want to override a saved per-user credential for a specific deployment without disturbing the operator's saved login.
{
"host": "10.18.183.20",
"username": "YOUR_SDK_USER",
"password": "YOUR_PASSWORD",
"useDemoCertificate": false
}
| Field | Type | Notes |
|---|---|---|
host | string | IP or DNS name of the Genetec Security Center server. |
username | string | SDK-enabled account (must have Log on using the SDK privilege). |
password | string | Plain text password. |
useDemoCertificate | boolean | true for the Genetec demo certificate, false for production. |
A blank template ships in this package and in the installer's USERS-JSON-README.txt.
The credentials are written to %APPDATA%\WINKStreaming\users.json. The current source path is shown under the buttons as Credentials source: <path> so you always know where the prefilled values came from. On the next launch the fields are pre-filled automatically.
The console always honors command-line arguments first; users.json only fills in whatever was not passed on the command line. This preserves scripted use — a scheduled job can override a saved credential without disturbing the file.
| Command line | users.json | Effective values |
|---|---|---|
-h X -u Y -p Z (all three) | (anything) | Uses CLI values; --democert only if passed. |
-h X only | has username, password, useDemoCertificate | Uses CLI host + file user / pass / cert. |
| (none) | complete | Uses file values. |
| (none) | empty | Console exits with code 2 and prints the schema example. |
users.json stores credentials in plain text. It inherits NTFS permissions from %APPDATA%, which is per-user by default on standard Windows installations — that is, by default another standard user on the same machine cannot read it, but anyone with administrative privileges can.
If stronger protection is required:
users.json is plain text by design. It is convenient for operators but is not a replacement for DPAPI-encrypted storage in production unattended deployments. The Windows Service uses DPAPI; if you need DPAPI for interactive use, do not save credentials.
On first launch, APIBridge Metro presents the main interface with the following components:
Version 0.9.0.0), the actually loaded Genetec SDK version (e.g. SDK 5.11.0.0), and a live connection pill (red = not connected, green = connected).Test-NetConnection -ComputerName <sc-host> -Port 5500.Before attempting to connect and perform operations, use the Connectivity & Permissions view to ensure the environment is correctly configured. This single view diagnoses 90 % of new-deployment issues before they become support tickets.
winkSDK).
| Test Item | Expected Result | If Failed |
|---|---|---|
| Connection Status | Connected | Check server address, network, firewall, port 5500. |
| View Cameras | Permitted | Grant View cameras on the SDK user's role. |
| View Analog Monitors | Permitted | Grant View analog monitors. Without it, every Decoder Tools view returns empty. |
| View Video Units | Permitted | Critical for IP addresses — grant View video units. |
| View Hardware Configuration | Permitted | Required for MAC addresses and unit IP retrieval. |
| Modify Analog Monitor | Permitted | Required for monitor association and rename operations. |
| View All Entity Types | Permitted | Covers Areas, Partitions, custom entities used in advanced views. |
If you adjust privileges in Config Tool after a failed verification, you do not need to restart APIBridge Metro. Click Run Verification again — the SDK rechecks privileges live on the existing session.
After verifying connectivity, proceed to the Connect view to establish a full session that the rest of the application can use.
%APPDATA%\WINKStreaming\users.json.LogOn (optional).Connecting to <host>:5500… followed by Connected as <user>.%APPDATA%\WINKStreaming\users.json.| Error Message | Possible Cause | Solution |
|---|---|---|
| InvalidCredential | Wrong username or password | Verify in Config Tool. Try once without a domain prefix. |
| NetworkError | Cannot reach server | Check network reachability and firewall on port 5500. |
| SDKNotFound | Genetec SDK assemblies missing or blocked | Verify Genetec.Sdk.dll is present next to the EXE; right-click → Properties → Unblock if downloaded. |
| CertificateError | License or certificate issue | Verify the SDK license on the server; contact WINK support if persistent. |
| DeniedByFirewall | SC 5.11.3 per-second LogOn throttle | Wait 5 minutes; the throttle clears on its own. The tool retries automatically with backoff. |
The four Browse views are read-only — no writes happen here. Use them to inventory the deployment, validate SDK privileges, and identify discrepancies before touching anything with the Decoder Tools.
The List Cameras view provides a comprehensive grid of all cameras in your Security Center deployment that the SDK user has visibility into.
The List Decoders view displays every analog monitor (virtual decoder) the SDK user can see, with its current camera binding and the parent video unit's network identity.
| Field | Description |
|---|---|
| Monitor Name | Display name of the analog monitor. Follows the canonical {Camera} - WF###-{port} pattern after Sync Decoder Names runs. |
| UDP Port | Network port for the video stream destined to this slot. |
| Video Unit | Parent archiver name. |
| IP Address | Network address of the parent video unit (blank if the SDK user lacks View hardware configuration). |
| MAC Address | Hardware address of the parent video unit (same privilege requirement). |
| Connected Camera | Currently routed camera, or blank for unconnected slots. |
| Status | Online / Offline. |
| Running State | SDK-reported runtime state of the decoder. |
| Signal State | Current signal state (useful for spotting decoders with stuck streams). |
The List All Entities view provides a mixed-entity grid for ad-hoc exploration. Use it when you suspect an entity exists but cannot find it in any of the typed views (cameras, monitors, etc.) — it surfaces orphaned and atypical entities other views filter out.
For each entity, the following information is available:
The Review Data view provides a tabbed at-a-glance summary across Cameras, Monitors, and Associations. Use it as the single page to validate a deployment before signing off, or to brief a stakeholder on the current state without making them navigate three separate views.
Use this view to:
Decoder Tools is the operational heart of APIBridge Metro. Every view in this section can modify Security Center configuration. The tab order below mirrors the navigation menu, and the views are grouped roughly by intent: naming → routing → reconciliation → housekeeping.
Rename-only workflow. Distributes a set of cameras across a set of decoders by name pattern (the WF### convention) and writes the planned name into each AnalogMonitor's Name field. Does NOT actually route video — it just updates the names so an administrator can match them up manually in Security Desk, or so the console's --applyassociations mode (or the GUI's Apply Associations view) can later push the routing.
WF###.| Step | Action | Result |
|---|---|---|
| 1 | Click Preview Associations | See the proposed distribution table. |
| 2 | Review assignments | Verify each camera/monitor pair is sensible. |
| 3 | Enable Only WF-prefixed (if needed) | Filter to monitors matching the canonical pattern only. |
| 4 | Click Apply Associations | Updates monitor names; original names preserved in Description. |
After association, monitor names follow the canonical form:
{Camera Name} - {Monitor Prefix}{###}-{UDP Port}
Example: Front Entrance - WF301-8001
Finds analog monitors whose name does not match the connected camera and renames them to the canonical form {prefix}{Camera} - VF{N}-{cmdPort}-{udpPort}. Useful after manual routing changes in Security Desk to bring names back in sync with reality.
The view is resume-aware: rows already marked Renamed are skipped on re-click, so it survives a mid-run disconnect.
VD - ) — prepended to the canonical name.Actually pushes video routing via the SDK's ActionManager.DisplayOnAnalogMonitor and RemoveFromAnalogMonitor calls. Use this view when monitor names already correctly indicate which camera should be displayed, but the actual video stream is not on the monitor — typical after a server restart, a routing wipe, or a migration to new archivers.
Apply Associations parses the monitor name to find the camera fragment — anything before the WF### or VF{N}-{cmdPort}-{udpPort} trailing component. It then searches for a camera in Security Center whose name matches that fragment exactly (case-insensitive). If exactly one match exists, the routing is applied; if zero or multiple matches exist, the row is marked Ambiguous and skipped.
This is why the canonical naming convention from section 6.4 matters — it guarantees the parse is deterministic.
Upload a CSV with two columns (NAME, GUID), pick a scope, then walk through validate → preview → run. Designed for new-site commissioning where you have a master inventory from an external source (Excel, asset database, AutoCAD) and need to materialize it as Security Center routing in one sweep.
NAME,GUID Front Entrance,12345678-1234-1234-1234-123456789012 Parking Lot A,23456789-2345-2345-2345-234567890123 Loading Dock,34567890-3456-3456-3456-345678901234 ...
The GUID column is the camera's Security Center GUID. The NAME column is the camera display name (used in the resulting monitor name).
(IP, UDP) order. Shows the planned monitor → camera mapping.{prefix}{CSV name} - VF{N}-{cmdPort}-{udpPort}.Cancel/resume aware — rows already marked Done are skipped on re-click. A Refresh invalidated (N) pill appears whenever the SDK reports pending changes and lets you drain only the changed entries without a full re-query.
Finds analog monitors that are duplicates within the same VideoUnit — multiple monitors with overlapping camera assignments or identical UDP-port-plus-name pairings — and lets you clean them up.
Each group expands to show the monitors involved with their camera thumbnails so you can confirm before destructive action.
Per-unit "disassociate then reassociate" sweep. For every AnalogMonitor on the selected unit (or All Units): logs the current camera GUID, calls RemoveFromAnalogMonitor, then immediately calls DisplayOnAnalogMonitor with the same camera.
Use this when the entire unit's routing is out of sync after a network event. The live operation log shows GUID-level activity so you can confirm what is happening in real time. Safer than a manual reboot of the archiver because it preserves the existing camera-to-monitor mapping rather than relying on Security Center to re-derive it.
For each camera in scope: saves the current PreferredConnectionType, switches to BestAvailable (or Unicast if already on BestAvailable), dwells N seconds (configurable, default 5), then restores the original setting. Useful for forcing a renegotiation on cameras whose RTSP stream has stuck.
This is a common remediation for "the camera shows but the video is frozen" — toggling the connection type forces a fresh RTSP DESCRIBE/SETUP/PLAY cycle, which usually clears the stuck-pipeline state without a hard reboot.
Lists analog monitors without a connected camera — the "virtual decoder" slots. Renames them to a virtual-decoder format that includes the unit IP, command port, and UDP port, so they are identifiable in Security Desk even when nothing is routed to them.
CSV export available for tracking commissioning progress over time.
Identifies decoders whose currently displayed camera differs from the camera named in the monitor's Name field. Useful when routing has drifted from documented intent — every row tells you what is named versus what is actually displayed, with both camera details side by side. Read-only — the fix lives in Apply Associations or Reassociate Unit depending on whether one row or many rows are wrong.
Two-list (Available / Staged) editor. Adds cameras and the parent VideoUnit of selected AnalogMonitors to a target partition.
Partition.AddMember requires IPartitionSupport, which AnalogMonitor does not implement. The tool transparently substitutes the parent VideoUnit when you stage a monitor — which adds every sibling camera/monitor on that unit too. This is documented per-row in the Result column so there are no surprises.
Bulk-assigns analog monitors into Area entities, optionally creating a nested area hierarchy in the process. The view auto-generates area names from monitor IPs (e.g. Site - 162.249.44.30) so each archiver gets its own area without manual typing.
Hidden on the SDK 5.9 build because Area.AnalogMonitors and Area.AddAnalogMonitor do not exist in SDK 5.9. If the tab is missing from your install, install the SDK 5.11 component via the combined installer.
Every Decoder Tools view inherits a small set of shared patterns. Learning them once means every new view is immediately familiar.
Documents. Instant, no SDK calls. Use this for fast navigation when you already have a recent cache.Where applicable, the scope dropdown offers three levels:
** ALL on 162.249.44.100 **) — every entity on a given archiver IP.Generates GenetecForge_<timestamp>.xml in Documents. Matches the console's --forge format exactly — the downstream WINK Forge and Media Router products consume both interchangeably. Three button groups:
%USERPROFILE%\Documents and feed the cache-first Discover paths in the Decoder Tools tabs.Raw TCP state all query against each discovered decoder unit on port 5602. Per-unit text dumps plus a single appended CSV at Documents\WINKStreaming\ArchiveExtracts\archive_extract_log.csv.
This view bypasses the Genetec SDK entirely (it opens a TCP socket directly), so it keeps working through SDK disconnects. Settings (port, command, timeout, CSV path) are snapshotted at the start of each batch so mid-run edits cannot corrupt the run.
Use it when you need to compare what the archiver reports about itself with what Security Center reports about the archiver — divergence between the two is a common root cause of "the SDK says everything is fine but operators see broken video" tickets.
Spins up multiple independent SDK sessions in parallel (default 4) and distributes the four export jobs (AnalogMonitors / Cameras / VideoUnits / Forge XML) across them. Output goes to separate *_parallel_<ts>.jsonl files so it never collides with the single-session dumps.
Use this for the fastest possible bulk pull on a healthy server. Drop the parallel session count to 2 if you are seeing DeniedByFirewall errors on SC 5.11.3 — the throttle is per-second LogOn frequency, not total session count.
The Settings view is read-only — it shows you exactly which Genetec SDK assembly is loaded, where it was loaded from on disk, and when it was built. Use it as the first stop when reporting an issue: a screenshot of this view tells support what build of the SDK is actually running, which often diagnoses the problem before any back-and-forth.
Engine.ProductVersion reported by the loaded Genetec.Sdk.dll.The optional WINKSCDataMonitor Windows Service performs the same --forge export on a schedule (default every 20 minutes), compares it against the previous run, and sends an email or HTTP POST when entities change. Use it for unattended change-detection in production deployments.
%APPDATA%\WINKStreaming\APIBridge\settings.encrypted.sc.exe to register the service with automatic startup.| Property | Value |
|---|---|
| Service name | WINKSCDataMonitor |
| Display name | WINK Security Center Data Monitor |
| Startup type | Automatic |
| Run as | Local System (default; configurable post-install via services.msc) |
| Check interval | 20 minutes (configurable) |
| Settings storage | %APPDATA%\WINKStreaming\APIBridge\settings.encrypted (DPAPI) |
| Forge XML output | %PROGRAMDATA%\WINKStreaming\Service\ForgeExports\ |
Configure email delivery for change notifications:
If you do not have your own SMTP relay, the WINK Streaming default works out of the box:
| Setting | Value |
|---|---|
| Server | mail.wink.co |
| Port | 587 |
| Username | winkscdata@wink.co |
| Encryption | STARTTLS |
| CC | apifeed@wink.co (so WINK can support you if change-detection misfires) |
Configure HTTP POST delivery to a WINK Media Router endpoint (or any compatible HTTP receiver). This is the standard delivery method for production WINK Forge deployments.
https://router.example.com/api/genetec).application/xml.POST /api/genetec HTTP/1.1
Host: your-media-router.example.com
Content-Type: application/xml
X-Auth-Key: [128-character-key]
<?xml version="1.0"?>
<signature>[authentication-key]</signature>
<wink>
<!-- Genetec data XML — same Forge schema as section 11.1 -->
</wink>
The receiving Media Router validates the signature against its configured key, then accepts or rejects the payload. The full Forge XML body lets the Router rebuild its internal camera registry on every change rather than diffing — simpler and more robust than a delta protocol.
Once installed, the following buttons become available in the same tab:
| Button | Function | Requirements |
|---|---|---|
| Start Service | Starts the monitoring service | Service must be stopped |
| Stop Service | Stops the monitoring service | Service must be running |
| Restart Service | Stops and starts the service | Service must be installed |
| Uninstall Service | Removes the service via sc.exe delete | Service must be stopped |
Service activity is logged to the Windows Event Log:
eventvwr.msc).WINKSCDataMonitor.Each cycle also writes a structured run summary to %PROGRAMDATA%\WINKStreaming\Service\Logs\service-<date>.log — text format, useful for sweeping with findstr or grep from PowerShell.
One-page cheat sheet for the privileges APIBridge Metro requires. Use this when handing requirements to a Genetec administrator who does not need the full context of section 6.
| Privilege | Required for |
|---|---|
| Log on using the SDK | Everything (gate) |
| View cameras | List Cameras, all Decoder Tools, Forge export |
| View analog monitors | List Decoders, all Decoder Tools, Forge export |
| View video units | IP address retrieval, Decoder Tools scope picker |
| View hardware configuration | MAC address retrieval, all unit-level operations |
| View areas | Organize Areas, List All Entities |
| View partitions | Add to Partition, List All Entities |
| Modify analog monitor name/description | Associate Monitors Evenly, Sync Decoder Names, Bulk CSV Association, Unconnected Decoders rename |
| Display camera on analog monitor | Apply Associations, Bulk CSV Association write, Reassociate Unit |
| Remove camera from analog monitor | Reassociate Unit, Reassociate Selected/All in Apply Associations |
| Add member to partition | Add to Partition |
| Modify camera (PreferredConnectionType) | Camera Stream Cycler |
| Issue | Symptoms | Solution |
|---|---|---|
| Cannot connect to Security Center | Connection fails immediately or hangs at "Connecting…" |
|
| InvalidCredential | Authentication fails on Connect |
|
| DeniedByFirewall | Retried LogOn attempts fail with throttle error |
|
| CertificateError | License validation fails |
|
| Issue | Symptoms | Solution |
|---|---|---|
| Missing IP addresses | Blank IP/MAC in decoders or Forge export |
|
| No cameras visible | Empty camera list |
|
| Cannot update monitors | Association fails or rename rejected |
|
| Bulk Refresh returns a partial list | Some monitors missing from the grid after a refresh |
|
| "Organize Areas" tab missing | Tab is not visible in the navigation |
|
| CefSharp / snapshot viewer fails | Error opening camera snapshot |
|
| Issue | Symptoms | Solution |
|---|---|---|
| Service will not install | Installation fails or UAC errors out |
|
| Service stops unexpectedly | Status shows Stopped without manual intervention |
|
| No email notifications received | Changes are happening but no emails arrive |
|
| HTTP POST returns 401 | Media Router rejects the change notification |
|
The Activity Log panel at the bottom of the application provides real-time diagnostic information:
To use it effectively when reproducing an issue:
Always run the Connectivity & Permissions test when troubleshooting any read or write failure — most "the export is broken" tickets are missing privileges, and the verification view diagnoses them in seconds.
A screenshot of the Settings view (section 12.1) is the single most useful diagnostic for SDK-version issues. Include it in every support case.
winkSDK (or per your conventions).users.json at the same time on every machine that has it saved.winkStreaming partition (section 6.3).Documents tidy.| Path | Contents |
|---|---|
{install}\Metro\ | GUI executable, dependencies, portable users.json |
{install}\Console\ | Console executable, dependencies, portable users.json |
{install}\USERS-JSON-README.txt | Credentials file quick reference |
%APPDATA%\WINKStreaming\users.json | Per-user credentials (written by the GUI's Save Credentials) |
%APPDATA%\WINKStreaming\APIBridge\settings.encrypted | DPAPI-encrypted Windows Service settings |
%USERPROFILE%\Documents\GenetecForge_*.xml | Forge XML exports |
%USERPROFILE%\Documents\AnalogMonitors_*.jsonl | JSONL cache of analog monitors |
%USERPROFILE%\Documents\Cameras_*.jsonl | JSONL cache of cameras |
%USERPROFILE%\Documents\VideoUnits_*.jsonl | JSONL cache of video units |
%USERPROFILE%\Documents\WINKStreaming\ArchiveExtracts\ | Archive Extractor CSV log + per-unit text dumps |
%PROGRAMDATA%\WINKStreaming\Service\ForgeExports\ | Windows Service Forge exports |
%PROGRAMDATA%\WINKStreaming\Service\Logs\ | Windows Service text logs |
Cameras and AnalogMonitors are pulled in batches of 5 by default. After each batch, the SDK session liveness is rechecked; if dead, the tool auto-reconnects using cached credentials with progressive backoff (0 / 30 / 60 / 120 / 300 / 600 seconds) and resumes from the next batch. This is the same logic the console uses, sharing a single retry policy across both applications.
Bulk Export and the console's --forge mode cumulatively append to a GenetecForge_progress.jsonl file. If a run dies mid-way, simply re-run — the next invocation reads the progress file as a starting cache and only re-queries entities not yet collected. Successful completion renames the progress file to GenetecForge_completed_<ts>.jsonl.
For a healthy SC 5.11.3 server with a privileged SDK user:
| Inventory size | Full Forge export |
|---|---|
| ~100 monitors | < 30 seconds |
| ~500 monitors | ~2 minutes |
| ~1,800 monitors | ~5–10 minutes |
| ~1,800 monitors on a restricted SDK user (permission cascades) | 20–60 minutes |
Use Parallel Bulk Export (section 11.3) to shave additional time on healthy servers — drop the parallel session count to 2 if you start seeing DeniedByFirewall from the throttle.
APIBridge Metro ships alongside WINKSCData, a headless command-line tool that performs the same reads and (selectively) the same writes from a script, scheduled task, or CI pipeline. Both tools share:
users.json credentials file (and search order).DisplayOnAnalogMonitor, RemoveFromAnalogMonitor).What the console does not share with the GUI:
%USERPROFILE%\Documents.Both can run at the same time without conflict — each opens its own SDK session.
Read the dedicated WINKSCData Console Manual for the full option reference, scripting cookbook, scheduling guidance (Task Scheduler, CI), and exit codes.
users.json credentials file (portable + per-user search) read automatically by both GUI and console.Engine.ProductVersion; --sdk is now auto-detected from the loaded DLL.The Forge XML export format follows this schema:
<wink report_time="datetime" generation_duration="duration">
<monitors decoder_count="integer" camera_count="integer">
<monitor_device ipaddress="string" macaddress="string" guid="guid">
<monitor_unit commandport="integer">
<decoder name="string" udpport="integer"
IsOnline="boolean" guid="guid">
<description><![CDATA[text]]></description>
<custom_fields><![CDATA[text]]></custom_fields>
<connectedcamera name="string" guid="guid">
<!-- 58+ camera attributes -->
</connectedcamera>
</decoder>
</monitor_unit>
</monitor_device>
</monitors>
</wink>
All string fields are XML-escape-safe (&, <, >, ", ' handled) and wrapped in CDATA where appropriate. JSON output (-j on the console) emits the same data with camelCase keys.
Each <connectedcamera> element in the Forge XML carries these attribute groups:
| Category | Attributes |
|---|---|
| Basic info | Name, Description, GUID, Model, Manufacturer |
| Network | IP address, MAC address, port, protocol |
| Video | Resolution, frame rate, codec, bitrate, key-frame interval, quality |
| PTZ | Has PTZ, presets, tours, patterns |
| Recording | Mode, quality, retention, schedule |
| Location | GPS latitude / longitude, building, floor, zone |
| Status | Online state, last seen, current signal state, running state, connection type |
| Security | Encryption type, is-blocked, is-in-maintenance |
| Operational | Time zone, monitor group GUID, custom fields |
| Code | Description | Resolution |
|---|---|---|
| 1001 | SDK not found | Verify Genetec.Sdk.dll is next to the EXE and not blocked |
| 2001 | Invalid credentials | Verify username/password and SDK logon privilege |
| 3001 | Network timeout | Check connectivity, firewall, port 5500 |
| 4001 | Permission denied | Grant the required Genetec privilege (section 13) |
| 5001 | Certificate error | Contact WINK support for a certificate refresh |
| Shortcut | Action |
|---|---|
| Ctrl+C | Copy selected data |
| Ctrl+E | Export current view |
| F5 | Refresh data |
| Ctrl+F | Find in current view |
| Alt+C | Connect to Security Center |
| Alt+D | Disconnect |
When opening a support case, please include:
WINKSCData.exe -l)