> This page is for Harmonic.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://mediakind.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://mediakind.ferndocs.com/_mcp/server.

# Get DRM System

GET https://device.example.com:443/cluster1/vos-api/scrambling/v1/drm/systems/{id}

Get a DRM system.

Reference: https://mediakind.ferndocs.com/harmonic/api/vos/scrambling-drm/get-drm-system

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Path parameters

- `id` (string, required) — id

## Response

### 200

OK

- `encryptionInterfaceType` (enum, required) — Encryption Intreface Type
  - Allowed values: `e_HKMS_MIN`, `e_HKMS_FULL`, `e_WIDEVINE`, `e_KSM_CPIX`, `e_INTERNAL`, `e_FIXED_KEY`, `e_VERIMATRIX_CPIX`, `e_APPLE_CPIX`, `e_HKMS_CPIX`
- `id` (string, required) — ID of DRM System
- `keyManagementServers` (list of com.harmonicinc.vos.app.scrambling.drm.model.DrmKms, required) — Key Management Servers
- `name` (string, required) — Name of DRM System
- `requestorId` (string, required) — Requestor Id
- `cpixDocumentVersion` (enum, optional) — CPIX document version
  - Allowed values: `e_2_2`, `e_2_3`
- `customHeader` (com.harmonicinc.vos.app.scrambling.drm.model.DrmCustomHeader, optional)
- `drmGroups` (list of com.harmonicinc.vos.app.scrambling.drm.model.DrmGroup, optional) — List of DRM Group
- `embeddedDrmTrackFilters` (list of com.harmonicinc.vos.app.scrambling.drm.model.EmbeddedDrmTrackFilter, optional) — Embedded DRM filtering profile properties. It is required in NMS configuration
- `enforceKeyEncryptionValidation` (boolean, optional) — Boolean value to verify that the key from the Harmonic CPIX response is encrypted
- `httpMethod` (enum, optional) — Option to use GET HTTP method for requesting DRM metadata
  - Allowed values: `POST`, `GET`
- `insertContentKeyPeriodIndex` (boolean, optional) — Boolean to force inserting of ContentKeyPeriod@Index into Harmonic CPIX request when key rotation is disabled (for backward compatibility purpose only)
- `insertDeliveryKeyCertificate` (boolean, optional) — Boolean to control inserting of DeliveryKeyCertificate into Harmonic CPIX request
- `insertDrmSystemIdInRequest` (boolean, optional) — Boolean to control inserting DRM system ID or not during key retrieval
- `keyDefaultValue` (string, optional)
- `keyRequestSign` (boolean, optional) — Enabling / disabling digital signature of key requests
- `keyResponsesSignatureValidate` (boolean, optional) — Enabling / disabling the validation of key responses signature
- `keyRotationSettings` (com.harmonicinc.vos.app.scrambling.drm.model.KeyRotationSettings, optional)
- `kmsRequestHlsTsCommonEncryptionScheme` (enum, optional) — Common Encryption Scheme for HLS-sTS
  - Allowed values: `NONE`, `CBC1`, `CBCS`
- `resources` (list of com.harmonicinc.vos.app.scrambling.drm.model.DrmResource, optional) — Resources
- `useProxy` (boolean, optional) — Boolean value to use / not use Proxy endpoints
- `widevineConfig` (com.harmonicinc.vos.app.scrambling.drm.model.WidevineConfig, optional)

## Errors

### 401 Unauthorized Error

Unauthorized

- `any`

### 403 Forbidden Error

Forbidden

- `any`

### 404 Not Found Error

Drm System not found

- `any`

## Types

### com.harmonicinc.vos.app.scrambling.drm.model.DrmKms

- `httpsCertValidation` (boolean, required) — Enable Certificate Validation when making HTTPS Connection to KMS Server
- `rank` (integer, required) — Rank of KMS Server
- `url` (string, required) — URL of KMS Server

### com.harmonicinc.vos.app.scrambling.drm.model.DrmCustomHeader

- `fieldName` (string, required) — Custom Header Field Name
- `fieldValue` (string, required) — Custom Header Field Value

### com.harmonicinc.vos.app.scrambling.drm.model.DrmGroup

- `drms` (list of string, required) — List of DRM system id
- `id` (string, required) — ID of DRM Group
- `name` (string, required) — DRM Group Name
- `packagingType` (enum, required) — Packaging Type
  - Allowed values: `e_HLS`, `e_DASH`, `e_SS`, `e_CMAF`

### com.harmonicinc.vos.app.scrambling.drm.model.EmbeddedDrmTrackFilter

- `drmTrackFilterProfileProperties` (com.harmonicinc.vos.labwizard.rest.model.DrmTrackFilterProfileProperties, optional)
- `id` (string, optional)
- `name` (string, optional)

### com.harmonicinc.vos.app.scrambling.drm.model.KeyRotationSettings

- `controller` (enum, required) — Is Key period controlled by VOS or KMS ('KMS' by default). The 'controller' property is applicable only for the START_END mode.
  - Allowed values: `KMS`, `VOS`
- `mode` (enum, required) — 'INDEX' or 'START_END' ContentKeyPeriod field configuration ('INDEX' by default)
  - Allowed values: `INDEX`, `START_END`
- `numberOfKeyPeriods` (integer, required) — Number of ContentKeyPeriods for CPIX request (1 by default)
- `preFetchRequestRelativeTime` (integer, required) — Time point (in percentages) after the the start of the first period, when new content key(s) should be pre-requested (80% by default). Currently property is applicable only for the START_END mode.

### com.harmonicinc.vos.app.scrambling.drm.model.DrmResource

- `id` (string, required) — ID of DRM Resource
- `name` (string, required) — Resource Name
- `packagingType` (enum, required) — Packaging Type
  - Allowed values: `e_HLS`, `e_DASH`, `e_SS`, `e_CMAF`
- `resourceId` (string, required) — Resource Id
- `drmTrackFilterId` (string, optional) — DRM filtering profile Id
- `widevineCustomContentProtection` (string, optional) — Widevine Custom Content Protection

### com.harmonicinc.vos.app.scrambling.drm.model.WidevineConfig

- `signer` (string, required) — Identifies the entity sending the message
- `signingIv` (string, required) — Base64-encoded AES init vector used to sign request
- `signingKey` (string, required) — Base64-encoded AES key used to sign request

### com.harmonicinc.vos.labwizard.rest.model.DrmTrackFilterProfileProperties

- `drmTrackFilterProperties` (list of com.harmonicinc.vos.labwizard.rest.model.DrmTrackFilterProperty, required) — List of drm track filter properties
- `name` (string, required) — DRM track filter name

### com.harmonicinc.vos.labwizard.rest.model.DrmTrackFilterProperty

- `name` (string, required) — An optional description of the track type
- `trackType` (string, required) — trackType
- `audioStreamSelections` (list of com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_AudioStreamSelectionItem, optional) — audioStreamSelections
- `clearOutput` (boolean, optional) — clearOutput
- `videoStreamSelections` (list of com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem, optional) — videoStreamSelections

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_AudioStreamSelectionItem

- `audioCodecSelection` (enum, optional) — audioCodecSelection
  - Allowed values: `AAC_LC`, `HE_AAC_V1`, `HE_AAC_V2`, `AC_3`, `E_AC_3`, `MPEGH`, `ALL`
- `audioLanguageSelections` (list of string, optional) — audioLanguageSelections
- `bitrateRange` (com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_AudioStreamSelectionItem_AudiobitrateRange, optional)
- `withAudioGain` (enum, optional) — withAudioGain
  - Allowed values: `ENABLE`, `DISABLE`, `ALL`

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem

- `bitrateRange` (com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_BitrateRange, optional)
- `frameRateRange` (com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_FrameRateRange, optional)
- `horizontalResolutionRange` (com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_HorizontalResolutionRange, optional)
- `verticalResolutionRange` (com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_VerticalResolutionRange, optional)
- `videoCodecSelection` (enum, optional) — videoCodecSelection
  - Allowed values: `H_265`, `H_264`, `ALL`

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_AudioStreamSelectionItem_AudiobitrateRange

- `maxBitrateInbps` (integer, optional) — maxBitrateInbps
- `minBitrateInbps` (integer, optional) — minBitrateInbps

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_BitrateRange

- `esBitrateRange` (com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_BitrateRange_EsBitrateRange, optional)
- `exclude` (boolean, optional)
- `maxBitrateInbps` (integer, optional)
- `minBitrateInbps` (integer, optional)
- `tsBitrateRange` (com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_BitrateRange_TsBitrateRange, optional)

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_FrameRateRange

- `maxFrameRate` (integer, optional)
- `minFrameRate` (integer, optional)

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_HorizontalResolutionRange

- `maxHorizaontalResolution` (integer, optional) — Obsolete
- `maxHorizontalResolution` (integer, optional)
- `minHorizaontalResolution` (integer, optional) — Obsolete
- `minHorizontalResolution` (integer, optional)

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_VerticalResolutionRange

- `maxVerticalResolution` (integer, optional)
- `minVerticalResolution` (integer, optional)

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_BitrateRange_EsBitrateRange

- `maxBitrateInbps` (integer, optional)
- `minBitrateInbps` (integer, optional)

### com.harmonicinc.vos.labwizard.rest.model.ManipulationProfileProperties_VideoStreamSelectionItem_BitrateRange_TsBitrateRange

- `maxBitrateInbps` (integer, optional)
- `minBitrateInbps` (integer, optional)

## Examples

**Response**

```json
{
  "encryptionInterfaceType": "e_HKMS_MIN",
  "id": "string",
  "keyManagementServers": [
    {
      "httpsCertValidation": true,
      "rank": 1,
      "url": "string"
    }
  ],
  "name": "string",
  "requestorId": "string",
  "cpixDocumentVersion": "e_2_2",
  "customHeader": {
    "fieldName": "string",
    "fieldValue": "string"
  },
  "drmGroups": [
    {
      "drms": [
        "string"
      ],
      "id": "string",
      "name": "string",
      "packagingType": "e_HLS"
    }
  ],
  "embeddedDrmTrackFilters": [
    {
      "drmTrackFilterProfileProperties": {
        "drmTrackFilterProperties": [
          {
            "name": "string",
            "trackType": "string",
            "audioStreamSelections": [
              {
                "audioCodecSelection": "AAC_LC",
                "audioLanguageSelections": [
                  "string"
                ],
                "bitrateRange": {
                  "maxBitrateInbps": 1,
                  "minBitrateInbps": 1
                },
                "withAudioGain": "ENABLE"
              }
            ],
            "clearOutput": true,
            "videoStreamSelections": [
              {
                "bitrateRange": {
                  "esBitrateRange": {
                    "maxBitrateInbps": 1,
                    "minBitrateInbps": 1
                  },
                  "exclude": true,
                  "maxBitrateInbps": 1,
                  "minBitrateInbps": 1,
                  "tsBitrateRange": {
                    "maxBitrateInbps": 1,
                    "minBitrateInbps": 1
                  }
                },
                "frameRateRange": {
                  "maxFrameRate": 1,
                  "minFrameRate": 1
                },
                "horizontalResolutionRange": {
                  "maxHorizaontalResolution": 1,
                  "maxHorizontalResolution": 1,
                  "minHorizaontalResolution": 1,
                  "minHorizontalResolution": 1
                },
                "verticalResolutionRange": {
                  "maxVerticalResolution": 1,
                  "minVerticalResolution": 1
                },
                "videoCodecSelection": "H_265"
              }
            ]
          }
        ],
        "name": "string"
      },
      "id": "string",
      "name": "string"
    }
  ],
  "enforceKeyEncryptionValidation": true,
  "httpMethod": "POST",
  "insertContentKeyPeriodIndex": true,
  "insertDeliveryKeyCertificate": true,
  "insertDrmSystemIdInRequest": true,
  "keyDefaultValue": "string",
  "keyRequestSign": true,
  "keyResponsesSignatureValidate": true,
  "keyRotationSettings": {
    "controller": "KMS",
    "mode": "INDEX",
    "numberOfKeyPeriods": 1,
    "preFetchRequestRelativeTime": 1
  },
  "kmsRequestHlsTsCommonEncryptionScheme": "NONE",
  "resources": [
    {
      "id": "string",
      "name": "string",
      "packagingType": "e_HLS",
      "resourceId": "string",
      "drmTrackFilterId": "string",
      "widevineCustomContentProtection": "string"
    }
  ],
  "useProxy": true,
  "widevineConfig": {
    "signer": "string",
    "signingIv": "string",
    "signingKey": "string"
  }
}
```

**SDK Code**

```python
import requests

url = "https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems/id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```