--- title: "Create policy" slug: "drm-policy-create" tags: ["Click Multi DRM", "Media"] updated: 2026-09-17T10:12:33Z published: 2026-09-17T10:12:33Z canonical: "api.ncloud-docs.com/drm-policy-create" --- > ## Documentation Index > Fetch the complete documentation index at: https://api.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Create policy Available in Classic and VPC Create a DRM policy. Through detailed policy settings, you can define playback and security levels for each DRM type, as well as policies related to playback such as license validity period and persistent storage status. Note When creating policies, note the following: - For content with tracks split by resolution, the playback policy applies uniformly to all tracks. - The One Click Multi DRM service currently supports single-key licensing only; multi-track licensing will be supported in the future. - Detailed DRM policy settings for the One Click Multi DRM service support the same options as DoveRunner (formerly PallyCon) DRM. - Playback policy options: See [DoveRunner (formerly PallyCon) playback policy detailed options](https://doverunner.com/docs/en/content-security/multi-drm/license/license-token/#playback_policy). - Security policy options: See [DoveRunner (formerly PallyCon) security policy detailed options](https://doverunner.com/docs/en/content-security/multi-drm/license/license-token/#security_policy). - For details on the security level of devices supported by each DRM type, check the individual device support status. ## Request This section describes the request format. The method and URI are as follows: | Method | URI | | --- | --- | | POST | /api/v1/policy | ### Request headers For information about the headers common to all One Click Multi DRM APIs, see [One Click Multi DRM request headers](/docs/en/one-click-multi-drm-api-overview#%EC%9A%94%EC%B2%AD%ED%97%A4%EB%8D%94). ### Request body You can include the following data in the body of your request: | Field | Type | Required | Description | | --- | --- | --- | --- | | `policyName` | String | Required | Policy name - Enter 3-20 characters using a combination of English letters, numbers, and special character "_". | | `persistent` | Boolean | Required | Whether to save offline licenses - `true` \| `false` (default) - `true`: Keep the license. - `false`: Remove the license after playback (streaming). - Must be set to `true` when using `rentalDuration` (offline rental scenario). | | `rentalDuration` | Integer | Required | Validity period (seconds) during which content must be played for the first time after obtaining an offline license - 0-2,147,483,647 (default: 0) - Configure when using an offline rental scenario. | | `playbackDuration` | Integer | Required | License validity period (seconds) from the initial playback start time of the content - 0-2,147,483,647 (default: 0) | | `drmPolicyConfig` | Object | Required | Policy settings by DRM type | | `drmPolicyConfig.widevine` | Object | Required | Widevine type policy | | `drmPolicyConfig.widevine.useYn` | Boolean | Required | Widevine policy usage - `true` \| `false` - `true`: Enable - `false`: Disable | | `drmPolicyConfig.widevine.securityLevel` | Integer | Optional | Widevine security level value - `1` (default) \| `2` \| `3` \| `4` \| `5` - `1`: SW_SECURE_CRYPTO - `2`: SW_SECURE_DECODE - `3`: HW_SECURE_CRYPTO - `4`: HW_SECURE_DECODE - `5`: HW_SECURE_ALL (playable only on Widevine L1 devices) - Higher numbers indicate a higher level of security. | | `drmPolicyConfig.widevine.hdcp` | String | Optional | Security (HDCP) level for digital output - `HDCP_NONE` (default) \| `HDCP_V1` \| `HDCP_V2` \| `HDCP_V2_1` \| `HDCP_V2_2` \| `HDCP_NO_DIGITAL_OUTPUT` - Higher versions indicate a higher level of security. | | `drmPolicyConfig.widevine.cgms` | String | Optional | Security (CGMS-A) level for analog output - `CGMS_NONE` (default) \| `COPY_FREE` \| `COPY_ONCE` \| `COPY_NEVER` | | `drmPolicyConfig.widevine.disableAnalogOutputYn` | Boolean | Optional | Whether analog output is blocked - `true` \| `false` (default) - `true`: Block - `false`: Allow | | `drmPolicyConfig.widevine.hdcpSrmRule` | String | Optional | Whether content can be played when an HDCP device fails to process System Renewability Message (SRM) - `HDCP_SRM_RULE_NONE` (default) \| `CURRENT_SRM` - `HDCP_SRM_RULE_NONE`: Play the track. - `CURRENT_SRM`: The track can't be played. | | `drmPolicyConfig.widevine.deviceRevocation` | Boolean | Optional | Whether to allow license issuance for revoked (withdrawn from Widevine support) Android devices - `true` \| `false` (default) - `true`: Allow - `false`: Not allow | | `drmPolicyConfig.playready` | Object | Required | PlayReady type policy | | `drmPolicyConfig.playready.useYn` | Boolean | Required | PlayReady policy usage - `true` \| `false` - `true`: Enable - `false`: Disable | | `drmPolicyConfig.playready.securityLevel` | Integer | Optional | PlayReady security level value - `150` (default) \| `2000` \| `3000` - Set to `3000` when applying hardware DRM. - Higher numbers indicate a higher level of security. | | `drmPolicyConfig.playready.digitalVideoProtectionLevel` | Integer | Optional | Security level for digital video output - `100` (default) \| `250` \| `270` \| `300` \| `301` - Higher numbers indicate a higher level of security. | | `drmPolicyConfig.playready.analogVideoProtectionLevel` | Integer | Optional | Security level for analog video output - `100` (default) \| `150` \| `200` \| `201` - Higher numbers indicate a higher level of security. | | `drmPolicyConfig.playready.digitalAudioProtectionLevel` | Integer | Optional | Security level for digital audio output - `100` (default) \| `250` \| `300` \| `301` - Higher numbers indicate a higher level of security. | | `drmPolicyConfig.playready.hdcpUseYn` | Boolean | Optional | Whether to require Type 1 (HDCP V2.2 or later) when HDCP is applied according to output protection level (OPL) settings - `true` \| `false` (default) - `true`: Type 1 (HDCP 2.2 or later) required - `false`: HDCP not required - When set to `true`, only devices supporting HDCP 2.2 or later can play content. | | `drmPolicyConfig.fairplay` | Object | Required | FairPlay Streaming type policy | | `drmPolicyConfig.fairplay.useYn` | Boolean | Required | FairPlay Streaming policy usage - `true` \| `false` - `true`: Enable - `false`: Disable | | `drmPolicyConfig.fairplay.hdcpEnforcement` | String | Optional | Whether HDCP is applied and HDCP version - `-1` (default) \| `0` \| `1` - `-1`: HDCP not applied - `0`: HDCP Type 0 (regardless of version) - `1`: HDCP Type 1 (2.2 or later required) | | `drmPolicyConfig.fairplay.allowAirPlay` | Boolean | Optional | Whether to allow AirPlay - `true` (default) \| `false` - `true`: Allow - `false`: Not allow | | `drmPolicyConfig.fairplay.allowAvAdaptor` | Boolean | Optional | Whether output is permitted via digital AV adapter - `true` (default) \| `false` - `true`: Allow - `false`: Not allow | ### Request example The request example is as follows: ``` curl --location --request POST 'https://multi-drm.apigw.ntruss.com/api/v1/policy' \ --header 'x-ncp-apigw-timestamp: {Timestamp}' \ --header 'x-ncp-iam-access-key: {Access Key}' \ --header 'x-ncp-apigw-signature-v2: {API Gateway Signature}' \ --header 'Content-Type: application/json' \ --header 'x-ncp-region_code: KR' \ --data '{ "policyName": "mySamplePolicy", "persistent": false, "rentalDuration": 0, "playbackDuration": 0, "drmPolicyConfig": { "wideVine": { "useYn": true, "securityLevel": 1, "hdcp": "HDCP_NONE", "cgms": "CGMS_NONE", "disableAnalogOutputYn": true, "hdcpSrmRule": "HDCP_SRM_RULE_NONE", "deviceRevocation": true }, "playReady": { "useYn": true, "securityLevel": 150, "digitalVideoProtectionLevel": 100, "analogVideoProtectionLevel": 100, "digitalAudioProtectionLevel": 100, "hdcpUseYn": true }, "fairPlay": { "useYn": true, "hdcpEnforcement": -1, "allowAirPlay": true, "allowAvAdaptor": true } } }' ``` ## Response This section describes the response format. ### Response body The response body includes the following data: | Field | Type | Required | Description | | --- | --- | --- | --- | | `success` | Boolean | - | API processing result - `true` \| `false` - `true`: Succeeded - `false`: Failed | | `content` | Object | - | Policy information | | `content.disabled` | Boolean | - | Whether Sub Account is disabled - `true` \| `false` - `true`: Disabled - `false`: Enabled | | `content.policyId` | Integer | - | DRM policy ID - `0`: Basic | | `content.policyName` | String | - | Policy name | | `content.policyStatus` | String | - | Policy status - `CREATED` \| `CREATING` \| `READY` \| `DELETED` \| `UPDATING` - `CREATED`: Creation completed - `CREATING`: Creating - `READY`: Available - `DELETED`: Deletion completed - `UPDATING`: Updating | | `content.policyCreatedTime` | Integer | - | Policy creation date and time (millisecond) - Unix timestamp format | | `content.policyUpdateTime` | Integer | - | Policy modification date and time (millisecond) - Unix timestamp format | | `content.persistent` | Boolean | - | Whether to save the license offline - `true` \| `false` - `true`: Keep the license. - `false`: Remove the license after playback (streaming). | | `content.rentalDuration` | Integer | - | Validity period (second) after offline license acquisition during which content must be played for the first time | | `content.playbackDuration` | Integer | - | License validity period (seconds) from the initial playback start time of the content | | `content.drmPolicyConfig` | Object | - | Policy settings by DRM type | | `content.drmPolicyConfig.wideVine` | Object | - | Widevine type policy | | `content.drmPolicyConfig.wideVine.useYn` | Boolean | - | Widevine policy usage - `true` \| `false` - `true`: Enable - `false`: Disable | | `content.drmPolicyConfig.wideVine.securityLevel` | Integer | - | Widevine security level value - `1` \| `2` \| `3` \| `4` \| `5` - `1`: SW_SECURE_CRYPTO - `2`: SW_SECURE_DECODE - `3`: HW_SECURE_CRYPTO - `4`: HW_SECURE_DECODE - `5`: HW_SECURE_ALL (playable only on Widevine L1 devices) - Higher numbers indicate a higher level of security. | | `content.drmPolicyConfig.wideVine.hdcp` | String | - | Security (HDCP) level for digital output - `HDCP_NONE` \| `HDCP_V1` \| `HDCP_V2` \| `HDCP_V2_1` \| `HDCP_V2_2` \| `HDCP_NO_DIGITAL_OUTPUT` - Higher versions indicate a higher level of security. | | `content.drmPolicyConfig.wideVine.cgms` | String | - | Security (CGMS-A) level for analog output - `CGMS_NONE` \| `COPY_FREE` \| `COPY_ONCE` \| `COPY_NEVER` | | `content.drmPolicyConfig.wideVine.disableAnalogOutputYn` | Boolean | - | Whether analog output is blocked - `true` \| `false` - `true`: Block - `false`: Allow | | `content.drmPolicyConfig.wideVine.hdcpSrmRule` | String | - | Whether content can be played when an HDCP device fails to process System Renewability Message (SRM) - `HDCP_SRM_RULE_NONE` \| `CURRENT_SRM` - `HDCP_SRM_RULE_NONE`: Play the track. - `CURRENT_SRM`: The track can't be played. | | `content.drmPolicyConfig.wideVine.deviceRevocation` | Boolean | - | Whether to allow license issuance for revoked (withdrawn from Widevine support) Android devices - `true` \| `false` - `true`: Allow - `false`: Not allow | | `content.drmPolicyConfig.playReady` | Object | - | PlayReady type policy | | `content.drmPolicyConfig.playReady.useYn` | Boolean | - | PlayReady policy usage - `true` \| `false` - `true`: Enable - `false`: Disable | | `content.drmPolicyConfig.playReady.securityLevel` | Integer | - | PlayReady security level value - `150` \| `2000` \| `3000` - Set to `3000` when applying hardware DRM. - Higher numbers indicate a higher level of security. | | `content.drmPolicyConfig.playReady.digitalVideoProtectionLevel` | Integer | - | Security level for digital video output - `100` \| `250` \| `270` \| `300` \| `301` - Higher numbers indicate a higher level of security. | | `content.drmPolicyConfig.playReady.analogVideoProtectionLevel` | Integer | - | Security level for analog video output - `100` \| `150` \| `200` \| `201` - Higher numbers indicate a higher level of security. | | `content.drmPolicyConfig.playReady.digitalAudioProtectionLevel` | Integer | - | Security level for digital audio output - `100` \| `250` \| `300` \| `301` - Higher numbers indicate a higher level of security. | | `content.drmPolicyConfig.playReady.hdcpUseYn` | Boolean | - | Whether to require Type 1 (HDCP V2.2 or later) when HDCP is applied according to output protection level (OPL) settings - `true` \| `false` - `true`: Type 1 (HDCP 2.2 or later) required - `false`: HDCP not required - When set to `true`, only devices supporting HDCP 2.2 or later can play content. | | `content.drmPolicyConfig.fairPlay` | Object | - | FairPlay Streaming type policy | | `content.drmPolicyConfig.fairPlay.useYn` | Boolean | - | FairPlay Streaming policy usage - `true` \| `false` - `true`: Enable - `false`: Disable | | `content.drmPolicyConfig.fairPlay.hdcpEnforcement` | String | - | Whether HDCP is applied and HDCP version - `-1` \| `0` \| `1` - `-1`: HDCP not applied - `0`: HDCP Type 0 (regardless of version) - `1`: HDCP Type 1 (2.2 or later required) | | `content.drmPolicyConfig.fairPlay.allowAirPlay` | Boolean | - | Whether to allow AirPlay - `true` \| `false` - `true`: Allow - `false`: Not allow | | `content.drmPolicyConfig.fairPlay.allowAvAdaptor` | Boolean | - | Whether output is permitted via digital AV adapter - `true` \| `false` - `true`: Allow - `false`: Not allow | ### Response status codes For information about the HTTP status codes common to all One Click Multi DRM APIs, see [One Click Multi DRM response status codes](/docs/en/one-click-multi-drm-api-overview#%EC%9D%91%EB%8B%B5%EC%83%81%ED%83%9C%EC%BD%94%EB%93%9C). ### Response example The response example is as follows: ``` { "success": true, "content": { "disabled": false, "policyId": 81, "policyName": "mySamplePolicy", "policyStatus": "CREATED", "policyCreatedTime": 1756968701258, "policyUpdateTime": 1756968701264, "persistent": false, "rentalDuration": 0, "playbackDuration": 0, "drmPolicyConfig": { "wideVine": { "useYn": true, "securityLevel": 1, "hdcp": "HDCP_NONE", "cgms": "CGMS_NONE", "disableAnalogOutputYn": true, "hdcpSrmRule": "HDCP_SRM_RULE_NONE", "deviceRevocation": true }, "playReady": { "useYn": true, "securityLevel": 150, "digitalVideoProtectionLevel": 100, "analogVideoProtectionLevel": 100, "digitalAudioProtectionLevel": 100, "hdcpUseYn": true }, "fairPlay": { "useYn": true, "hdcpEnforcement": -1, "allowAirPlay": true, "allowAvAdaptor": true } } } } ```