---
title: "트랜스코딩 & 패키징 API 가이드"
description: "HTTP API를 통해 도브러너 트랜스코딩 & 패키징 서비스를 사용하는 방법을 안내합니다."
---
> For the complete documentation index, see [llms.txt](/llms.txt).

import YouTubeEmbed from '../../../../../components/YouTubeEmbed.astro';

본 문서는 HTTP API를 통해 도브러너 트랜스코딩 & 패키징 서비스를 사용하는 방법을 안내합니다.

## 동영상 튜토리얼 및 샘플 코드

다음의 동영상 튜토리얼과 API 샘플 코드를 참고해 T&P 서비스를 연동할 수 있습니다.

<YouTubeEmbed videoId="L4_qcSAMOBA" />

<br/>

|개발 언어 |GitHub 저장소 |
|---|---|
|TypeScript | [https://github.com/doverunner/tnp-request-sample-typescript](https://github.com/doverunner/tnp-request-sample-typescript) |
|Python| [https://github.com/doverunner/tnp-request-sample-python](https://github.com/doverunner/tnp-request-sample-python) |
|Java| [https://github.com/doverunner/tnp-request-sample-java](https://github.com/doverunner/tnp-request-sample-java) |

## API 공통 규격

본 문서에 명시된 모든 API에는 아래와 같은 공통 규격이 적용됩니다.

### API 인증 토큰

T&P API 호출 시 아래 과정을 통해 생성한 인증 토큰을 설정해야 합니다.

**1단계: Base64 인코딩된 인증 매개변수 생성**

 1. 웹 브라우저로 도브러너 데브콘솔의 [Base64 Enc/Dec 페이지](https://devconsole.doverunner.com/common-tools/#base64)에 접속합니다.
 2. `Encrypt` 옵션이 선택된 상태에서 `EmailID:AccessKey` 형태의 값을 왼쪽 필드에 입력합니다.
 3. 아래 스크린샷 이미지와 같이 Base64 인코딩된 값이 화면 오른쪽에 출력됩니다.
 4. 다음 단계에서 사용을 위해 출력된 값을 복사해둡니다.

![](/img/content-security/tnp-token-auth-base64.png)

> `EmailID`와 `AccessKey` 값은 각각 도브러너 서비스 가입 시 입력한 이메일 주소와 가입 후 콘솔에 표시되는 엑세스 키를 입력해야 합니다.

**2단계: 인코딩된 매개변수를 이용해 인증 토큰 생성**

1단계에서 생성한 Base64 인코딩 결과 값을 아래 토큰 API 요청의 `Authorization` 헤더에 설정해 API를 호출합니다.

- URL: `https://tnp.doverunner.com/api/token/{siteId}`
- Method: GET

#### 경로 매개변수

| 매개변수 | 유형 | 설명 |
| --- | --- | --- |
| siteId | 네자리 영숫자 | 콘솔에 표시되는 도브러너 사이트 ID |

#### 요청 헤더

| 헤더 명 | 설명 | 
| --- | --- |
| Authorization | 기본 인증 : Basic base64encode(userId:accessKey) | 

**요청 예제**

```
GET /api/token/DEMO HTTP/1.1
Authorization: basic authInfo
Host: tnp.doverunner.com
```

#### 응답 데이터 필드

| 필드 | 유형 | 값 |
| --- | --- | --- |
| error_code | String | 에러 코드 |
| error_message | String | 에러 메시지 |
| data.token | String | API 인증 토큰 |

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 112
{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "token" : "Bearer valid-token"
  }
} 
```

### API 요청 헤더

Authorization 헤더에 토큰 API를 통해 발급된 데이터를 설정하여 T&P API를 호출할 수 있습니다.

#### 공통 응답 규격

**응답 상태**

| HTTP 상태 코드 | 설명 | 
| --- | --- |
| 200 | 성공 | 
| 401 | JWT 토큰 규격이 잘못 되었거나 사용자 정보를 찾을 수 없습니다. | 
| 403 | API 이용 권한이 없습니다. | 

**응답 데이터 필드**

| 키 | 유형 | 값 |
| --- | --- | --- |
| error_code | String | 0000: 성공 / 실패 시 해당 에러코드 | 
| error_message | String | 에러 메시지 | 
| data | Json | API 수행 결과 | 

### 리전 코드

T&P API 중 일부는 다음과 같은 리전 코드를 요청 및 응답 데이터에 사용합니다.

| 리전 코드 | 리전 명 | AWS 리전 코드 |
| --- | --- | --- |
| `RG004` | Oregon | us-west-2 |
| `RG011` | Seoul | ap-northeast-2 |
| `RG013` | Singapore | ap-southeast-1 |


## TNP 연동 정보 API

### 연동 정보 조회

TNP 연동과 관련된 정보를 조회하는 API 입니다.

- URL: `https://tnp.doverunner.com/api/setting/{siteId}`
- Method: GET

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 

**요청 예제**

```json
GET /api/setting/DEMO HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.api.com
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data | Object | 연동 관련 정보 | 
| data.site_id | String | 사이트 ID | 
| data.region | String | TNP packaging 을 진행할 리전의 리전코드 | 
| data.service_status | String | TNP 사용 여부(SE000:사용중, SE001: 미사용) | 
| data.trial_pack_cnt | Number | 트라이얼인 경우 패키징한 횟수 | 
| data.site_key | String | 서비스 사이트 연동 과정에 필요한 암호화 키 (콘솔 '사이트 설정' 페이지에서 확인) | 
| data.access_key | String | 패키저, 라이선스 토큰 등 추가적 연동 보안에 사용되는 키 (콘솔 '사이트 설정' 페이지에서 확인) | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 230

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "site_id" : "DEMO",
    "region" : "RG011",
    "service_status" : "SE000",
    "trial_pack_cnt" : 0,
    "site_key" : null,
    "access_key" : null
  }
}
```

### 연동 정보 수정

TNP 연동과 관련된 정보를 수정하는 API 입니다.

- URL: `https://tnp.doverunner.com/api/setting/{siteId}`
- Method: PUT

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 

##### 요청 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| site_id | String | 콘솔에 표시되는 도브러너 사이트 ID |
| region | String | TNP packaging 을 진행할 리전의 리전코드 |

**요청 예제**

```json
PUT /api/setting/DEMO HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Content-Length: 76
Host: tnp.api.com

{
  "site_id" : "DEMO",
  "region" : "RG004"
}
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data | Object | 연동 관련 정보 | 
| data.site_id | String | 사이트 ID | 
| data.region | String | TNP packaging 을 진행할 리전의 리전코드 | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 156

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "site_id" : "DEMO",
    "region" : "RG004"
  }
}
```




## 작업 API

### 작업 생성

트랜스코딩 & 패키징 작업을 생성하는 API입니다.

- URL: `https://tnp.doverunner.com/api/job/{siteId}`
- Method: POST

##### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID (네 자리 영숫자) | 

##### 요청 데이터 필드

| 필드                                                   | 유형      | 필수 여부       | 설명                                                                                                                                                                                                                                                        | 
|------------------------------------------------------|---------|-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| job_name                                             | String  | Yes        | 작업명                                                                                                                                                                                                                                                       | 
| content_id                                           | String  | Yes        | 콘텐트 ID. 동일한 콘텐츠에 대해서는 T&P, FWM Session Manager(`cid`), Anti-Piracy 전반에 걸쳐 동일한 `content_id`/`cid` 값을 사용하세요 — ID가 일치하지 않으면 제품 간 연동이 정상적으로 이루어지지 않습니다.                                                                                                                                                                                                                                                    | 
| input                                                | Object  | Yes        | 입력 콘텐트 정보                                                                                                                                                                                                                                                 | 
| input.storage_id                                     | String  | Yes        | 입력 스토리지 ID                                                                                                                                                                                                                                                | 
| input.files                                          | Array   | Yes        | 입력 파일 정보                                                                                                                                                                                                                                                  | 
| input.files.[].file_type                             | String  | Yes        | 파일 유형 : multi, video, audio<br/> - `multi` : 입력 파일의 비디오와 오디오 트랙 이용. 오디오 트랙 정보가 포함된 파일이어야 합니다. <br/> - `video`: 입력파일의 비디오 트랙을 이용. 오디오 트랙 정보는 사용되지 않음. `multi`와 `video` 유형은 하나의 작업에 함께 사용될 수 없습니다. <br/> - `audio`: 입력 파일의 오디오 트랙을 이용. 오디오 트랙 정보가 포함된 파일이어야 합니다. | 
| input.files.[].file_path                             | String  | Yes        | 입력 파일 경로                                                                                                                                                                                                                                                  | 
| input.files.[].audios                                | Array   |             | 오디오 정보(파일 타입이 `multi` 혹은 `audio`인 경우 작성 필요.)                                                                                                                                                                                                              | 
| input.files.[].audios.[].in                          | Object  | Yes        | 입력 오디오 트랙                                                                                                                                                                                                                                                 | 
| input.files.[].audios.[].in.track                    | Number  |             | 입력 오디오 트랙 인덱스. 기본값: 0                                                                                                                                                                                                                                     | 
| input.files.[].audios.[].remap                       | Object  | Yes        | 오디오 트랙 매핑(Remapping)                                                                                                                                                                                                                                      | 
| input.files.[].audios.[].remap.track                 | Number  |             | 매핑된 오디오 트랙 인덱스. 기본값: 0                                                                                                                                                                                                                                    | 
| input.subtitles                                      | Array   |             | 자막 정보                                                                                                                                                                                                                                                     | 
| input.subtitles.[].file_path                         | String  | Yes        | 자막 파일 경로                                                                                                                                                                                                                                                  | 
| input.subtitles.[].language                          | String  | Yes        | 자막 언어                                                                                                                                                                                                                                                     | 
| output                                               | Object  | Yes        | 출력 태스크 정보                                                                                                                                                                                                                                                 | 
| output.storage_id                                    | String  | Yes        | 출력 스토리지 ID                                                                                                                                                                                                                                                | 
| output.path                                          | String  | Yes        | 출력 폴더 경로. `output.forensic_watermarking.enabled`가 `true`인 경우, 이 값은 `wm-contents/<output_path>/<content_id>/` 경로의 `<output_path>`가 됩니다 — FWM [Session URL API](/ko/content-security/forensic-watermarking/embedding/session-manager/#세션-url-api) 호출 시 동일한 값을 `output_path`로 전달하고(`prefix_folder: "wm-contents"`도 함께 전달), 이 값과 일치시켜야 합니다.                                                                                                                                                                                                                                                 | 
| output.default_language                              | String  |             | 오디오 트랙 기본 언어 코드                                                                                                                                                                                                                                           | 
| output.transcodings                                  | Array   | Yes        | 트랜스코딩 정보                                                                                                                                                                                                                                                  | 
| output.transcodings.[].track_id                      | String  | Yes        | 트랙 ID                                                                                                                                                                                                                                                     | 
| output.transcodings.[].track_type                    | String  | Yes        | 트랙 유형 : video, audio                                                                                                                                                                                                                                      | 
| output.transcodings.[].track_name                    | String  |             | 트랙 명 : audio                                                                                                                                                                                                                                              | 
| output.transcodings.[].codec                         | String  | Yes        | 비디오/오디오 코덱 이름 (video: h264, h265. audio: AAC, AC3) <br/>오디오 코덱의 경우, source file(input file)의 오디오 코덱 정보와 동일해야 합니다.                                                                                                                  | 
| output.transcodings.[].height                        | Number  | Yes        | 영상 높이                                                                                                                                                                                                                                                     | 
| output.transcodings.[].width                         | Number  | Yes        | 영상 너비                                                                                                                                                                                                                                                     | 
| output.transcodings.[].bitrate_mode                  | String  |             | 비트레이트 모드 (cbr, vbr)                                                                                                                                                                                                                                       | 
| output.transcodings.[].bitrate                       | Number  | Yes   | 비트레이트 (cbr).                                                                                                                                                                                                                                              | 
| output.transcodings.[].min_bitrate                   | Number  |             | 최소 비트레이트 (bps). VBR용.                                                                                                                                                                                                                                     | 
| output.transcodings.[].max_bitrate                   | Number  |             | 최대 비트레이트 (bps). VBR용.                                                                                                                                                                                                                                     | 
| output.transcodings.[].crf                           | Number  |             | bitrate 관련 옵션 - vbr 인 경우, bitrate 혹은 crf 값(0~63)을 정해주어야 합니다.                                                                                                                                                                                              | 
| output.transcodings.[].bandwidth                     | Number  |             | 영상 대역폭                                                                                                                                                                                                                                                    | 
| output.transcodings.[].sample_rate                   | Number  |             | 오디오 샘플링 레이트                                                                                                                                                                                                                                               | 
| output.transcodings.[].language                      | String  |             | 오디오 트랙 언어 코드(ISO 639-1, 두자리 영문 소문자)                                                                                                                                                                                                                       |
| output.transcodings.[].sources                       | Array   |             | 매핑된 오디오 트랙 목록                                                                                                                                                                                                                                             | 
| output.transcodings.[].sources.[].track              | Number  |             | 매핑된 오디오 트랙 인덱스                                                                                                                                                                                                                                            | 
| output.packaging                                     | Object  | Yes        | 패키징 정보                                                                                                                                                                                                                                                    | 
| output.packaging.dash                                | Boolean |             | DASH 패키징 출력 여부. dash, hls, cmaf 중에 한가지 타입은 필수 입니다. 설정 시 cmaf 은 false 가 되어야 합니다.                                                                                                                                                                           | 
| output.packaging.hls                                 | Boolean |             | HLS 패키징 출력 여부. dash, hls, cmaf 중에 한가지 타입은 필수 입니다. 설정 시 cmaf 은 false 가 되어야 합니다.                                                                                                                                                                            | 
| output.packaging.cmaf                                | Boolean |             | CMAF 패키징 출력 여부. dash, hls, cmaf 중에 한가지 타입은 필수 입니다. 설정 시 dash, hls 는 false 가 되어야 합니다.                                                                                                                                                                      | 
| output.packaging.option                              | Object  |             | 패키징 옵션                                                                                                                                                                                                                                                    | 
| output.packaging.option.min_buffer_time              | Number  |             | MPD Representation data rate의 정의에 사용되는 공통 기간을 초 단위로 지정합니다. 최소값: 2                                                                                                                                                                                         | 
| output.packaging.option.enable_average_bandwidth_mpd | Boolean |             | MPD의 각 트랙에 대해 평균 대역폭을 사용합니다. (기본값: false)                                                                                                                                                                                                                 | 
| ~~output.packaging.option.mp4_subtitle~~             | Boolean |             | **Deprecated** <br/> 이 매개변수를 사용하여 출력 자막 형식을 Embedded MP4로 설정할 수 있습니다. 파라미터를 생략하면 기본적으로 Text VTT 형식의 자막이 생성됩니다. (기본값: false)                                                                                                                               | 
| output.packaging.option.subtitle_format.dash         | String  |             | 출력 자막 형식(text_vtt, mp4_ttml, mp4_vtt)을 설정할 수 있습니다. 작업 생성시 DASH 패키징 출력을 요청한다면 넣을 수 있는 옵션 값입니다. (기본값: text_vtt)                                                                                                                                             | 
| output.packaging.option.subtitle_format.hls          | String |             | 출력 자막 형식(text_vtt, mp4_ttml, mp4_vtt)을 설정할 수 있습니다. 작업 생성시 HLS 패키징 출력을 요청한다면 넣을 수 있는 옵션 값입니다. (기본값: text_vtt)                                                                                                                                              | 
| output.packaging.option.subtitle_format.cmaf         | String |             | 출력 자막 형식(text_vtt, mp4_ttml)을 설정할 수 있습니다. 작업 생성시 CMAF 패키징 출력을 요청한다면 넣을 수 있는 옵션 값입니다. (기본값: text_vtt)                                                                                                                                               | 
| output.drm                                           | Object  |             | DRM 정보                                                                                                                                                                                                                                                    | 
| output.drm.enabled                                   | Boolean |             | DRM 암호화 적용 여부. 기본값: false                                                                                                                                                                                                                                 | 
| output.drm.option                                    | Object  |             | DRM 옵션                                                                                                                                                                                                                                                    | 
| output.drm.option.multi_key                          | Boolean |             | 멀티키 패키징 적용 여부. 기본값: false                                                                                                                                                                                                                                 | 
| output.drm.option.max_sd_height                      | Number  |             | SD 트랙으로 패키징될 최대 해상도. 기본값: 480                                                                                                                                                                                                                             | 
| output.drm.option.max_hd_height                      | Number  |             | HD 트랙으로 패키징될 최대 해상도. 기본값: 1080                                                                                                                                                                                                                            | 
| output.drm.option.max_uhd1_height                    | Number  |             | UHD 트랙으로 패키징될 최대 해상도. 기본값: 2160                                                                                                                                                                                                                           | 
| output.drm.option.skip_audio_encryption              | Boolean |             | 오디오 트랙 암호화 제외 여부. 기본값: false(오디오 암호화)                                                                                                                                                                                                                     | 
| output.drm.option.clear_lead                         | Number  |             | 영상 초반에 암호화 비활성화 구간을 적용 (초 단위). 기본값: 0                                                                                                                                                                                                                     | 
| output.drm.option.generate_tracktype_manifests       | Boolean |             | 멀티키 패키징 시 트랙별 매니페스트(플레이리스트) 파일 생성. SD부터 UHD 트랙까지 포함된 어댑티브 스트림의 경우, `SD_ONLY`, `SD_HD`, `SD_UHD` 세 가지 매니페스트가 생성됨. 기본값: false                                                                                                                               | 
| output.forensic_watermarking                         | Object  |             | 포렌식 워터마킹 정보                                                                                                                                                                                                                                               | 
| output.forensic_watermarking.enabled                 | Boolean |             | 포렌식 워터마킹 적용 여부. 기본값: false                                                                                                                                                                                                                                | 
| output.job_noti_id                                   | Number |             | TNP 작업 상태 업데이트를 위해 알림 ID를 사용                                                                                                                                                                                                                              | 
| output.scale_option_type                             | String |             | scale option 값(none, fit, fit_with_padding, fill_with_crop, stretch, stretch_with_par)                                                                                                                                                                                                                              |
**요청 예제**

```
POST /api/job/DEMO HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Content-Length: 1541
Host: tnp.doverunner.com

{
  "job_name" : "jobName",
  "content_id" : "test-cid",
  "input" : {
    "storage_id" : "input-storage-id",
    "files" : [ {
      "file_type" : "multi",
      "file_path" : "input/input-file1.mp4",
      "audios" : [ {
        "in" : {
          "track" : 0
        },
        "remap" : {
          "track" : 0
        }
      } ]
    } ],
    "subtitles" : [ {
      "file_path" : "input/subtitle/en.vtt",
      "language" : "eng"
    } ]
  },
  "output" : {
    "storage_id" : "output-storage-id",
    "path" : "output",
    "transcodings" : [ {
      "track_id" : "video1",
      "track_type" : "video",
      "codec" : "h264",
      "height" : 1080,
      "width" : 1920,
      "bitrate_mode" : "cbr",
      "bitrate" : 10000,
      "frame_rate" : 23.98
    }, {
      "track_id" : "audio1",
      "track_type" : "audio",
      "track_name" : "english",
      "codec" : "aac",
      "bitrate_mode" : "cbr",
      "bitrate" : 128000,
      "language" : "en",
      "sources" : [ {
        "track" : 0
      } ]
    } ],
    "packaging" : {
      "dash" : true,
      "hls" : false,
      "cmaf" : false,
      "option" : {
        "min_buffer_time" : 2,
        "enable_average_bandwidth_mpd" : false,
        "subtitle_format": {
          "dash": "text_vtt"
        }
      }
    },
    "drm" : {
      "enabled" : true,
      "option" : {
        "multi_key" : false,
        "max_sd_height" : 0,
        "max_hd_height" : 0,
        "max_uhd1_height" : 0,
        "skip_audio_encryption" : false,
        "clear_lead" : 0,
        "generate_tracktype_manifests" : false
      }
    },
    "forensic_watermarking" : {
      "enabled" : true
    }
    "job_noti_id":1,
    "scale_option_type":"fit_with_padding"
  }
} 
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 |
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 |
| data.job_id | Number | 생성된 작업 ID |

**응답 예제**

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 96

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "job_id" : 123
  }
} 
```

### 작업 목록 검색

생성된 작업의 목록을 검색할 수 있는 API입니다.

- URL: `https://tnp.doverunner.com/api/job/{siteId}`
- Method: GET

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID |

#### 요청 매개변수

| 매개변수             | 유형     | 설명                                                           | 
|------------------|--------|--------------------------------------------------------------|
| from             | String | 검색 기간 시작일 (YYYY-MM-DD)                                       | 
| to               | String | 검색 기간 종료일 (YYYY-MM-DD)                                       | 
| job_name         | String | 검색할 작업명                                                      | 
| region           | String | 검색할 리전 코드                                                    | 
| page_unit        | Number | 검색 결과 수 지정. 기본값: 25, 최대: 1000.                               | 
| page_index       | Number | 검색 결과 페이지 번호. 기본값: 1                                         | 
| job_id           | Number | 검색할 작업 ID                                                    | 
| job_id_operator  | String | 검색할 작업 ID 조건 표현식 (eq, gt, goe, lt, loe)                                           | 
| content_id       | String | 검색할 콘텐츠 ID                                                   | 
| streaming_format | Array | 검색할 스트리밍 포맷 : dash / hls / cmaf / dash,hls                   | 
| job_status       | Array | 검색할 작업 상태                                                    | 
| job_type         | Array | 검색할 보안 유형: drm / forensic_watermark / drm,forensic_watermark | 
| codec            | Array | 검색할 트랜스코딩용 output video codec: h264 / h265 / h264,h265       | 
| time_zone        | String | 검색에 사용될 시간대 설정. (+HH:mm) 기본값: +00:00                         | 

**요청 예제**

```
GET /api/job/DEMO?from=2022-05-01&to=2022-05-13&job_name=test-job&region=RG011&page_unit=20&page_index=1&job_id=123&content_id=test-content-id&security=forensic_watermark&streaming_format=dash&time_zone=%2B00%3A00 HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com 
```

#### 응답 데이터 필드

| 필드                         | 유형 | 설명             | 
|----------------------------| --- |----------------|
| error_code                 | String | 에러 코드          | 
| error_message              | String | 에러 메시지         | 
| time_zone                  | String | 시간대            | 
| total_count                | Number | 전체 검색 결과 수     | 
| data                       | Array | 작업 목록          | 
| data.[].job_id             | Number | 작업 ID          | 
| data.[].job_name           | String | 작업 명           | 
| data.[].content_id         | String | 콘텐츠 ID         | 
| data.[].job_status         | String | 작업 상태 코드       | 
| data.[].drm                | Boolean | DRM 적용 여부      | 
| data.[].forensic_watermark | Boolean | 포렌식 워터마킹 적용 여부 | 
| data.[].dash               | Boolean | DASH 패키징 여부    | 
| data.[].hls                | Boolean | HLS 패키징 여부     | 
| data.[].cmaf               | Boolean | CMAF 패키징 여부    | 
| data.[].codec              | Boolean | 트랜스코딩 비디오 코덱   | 
| data.[].region             | String | 작업 생성 리전       | 
| data.[].reg_time           | String | 작업 생성 시간       | 
| data.[].start_time         | String | 작업 시작 시간       | 
| data.[].update_time        | String | 작업 최종 업데이트 시간  | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 933

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "time_zone" : "+00:00",
  "total_count" : 3,
  "data" : [ {
    "job_id" : 1,
    "job_name" : "test job 1",
    "content_id" : "test cid 1",
    "job_status" : "TP100200",
    "drm" : true,
    "forensic_watermark" : true,
    "dash" : true,
    "hls" : true,
    "cmaf": false,
    "codec": "h264"
    "region" : "RG011",
    "reg_time" : "2022-05-20T00:00:00"
  }, {
    "job_id" : 2,
    "job_name" : "test job 2",
    "content_id" : "test cid 2",
    "job_status" : "TP500",
    "drm" : true,
    "forensic_watermark" : false,
    "dash" : true,
    "hls" : false,
    "cmaf": false,
    "codec": "h265"
    "region" : "RG011",
    "reg_time" : "2022-05-20T00:00:00"
  }, {
    "job_id" : 3,
    "job_name" : "test job 3",
    "content_id" : "test cid 3",
    "job_status" : "TP700200",
    "drm" : true,
    "forensic_watermark" : true,
    "dash" : true,
    "hls" : true,
    "cmaf": false,
    "codec": "h264"
    "region" : "RG011",
    "reg_time" : "2022-05-20T00:00:00"
  } ]
} 
```

### 작업 상세 조회

패키징 작업의 상세 정보를 조회하는 API입니다.

- URL: `https://tnp.doverunner.com/api/job/{siteId}/{jobId}`
- Method: GET

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 
| jobId | 작업 ID | 

#### 요청 매개변수

| 매개변수 | 필수 여부 | 설명 | 
| --- | --- | --- |
| time_zone | Yes | 검색할 시간대. (+HH:mm) 기본값: +00:00 | 

**요청 예제**

```
GET /api/job/DEMO/1?time_zone=%2B00%3A00 HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com 
```

#### 응답 데이터 필드

| 필드                                                        | 유형 | 설명                                                                                                                                                                                                                                                       | 
|-----------------------------------------------------------| --- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| error_code                                                | String | 에러 코드                                                                                                                                                                                                                                                    | 
| error_message                                             | String | 에러 메시지                                                                                                                                                                                                                                                   | 
| time_zone                                                 | String | 시간대                                                                                                                                                                                                                                                      | 
| data                                                      | Object | 작업 정보                                                                                                                                                                                                                                                    | 
| data.job_id                                               | Number | 작업 ID                                                                                                                                                                                                                                                    | 
| data.job_name                                             | String | 작업 명                                                                                                                                                                                                                                                     | 
| data.job_status                                           | String | 작업 상태 코드                                                                                                                                                                                                                                                 | 
| data.region                                               | String | 리전 코드                                                                                                                                                                                                                                                    | 
| data.content_id                                           | String | 콘텐츠 ID                                                                                                                                                                                                                                                   | 
| data.input                                                | Object | 입력 콘텐츠 정보                                                                                                                                                                                                                                                | 
| data.input.storage_id                                     | String | 입력 스토리지 ID                                                                                                                                                                                                                                               | 
| data.input.files                                          | Array | 입력 파일 정보                                                                                                                                                                                                                                                 | 
| data.input.files.[].file_type                             | String | 파일 유형 : multi, video, audio<br/> - `multi` : 입력 파일의 비디오와 오디오 트랙 이용. 오디오 트랙 정보가 포함된 파일이어야 합니다. <br/> - `video`: 입력파일의 비디오 트랙을 이용. 오디오 트랙 정보는 사용되지 않음. `multi`와 `video` 유형은 하나의 작업에 함께 사용될 수 없습니다. <br/> - `audio`: 입력 파일의 오디오 트랙을 이용. 오디오 트랙 정보가 포함된 파일이어야 합니다. | 
| data.input.files.[].file_path                             | String | 입력 파일 경로                                                                                                                                                                                                                                                 | 
| data.input.files.[].audios                                | Array | 오디오 정보                                                                                                                                                                                                                                                   | 
| data.input.files.[].audios.[].in.track                    | Number | 입력 오디오 트랙 인덱스                                                                                                                                                                                                                                            | 
| data.input.files.[].audios.[].remap.track                 | Number | 매핑된 오디오 트랙 인덱스                                                                                                                                                                                                                                           | 
| data.input.subtitles                                      | Array | 자막 정보                                                                                                                                                                                                                                                    | 
| data.input.subtitles.[].file_path                         | String | 자막 파일 경로                                                                                                                                                                                                                                                 | 
| data.input.subtitles.[].language                          | String | 자막 언어                                                                                                                                                                                                                                                    | 
| data.output                                               | Object | 출력 태스크 정보                                                                                                                                                                                                                                                | 
| data.output.storage_id                                    | String | 출력 스토리지 ID                                                                                                                                                                                                                                               | 
| data.output.path                                          | String | 출력 폴더 경로                                                                                                                                                                                                                                                 | 
| data.output.default_language                              | String | 오디오 트랙 기본 언어 코드                                                                                                                                                                                                                                                 | 
| data.output.transcodings                                  | Array | 트랜스코딩 정보                                                                                                                                                                                                                                                 | 
| data.output.transcodings.[].track_id                      | String | 트랙 ID                                                                                                                                                                                                                                                    | 
| data.output.transcodings.[].track_type                    | String | 트랙 유형 : video, audio                                                                                                                                                                                                                                     | 
| data.output.transcodings.[].track_name                    | String | 트랙 명 : audio                                                                                                                                                                                                                                             | 
| data.output.transcodings.[].codec                         | String | 비디오/오디오 코덱 이름 (video: h264, h265. audio: AAC, AC3)                                                                                                                                                                                | 
| data.output.transcodings.[].height                        | Number | 영상 높이                                                                                                                                                                                                                                                    | 
| data.output.transcodings.[].width                         | Number | 영상 너비                                                                                                                                                                                                                                                    | 
| data.output.transcodings.[].bitrate_mode                  | String | 비트레이트 모드 (cbr, vbr)                                                                                                                                                                                                                                      | 
| data.output.transcodings.[].bitrate                       | Number | 비트레이트 (bps).                                                                                                                                                                                                                                             | 
| data.output.transcodings.[].min_bitrate                   | Number | 최소 비트레이트 (bps). VBR용.                                                                                                                                                                                                                                    | 
| data.output.transcodings.[].max_bitrate                   | Number | 최대 비트레이트 (bps). VBR용.                                                                                                                                                                                                                                    | 
| data.output.transcodings.[].crf                           | Number | 품질 기준으로 비트레이트 설정합니다. vbr 인 경우만 사용 가능합니다. 범위 : 0~69                                                                                                                                                                                                       | 
| data.output.transcodings.[].frame_rate                    | Number | 영상 프레임레이트                                                                                                                                                                                                                                                | 
| data.output.transcodings.[].bandwidth                     | Number | 영상 대역폭                                                                                                                                                                                                                                                   | 
| data.output.transcodings.[].sample_rate                   | Number | 오디오 샘플링레이트                                                                                                                                                                                                                                               | 
| data.output.transcodings.[].language                      | String | 오디오 트랙 언어 코드 (ISO 639-1, 두자리 영문 소문자)                                                                                                                                                                                                                     | 
| data.output.transcodings.[].sources                       | Array | 오디오 트랙 리매핑 목록                                                                                                                                                                                                                                            | 
| data.output.transcodings.[].sources.[].track              | Number | 매핑된 오디오 트랙 인덱스                                                                                                                                                                                                                                           | 
| data.output.packaging                                     | Object | 패키징 정보                                                                                                                                                                                                                                                   | 
| data.output.packaging.dash                                | Boolean | DASH 패키징 출력 여부. dash, hls, cmaf 중에 한가지 타입은 필수 입니다. 설정 시 cmaf 은 false 가 되어야 합니다.                                                                                                                                                                          | 
| data.output.packaging.hls                                 | Boolean | HLS 패키징 출력 여부. dash, hls, cmaf 중에 한가지 타입은 필수 입니다. 설정 시 cmaf 은 false 가 되어야 합니다.                                                                                                                                                                           |
| data.output.packaging.cmaf                                | Boolean | CMAF 패키징 출력 여부. 설정 시 dash, hls 는 false 가 되어야 합니다.                                                                                                                                                                                                        |
| data.output.packaging.option                              | Object | 패키징 옵션                                                                                                                                                                                                                                                   | 
| data.output.packaging.option.min_buffer_time              | Number | MPD Representation data rate의 정의에 사용되는 공통 기간을 초 단위로 지정합니다.                                                                                                                                                                                               | 
| data.output.packaging.option.enable_average_bandwidth_mpd | Boolean | MPD의 각 트랙에 대해 평균 대역폭을 사용합니다.                                                                                                                                                                                                                             | 
| ~~output.packaging.option.mp4_subtitle~~                  | Boolean | **Deprecated** <br/> 이 매개변수를 사용하여 출력 자막 형식을 Embedded MP4로 설정할 수 있습니다. 파라미터를 생략하면 기본적으로 Text VTT 형식의 자막이 생성됩니다. (기본값: false)                                                                                                                              | 
| output.packaging.option.subtitle_format.dash              | String  | 출력 자막 형식(text_vtt, mp4_ttml, mp4_vtt)을 설정할 수 있습니다. 작업 생성시 DASH 패키징 출력을 요청한다면 넣을 수 있는 옵션 값입니다. (기본값: text_vtt)                                                                                                                                            | 
| output.packaging.option.subtitle_format.hls               | String | 출력 자막 형식(text_vtt, mp4_ttml, mp4_vtt)을 설정할 수 있습니다. 작업 생성시 HLS 패키징 출력을 요청한다면 넣을 수 있는 옵션 값입니다. (기본값: text_vtt)                                                                                                                                             | 
| output.packaging.option.subtitle_format.cmaf              | String | 출력 자막 형식(text_vtt, mp4_ttml)을 설정할 수 있습니다. 작업 생성시 CMAF 패키징 출력을 요청한다면 넣을 수 있는 옵션 값입니다. (기본값: text_vtt)                                                                                                                                               | 
| data.output.drm                                           | Object | DRM 정보                                                                                                                                                                                                                                                   | 
| data.output.drm.enabled                                   | Boolean | DRM 암호화 적용 여부                                                                                                                                                                                                                                            | 
| data.output.drm.option                                    | Object | DRM 옵션                                                                                                                                                                                                                                                   | 
| data.output.drm.option.multi_key                          | Boolean | 멀티키 패키징 적용 여부                                                                                                                                                                                                                                            | 
| data.output.drm.option.max_sd_height                      | Number | SD 트랙으로 패키징될 최대 해상도                                                                                                                                                                                                                                      | 
| data.output.drm.option.max_hd_height                      | Number | HD 트랙으로 패키징될 최대 해상도                                                                                                                                                                                                                                      | 
| data.output.drm.option.max_uhd1_height                    | Number | UHD 트랙으로 패키징될 최대 해상도                                                                                                                                                                                                                                     | 
| data.output.drm.option.skip_audio_encryption              | Boolean | 오디오 트랙 암호화 제외 여부                                                                                                                                                                                                                                         | 
| data.output.drm.option.clear_lead                         | Number | 영상 초반 암호화 비활성화 구간 (초 단위)                                                                                                                                                                                                                                 | 
| data.output.drm.option.generate_tracktype_manifests       | Boolean | 멀티키 패키징 시 트랙별 매니페스트(플레이리스트) 파일 생성. SD부터 UHD 트랙까지 포함된 어댑티브 스트림의 경우, SD_ONLY, SD_HD, SD_UHD 세 가지 매니페스트가 생성됨.                                                                                                                                               | 
| data.output.forensic_watermarking                         | Object | 포렌식 워터마킹 정보                                                                                                                                                                                                                                              | 
| data.output.forensic_watermarking.enabled                 | Boolean | 포렌식 워터마킹 적용 여부                                                                                                                                                                                                                                           | 
| data.output.job_noti_id                                   | Number | 작업 알림 ID 설정                                                                                                                                                                                                                                           | 
| data.reg_time                                             | String | 작업 등록 시간                                                                                                                                                                                                                                                 | 
| data.start_time                                           | String | 작업 시작 시간                                                                                                                                                                                                                                                 | 
| data.update_time                                          | String | 작업 최종 업데이트 시간                                                                                                                                                                                                                                            |

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 1542

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "time_zone" : "+00:00",
  "data" : {
    "job_name" : "jobName",
    "content_id" : "test-cid",
    "input" : {
      "storage_id" : "12312312312312312312312312312312",
      "files" : [ {
        "file_type" : "multi",
        "file_path" : "del-short-hevc.mp4",
        "audios" : [ {
          "in" : {
            "track" : 0
          },
          "remap" : {
            "track" : 0
          }
        } ]
      } ]
    },
    "output" : {
      "storage_id" : "32132132132132132132131231232132",
      "path" : "saas-pack",
      "transcodings" : [ {
        "track_id" : "video1",
        "track_type" : "video",
        "codec" : "H265",
        "height" : 1080,
        "width" : 1920,
        "bitrate" : 2500,
        "frame_rate" : 23.98
      }, {
        "track_id" : "video2",
        "track_type" : "video",
        "codec" : "H264",
        "height" : 720,
        "width" : 1080,
        "bitrate" : 1500,
        "frame_rate" : 23.98
      }, {
        "track_id" : "audio1",
        "track_type" : "audio",
        "codec" : "aac",
        "sources" : [ {
          "track" : 0
        } ]
      } ],
      "packaging" : {
        "dash" : true,
        "hls" : true,
        "cmaf" : false
      },
      "drm" : {
        "enabled" : true
      },
      "forensic_watermarking" : {
        "enabled" : true
      },
      "job_noti_id":1
    },
    "job_id" : 1,
    "region" : "RG011",
    "job_status" : "TP100100",
    "start_time" : "2022-05-20T17:03:41",
    "reg_time" : "2022-05-20T17:02:17"
  }
} 
```

### 작업 중지

패키징 작업을 중지할 때 사용하는 API입니다.

- URL: `https://tnp.doverunner.com/api/job/{siteId}/{jobId}/stop`
- Method: PUT

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 
| jobId | 작업 ID | 

**요청 예제**

```
PUT /api/job/DEMO/1/stop HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com 
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data | Object | 작업 정보 | 
| data.job_id | Number | 작업 ID | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 94

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "job_id" : 1
  }
} 
```

### 작업 재시작

중지된 작업을 재시작하는 API입니다.

- URL: `https://tnp.doverunner.com/api/job/{siteId}/{jobId}/restart`
- Method: PUT

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 
| jobId | 작업 ID | 

**요청 예제**

```
PUT /api/job/DEMO/1/restart HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data | Object | 작업 정보 | 
| data.job_id | Number | 작업 ID | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 94

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "job_id" : 1
  }
} 
```

## 스토리지 API

### 스토리지 ID 생성

패키징 작업에 사용할 스토리지를 등록하고 ID를 생성하는 API입니다.

- URL: `https://tnp.doverunner.com/api/storage/{siteId}`
- Method: POST

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 

#### 요청 데이터 필드

| 필드 | 유형 | 필수 여부 | 설명 | 
| --- | --- | --- | --- |
| storage_name | String | Yes | 스토리지 명 | 
| aws_bucket | String | Yes | S3 버킷 명 | 
| io_type | String | Yes | 입력/출력 유형 (input, output) | 
| access_key_id | String | Yes | S3 액세스 키 ID | 
| secret_key | String | Yes | S3 비밀 키 | 
| region | String | Yes | 리전 코드 | 
| description | String |  | 스토리지 설명 | 

**요청 예제**

```json
POST /api/storage/DEMO HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Content-Length: 295
Host: tnp.doverunner.com

{
  "storage_name" : "test-input-storage",
  "aws_bucket" : "watermark-input-seoul",
  "io_type" : "input",
  "access_key_id" : "valid-test-storage-access-key-id",
  "secret_key" : "valid-in-test-storage-secret-key",
  "region" : "RG011",
  "description" : "This storage is test input bucket."
} 
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data.storage_id | String | 생성된 스토리지 ID | 

**응답 예제**

```json
| HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 115

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "storage_id" : "input-storage-id"
  }
}
```

### 스토리지 목록 검색

등록된 스토리지 목록을 검색할 수 있는 API입니다.

- URL: `https://tnp.doverunner.com/api/storage/{siteId}`
- Method: GET

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 

#### 요청 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| from | 검색 기간 시작일 (YYYY-MM-DD) | 
| to | 검색 기간 종료일 (YYYY-MM-DD) | 
| storage_name | 검색할 스토리지 명 | 
| region | 검색할 스토리지 리전 코드 | 
| page_unit | 검색 결과 수 지정. 기본값: 25, 최대: 1000. | 
| page_index | 검색 결과 페이지 번호. 기본값: 1 | 
| time_zone | 검색할 시간대 (+HH:mm) 기본값: +00:00 | 

**요청 예제**

```
GET /api/storage/DEMO?from=2022-05-01&to=2022-05-13&storage_name=test-storage&region=RG011&page_unit=20&page_index=1&time_zone=%2B00%3A00 HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com 
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| time_zone | String | 시간대 | 
| data | Array | 스토리지 목록 | 
| data.[].storage_id | String | 스토리지 ID | 
| data.[].storage_name | String | 스토리지 명 | 
| data.[].aws_bucket | String | 버킷 명 | 
| data.[].io_type | String | 입출력 유형 (input / output) | 
| data.[].region | String | 스토리지 리전 | 
| data.[].reg_time | String | 스토리지 등록 일시 YYYY-MM-DD’T’hh-mm-ss | 
| data.[].update_time | String | 최종 업데이트 일시 YYYY-MM-DD’T’hh-mm-ss | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 775

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "time_zone" : "+00:00",
  "data" : [ {
    "storage_id" : "e42e5fc74bee455db0fc2d79038dbabb",
    "storage_name" : "test storage 1",
    "aws_bucket" : "test bucket 1",
    "io_type" : "input",
    "region" : "RG011",
    "reg_time" : "2022-05-20T00:00:00"
  }, {
    "storage_id" : "50273cb8e91242f3ad6b9dd49faf8f03",
    "storage_name" : "test storage 2",
    "aws_bucket" : "test bucket 2",
    "io_type" : "input",
    "region" : "RG011",
    "reg_time" : "2022-05-20T00:00:00"
  }, {
    "storage_id" : "69798b703f3c46b996a1335a54c3fa0e",
    "storage_name" : "test storage 3",
    "aws_bucket" : "test bucket 3",
    "io_type" : "input",
    "region" : "RG011",
    "reg_time" : "2022-05-20T00:00:00"
  } ]
}  
```

### 스토리지 상세 조회

등록된 스토리지에 대한 상세 정보를 조회하는 API입니다.

- URL: `https://tnp.doverunner.com/api/storage/{siteId}/{storageId}`
- Method: GET

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 
| storageId | 스토리지 ID | 

#### 요청 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| time_zone | 검색 시간대 (+HH:mm) 기본값: +00:00 | 

**요청 예제**

```
GET /api/storage/DEMO/12312312312312312312312312312312?time_zone=%2B00%3A00 HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com 
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- | 
| error_code | String | 에러 코드 |  
| error_message | String | 에러 메시지 | 
| time_zone | String | 시간대 | 
| data | Object | 스토리지 정보 |
| data.storage_id | String | 스토리지 ID |
| data.storage_name | String | 스토리지 명 |
| data.io_type | String | 스토리지 입출력 유형 (input, output) |
| data.aws_bucket | String | 버킷 명 | 
| data.region | String | 리전 코드 | 
| data.access_key_id | String | 스토리지 액세스 키 ID |
| data.secret_key | String | 스토리지 비밀 키 |
| data.description | String | 스토리지 설명 | 
| data.reg_time | String | 스토리지 등록 일시 (YYYY-MM-DD’T’hh-mm-ss) |
| data.update_time | String | 최종 업데이트 일시 |

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 547

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "time_zone" : "+00:00",
  "data" : {
    "storage_id" : "12312312312312312312312312312312",
    "storage_name" : "test-input-storage",
    "io_type" : "input",
    "aws_bucket" : "watermark-input-seoul",
    "region" : "RG011",
    "access_key_id" : "valid-test-storage-access-key-id",
    "secret_key" : "valid-in-test-storage-secret-key",
    "description" : "This storage is test input bucket.",
    "update_time" : "2022-05-26T05:43:01",
    "reg_time" : "2022-05-25T05:43:01"
  }
} 
```

### 스토리지 수정

등록된 스토리지의 정보를 수정하는 API입니다.

- URL: `https://tnp.doverunner.com/api/storage/{siteId}/{storageId}`
- Method: PUT

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 
| storageId | 스토리지 ID | 

##### 요청 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| storage_name | String | 스토리지 명 | 
| access_key_id | String | 액세스 키 ID | 
| secret_key | String | 비밀 키 | 
| aws_bucket | String | 버킷 명 | 
| io_type | String | 입출력 유형 (input / output) | 
| description | String | 스토리지 설명 | 

**요청 예제**

```json
PUT /api/storage/DEMO/12312312312312312312312312312312 HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Content-Length: 217
Host: tnp.doverunner.com

{
  "storage_name" : "test-input-storage",
  "aws_bucket" : "watermark-input-seoul",
  "io_type" : "input",
  "access_key_id" : "valid-test-storage-access-key-id",
  "secret_key" : "valid-in-test-storage-secret-key"
} 
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data | Object | 스토리지 정보 | 
| data.storage_id | String | 스토리지 ID | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 131

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "storage_id" : "12312312312312312312312312312312"
  }
} 
```

### 스토리지 삭제

등록된 스토리지 정보를 삭제하는 API입니다.

- URL: `https://tnp.doverunner.com/api/storage/{siteId}/{storageId}`
- Method: DELETE

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 
| storageId | 스토리지 ID | 

**요청 예제**

```
DELETE /api/storage/DEMO/12312312312312312312312312312312 HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data | Object | 스토리지 정보 | 
| data.storage_id | String | 스토리지 ID | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 131

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "storage_id" : "12312312312312312312312312312312"
  }
}  
```

### 여러 스토리지 삭제

여러 개의 등록된 스토리지 정보를 한 번에 삭제하는 API 입니다.

- URL: `https://tnp.doverunner.com/api/storage/{siteId}`
- Method: DELETE

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 콘솔에 표시되는 도브러너 사이트 ID | 
| storage_ids | Array | 삭제할 스토리지 ID 목록 | 

**요청 예제**

```json
DELETE /api/storage/DEMO HTTP/1.1
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Content-Length: 118
Host: tnp.doverunner.com

{
  "site_id" : "DEMO",
  "storage_ids" : [ "12312312312312312312312312312312", "12312312312312312312312312312313" ]
} 
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data | Object | 스토리지 정보 | 
| data.site_id | String | 사이트 ID | 
| data.storage_ids | Array | 스토리지 ID 목록 | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: 196

{
  "error_code" : "0000",
  "error_message" : "Success.",
  "data" : {
    "site_id" : "DEMO",
    "storage_ids" : [ "12312312312312312312312312312312", "12312312312312312312312312312313" ]
  }
}
```
## 작업 알림 API
작업 상태를 알림으로 설정하고 알림을 받을수 있는 API 입니다. 
현재 알림으로 받을수 있는 타입은 AWS SNS(Simple Notification Service) 만 지원합니다.
작업 알림 API는 다음의 네가지 기능을 제공합니다.
1. 알림 생성
2. 알림 업데이트
3. 알림 검색
4. 알림 삭제

###  알림 생성

작업 알림을 생성하는 API 입니다

- URL: `https://tnp.doverunner.com/api/noti/job/{SiteID}`
- Method: POST

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 도브러너 사이트 ID | 

##### 요청 데이터 필드
| 필드 | 유형 | 필수여부 | 설명 | 
| --- | --- | ---- | --- |
| noti_name | String |  Yes | 알림 이름 (최대 50자 영문 대/소문자, 숫자, 특수 문자(-)(_)(.))| 
| noti_type | String |  Yes | 연동하는 알림 유형 (현재 AWS SNS만 지원) | 
| url_end_point | String |  Yes | 알림 받을 URL 주소 (현재 AWS ARN 타입의 주소만 가능) | 
| aws_access.access_key | String |  Yes | AWS SNS에 접근하는 AWS access key | 
| aws_access.secret_key | String |  Yes | AWS SNS에 접근하는 AWS secret key | 
| alarm_status | Object |  Yes | 알림 받을 작업 상태값 관련 객체| 
| alarm_status.queued| Boolean | queued 상태값 알림 여부 (기본값: false)| 
| alarm_status.progressing | Boolean | processing 상태값 알림 여부 (기본값: false) | 
| alarm_status.complete | Boolean | complted 상태값 알림 여부 (기본값: false) | 
| alarm_status.error | Boolean | error 상태값 알림 여부 (기본값: false) | 
| alarm_status.stopped | Boolean | stopped 상태값 알림 여부 (기본값: false) | 

**요청 예제**

```json
POST https://tnp.doverunner.com/api/noti/job/{SiteID}
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8

Host: tnp.doverunner.com

{
   "noti_name" :"noti_test",
   "noti_type" : "SNS",
   "url_end_point" : "arn:aws:sns:us-west-2:73041xxxxx:PallyCon_TNP_SNS",
  "aws_access" :
   {
       "access_key" : "AK1252GDTP5xxxxx",
       "secret_key" : "WwMma1EVkcMBhlCmXxxxxxxx1"
   },
  "alarm_status" :
   {
       "queued" : false,
       "progressing" : false,
       "stopped" : true,
       "error" : true,
       "complete" : true
   }
}
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code    | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data          | Object | 작업 알림 정보 | 
| data.noti_id  | Number | 작업 알림 ID  | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
   "error_code": "0000",
   "error_message": "Success.",
   "data": {
       "noti_id": 1
   }
}
```
### 알림 업데이트

생성된 알림을 수정하거나 업데이트 하는 API 입니다.

- URL: `https://tnp.doverunner.com/api/noti/job/{{SitID}}/{{notiid}}`
- Method: PUT

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 도브러너 사이트 ID | 
| notiid | 업데이트 할 작업 알림 ID | 

##### 요청 데이터 필드 
| 필드 | 유형 | 필수여부 | 설명 | 
| --- | --- | ---- | --- |
| noti_name | String | | 알림 이름 (최대 50자 영문 대/소문자, 숫자, 특수 문자(-)(_)(.))| 
| noti_type | String | | 연동하는 알림 유형 (현재 AWS SNS만 지원) | 
| url_end_point | String | | 알림 받을 URL 주소 (현재 AWS ARN 타입의 주소만 가능) | 
| aws_access.access_key | String | | AWS SNS에 접근하는 AWS access key | 
| aws_access.secret_key | String | | AWS SNS에 접근하는 AWS secret key | 
| alarm_status | Object | | 알림 받을 작업 상태값 관련 객체| 
| alarm_status.queued| Boolean |  Yes | queued 상태값 알림 여부 (기본값: false)| 
| alarm_status.progressing | Boolean |  Yes | processing 상태값 알림 여부 (기본값: false) | 
| alarm_status.complete | Boolean |  Yes | complted 상태값 알림 여부 (기본값: false) | 
| alarm_status.error | Boolean |  Yes | error 상태값 알림 여부 (기본값: false) | 
| alarm_status.stopped | Boolean |  Yes | stopped 상태값 알림 여부 (기본값: false) | 

**요청 예제**

```json
PUT https://tnp.doverunner.com/api/noti/job/{{SitID}}/{{notiid}}
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8

Host: tnp.doverunner.com

{
   "noti_name" :"noti_test",
   "noti_type" : "SNS",
   "url_end_point" : "arn:aws:sns:us-west-2:73041xxx:PallyCon_TNP_SNS",
  "aws_access" :
   {
       "access_key" : "AK1252GDTP5xxxxx",
       "secret_key" : "WwMma1EVkcMBhlCmXxxxxxxx1"
   },
  "alarm_status" :
   {
       "queued" : false,
       "progressing" : false,
       "stopped" : true,
       "error" : true,
       "complete" : true
   }
}
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code    | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| data          | Object | 작업 알림 정보 | 
| data.noti_id  | Number | 작업 알림 ID  | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
   "error_code": "0000",
   "error_message": "Success.",
   "data": {
       "noti_id": 1
   }
}
```
### 알림 목록 조회

등록된 작업 알림 목록을 조회하는 API 입니다.

- URL: `https://tnp.doverunner.com/api/noti/job/{SiteID}`
- Method: GET

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 도브러너 사이트 ID | 

**요청 예제**

```json
GET `https://tnp.doverunner.com/api/noti/job/{SiteID}`
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8
Host: tnp.doverunner.com
```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code    | String | 에러 코드 | 
| error_message | String | 에러 메시지 | 
| time_zone     | String | 타임존 (+/-hh:mm) |
| total_count   | Number | 등록된 알림의 총 개수 | 
| data          | Array | 작업 알림 목록  | 

data Arry의 내부 배열은 다음과 같습니다

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| noti_id |  Number  |  작업 알림 ID   |
| site_id |  String   |  도브러너 사이트 ID    |
| noti_name|  String   |   알림 이름  |
| noti_type | String   |   AWS SNS만 지원  | 
| url_end_point | String| 알림을 받을 URL 주소   |
| alarm_status|  Object    |   알림 받는 작업 상태값 관련 객체  |
| alarm_status.queued|   Boolean  |   queued 상태값 알림 여부 |
| alarm_status.progressing| Boolean   |   progressing 상태값 알림 여부 |
| alarm_status.complete|  Boolean     |  complted 상태값 알림 여부   |
| alarm_status.error|   Boolean      |    error 상태값 알림 여부 |
| alarm_status.stopped| Boolean     |    stopped 상태값 알림 여부  |
| reg_time| String   |       작업 알림이 생성된 날짜와 시간    |
| update_time| String |       작업 알림이 업데이트된 날짜와 시간     |

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
    "error_code": "0000",
    "error_message": "Success.",
    "time_zone": "+00:00",
    "total_count": 1,
    "data": [
        {
            "noti_id": 1,
            "site_id": "YOUR_SITE_ID",
            "noti_name": "noti_test",
            "noti_type": "SNS",
            "url_end_point": "arn:aws:sns:us-west-2:73041xxx:PallyCon_TNP_SNS",
            "access_key": "AK1252GDTP5xxxxx",
            "alarm_status": {
                "queued": true,
                "progressing": true,
                "complete": true,
                "error": true,
                "stopped": true
            },
            "update_time": "2024-08-05T11:02:05",
            "reg_time": "2024-08-05T10:18:58"
        }
    ]
}
```
### 알림 삭제

작업 알림을 삭제하는 API 입니다

- URL: `https://tnp.doverunner.com/api/noti/job/{SiteID}/{notiId}`
- Method: DELETE

#### 경로 매개변수

| 매개변수 | 설명 | 
| --- | --- |
| siteId | 도브러너 사이트 ID | 
| notiId | 삭제할 작업 알림 ID | 



**요청 예제**

```json
DELETE `https://tnp.doverunner.com/api/noti/job/{SiteID}/{notiId}`
Authorization: Bearer valid_token
Content-Type: application/json;charset=UTF-8

Host: tnp.doverunner.com

```

#### 응답 데이터 필드

| 필드 | 유형 | 설명 | 
| --- | --- | --- |
| error_code    | String | 에러코드 | 
| error_message | String | 에러 메시지 | 
| data          | Object | 작업 알림 정보 | 
| data.noti_id  | Number | 작업 알림 ID  | 

**응답 예제**

```json
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
   "error_code": "0000",
   "error_message": "Success.",
   "data": {
       "noti_id": 1
   }
}
```
:::note 

현재 AWS SNS는 최대 5개 까지만 등록 가능합니다. 새로운 알림이 필요한 경우 기존 작업 알림 ID 중 하나를 수정하거나 사용하지 않는 작업 알림 ID를 삭제하고 다시 생성하세요.

:::