Skip to content

Monitor live resources

The Live API provides three ways to observe a running resource: a lightweight state endpoint for polling, a full status object on the resource GET response, and a monitoring object that carries thumbnail and metadata URLs for visual inspection.

The state endpoint returns only the current state of the resource. Use it in polling loops rather than reading the full resource each time.

Terminal window
curl -X GET "https://app.mk.io/api/v1/projects/<PROJECT_NAME>/live/liveChannels/my-channel/state" \
-H "Authorization: Bearer <YOUR_TOKEN>"

The response contains status.state. This is a separate concept from the spec.state you set (which only has two values, Stopped and Running). status.state reflects everything the platform reports while getting there, and has 13 possible values:

"", Pending, Allocating, Allocated, Starting, Started, Running,
Updating, Stopping, Stopped, Deleting, Deleted, UnableToStart

Compare the reported state with the desired state and check status.info on the full resource for any informational message. Do not assume every resource visits every intermediate value.

Use the same pattern for liveEvents, staticMultiviewChannels, and staticMultiviewEvents by substituting the resource type in the path.

Starting means the resource is still transitioning. The API does not guarantee that a resource leaves Starting within a fixed time, so set your own timeout in any polling loop rather than waiting indefinitely.

If a resource stays in Starting for longer than you expect, check that the contribution encoder is sending media. Check the source URL, listener allow list, encryption settings, and encoder connection status alongside status.state and status.info.

Confirm that every referenced resource still exists. Check the asset named in spec.transform.assetName, the sources or content named in spec.inputs, and the config named in spec.transform.encodingLive.configRef.

The full GET response includes status.state, input status, output status, and the assigned device and site:

Terminal window
curl -X GET "https://app.mk.io/api/v1/projects/<PROJECT_NAME>/live/liveChannels/my-channel?\$detailedStatus=true" \
-H "Authorization: Bearer <YOUR_TOKEN>"

The status object includes:

FieldDescription
stateCurrent resource state.
siteDisplayNameDisplay name of the site the resource runs on.
deviceNameName of the device the resource is assigned to, if applicable.
deviceDisplayNameDisplay name of the device, if applicable.
shortIdShort visual identifier. Do not use for programmatic purposes.
inputsArray of input status objects.
outputsArray of output status objects.
metricsDictionary of metric samples.
monitoringDictionary of monitoring context objects.

Each entry in status.inputs reflects the resolved assignment for that input. See Resolving content for how the platform gets from contentName to one of these:

FieldDescription
contentNameThe resolved content name for this input.
contentDisplayNameThe display name of the resolved content.
sourceNameThe source assigned to this input, if resolution landed on a source rather than a flow.
sourceDisplayNameDisplay name of that source.
sourceShortIdShort visual identifier for the source. Do not use for programmatic purposes.
sourceUrlThe ingress URL for the source, if it has one.
upstreamFlowNameThe name of an upstream flow providing the input, if resolution landed on a flow rather than a source.
networkNameThe network the input is assigned to. Empty if resolved from a directly-connected source such as SDI.
networkDisplayNameDisplay name of the network.
deviceInterfaceNameThe device interface assigned to the input, if applicable.

When an input is resolved, sourceName identifies the assigned source or upstreamFlowName identifies the upstream flow. Both can be empty when no assignment has been resolved.

None of these fields report whether media is arriving. They describe assignment and resolution, not what is flowing through the input. A source Active state, successful Domain Name System (DNS) resolution, or an established listener connection has the same boundary: each confirms assignment or use, not live media flow.

Read the current input assignments from each response; do not substitute the desired spec.inputs values when a status field is empty.

Each entry in status.outputs shows where output is being sent:

FieldDescription
contentNameThe content name published by this output, if set.
contentDisplayNameDisplay name of that content.
destinationUrlThe egress URL of the connected destination, if applicable.
destinationDisplayNameDisplay name of the destination. Empty for an internal output with no destination.
downstreamFlowNamesNames of downstream flows connected to this output.
networkNameThe network the output is assigned to. Empty for a directly-connected destination such as SDI.
networkDisplayNameDisplay name of the network.
deviceInterfaceNameThe device interface assigned to the output, if applicable.
transportTransport settings specific to this output.

The full resource response includes status.metrics, a dictionary keyed by metric name. Inspect the returned metrics alongside resource state, input assignments, and playback. A resource state or a single metric is not a substitute for checking that the expected sources reach the output.

For project-level metrics export and monitoring storage, see Monitor MK.IO services. Use the export URL returned for your project and retain samples in your monitoring system when you need history.

  1. Check status.inputs against the source or content references in spec.inputs.
  2. Confirm that each contribution encoder is sending to its source’s returned URL.
  3. Use the monitoring URLs below for a preview when they are returned.
  4. Publish the output asset and verify the expected video and audio in a compatible player. For multiview, check every tile.

An Active source means it is in use. Input assignment, resource state, and a reachable manifest each verify a different part of the workflow; none alone proves that the current media reaches viewers.

The status.monitoring object provides URLs for visual monitoring. Each key is a monitoring context name. Each value contains:

FieldDescription
thumbnailUrlURL of a thumbnail image for the stream at this context.
metadataUrlURL of stream metadata at this context.

The contexts available depend on the transform type and configuration. Fetch the thumbnail URL to display a visual preview of the stream. Fetch the metadata URL for structured data about the current stream state.

"monitoring": {
"encode": {
"thumbnailUrl": "https://...",
"metadataUrl": "https://..."
}
}
© 2025–2026 MediaKind. All rights reserved.