{"openapi":"3.1.0","info":{"title":"Management API","description":"Test the API with Swagger at https://api.cdn.vindral.com/api-docs       \n\n## API Keys and Permissions\n      \nThe API key used for authentication is tied to a user and shares the permissions of that user       which is configured in the Vindral Portal. In addition to the user level permissions each       API key has a scope of either read-only or read-write.\n      \n\nRead more about permissions [here](https://docs.vindral.com/manage/management-api/#api-keys-and-permissions)","version":"1.0.0"},"servers":[{"url":"/"}],"paths":{"/v1/channels":{"get":{"operationId":"v1-channels-findMany","summary":"List channels","description":"Get a list of channels that the provided api key has access to.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[{"in":"query","name":"skip","schema":{"default":0,"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses.","type":"number"},"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses."},{"in":"query","name":"take","schema":{"default":100,"description":"Specifies how many records to include in the response.","type":"number"},"description":"Specifies how many records to include in the response."},{"in":"query","name":"orderBy","schema":{"default":"name","description":"Specifies which column to sort the response by.","type":"string","enum":["channelId","name","streamKey"]},"description":"Specifies which column to sort the response by."},{"in":"query","name":"order","schema":{"default":"asc","description":"How to sort the response records, either in ascending or descending order.","anyOf":[{"type":"string","const":"asc"},{"type":"string","const":"desc"}]},"description":"How to sort the response records, either in ascending or descending order."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"authRequired":{"type":"boolean","description":"`true` if the channel should be protected and require a valid token to watch it."},"channelId":{"type":"string","description":"Channel ID is the public identifier used to connect to the channel.       This id can be shared with viewers as it is only used for viewing the channel.       The identifier is auto-generated and cannot be edited.       Example: `organizationname_channelname_ci_1a1a1a1a-1a1a-2bb2-000a-123ab123ab12`."},"name":{"type":"string","description":"Name of the channel."},"notes":{"type":"string","description":"Notes for the channel."},"streamKey":{"type":"string","description":"The Stream Key identifier is a private identifier used when ingesting.   This identifier should be kept secret and only shared with the customer that handles ingest.   The identifier is auto-generated and cannot be edited.   Example: `organizationname_channelname_sk_12be13ab-b22e-1ac3-100c-987bce876ade`."},"suspended":{"type":"boolean","description":"A channel can be suspended and it is not possible to ingest to a suspended channel."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."},"transcodingProfileId":{"description":"Transcoding profile currently used for this channel.","type":"string"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"],"additionalProperties":false},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"],"additionalProperties":false},"description":"Restreaming configuration."},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"additionalProperties":false,"description":"Recording configuration."}},"required":["authRequired","channelId","name","notes","streamKey","suspended","isLive","organizationId","viewerCountryLimitation"],"additionalProperties":false},"description":"List of channel objects, sorted by and sized according to the query parameters provided."},"total":{"type":"number","description":"Total amount of channels to get."}},"required":["items","total"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"post":{"operationId":"v1-channels-create","summary":"Create channel","description":"Create a new channel. Requires a read-write scoped API key with sufficient permissions.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":50,"description":"Name of the channel."},"authRequired":{"default":false,"description":"`true` if the channel should be protected and require a valid token to watch it.","type":"boolean"},"notes":{"default":"","description":"Notes for the channel.","type":"string","maxLength":500},"transcodingProfileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Transcoding profile to use for this channel."},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"]},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"description":"Recording configuration."},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"]},"description":"Restreaming configuration."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel should be added to."},"channelId":{"description":"ChannelId (public id) for the channel, required as: `${normalizedOrganizationName}_${normalizedName}_ci_${uuid}`. If not provided, this will be generated.","type":"string"},"streamKey":{"description":"Stream key (private id) for the channel, required as: `${normalizedOrganizationName}_${normalizedName}_sk_${uuid}`. If not provided, this will be generated.","type":"string"}},"required":["name","transcodingProfileId","organizationId"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"authRequired":{"type":"boolean","description":"`true` if the channel should be protected and require a valid token to watch it."},"channelId":{"type":"string","description":"Channel ID is the public identifier used to connect to the channel.       This id can be shared with viewers as it is only used for viewing the channel.       The identifier is auto-generated and cannot be edited.       Example: `organizationname_channelname_ci_1a1a1a1a-1a1a-2bb2-000a-123ab123ab12`."},"name":{"type":"string","description":"Name of the channel."},"notes":{"type":"string","description":"Notes for the channel."},"streamKey":{"type":"string","description":"The Stream Key identifier is a private identifier used when ingesting.   This identifier should be kept secret and only shared with the customer that handles ingest.   The identifier is auto-generated and cannot be edited.   Example: `organizationname_channelname_sk_12be13ab-b22e-1ac3-100c-987bce876ade`."},"suspended":{"type":"boolean","description":"A channel can be suspended and it is not possible to ingest to a suspended channel."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."},"transcodingProfileId":{"description":"Transcoding profile currently used for this channel.","type":"string"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"],"additionalProperties":false},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"],"additionalProperties":false},"description":"Restreaming configuration."},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"additionalProperties":false,"description":"Recording configuration."}},"required":["authRequired","channelId","name","notes","streamKey","suspended","isLive","organizationId","viewerCountryLimitation"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/channel-groups/{channelGroupId}/channels":{"get":{"operationId":"v1-channels-findManyByChannelGroup","summary":"List channels by channel group","description":"Get a list of channels belonging to a specific channel group.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelGroupId","schema":{"type":"string","description":"The channel group id to get channels for."},"required":true,"description":"The channel group id to get channels for."},{"in":"query","name":"skip","schema":{"default":0,"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses.","type":"number"},"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses."},{"in":"query","name":"take","schema":{"default":100,"description":"Specifies how many records to include in the response.","type":"number"},"description":"Specifies how many records to include in the response."},{"in":"query","name":"orderBy","schema":{"default":"name","description":"Specifies which column to sort the response by.","type":"string","enum":["channelId","name","streamKey"]},"description":"Specifies which column to sort the response by."},{"in":"query","name":"order","schema":{"default":"asc","description":"How to sort the response records, either in ascending or descending order.","anyOf":[{"type":"string","const":"asc"},{"type":"string","const":"desc"}]},"description":"How to sort the response records, either in ascending or descending order."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"authRequired":{"type":"boolean","description":"`true` if the channel should be protected and require a valid token to watch it."},"channelId":{"type":"string","description":"Channel ID is the public identifier used to connect to the channel.       This id can be shared with viewers as it is only used for viewing the channel.       The identifier is auto-generated and cannot be edited.       Example: `organizationname_channelname_ci_1a1a1a1a-1a1a-2bb2-000a-123ab123ab12`."},"name":{"type":"string","description":"Name of the channel."},"notes":{"type":"string","description":"Notes for the channel."},"streamKey":{"type":"string","description":"The Stream Key identifier is a private identifier used when ingesting.   This identifier should be kept secret and only shared with the customer that handles ingest.   The identifier is auto-generated and cannot be edited.   Example: `organizationname_channelname_sk_12be13ab-b22e-1ac3-100c-987bce876ade`."},"suspended":{"type":"boolean","description":"A channel can be suspended and it is not possible to ingest to a suspended channel."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."},"transcodingProfileId":{"description":"Transcoding profile currently used for this channel.","type":"string"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"],"additionalProperties":false},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"],"additionalProperties":false},"description":"Restreaming configuration."},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"additionalProperties":false,"description":"Recording configuration."}},"required":["authRequired","channelId","name","notes","streamKey","suspended","isLive","organizationId","viewerCountryLimitation"],"additionalProperties":false},"description":"List of channel objects with the specified channel group, sorted by and sized according to the query parameters provided."},"total":{"type":"number","description":"Total amount of channels with the specified channel group."}},"required":["items","total"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/transcoding-profiles/{transcodingProfileId}/channels":{"get":{"operationId":"v1-channels-findManyByTranscodingProfile","summary":"List channels by transcoding profile","description":"Get a list of channels with a specific transcoding profile.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"transcodingProfileId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The transcoding profile id to get channels for."},"required":true,"description":"The transcoding profile id to get channels for."},{"in":"query","name":"skip","schema":{"default":0,"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses.","type":"number"},"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses."},{"in":"query","name":"take","schema":{"default":100,"description":"Specifies how many records to include in the response.","type":"number"},"description":"Specifies how many records to include in the response."},{"in":"query","name":"orderBy","schema":{"default":"name","description":"Specifies which column to sort the response by.","type":"string","enum":["channelId","name","streamKey"]},"description":"Specifies which column to sort the response by."},{"in":"query","name":"order","schema":{"default":"asc","description":"How to sort the response records, either in ascending or descending order.","anyOf":[{"type":"string","const":"asc"},{"type":"string","const":"desc"}]},"description":"How to sort the response records, either in ascending or descending order."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"authRequired":{"type":"boolean","description":"`true` if the channel should be protected and require a valid token to watch it."},"channelId":{"type":"string","description":"Channel ID is the public identifier used to connect to the channel.       This id can be shared with viewers as it is only used for viewing the channel.       The identifier is auto-generated and cannot be edited.       Example: `organizationname_channelname_ci_1a1a1a1a-1a1a-2bb2-000a-123ab123ab12`."},"name":{"type":"string","description":"Name of the channel."},"notes":{"type":"string","description":"Notes for the channel."},"streamKey":{"type":"string","description":"The Stream Key identifier is a private identifier used when ingesting.   This identifier should be kept secret and only shared with the customer that handles ingest.   The identifier is auto-generated and cannot be edited.   Example: `organizationname_channelname_sk_12be13ab-b22e-1ac3-100c-987bce876ade`."},"suspended":{"type":"boolean","description":"A channel can be suspended and it is not possible to ingest to a suspended channel."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."},"transcodingProfileId":{"description":"Transcoding profile currently used for this channel.","type":"string"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"],"additionalProperties":false},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"],"additionalProperties":false},"description":"Restreaming configuration."},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"additionalProperties":false,"description":"Recording configuration."}},"required":["authRequired","channelId","name","notes","streamKey","suspended","isLive","organizationId","viewerCountryLimitation"],"additionalProperties":false},"description":"List of channel objects with the specified transcoding profile, sorted by and sized according to the query parameters provided."},"total":{"type":"number","description":"Total amount of channels with the specified transcoding profile."}},"required":["items","total"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/channels/{channelId}":{"get":{"operationId":"v1-channels-findOne","summary":"Get channel","description":"Get a channel by channel id.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel to get."},"required":true,"description":"ID of the channel to get."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"authRequired":{"type":"boolean","description":"`true` if the channel should be protected and require a valid token to watch it."},"channelId":{"type":"string","description":"Channel ID is the public identifier used to connect to the channel.       This id can be shared with viewers as it is only used for viewing the channel.       The identifier is auto-generated and cannot be edited.       Example: `organizationname_channelname_ci_1a1a1a1a-1a1a-2bb2-000a-123ab123ab12`."},"name":{"type":"string","description":"Name of the channel."},"notes":{"type":"string","description":"Notes for the channel."},"streamKey":{"type":"string","description":"The Stream Key identifier is a private identifier used when ingesting.   This identifier should be kept secret and only shared with the customer that handles ingest.   The identifier is auto-generated and cannot be edited.   Example: `organizationname_channelname_sk_12be13ab-b22e-1ac3-100c-987bce876ade`."},"suspended":{"type":"boolean","description":"A channel can be suspended and it is not possible to ingest to a suspended channel."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."},"transcodingProfileId":{"description":"Transcoding profile currently used for this channel.","type":"string"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"],"additionalProperties":false},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"],"additionalProperties":false},"description":"Restreaming configuration."},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"additionalProperties":false,"description":"Recording configuration."}},"required":["authRequired","channelId","name","notes","streamKey","suspended","isLive","organizationId","viewerCountryLimitation"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"patch":{"operationId":"v1-channels-update","summary":"Update channel","description":"Update a channel by channel id. Requires a read-write scoped API key with sufficient permissions.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel to update."},"required":true,"description":"ID of the channel to update."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name of the channel.","type":"string","minLength":2,"maxLength":50},"authRequired":{"description":"`true` if the channel should be protected and require a valid token to watch it.","type":"boolean"},"notes":{"description":"Notes for the channel.","type":"string","maxLength":500},"transcodingProfileId":{"description":"Transcoding profile to use for this channel.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"]},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"description":"Recording configuration."},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"]},"description":"Restreaming configuration."}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"authRequired":{"type":"boolean","description":"`true` if the channel should be protected and require a valid token to watch it."},"channelId":{"type":"string","description":"Channel ID is the public identifier used to connect to the channel.       This id can be shared with viewers as it is only used for viewing the channel.       The identifier is auto-generated and cannot be edited.       Example: `organizationname_channelname_ci_1a1a1a1a-1a1a-2bb2-000a-123ab123ab12`."},"name":{"type":"string","description":"Name of the channel."},"notes":{"type":"string","description":"Notes for the channel."},"streamKey":{"type":"string","description":"The Stream Key identifier is a private identifier used when ingesting.   This identifier should be kept secret and only shared with the customer that handles ingest.   The identifier is auto-generated and cannot be edited.   Example: `organizationname_channelname_sk_12be13ab-b22e-1ac3-100c-987bce876ade`."},"suspended":{"type":"boolean","description":"A channel can be suspended and it is not possible to ingest to a suspended channel."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."},"transcodingProfileId":{"description":"Transcoding profile currently used for this channel.","type":"string"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"],"additionalProperties":false},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"],"additionalProperties":false},"description":"Restreaming configuration."},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"additionalProperties":false,"description":"Recording configuration."}},"required":["authRequired","channelId","name","notes","streamKey","suspended","isLive","organizationId","viewerCountryLimitation"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"put":{"operationId":"v1-channels-upsert","summary":"Create or update channel","description":"Creates or updates a channel by channelId.\n\nIf the channelId exists, it will be updated - otherwise created. \n\nchannelId, streamKey or organizationId will not be changed on an existing channel, but are required to match. \n\nRequires a read-write scoped API key with sufficient permissions.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ChannelId (public id) for the channel, required as: `${normalizedOrganizationName}_${normalizedName}_ci_${uuid}`."},"required":true,"description":"ChannelId (public id) for the channel, required as: `${normalizedOrganizationName}_${normalizedName}_ci_${uuid}`."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":50,"description":"Name of the channel."},"transcodingProfileId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Transcoding profile to use for this channel."},"authRequired":{"default":false,"description":"`true` if the channel should be protected and require a valid token to watch it.","type":"boolean"},"notes":{"default":"","description":"Notes for the channel.","type":"string","maxLength":500},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel should be added to. Will not update on existing channel."},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"]},"recording":{"anyOf":[{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"description":"Recording configuration."},{"type":"null"}],"description":"Recording configuration, passing `null` will remove saved configuration."},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"]},"description":"Restreaming configuration."},"streamKey":{"description":"Stream key (private id) for the channel, required as: `${normalizedOrganizationName}_${normalizedName}_sk_${uuid}`.","type":"string"}},"required":["name","transcodingProfileId","organizationId","viewerCountryLimitation","recording","restreaming","streamKey"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"authRequired":{"type":"boolean","description":"`true` if the channel should be protected and require a valid token to watch it."},"channelId":{"type":"string","description":"Channel ID is the public identifier used to connect to the channel.       This id can be shared with viewers as it is only used for viewing the channel.       The identifier is auto-generated and cannot be edited.       Example: `organizationname_channelname_ci_1a1a1a1a-1a1a-2bb2-000a-123ab123ab12`."},"name":{"type":"string","description":"Name of the channel."},"notes":{"type":"string","description":"Notes for the channel."},"streamKey":{"type":"string","description":"The Stream Key identifier is a private identifier used when ingesting.   This identifier should be kept secret and only shared with the customer that handles ingest.   The identifier is auto-generated and cannot be edited.   Example: `organizationname_channelname_sk_12be13ab-b22e-1ac3-100c-987bce876ade`."},"suspended":{"type":"boolean","description":"A channel can be suspended and it is not possible to ingest to a suspended channel."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."},"transcodingProfileId":{"description":"Transcoding profile currently used for this channel.","type":"string"},"viewerCountryLimitation":{"type":"object","properties":{"mode":{"type":"string","enum":["allow","deny","disabled"],"description":"The mode of the viewer country limitation."},"limited":{"type":"array","items":{"type":"string"},"description":"The list of countries to allow or deny, in two letter ISO 3166-1 format."}},"required":["mode","limited"],"additionalProperties":false},"restreaming":{"type":"array","items":{"type":"object","properties":{"enabled":{"type":"boolean"},"url":{"type":"string","description":"The URL to restream to, the full RTMP URL."}},"required":["enabled","url"],"additionalProperties":false},"description":"Restreaming configuration."},"recording":{"type":"object","properties":{"enabled":{"type":"boolean"},"retentionDays":{"type":"integer","minimum":1,"maximum":365,"description":"Retention days for the recording."}},"required":["enabled","retentionDays"],"additionalProperties":false,"description":"Recording configuration."}},"required":["authRequired","channelId","name","notes","streamKey","suspended","isLive","organizationId","viewerCountryLimitation"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"delete":{"operationId":"v1-channels-delete","summary":"Delete channel","description":"Delete a channel by channel id. Requires a read-write scoped API key with sufficient permissions.","tags":["Channels"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel to delete."},"required":true,"description":"ID of the channel to delete."}],"responses":{"204":{"description":"Successful response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/channel-groups/{channelGroupId}":{"get":{"operationId":"v1-channelGroups-findOne","summary":"Get channel group","description":"Get one channel group by id.","tags":["Channel Groups"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelGroupId","schema":{"type":"string","description":"ID of the channel group to get."},"required":true,"description":"ID of the channel group to get."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"channelGroupId":{"type":"string","description":"Channel group ID."},"name":{"type":"string","description":"Name of the channel group."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."}},"required":["channelGroupId","name","organizationId"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"patch":{"operationId":"v1-channelGroups-update","summary":"Update channel group","description":"Update a channel group with by channel group id.           If the channel array is passed in the whole array will be updated with the new array.           Requires a read-write scoped API key with sufficient permissions.","tags":["Channel Groups"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelGroupId","schema":{"type":"string","description":"ID of the channel group to update."},"required":true,"description":"ID of the channel group to update."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Name of the channel group.","type":"string","maxLength":50},"channelIds":{"description":"List of channel IDs that should be part of the group.","type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"channelGroupId":{"type":"string","description":"Channel group ID."},"name":{"type":"string","description":"Name of the channel group."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."}},"required":["channelGroupId","name","organizationId"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"delete":{"operationId":"v1-channelGroups-delete","summary":"Delete channel group","description":"Delete channel group by id. Requires a read-write scoped API key with sufficient permissions.","tags":["Channel Groups"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelGroupId","schema":{"type":"string","description":"ID of the channel group to remove."},"required":true,"description":"ID of the channel group to remove."}],"responses":{"204":{"description":"Successful response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/channel-groups":{"get":{"operationId":"v1-channelGroups-findMany","summary":"List channel groups","description":"Get a list of channel groups that the provided api key has access to.","tags":["Channel Groups"],"security":[{"Authorization":[]}],"parameters":[{"in":"query","name":"skip","schema":{"default":0,"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses.","type":"number"},"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses."},{"in":"query","name":"take","schema":{"default":100,"description":"Specifies how many records to include in the response.","type":"number"},"description":"Specifies how many records to include in the response."},{"in":"query","name":"orderBy","schema":{"default":"name","description":"Specifies which column to sort the response by.","type":"string","enum":["name","channelGroupId"]},"description":"Specifies which column to sort the response by."},{"in":"query","name":"order","schema":{"default":"asc","description":"How to sort the response records, either in ascending or descending order.","anyOf":[{"type":"string","const":"asc"},{"type":"string","const":"desc"}]},"description":"How to sort the response records, either in ascending or descending order."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"channelGroupId":{"type":"string","description":"Channel group ID."},"name":{"type":"string","description":"Name of the channel group."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."}},"required":["channelGroupId","name","organizationId"],"additionalProperties":false},"description":"List of channel group objects, sorted by and sized according to the query parameters provided."},"total":{"type":"number","description":"Total amount of channel groups to get."}},"required":["items","total"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"post":{"operationId":"v1-channelGroups-create","summary":"Create channel group","description":"Create a new channel group for a specified name and organization.           Optionally add a list of channel ids that should belong to the new channel group.           Requires a read-write scoped API key with sufficient permissions.","tags":["Channel Groups"],"security":[{"Authorization":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":50,"description":"Name of the channel group."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel group should be added to."},"channelIds":{"description":"List of channel IDs that should be part of the group.","type":"array","items":{"type":"string"}}},"required":["name","organizationId"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"channelGroupId":{"type":"string","description":"Channel group ID."},"name":{"type":"string","description":"Name of the channel group."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the channel belongs to."}},"required":["channelGroupId","name","organizationId"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/channel-groups/{channelGroupId}/channels/{channelId}":{"put":{"operationId":"v1-channelGroups-addChannel","summary":"Add channel to channel group","description":"Add one channel to a channel group. Specify a `channelGroupId` and a `channelId` you wish to add to the channel group.          Requires a read-write scoped API key with sufficient permissions.","tags":["Channel Groups"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelGroupId","schema":{"type":"string","description":"ID of the channel group to add channel to."},"required":true,"description":"ID of the channel group to add channel to."},{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel that should be added to the channel group."},"required":true,"description":"ID of the channel that should be added to the channel group."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"delete":{"operationId":"v1-channelGroups-removeChannel","summary":"Remove channel from channel group","description":"Remove one channel from a channel group. Specify a `channelGroupId` and a `channelId` you wish to remove from the channel group.          Requires a read-write scoped API key with sufficient permissions.","tags":["Channel Groups"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelGroupId","schema":{"type":"string","description":"ID of the channel group to remove channel from."},"required":true,"description":"ID of the channel group to remove channel from."},{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel to remove from the channel group."},"required":true,"description":"ID of the channel to remove from the channel group."}],"responses":{"204":{"description":"Successful response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/transcoding-profiles":{"get":{"operationId":"v1-transcodingProfiles-findMany","summary":"List transcoding profiles","description":"Get a list of transcoding profiles that the provided api key has access to.","tags":["Transcoding Profiles"],"security":[{"Authorization":[]}],"parameters":[{"in":"query","name":"skip","schema":{"default":0,"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses.","type":"number"},"description":"Omits the specified number of returned records. This is useful, for example, to paginate responses."},{"in":"query","name":"take","schema":{"default":100,"description":"Specifies how many records to include in the response.","type":"number"},"description":"Specifies how many records to include in the response."},{"in":"query","name":"orderBy","schema":{"default":"name","description":"Specifies which column to sort the response by.","type":"string","enum":["name"]},"description":"Specifies which column to sort the response by."},{"in":"query","name":"order","schema":{"default":"asc","description":"How to sort the response records, either in ascending or descending order.","anyOf":[{"type":"string","const":"asc"},{"type":"string","const":"desc"}]},"description":"How to sort the response records, either in ascending or descending order."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Transcoding profile id."},"name":{"type":"string","description":"Transcoding profile name."},"notes":{"type":"string","description":"Transcoding profile notes."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the transcoding profile belongs to."},"config":{"type":"object","properties":{"streams":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"passthrough":{"type":"boolean"},"matchSource":{"anyOf":[{"type":"object","properties":{"streamId":{"type":"number"}},"required":["streamId"],"additionalProperties":false,"description":"Match stream by ID"},{"type":"object","properties":{"language":{"type":"string"}},"required":["language"],"additionalProperties":false,"description":"Match stream by language"},{"type":"object","properties":{"stream":{"type":"string","enum":["best","all"]}},"required":["stream"],"additionalProperties":false,"description":"Match all or the best of the selected stream type"}]}},"required":["matchSource"],"additionalProperties":false},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"audio"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"bitRate":{"anyOf":[{"type":"integer","minimum":8000,"maximum":500000},{"type":"null"}]},"codec":{"type":"string"},"sampleRate":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"channels":{"anyOf":[{"type":"integer","minimum":1,"maximum":2},{"type":"null"}]}},"required":["codec"],"additionalProperties":false}]}}},"required":["type","renditions"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"video"},"gopAlignment":{"type":"boolean"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"anyOf":[{"type":"object","properties":{"gopSizeMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"bitRate":{"anyOf":[{"type":"integer","minimum":50000,"maximum":50000000},{"type":"null"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false},{"type":"object","properties":{"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false}]}]}}},"required":["type","gopAlignment","renditions"],"additionalProperties":false}],"type":"object"}]}}},"required":["streams"],"additionalProperties":false,"description":"Config object that describes how the stream should be transcoded."}},"required":["id","name","notes","organizationId","config"],"additionalProperties":false,"description":"List of transcoding profile objects, sorted by and sized according to the query parameters provided."}},"total":{"type":"number","description":"Total amount of transcoding profiles to get."}},"required":["items","total"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"post":{"operationId":"v1-transcodingProfiles-create","summary":"Create transcoding profile","description":"Create a new transcoding profile. Requires a read-write scoped API key with sufficient permissions.","tags":["Transcoding Profiles"],"security":[{"Authorization":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"notes":{"type":"string"},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"config":{"type":"object","properties":{"streams":{"maxItems":5,"type":"array","items":{"allOf":[{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"audio"},"renditions":{"maxItems":10,"type":"array","items":{"type":"object","properties":{"bitRate":{"default":96000,"type":"integer","minimum":8000,"maximum":500000},"codec":{"type":"string","enum":["opus","aac"]},"sampleRate":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"channels":{"type":"integer","minimum":1,"maximum":2}},"required":["codec"]}}},"required":["type","renditions"]},{"type":"object","properties":{"type":{"type":"string","const":"video"},"gopAlignment":{"type":"boolean"},"renditions":{"maxItems":10,"type":"array","items":{"anyOf":[{"type":"object","properties":{"gopSizeMs":{"type":"integer","minimum":500,"maximum":10000},"size":{"description":"The video size, if left unset it will match the source","anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"description":"Set size based on a scale factor on the incoming stream"}]},"bitRate":{"default":500000,"type":"integer","minimum":50000,"maximum":50000000},"codec":{"type":"string","enum":["h264","av1"]},"frameSkipping":{"type":"string","enum":["none","half","quarter","frame_every_1_seconds","frame_every_5_seconds"]}},"required":["gopSizeMs","codec"]},{"type":"object","properties":{"size":{"description":"The video size, if left unset it will match the source","anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"description":"Set size based on a scale factor on the incoming stream"}]},"codec":{"type":"string","enum":["mjpeg"]},"frameSkipping":{"type":"string","enum":["frame_every_1_seconds","frame_every_5_seconds"]}},"required":["codec","frameSkipping"]}]}}},"required":["type","gopAlignment","renditions"]}],"type":"object"},{"type":"object","properties":{"passthrough":{"type":"boolean"},"matchSource":{"anyOf":[{"type":"object","properties":{"streamId":{"type":"number"}},"required":["streamId"],"description":"Match stream by ID"},{"type":"object","properties":{"language":{"type":"string"}},"required":["language"],"description":"Match stream by language"},{"type":"object","properties":{"stream":{"type":"string","enum":["best","all"]}},"required":["stream"],"description":"Match all or the best of the selected stream type"}]}},"required":["matchSource"]}]}}},"required":["streams"]}},"required":["name","notes","organizationId","config"]}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Transcoding profile id."},"name":{"type":"string","description":"Transcoding profile name."},"notes":{"type":"string","description":"Transcoding profile notes."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the transcoding profile belongs to."},"config":{"type":"object","properties":{"streams":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"passthrough":{"type":"boolean"},"matchSource":{"anyOf":[{"type":"object","properties":{"streamId":{"type":"number"}},"required":["streamId"],"additionalProperties":false,"description":"Match stream by ID"},{"type":"object","properties":{"language":{"type":"string"}},"required":["language"],"additionalProperties":false,"description":"Match stream by language"},{"type":"object","properties":{"stream":{"type":"string","enum":["best","all"]}},"required":["stream"],"additionalProperties":false,"description":"Match all or the best of the selected stream type"}]}},"required":["matchSource"],"additionalProperties":false},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"audio"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"bitRate":{"anyOf":[{"type":"integer","minimum":8000,"maximum":500000},{"type":"null"}]},"codec":{"type":"string"},"sampleRate":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"channels":{"anyOf":[{"type":"integer","minimum":1,"maximum":2},{"type":"null"}]}},"required":["codec"],"additionalProperties":false}]}}},"required":["type","renditions"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"video"},"gopAlignment":{"type":"boolean"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"anyOf":[{"type":"object","properties":{"gopSizeMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"bitRate":{"anyOf":[{"type":"integer","minimum":50000,"maximum":50000000},{"type":"null"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false},{"type":"object","properties":{"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false}]}]}}},"required":["type","gopAlignment","renditions"],"additionalProperties":false}],"type":"object"}]}}},"required":["streams"],"additionalProperties":false,"description":"Config object that describes how the stream should be transcoded."}},"required":["id","name","notes","organizationId","config"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/transcoding-profiles/{transcodingProfileId}":{"get":{"operationId":"v1-transcodingProfiles-findOne","summary":"Get transcoding profile","description":"Get a transcoding profile by id.","tags":["Transcoding Profiles"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"transcodingProfileId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"ID of the transcoding profile to get."},"required":true,"description":"ID of the transcoding profile to get."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Transcoding profile id."},"name":{"type":"string","description":"Transcoding profile name."},"notes":{"type":"string","description":"Transcoding profile notes."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the transcoding profile belongs to."},"config":{"type":"object","properties":{"streams":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"passthrough":{"type":"boolean"},"matchSource":{"anyOf":[{"type":"object","properties":{"streamId":{"type":"number"}},"required":["streamId"],"additionalProperties":false,"description":"Match stream by ID"},{"type":"object","properties":{"language":{"type":"string"}},"required":["language"],"additionalProperties":false,"description":"Match stream by language"},{"type":"object","properties":{"stream":{"type":"string","enum":["best","all"]}},"required":["stream"],"additionalProperties":false,"description":"Match all or the best of the selected stream type"}]}},"required":["matchSource"],"additionalProperties":false},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"audio"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"bitRate":{"anyOf":[{"type":"integer","minimum":8000,"maximum":500000},{"type":"null"}]},"codec":{"type":"string"},"sampleRate":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"channels":{"anyOf":[{"type":"integer","minimum":1,"maximum":2},{"type":"null"}]}},"required":["codec"],"additionalProperties":false}]}}},"required":["type","renditions"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"video"},"gopAlignment":{"type":"boolean"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"anyOf":[{"type":"object","properties":{"gopSizeMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"bitRate":{"anyOf":[{"type":"integer","minimum":50000,"maximum":50000000},{"type":"null"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false},{"type":"object","properties":{"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false}]}]}}},"required":["type","gopAlignment","renditions"],"additionalProperties":false}],"type":"object"}]}}},"required":["streams"],"additionalProperties":false,"description":"Config object that describes how the stream should be transcoded."}},"required":["id","name","notes","organizationId","config"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"patch":{"operationId":"v1-transcodingProfiles-update","summary":"Update transcoding profile","description":"Update a transcoding profile by id. Requires a read-write scoped API key with sufficient permissions.","tags":["Transcoding Profiles"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"transcodingProfileId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"required":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"notes":{"type":"string"},"config":{"type":"object","properties":{"streams":{"maxItems":5,"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"]},{"type":"object","properties":{"passthrough":{"type":"boolean"},"matchSource":{"anyOf":[{"type":"object","properties":{"streamId":{"type":"number"}},"required":["streamId"],"description":"Match stream by ID"},{"type":"object","properties":{"language":{"type":"string"}},"required":["language"],"description":"Match stream by language"},{"type":"object","properties":{"stream":{"type":"string","enum":["best","all"]}},"required":["stream"],"description":"Match all or the best of the selected stream type"}]}},"required":["matchSource"]},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"audio"},"renditions":{"maxItems":10,"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"]},{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"]},{"type":"object","properties":{"bitRate":{"default":96000,"type":"integer","minimum":8000,"maximum":500000},"codec":{"type":"string","enum":["opus","aac"]},"sampleRate":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"channels":{"type":"integer","minimum":1,"maximum":2}},"required":["codec"]}]}}},"required":["type","renditions"]},{"type":"object","properties":{"type":{"type":"string","const":"video"},"gopAlignment":{"type":"boolean"},"renditions":{"maxItems":10,"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"]},{"anyOf":[{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"]},{"type":"object","properties":{"gopSizeMs":{"type":"integer","minimum":500,"maximum":10000},"size":{"description":"The video size, if left unset it will match the source","anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"description":"Set size based on a scale factor on the incoming stream"}]},"bitRate":{"default":500000,"type":"integer","minimum":50000,"maximum":50000000},"codec":{"type":"string","enum":["h264","av1"]},"frameSkipping":{"type":"string","enum":["none","half","quarter","frame_every_1_seconds","frame_every_5_seconds"]}},"required":["gopSizeMs","codec"]}]},{"allOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["id"]},{"type":"object","properties":{"size":{"description":"The video size, if left unset it will match the source","anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"description":"Set size based on a scale factor on the incoming stream"}]},"codec":{"type":"string","enum":["mjpeg"]},"frameSkipping":{"type":"string","enum":["frame_every_1_seconds","frame_every_5_seconds"]}},"required":["codec","frameSkipping"]}]}]}]}}},"required":["type","gopAlignment","renditions"]}],"type":"object"}]}}},"required":["streams"]}}}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Transcoding profile id."},"name":{"type":"string","description":"Transcoding profile name."},"notes":{"type":"string","description":"Transcoding profile notes."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the transcoding profile belongs to."},"config":{"type":"object","properties":{"streams":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"passthrough":{"type":"boolean"},"matchSource":{"anyOf":[{"type":"object","properties":{"streamId":{"type":"number"}},"required":["streamId"],"additionalProperties":false,"description":"Match stream by ID"},{"type":"object","properties":{"language":{"type":"string"}},"required":["language"],"additionalProperties":false,"description":"Match stream by language"},{"type":"object","properties":{"stream":{"type":"string","enum":["best","all"]}},"required":["stream"],"additionalProperties":false,"description":"Match all or the best of the selected stream type"}]}},"required":["matchSource"],"additionalProperties":false},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"audio"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"bitRate":{"anyOf":[{"type":"integer","minimum":8000,"maximum":500000},{"type":"null"}]},"codec":{"type":"string"},"sampleRate":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"channels":{"anyOf":[{"type":"integer","minimum":1,"maximum":2},{"type":"null"}]}},"required":["codec"],"additionalProperties":false}]}}},"required":["type","renditions"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"video"},"gopAlignment":{"type":"boolean"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"anyOf":[{"type":"object","properties":{"gopSizeMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"bitRate":{"anyOf":[{"type":"integer","minimum":50000,"maximum":50000000},{"type":"null"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false},{"type":"object","properties":{"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false}]}]}}},"required":["type","gopAlignment","renditions"],"additionalProperties":false}],"type":"object"}]}}},"required":["streams"],"additionalProperties":false,"description":"Config object that describes how the stream should be transcoded."}},"required":["id","name","notes","organizationId","config"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"delete":{"operationId":"v1-transcodingProfiles-delete","summary":"Delete transcoding profile","description":"Delete a transcoding profile by id.           Channels that referenced the deleted transcoding profile will be unusable until assigned a new transcoding profile.          Requires a read-write scoped API key with sufficient permissions.","tags":["Transcoding Profiles"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"transcodingProfileId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"required":true}],"responses":{"204":{"description":"Successful response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/channels/{channelId}/transcoding-profile":{"get":{"operationId":"v1-transcodingProfiles-findOneByChannel","summary":"Get transcoding profile by channel","description":"Get the transcoding profile configured for the specific channel.","tags":["Transcoding Profiles"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel to get the transcoding profile for."},"required":true,"description":"ID of the channel to get the transcoding profile for."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Transcoding profile id."},"name":{"type":"string","description":"Transcoding profile name."},"notes":{"type":"string","description":"Transcoding profile notes."},"organizationId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization that the transcoding profile belongs to."},"config":{"type":"object","properties":{"streams":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"passthrough":{"type":"boolean"},"matchSource":{"anyOf":[{"type":"object","properties":{"streamId":{"type":"number"}},"required":["streamId"],"additionalProperties":false,"description":"Match stream by ID"},{"type":"object","properties":{"language":{"type":"string"}},"required":["language"],"additionalProperties":false,"description":"Match stream by language"},{"type":"object","properties":{"stream":{"type":"string","enum":["best","all"]}},"required":["stream"],"additionalProperties":false,"description":"Match all or the best of the selected stream type"}]}},"required":["matchSource"],"additionalProperties":false},{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"audio"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"type":"object","properties":{"bitRate":{"anyOf":[{"type":"integer","minimum":8000,"maximum":500000},{"type":"null"}]},"codec":{"type":"string"},"sampleRate":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"channels":{"anyOf":[{"type":"integer","minimum":1,"maximum":2},{"type":"null"}]}},"required":["codec"],"additionalProperties":false}]}}},"required":["type","renditions"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"video"},"gopAlignment":{"type":"boolean"},"renditions":{"type":"array","items":{"allOf":[{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},{"anyOf":[{"type":"object","properties":{"gopSizeMs":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"bitRate":{"anyOf":[{"type":"integer","minimum":50000,"maximum":50000000},{"type":"null"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false},{"type":"object","properties":{"size":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"},"height":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video height in pixels"}},"required":["width","height"],"additionalProperties":false,"description":"Set both width and height in pixels"},{"type":"object","properties":{"width":{"type":"integer","minimum":32,"maximum":3840,"multipleOf":2,"description":"The video width in pixels"}},"required":["width"],"additionalProperties":false,"description":"Set width and set height to match aspect ratio"},{"type":"object","properties":{"scaleFactor":{"type":"number","minimum":0.1,"maximum":1,"description":"The scale factor"}},"required":["scaleFactor"],"additionalProperties":false,"description":"Set size based on a scale factor on the incoming stream"}]},"codec":{"type":"string"}},"required":["codec"],"additionalProperties":false}]}]}}},"required":["type","gopAlignment","renditions"],"additionalProperties":false}],"type":"object"}]}}},"required":["streams"],"additionalProperties":false,"description":"Config object that describes how the stream should be transcoded."}},"required":["id","name","notes","organizationId","config"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/profile":{"get":{"operationId":"v1-profile-profile","summary":"Get profile","description":"Get profile info based on the api token used to make the request.","tags":["Profile"],"security":[{"Authorization":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"object","properties":{"name":{"type":"string","description":"Name of the api key used to authorize the request."},"scope":{"type":"string","enum":["read","read_write"],"description":"The scope configured for the api key."}},"required":["name","scope"],"additionalProperties":false,"description":"Information about the api key"},"user":{"type":"object","properties":{"name":{"type":"string","description":"Name of the user that the api key used belongs to."},"email":{"type":"string","description":"Email of the user that the api key used belongs to."}},"required":["name","email"],"additionalProperties":false},"organizations":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Organization name."},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Organization id."},"role":{"type":"string","enum":["administrator","channel_manager","user"],"description":"The api key role in this organization"}},"required":["name","id","role"],"additionalProperties":false},"description":"List of organizations and the permissions the used api key has in them."}},"required":["apiKey","user","organizations"],"additionalProperties":false}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/channels/{channelId}/ingest":{"get":{"operationId":"v1-ingest-ingest","summary":"Get ingest information","description":"Get ingest information for a channel.","tags":["Ingest"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel to get."},"required":true,"description":"ID of the channel to get."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean","description":"Whether or not the ingest is currently active."},"playUrl":{"type":"object","properties":{"rtmp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"RTMP URL that can be used to play the stream."},"srt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"SRT URL that can be used to play the stream."}},"required":["rtmp","srt"],"additionalProperties":false,"description":"URLs that can be used to play the stream."}},"required":["active","playUrl"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}},"post":{"operationId":"v1-ingest-drop","summary":"Drop ingest","description":"Drop ingest for a channel.","tags":["Ingest"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel to drop."},"required":true,"description":"ID of the channel to drop."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"Drop requested"}},"required":["status"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/status":{"get":{"operationId":"v1-analytics-channelStatus","summary":"Get channel status","description":"Get live status and viewers for all channels in an organization.","tags":["Status"],"security":[{"Authorization":[]}],"parameters":[{"in":"query","name":"organizationId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"ID of the organization to get analytics data for."},"required":true,"description":"ID of the organization to get analytics data for."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"viewersTotal":{"type":"number","description":"Total number of viewers."},"ingressBps":{"type":"number","description":"Ingress bitrate in bits per second (bps)."},"egressBps":{"type":"number","description":"Egress bitrate in bits per second (bps)."},"channels":{"type":"array","items":{"type":"object","properties":{"channelId":{"type":"string","description":"Channel ID that identifies a specific channel."},"viewers":{"type":"number","description":"Current number of viewers."},"isLive":{"type":"boolean","description":"This value is `true` if there is an active stream for this channel."}},"required":["channelId","viewers","isLive"],"additionalProperties":false},"description":"List of status per channel."}},"required":["viewersTotal","ingressBps","egressBps","channels"],"additionalProperties":false}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/analytics/current":{"get":{"operationId":"v1-analytics-current","summary":"Get current viewers","description":"Get current number of viewers for an organization.\n          Use the optional query parameters `channelId`, `countryCode` and `continent` to filter the results.\n          Use the optional query parameter `groupBy` to group the results by `country` or `channel`.","tags":["Analytics"],"security":[{"Authorization":[]}],"parameters":[{"in":"query","name":"organizationId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"ID of the organization to get analytics data for."},"required":true,"description":"ID of the organization to get analytics data for."},{"in":"query","name":"channelId","schema":{"type":"string","description":"Filters for the specific channel."},"description":"Filters for the specific channel."},{"in":"query","name":"countryCode","schema":{"type":"string","description":"Country code (ISO 3166-1 alpha-2) to filter the data on a specific country. Special code `unknown` is used when a lookup was not possible.\n\nExample: `SE` to filter for Sweden."},"description":"Country code (ISO 3166-1 alpha-2) to filter the data on a specific country. Special code `unknown` is used when a lookup was not possible.\n\nExample: `SE` to filter for Sweden."},{"in":"query","name":"continent","schema":{"type":"string","description":"Continent code to filter the data for a specific continent.\nValid continent codes:\n- `AF`: Africa\n- `AN`: Antarctica\n- `AS`: Asia\n- `EU`: Europe\n- `NA`: North America\n- `OC`: Oceania\n- `SA`: South America\n- `unknown`: Unknown continent. Special code `unknown` is used when a lookup was not possible.\n\nExample: `EU` to filter for Europe.\n"},"description":"Continent code to filter the data for a specific continent.\nValid continent codes:\n- `AF`: Africa\n- `AN`: Antarctica\n- `AS`: Asia\n- `EU`: Europe\n- `NA`: North America\n- `OC`: Oceania\n- `SA`: South America\n- `unknown`: Unknown continent. Special code `unknown` is used when a lookup was not possible.\n\nExample: `EU` to filter for Europe.\n"},{"in":"query","name":"groupBy","schema":{"type":"string","enum":["channel","country"],"description":"Optionally group by channel or country. Default is no grouping. Valid values: `channel`, `country`."},"description":"Optionally group by channel or country. Default is no grouping. Valid values: `channel`, `country`."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"anyOf":[{"anyOf":[{"type":"object","properties":{"viewers":{"type":"number","description":"Current number of viewers."}},"required":["viewers"],"additionalProperties":false},{"type":"object","properties":{"countries":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","description":"Country name."},"countryCode":{"type":"string","description":"Country code in ISO 3166-1 alpha-2 format."},"viewers":{"type":"number","description":"Current number of viewers."}},"required":["country","countryCode","viewers"],"additionalProperties":false},"description":"List of countries with current viewers."}},"required":["countries"],"additionalProperties":false}]},{"type":"object","properties":{"channels":{"type":"array","items":{"type":"object","properties":{"channelId":{"type":"string","description":"Channel ID that the viewers are watching, identifies a specific channel."},"viewers":{"type":"number","description":"Current number of viewers."}},"required":["channelId","viewers"],"additionalProperties":false},"description":"List of channels with current viewers."}},"required":["channels"],"additionalProperties":false}]}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/analytics/metrics":{"get":{"operationId":"v1-analytics-metrics","summary":"Get metrics","description":"Get metrics.\n        Use the optional query parameters `channelId`, `countryCode` and `continent` to filter the results.\n        Metrics are calculated for the time range between `from` and `to`.\n        By default all available metrics are returned, to limit the response use the optional query parameter `fields` to specify which metrics to return.\n\n**Note that `viewerBitrateAverage`, `totalIngressBytes`, `restartCount`, `hlsEgressBytes`, `clippingBytes`, `rtmpEgressBytes` and `restreamBytes` disregards `country` and `continent` filters!**","tags":["Analytics"],"security":[{"Authorization":[]}],"parameters":[{"in":"query","name":"organizationId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"ID of the organization to get analytics data for."},"required":true,"description":"ID of the organization to get analytics data for."},{"in":"query","name":"channelId","schema":{"type":"string","description":"Filters for the specific channel."},"description":"Filters for the specific channel."},{"in":"query","name":"countryCode","schema":{"type":"string","description":"Country code (ISO 3166-1 alpha-2) to filter the data on a specific country. Special code `unknown` is used when a lookup was not possible.\n\nExample: `SE` to filter for Sweden."},"description":"Country code (ISO 3166-1 alpha-2) to filter the data on a specific country. Special code `unknown` is used when a lookup was not possible.\n\nExample: `SE` to filter for Sweden."},{"in":"query","name":"continent","schema":{"type":"string","description":"Continent code to filter the data for a specific continent.\nValid continent codes:\n- `AF`: Africa\n- `AN`: Antarctica\n- `AS`: Asia\n- `EU`: Europe\n- `NA`: North America\n- `OC`: Oceania\n- `SA`: South America\n- `unknown`: Unknown continent. Special code `unknown` is used when a lookup was not possible.\n\nExample: `EU` to filter for Europe.\n"},"description":"Continent code to filter the data for a specific continent.\nValid continent codes:\n- `AF`: Africa\n- `AN`: Antarctica\n- `AS`: Asia\n- `EU`: Europe\n- `NA`: North America\n- `OC`: Oceania\n- `SA`: South America\n- `unknown`: Unknown continent. Special code `unknown` is used when a lookup was not possible.\n\nExample: `EU` to filter for Europe.\n"},{"in":"query","name":"fields","schema":{"type":"string","description":"Limit the response by selecting specific fields as a comma separated list. Available fields are:\n\n- `viewerSessions`\n- `viewerSeconds`\n- `viewerSessionsAvgDurationSeconds`\n- `viewerBitrateAverage`\n- `totalEgressBytes`\n- `totalIngressBytes`\n- `timeToFirstFrameMedianMs`\n- `roundTripTimeMedianMs`\n- `browsers`\n- `os`\n- `devices`\n- `restartCount`\n- `hlsEgressBytes`\n- `clippingBytes`\n- `rtmpEgressBytes`\n- `restreamBytes`\n\nExample: `viewerSessions,viewerBitrateAverage` to only get viewer sessions and average bitrate."},"description":"Limit the response by selecting specific fields as a comma separated list. Available fields are:\n\n- `viewerSessions`\n- `viewerSeconds`\n- `viewerSessionsAvgDurationSeconds`\n- `viewerBitrateAverage`\n- `totalEgressBytes`\n- `totalIngressBytes`\n- `timeToFirstFrameMedianMs`\n- `roundTripTimeMedianMs`\n- `browsers`\n- `os`\n- `devices`\n- `restartCount`\n- `hlsEgressBytes`\n- `clippingBytes`\n- `rtmpEgressBytes`\n- `restreamBytes`\n\nExample: `viewerSessions,viewerBitrateAverage` to only get viewer sessions and average bitrate."},{"in":"query","name":"groupBy","schema":{"type":"string","enum":["channel","country"],"description":"Optionally group by channel or country. Default is no grouping. Valid values: `channel`, `country`."},"description":"Optionally group by channel or country. Default is no grouping. Valid values: `channel`, `country`."},{"in":"query","name":"from","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."},{"in":"query","name":"to","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"anyOf":[{"anyOf":[{"type":"object","properties":{"countries":{"type":"array","items":{"type":"object","properties":{"viewerSessions":{"type":"number","description":"Number of new viewer sessions in the given time range."},"viewerSeconds":{"type":"number","description":"Total time of viewer sessions in seconds."},"viewerSessionsAvgDurationSeconds":{"type":"number","description":"Average duration of every started viewer session in seconds."},"viewerBitrateAverage":{"type":"number","description":"Average bit rate of all sessions over the selected time period. **Disregards country and continent filters.**"},"totalEgressBytes":{"type":"number","description":"Total amount of data (bytes) transferred to user sessions over the selected time period."},"totalIngressBytes":{"type":"number","description":"Total amount of data (bytes) transferred to ingest server over the selected time period. **Disregards country and continent filters.**"},"restartCount":{"type":"number","description":"Total times ingest has started over the selected time period. This includes controlled restarts."},"hlsEgressBytes":{"type":"number","description":"Total amount of HLS egress data (bytes) over the selected time period."},"clippingBytes":{"type":"number","description":"Total amount of clipping data (bytes) over the selected time period."},"rtmpEgressBytes":{"type":"number","description":"Total amount of RTMP egress data (bytes) over the selected time period."},"restreamBytes":{"type":"number","description":"Total amount of restream data (bytes) over the selected time period."},"timeToFirstFrameMedianMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Median time to first frame in milliseconds, represents the time from creation of player until media starts playing."},"roundTripTimeMedianMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Median round trip time in milliseconds, represents the time it takes for a request from a viewer to reach the server and get back."},"browserDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer browsers in percentages."},"osDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer OS in percentages."},"deviceDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer devices in percentages."},"country":{"type":"string","description":"Country name."},"countryCode":{"type":"string","description":"Country code in ISO 3166-1 alpha-2 format."}},"required":["country","countryCode"],"additionalProperties":false},"description":"List of countries with metrics."}},"required":["countries"],"additionalProperties":false},{"type":"object","properties":{"channels":{"type":"array","items":{"type":"object","properties":{"viewerSessions":{"type":"number","description":"Number of new viewer sessions in the given time range."},"viewerSeconds":{"type":"number","description":"Total time of viewer sessions in seconds."},"viewerSessionsAvgDurationSeconds":{"type":"number","description":"Average duration of every started viewer session in seconds."},"viewerBitrateAverage":{"type":"number","description":"Average bit rate of all sessions over the selected time period. **Disregards country and continent filters.**"},"totalEgressBytes":{"type":"number","description":"Total amount of data (bytes) transferred to user sessions over the selected time period."},"totalIngressBytes":{"type":"number","description":"Total amount of data (bytes) transferred to ingest server over the selected time period. **Disregards country and continent filters.**"},"restartCount":{"type":"number","description":"Total times ingest has started over the selected time period. This includes controlled restarts."},"hlsEgressBytes":{"type":"number","description":"Total amount of HLS egress data (bytes) over the selected time period."},"clippingBytes":{"type":"number","description":"Total amount of clipping data (bytes) over the selected time period."},"rtmpEgressBytes":{"type":"number","description":"Total amount of RTMP egress data (bytes) over the selected time period."},"restreamBytes":{"type":"number","description":"Total amount of restream data (bytes) over the selected time period."},"timeToFirstFrameMedianMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Median time to first frame in milliseconds, represents the time from creation of player until media starts playing."},"roundTripTimeMedianMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Median round trip time in milliseconds, represents the time it takes for a request from a viewer to reach the server and get back."},"browserDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer browsers in percentages."},"osDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer OS in percentages."},"deviceDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer devices in percentages."},"channelId":{"type":"string","description":"Channel ID that identifies a specific channel."}},"required":["channelId"],"additionalProperties":false},"description":"List of channels with metrics."}},"required":["channels"],"additionalProperties":false}]},{"type":"object","properties":{"viewerSessions":{"type":"number","description":"Number of new viewer sessions in the given time range."},"viewerSeconds":{"type":"number","description":"Total time of viewer sessions in seconds."},"viewerSessionsAvgDurationSeconds":{"type":"number","description":"Average duration of every started viewer session in seconds."},"viewerBitrateAverage":{"type":"number","description":"Average bit rate of all sessions over the selected time period. **Disregards country and continent filters.**"},"totalEgressBytes":{"type":"number","description":"Total amount of data (bytes) transferred to user sessions over the selected time period."},"totalIngressBytes":{"type":"number","description":"Total amount of data (bytes) transferred to ingest server over the selected time period. **Disregards country and continent filters.**"},"restartCount":{"type":"number","description":"Total times ingest has started over the selected time period. This includes controlled restarts."},"hlsEgressBytes":{"type":"number","description":"Total amount of HLS egress data (bytes) over the selected time period."},"clippingBytes":{"type":"number","description":"Total amount of clipping data (bytes) over the selected time period."},"rtmpEgressBytes":{"type":"number","description":"Total amount of RTMP egress data (bytes) over the selected time period."},"restreamBytes":{"type":"number","description":"Total amount of restream data (bytes) over the selected time period."},"timeToFirstFrameMedianMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Median time to first frame in milliseconds, represents the time from creation of player until media starts playing."},"roundTripTimeMedianMs":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Median round trip time in milliseconds, represents the time it takes for a request from a viewer to reach the server and get back."},"browserDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer browsers in percentages."},"osDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer OS in percentages."},"deviceDistribution":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Name of the item, e.g. Chrome, Firefox, Windows, iPhone, etc."},"value":{"type":"number","minimum":0,"maximum":100,"description":"Percentage of the item."}},"required":["key","value"],"additionalProperties":false},"description":"Distribution of viewer devices in percentages."}},"additionalProperties":false}]}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/analytics/time-series":{"get":{"operationId":"v1-analytics-timeSeries","summary":"Get time series","description":"Get time series.\n        Use the optional query parameters `channelId`, `countryCode` and `continent` to filter the results.\n        Time series are calculated for the time range between `from` and `to` (rounded to the nearest minute).\n        By default all available time series are returned, to limit the response use the optional query parameter `fields` to specify which metrics to return.\n\n**Note that `ingressBps`, `keyframeDelta`, `averagePacketArrivalTime` and `highestPacketArrivalTime` disregards `country` and `continent` filters and is not returned when grouped by country!**","tags":["Analytics"],"security":[{"Authorization":[]}],"parameters":[{"in":"query","name":"organizationId","schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"ID of the organization to get analytics data for."},"required":true,"description":"ID of the organization to get analytics data for."},{"in":"query","name":"channelId","schema":{"type":"string","description":"Filters for the specific channel."},"description":"Filters for the specific channel."},{"in":"query","name":"countryCode","schema":{"type":"string","description":"Country code (ISO 3166-1 alpha-2) to filter the data on a specific country. Special code `unknown` is used when a lookup was not possible.\n\nExample: `SE` to filter for Sweden."},"description":"Country code (ISO 3166-1 alpha-2) to filter the data on a specific country. Special code `unknown` is used when a lookup was not possible.\n\nExample: `SE` to filter for Sweden."},{"in":"query","name":"continent","schema":{"type":"string","description":"Continent code to filter the data for a specific continent.\nValid continent codes:\n- `AF`: Africa\n- `AN`: Antarctica\n- `AS`: Asia\n- `EU`: Europe\n- `NA`: North America\n- `OC`: Oceania\n- `SA`: South America\n- `unknown`: Unknown continent. Special code `unknown` is used when a lookup was not possible.\n\nExample: `EU` to filter for Europe.\n"},"description":"Continent code to filter the data for a specific continent.\nValid continent codes:\n- `AF`: Africa\n- `AN`: Antarctica\n- `AS`: Asia\n- `EU`: Europe\n- `NA`: North America\n- `OC`: Oceania\n- `SA`: South America\n- `unknown`: Unknown continent. Special code `unknown` is used when a lookup was not possible.\n\nExample: `EU` to filter for Europe.\n"},{"in":"query","name":"fields","schema":{"type":"string","description":"Limit the response by selecting specific fields as a comma separated list. Available fields are:\n\n- `viewers`\n- `egressBps`\n- `ingressBps`\n- `keyframeDeltaVideo`\n- `averagePacketArrivalTimeVideo`\n- `highestPacketArrivalTimeVideo`\n- `keyframeDeltaAudio`\n- `averagePacketArrivalTimeAudio`\n- `highestPacketArrivalTimeAudio`\n\nExample: `viewers,egressBps` to only get time series for viewers and egress."},"description":"Limit the response by selecting specific fields as a comma separated list. Available fields are:\n\n- `viewers`\n- `egressBps`\n- `ingressBps`\n- `keyframeDeltaVideo`\n- `averagePacketArrivalTimeVideo`\n- `highestPacketArrivalTimeVideo`\n- `keyframeDeltaAudio`\n- `averagePacketArrivalTimeAudio`\n- `highestPacketArrivalTimeAudio`\n\nExample: `viewers,egressBps` to only get time series for viewers and egress."},{"in":"query","name":"from","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."},{"in":"query","name":"to","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"anyOf":[{"anyOf":[{"type":"object","properties":{"countries":{"type":"array","items":{"type":"object","properties":{"viewers":{"description":"List of viewers over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"egressBps":{"description":"List of egress bitrate in bits per second (bps) over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"ingressBps":{"description":"List of Ingress bitrate in bits per second (bps) over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"keyframeDeltaVideo":{"description":"List of average keyframe delta in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"averagePacketArrivalTimeVideo":{"description":"List of average packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"highestPacketArrivalTimeVideo":{"description":"List of highest packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"keyframeDeltaAudio":{"description":"List of average keyframe delta in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"averagePacketArrivalTimeAudio":{"description":"List of average packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"highestPacketArrivalTimeAudio":{"description":"List of highest packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"country":{"type":"string","description":"Country name."},"countryCode":{"type":"string","description":"Country code in ISO 3166-1 alpha-2 format."}},"required":["country","countryCode"],"additionalProperties":false},"description":"List of countries with time series data."}},"required":["countries"],"additionalProperties":false},{"type":"object","properties":{"channels":{"type":"array","items":{"type":"object","properties":{"viewers":{"description":"List of viewers over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"egressBps":{"description":"List of egress bitrate in bits per second (bps) over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"ingressBps":{"description":"List of Ingress bitrate in bits per second (bps) over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"keyframeDeltaVideo":{"description":"List of average keyframe delta in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"averagePacketArrivalTimeVideo":{"description":"List of average packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"highestPacketArrivalTimeVideo":{"description":"List of highest packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"keyframeDeltaAudio":{"description":"List of average keyframe delta in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"averagePacketArrivalTimeAudio":{"description":"List of average packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"highestPacketArrivalTimeAudio":{"description":"List of highest packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"channelId":{"type":"string","description":"Channel ID that identifies a specific channel."}},"required":["channelId"],"additionalProperties":false},"description":"List of channels with time series data."}},"required":["channels"],"additionalProperties":false}]},{"type":"object","properties":{"viewers":{"description":"List of viewers over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"egressBps":{"description":"List of egress bitrate in bits per second (bps) over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"ingressBps":{"description":"List of Ingress bitrate in bits per second (bps) over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"keyframeDeltaVideo":{"description":"List of average keyframe delta in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"averagePacketArrivalTimeVideo":{"description":"List of average packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"highestPacketArrivalTimeVideo":{"description":"List of highest packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"keyframeDeltaAudio":{"description":"List of average keyframe delta in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"averagePacketArrivalTimeAudio":{"description":"List of average packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}},"highestPacketArrivalTimeAudio":{"description":"List of highest packet arrival time in milliseconds over time.","type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","description":"ISO 8601 timestamp."},"value":{"type":"number","description":"Value at the timestamp."}},"required":["timestamp","value"],"additionalProperties":false}}},"additionalProperties":false}]}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/clipping/{channelId}/m3u8":{"get":{"operationId":"v1-clipping-m3u8","summary":"Generate a clip from a recording","description":"Creates a custom clip of a recorded live stream.\n\nThis endpoint will return a m3u8 playlist which can be used in any HLS-compatible video player.\n\n**Please note that the response will be a 302 redirect, with the Location header set to the URL of your clip.**","tags":["Clipping"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel"},"required":true,"description":"ID of the channel"},{"in":"query","name":"from","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."},{"in":"query","name":"to","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."}],"responses":{"302":{"description":"Successful response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}},"/v1/clipping/{channelId}/mp4":{"get":{"operationId":"v1-clipping-mp4","summary":"Generate a clip from a recording","description":"Creates a custom clip of a recorded live stream.\n\nThis endpoint will return a mp4 which can be used in any compatible video player.\n\n**Please note that the response will be a 302 redirect, with the Location header set to the URL of your clip.**","tags":["Clipping"],"security":[{"Authorization":[]}],"parameters":[{"in":"path","name":"channelId","schema":{"type":"string","description":"ID of the channel"},"required":true,"description":"ID of the channel"},{"in":"query","name":"from","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."},{"in":"query","name":"to","schema":{"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`.","type":"string"},"required":true,"description":"Date in ISO 8601 format.\n\nExample: `2024-01-01T00:00:00Z`."}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{}}}},"400":{"description":"Invalid input data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.BAD_REQUEST"}}}},"401":{"description":"Authorization not provided","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.UNAUTHORIZED"}}}},"403":{"description":"Insufficient access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.FORBIDDEN"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.NOT_FOUND"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/error.INTERNAL_SERVER_ERROR"}}}}}}}},"components":{"schemas":{"error.BAD_REQUEST":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Invalid input data"},"code":{"type":"string","description":"The error code","example":"BAD_REQUEST"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Invalid input data error (400)","description":"The error information","example":{"code":"BAD_REQUEST","message":"Invalid input data","issues":[]}},"error.UNAUTHORIZED":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Authorization not provided"},"code":{"type":"string","description":"The error code","example":"UNAUTHORIZED"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Authorization not provided error (401)","description":"The error information","example":{"code":"UNAUTHORIZED","message":"Authorization not provided","issues":[]}},"error.FORBIDDEN":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Insufficient access"},"code":{"type":"string","description":"The error code","example":"FORBIDDEN"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Insufficient access error (403)","description":"The error information","example":{"code":"FORBIDDEN","message":"Insufficient access","issues":[]}},"error.NOT_FOUND":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Not found"},"code":{"type":"string","description":"The error code","example":"NOT_FOUND"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Not found error (404)","description":"The error information","example":{"code":"NOT_FOUND","message":"Not found","issues":[]}},"error.INTERNAL_SERVER_ERROR":{"type":"object","properties":{"message":{"type":"string","description":"The error message","example":"Internal server error"},"code":{"type":"string","description":"The error code","example":"INTERNAL_SERVER_ERROR"},"issues":{"description":"An array of issues that were responsible for the error","example":[],"type":"array","items":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["message","code"],"additionalProperties":false,"title":"Internal server error error (500)","description":"The error information","example":{"code":"INTERNAL_SERVER_ERROR","message":"Internal server error","issues":[]}}},"securitySchemes":{"Authorization":{"type":"http","scheme":"bearer"}}}}