DRM Download Callback
This document is a machine-translated draft and is currently undergoing review. Some content may be inaccurate or differ from the original Korean version. For the most precise information, refer to the Korean documentation.
Kollus VOD supports the DRM download callback feature, which verifies security permissions when a user downloads content to a device or plays a stored file in an offline state. This allows you to control sophisticated DRM policies in real time, such as whether downloads are permitted, the number of allowed playbacks, and the expiration period.
Notes
- Data integrity: If the type of response data does not match or is out of range, downloads and playback will be immediately blocked.
- Settings cannot be revoked: Setting values such as incorrectly transmitted expiration date and time (
expiration_date) cannot be arbitrarily modified or canceled within the Kollus system, so accurate values must be transmitted. - Server availability: Service use may be restricted if there are callback server response delays or failures, so a stable server environment is recommended.
How to configure the callback
The callback URL can be configured in the Kollus VOD console.
- Guide: DRM download callback
Callback flow
- Response specifications: The response data from the callback server must be returned in JWT(JSON Web Token) format.
- Header authentication:
X-KOLLUS-USERKEY: {CUSTOM_KEY}must be included in the HTTP response header.- Where to find: Kollus VOD console > [Settings] > [Custom key]
- Data types: All integer fields in JSON (
expiration_date,result,content_expired, etc.) must be passed asintegertype. (Sending as string type such as"1"will result in processing failure)
Callback types
DRM download callbacks are divided into three types according to their processing purpose.
kind 1(Download approval): When a user clicks the download button, the server assigns permissions and DRM policies.kind 2(Download completion notification): Sends result data when file saving to the device is 100% complete.kind 3(Offline playback permission check): Checks playback permissions and expiration status every time stored content is played.
Request specifications
delivery method
- Method:
POST - Content-Type:
application/x-www-form-urlencoded - Data Format: Transmitted with a JSON string in
JSONArrayformat included in theitemsparameter
kind 1, kind 2 request parameters
Items
| Parameter | Type | Required | Description |
|---|---|---|---|
kind | integer | ◯ | DRM download callback type
|
client_user_id | string | ◯ | User ID (the client_user_id entered when generating the JWT) |
player_id | string | ◯ | Kollus Player unique ID |
hardware_id | string | - | Hardware ID (provided when an identifiable value exists, such as in a Windows environment) |
device_name | string | - | Device model name |
media_content_key | string | ◯ | Media content key |
localtime | integer | - | Device time at the time of the request (Unix timestamp) |
uservalues | JSON string | - | Custom variables (uservalue0–uservalue99) |
kind 1, kind 2 items example
[
{
"kind": 1,
"media_content_key" : "{MEDIA_CONTENT_KEY}",
"client_user_id": "{END_USER_ID}",
"player_id": "{PLAYER_ID}",
"device_name": "{DEVICE_NAME}",
"uservalues": {
"uservalue0": "value0"
}
}
]
kind 3 request parameters
Items
| Parameter | Type | Required | Description |
|---|---|---|---|
kind | integer | ◯ | DRM download callback type
|
session_key | string | ◯ | Session key for expiration date renewal (used for consistency verification when requesting content_expire_reset) |
client_user_id | string | ◯ | User ID (the client_user_id entered when generating the JWT) |
player_id | string | ◯ | Kollus Player unique ID |
hardware_id | string | - | Hardware ID (provided when an identifiable value exists, such as in a Windows environment) |
device_name | string | - | Device model name |
media_content_key | string | ◯ | Media content key |
start_at | integer | ◯ | Local time at the time of the transfer request |
uservalues | JSON string | - | Custom variables (uservalue0–uservalue99) |
content_expired | integer | - | Playback expiration status
|
check_expired | integer | - | Verification validity period expiration status
|
reset_req | integer | - | Batch update request status
|
expiration_date | integer | - | Playback expiration date and time (Unix timestamp) |
localtime | integer | - | Device time at the time of the request (Unix timestamp) |
kind 3 items example
[
{
"kind": 3,
"session_key" : "{SESSION_KEY}",
"media_content_key" : "{MEDIA_CONTENT_KEY}",
"client_user_id": "{END_USER_ID}",
"player_id": "{PLAYER_ID}",
"device_name": "{DEVICE_NAME}",
"uservalues": {
"uservalue1": "value1"
}
}
]
Uservalues example
{
"uservalue0": "class_code_01",
"uservalue1": "product_code_02",
"uservalue99": "custom_code_03"
}
Response specifications
delivery method
DRM download callback responses must be encoded and returned in JWT(JSON Web Token) format for data security and integrity.
- Header:
X-KOLLUS-USERKEY: {CUSTOM_KEY} - Content-Type:
text/plain - Payload structure: Array structure containing individual content response objects within the
datafield{
"data": [
{ "kind": 1, "media_content_key": "...", "result": 1, ... },
{ "kind": 1, "media_content_key": "...", "result": 1, ... }
]
}
DRM expiration option specifications
Expiration options cannot be modified or revoked after being recorded in the Kollus system. Be sure to assign accurate Unix timestamp values.
| Option | Type | Allowed range | Description |
|---|---|---|---|
expiration_count | integer | 0 (no limit) – 1000 | Number of allowed playbacks |
expiration_date | integer | 0 (no limit) – 2145916799 (2037-12-31 23:59:59) | Playback expiration date and time (Unix timestamp) |
expiration_playtime | integer | 0 (no limit), 60 (60 seconds) – 604800 (7 days) | Playback time limit (sec) |
kind 1 response fields
The server determines whether to approve the user's download request and assigns the DRM policy for the content to be stored on the device.
Data items
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
kind | integer | ◯ | - | DRM download callback type
|
media_content_key | string | ◯ | - | Media content key |
expiration_date | integer | - | - | Playback expiration date and time (Unix timestamp) |
expiration_count | integer | - | - | Number of allowed playbacks (e.g., 10 → 10 playbacks allowed) |
expiration_playtime | integer | - | - | Playback time limit (e.g., 60 → 60 seconds, 3600 → 1 hour of playback available) |
expiration_playtime_type | integer | - | - | Playback time deduction method
|
result | integer | ◯ | - | Approval result
|
message | string | - | - | Guidance message to display on the player screen when playback is blocked (result: 0) (Kollus default error message is displayed if not entered) |
expiration_refresh_popup | integer | - | 0 | Whether to show renewal notification upon expiration
|
vmcheck | integer | - | 1 | (HTML5 Player for PC only) Whether to allow playback in a virtual machine(VM) environment
|
check_abuse | integer | - | 0 | Whether to call kind 3 during offline playback
|
offline_bookmark.download | integer | - | 0 | Whether to simultaneously download bookmark data
|
offline_bookmark.readonly | integer | - | 0 | Bookmark editing permissions in offline state
|
kind 1 response example
{
"data" : [
{
"kind": 1,
"media_content_key": "{MEDIA_CONTENT_KEY}",
"expiration_date": 1402444800,
"expiration_playtime": 1800,
"result": 1
}
]
}