> 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.

# Create DRM System

POST https://device.example.com:443/cluster1/vos-api/scrambling/v1/drm/systems
Content-Type: application/json

Create a DRM system for OTT encryption.

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

## Authentication

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

## Request

### Body (application/json)

This endpoint expects a com.harmonicinc.vos.app.scrambling.drm.model.DrmSystem.

- `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)

## 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)

### 201

Created

## Errors

### 401 Unauthorized Error

Unauthorized

- `any`

### 403 Forbidden Error

Forbidden

- `any`

### 404 Not Found Error

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

### Example 1

**Request**

```json
{
  "encryptionInterfaceType": "e_HKMS_MIN",
  "id": "string",
  "keyManagementServers": [
    {
      "httpsCertValidation": true,
      "rank": 1,
      "url": "string"
    }
  ],
  "name": "string",
  "requestorId": "string"
}
```

**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"

payload = {
    "encryptionInterfaceType": "e_HKMS_MIN",
    "id": "string",
    "keyManagementServers": [
        {
            "httpsCertValidation": True,
            "rank": 1,
            "url": "string"
        }
    ],
    "name": "string",
    "requestorId": "string"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"encryptionInterfaceType":"e_HKMS_MIN","id":"string","keyManagementServers":[{"httpsCertValidation":true,"rank":1,"url":"string"}],"name":"string","requestorId":"string"}'
};

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"
	"strings"
	"net/http"
	"io"
)

func main() {

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

	payload := strings.NewReader("{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	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")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}"

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.post("https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems', [
  'body' => '{
  "encryptionInterfaceType": "e_HKMS_MIN",
  "id": "string",
  "keyManagementServers": [
    {
      "httpsCertValidation": true,
      "rank": 1,
      "url": "string"
    }
  ],
  "name": "string",
  "requestorId": "string"
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "encryptionInterfaceType": "e_HKMS_MIN",
  "id": "string",
  "keyManagementServers": [
    [
      "httpsCertValidation": true,
      "rank": 1,
      "url": "string"
    ]
  ],
  "name": "string",
  "requestorId": "string"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

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

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()
```

### Example 2

**Request**

```json
{
  "encryptionInterfaceType": "e_HKMS_MIN",
  "id": "string",
  "keyManagementServers": [
    {
      "httpsCertValidation": true,
      "rank": 1,
      "url": "string"
    }
  ],
  "name": "string",
  "requestorId": "string"
}
```

**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"

payload = {
    "encryptionInterfaceType": "e_HKMS_MIN",
    "id": "string",
    "keyManagementServers": [
        {
            "httpsCertValidation": True,
            "rank": 1,
            "url": "string"
        }
    ],
    "name": "string",
    "requestorId": "string"
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"encryptionInterfaceType":"e_HKMS_MIN","id":"string","keyManagementServers":[{"httpsCertValidation":true,"rank":1,"url":"string"}],"name":"string","requestorId":"string"}'
};

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"
	"strings"
	"net/http"
	"io"
)

func main() {

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

	payload := strings.NewReader("{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	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")

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

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}"

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.post("https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems', [
  'body' => '{
  "encryptionInterfaceType": "e_HKMS_MIN",
  "id": "string",
  "keyManagementServers": [
    {
      "httpsCertValidation": true,
      "rank": 1,
      "url": "string"
    }
  ],
  "name": "string",
  "requestorId": "string"
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://device.example.com/cluster1/vos-api/scrambling/v1/drm/systems");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"encryptionInterfaceType\": \"e_HKMS_MIN\",\n  \"id\": \"string\",\n  \"keyManagementServers\": [\n    {\n      \"httpsCertValidation\": true,\n      \"rank\": 1,\n      \"url\": \"string\"\n    }\n  ],\n  \"name\": \"string\",\n  \"requestorId\": \"string\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "encryptionInterfaceType": "e_HKMS_MIN",
  "id": "string",
  "keyManagementServers": [
    [
      "httpsCertValidation": true,
      "rank": 1,
      "url": "string"
    ]
  ],
  "name": "string",
  "requestorId": "string"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

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

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()
```