# 유튜브 영상 정보 조회



공개 영상 하나의 제목·설명·채널·길이·조회수·좋아요·댓글 수·업로드일·태그·챕터·썸네일과 제공 자막 언어를 한 번에 받습니다.



인증: Authorization: Bearer $APICK_API_KEY

본문 있는 REST 요청: multipart/form-data. GET 본문 및 MCP JSON-RPC 규격은 해당 명세를 따릅니다.

인증키는 서버에 보관하세요. 모든 예제는 정적 자료입니다.



## POST /rest/youtube_metadata 응답 필드

- `data` (object): 요청 처리 결과 묶음입니다. 조회한 값·작업 상태·오류 설명이 이 안에 들어 있으며, 실제 하위 필드 구성은 서비스마다 다릅니다. 값이 없으면 null·빈 배열·필드 생략 중 해당 서비스의 규칙을 따릅니다.

- `data.video_id` (string): 영상의 고유 ID입니다. 같은 영상을 다시 조회해도 같은 값이 오며, 요청에서 지정한 영상 ID를 그대로 반환합니다.

- `data.url` (string): 표준 영상 주소(watch?v=)입니다. http·https로 시작하는 전체 URL입니다. 대상 페이지를 앱에서 바로 열 수 있으며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.title` (string): 제목입니다. 대상의 제목 또는 이름입니다. 서비스에 따라 상품명·영상 제목·페이지 제목을 뜻하며, 줄바꿈·이모지가 포함될 수 있습니다.

- `data.description` (string): 영상 설명 전문입니다. 없으면 빈 문자열입니다. 대상의 설명문입니다. 게시자·서비스가 작성한 소개문이며, 줄바꿈과 이모지가 포함될 수 있습니다. 비어 있으면 설명이 등록되지 않은 것입니다.

- `data.channel` (object): 채널 정보 묶음입니다. 채널 이름·주소·구독자 수·인증 여부가 들어 있으며, 채널을 찾지 못하면 null입니다.

- `data.channel.id` (string): 채널 고유 ID입니다. UC로 시작하며, 채널을 식별하는 가장 정확한 값입니다.

- `data.channel.name` (string): 채널 표시 이름입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.

- `data.channel.url` (string): 채널 페이지 주소입니다. http·https로 시작하는 전체 URL입니다. 대상 페이지를 앱에서 바로 열 수 있으며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.channel.handle` (string): 채널 핸들(@이름)입니다. 핸들을 설정하지 않은 채널은 null이거나 생략됩니다. null 허용.

- `data.channel.follower_count` (integer): 구독자 수입니다. 숨긴 채널은 null입니다. 채널·계정의 구독자·팔로워 수입니다. 비공개로 설정되면 null이며, 0과 구분해 표시하세요. null 허용.

- `data.channel.is_verified` (boolean): 인증 채널 여부입니다. 검증 완료 여부입니다. true면 서비스가 공식 인증한 계정·채널이고, false면 인증 표시가 없습니다.

- `data.upload_date` (string): 영상이 공개된 날짜(YYYY-MM-DD)입니다. 업로드 시각이 아닌 날짜만 오며, 예약 공개 영상은 공개일 기준입니다. null 허용.

- `data.duration` (integer): 요청한 영상 길이(초)입니다. 제품·등급별 허용 범위가 다르며, 접수 후에는 변경할 수 없습니다. null 허용.

- `data.view_count` (integer): 영상·재생목록의 조회수입니다. 비공개·삭제된 항목은 집계에서 빠지며, 실시간으로 변동됩니다. null 허용.

- `data.like_count` (integer): 영상의 좋아요 수입니다. 비공개로 설정된 경우 null이며, 0과 구분해 표시하세요. null 허용.

- `data.comment_count` (integer): 영상의 댓글 수입니다. 댓글이 비공개·삭제되었거나 확인할 수 없으면 null입니다. null 허용.

- `data.categories` (array): 상품 카테고리 목록입니다. 카테고리 이름과 페이지 주소가 들어 있습니다.

- `data.tags` (array): 업로더가 단 태그 목록입니다. 태그 목록입니다. 값이 없으면 빈 배열입니다.

- `data.language` (string): 영상 언어 코드입니다. 모르면 null입니다. 콘텐츠의 언어 코드입니다. 예: ko, en. 자동 감지 값이므로 실제 언어와 다를 수 있습니다. null 허용.

- `data.live_status` (string): not_live·is_live·is_upcoming·was_live·post_live 중 하나입니다. 모르면 null입니다. 가능한 값은 4가지입니다. is_live = 지금 라이브 방송이 진행 중인 경우, was_live = 과거 라이브가 끝나 다시보기로 남은 경우, is_upcoming = 라이브가 예정되어 아직 시작하지 않은 경우, not_live = 라이브가 아닌 일반 업로드 영상인 경우입니다. null이면 상태를 확인하지 못한 것입니다. null 허용.

- `data.availability` (string): 공개 범위입니다. public(공개)·unlisted(링크를 아는 사람만) 등이며 모르면 null입니다. null 허용.

- `data.age_limit` (integer): 시청 연령 제한입니다. 0이면 제한이 없습니다. 콘텐츠의 연령 제한(세)입니다. 0이면 제한이 없고, 18이면 성인 대상으로 표시됩니다.

- `data.chapters` (array): 영상 설명에 표시된 챕터 목록입니다. 챕터가 없으면 빈 배열이며, start_time 순서로 정렬됩니다.

- `data.thumbnail` (string): 영상의 대표 썸네일 주소입니다. 가장 큰 해상도의 이미지가 오며, 없으면 빈 문자열입니다.

- `data.thumbnails` (array): 해상도별 썸네일 목록입니다. 큰 이미지부터 정렬되며, 각 항목에 주소·가로·세로 크기가 들어 있습니다.

- `data.thumbnails[].url` (string): http·https로 시작하는 전체 URL입니다. 대상 페이지를 앱에서 바로 열 수 있으며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다.

- `data.thumbnails[].width` (integer): 썸네일 이미지의 가로 크기(픽셀)입니다. 화면 배치 전에 원본 비율을 확인하세요.

- `data.thumbnails[].height` (integer): 썸네일 이미지의 세로 크기(픽셀)입니다. width와 함께 원본 비율을 계산할 수 있습니다.

- `data.subtitle_languages` (array): 사용자가 직접 등록한 자막의 언어 코드 목록입니다. 자동 생성 자막은 포함되지 않습니다.

- `data.automatic_caption_count` (integer): 자동 생성 자막이 제공되는 언어의 수입니다. 0이면 자동 자막이 없습니다.

- `data.success` (integer): 업무 처리 결과 코드입니다. 1은 정상 결과, 0은 실패 또는 무료 응답입니다. 서비스에 따라 2·3처럼 추가 코드를 쓰므로 같은 응답의 status·msg·error 필드도 함께 확인하세요.

- `api` (object): API 호출 메타데이터입니다. 이번 요청의 서버 처리 성공 여부(api.success), 실제 차감 포인트(api.cost), 결제 기록 ID(api.pl_id)를 담습니다. 처리 시간(api.ms)은 응답에 포함된 경우에만 제공됩니다. 업무 결과는 data에서 확인합니다.

- `api.success` (boolean): API 서버가 이번 요청을 정상 처리했는지 여부입니다. true여도 업무 결과가 실패일 수 있으므로 data.success·data.status와 함께 판단합니다. 인증 실패·잘못된 입력·서버 오류 응답에서는 false입니다.

- `api.cost` (integer): 이번 호출에서 실제로 차감된 포인트입니다. 유료 성공 응답에서만 단가만큼 차감되며, 실패·무료 조회·같은 요청의 멱등 재전송은 0입니다. 화면의 표시 단가와 실제 차감액이 다를 수 있으므로 정산은 이 값을 기준으로 합니다.

- `api.ms` (integer): 서버가 요청을 받아 응답 본문을 만들기까지 걸린 처리 시간(밀리초)입니다. 네트워크 왕복 시간과 클라이언트 대기 시간은 포함되지 않습니다.

- `api.pl_id` (integer): 포인트 차감 기록 ID입니다. 차감이 발생한 호출에만 값이 있으며, 과금 내역을 문의할 때 이 번호를 사용합니다. 무과금 응답은 -1·null이거나 필드가 생략됩니다.

## API 요청: POST /rest/youtube_metadata



### 입력

- `url` (string, 필수): 유튜브 영상 URL 또는 11자리 영상 ID (예: https://www.youtube.com/watch?v=..., https://youtu.be/..., /shorts/...)



### 응답 명세

```json

{
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "video_id": {
          "type": "string",
          "description": "영상 ID(11자리)입니다."
        },
        "url": {
          "type": "string",
          "description": "표준 영상 주소(watch?v=)입니다."
        },
        "title": {
          "type": "string",
          "description": "제목입니다."
        },
        "description": {
          "type": "string",
          "description": "영상 설명 전문입니다. 없으면 빈 문자열입니다."
        },
        "channel": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "채널 ID(UC…)입니다."
            },
            "name": {
              "type": "string",
              "description": "채널 이름입니다."
            },
            "url": {
              "type": "string",
              "description": "채널 주소입니다."
            },
            "handle": {
              "type": "string",
              "description": "채널 핸들입니다. 없으면 null입니다.",
              "nullable": true
            },
            "follower_count": {
              "type": "integer",
              "description": "구독자 수입니다. 숨긴 채널은 null입니다.",
              "nullable": true
            },
            "is_verified": {
              "type": "boolean",
              "description": "인증 채널 여부입니다."
            }
          }
        },
        "upload_date": {
          "type": "string",
          "description": "업로드일(YYYY-MM-DD)입니다. 모르면 null입니다.",
          "nullable": true
        },
        "duration": {
          "type": "integer",
          "description": "영상 길이(초)입니다. 라이브 중이거나 모르면 null입니다.",
          "nullable": true
        },
        "view_count": {
          "type": "integer",
          "description": "조회수입니다. 확인할 수 없으면 null입니다.",
          "nullable": true
        },
        "like_count": {
          "type": "integer",
          "description": "좋아요 수입니다. 숨긴 영상은 null입니다.",
          "nullable": true
        },
        "comment_count": {
          "type": "integer",
          "description": "댓글 수입니다. 댓글이 꺼졌거나 확인할 수 없으면 null입니다.",
          "nullable": true
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "카테고리 이름 목록입니다. 예: Music"
        },
        "tags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "업로더가 단 태그 목록입니다."
        },
        "language": {
          "type": "string",
          "description": "영상 언어 코드입니다. 모르면 null입니다.",
          "nullable": true
        },
        "live_status": {
          "type": "string",
          "description": "not_live·is_live·is_upcoming·was_live·post_live 중 하나입니다. 모르면 null입니다.",
          "nullable": true
        },
        "availability": {
          "type": "string",
          "description": "공개 범위입니다. public(공개)·unlisted(링크를 아는 사람만) 등이며 모르면 null입니다.",
          "nullable": true
        },
        "age_limit": {
          "type": "integer",
          "description": "시청 연령 제한입니다. 0이면 제한이 없습니다."
        },
        "chapters": {
          "type": "array",
          "items": {},
          "description": "챕터 목록입니다. 항목마다 title·start_time(초)·end_time(초)이 옵니다. 챕터가 없으면 빈 배열입니다."
        },
        "thumbnail": {
          "type": "string",
          "description": "가장 큰 썸네일 주소입니다."
        },
        "thumbnails": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "width": {
                "type": "integer"
              },
              "height": {
                "type": "integer"
              }
            }
          },
          "description": "썸네일 목록입니다. 큰 순서이며 항목마다 url·width·height가 옵니다."
        },
        "subtitle_languages": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "업로더가 올린 수동 자막의 언어 코드 목록입니다. 자막 다운로드의 lang에 그대로 씁니다."
        },
        "automatic_caption_count": {
          "type": "integer",
          "description": "자동 생성 자막 언어 수입니다. 목록은 유튜브 자막 목록 조회로 받습니다."
        },
        "success": {
          "type": "integer",
          "description": "성공이면 1입니다."
        }
      }
    },
    "api": {
      "type": "object",
      "properties": {
        "success": {
          "type": "boolean"
        },
        "cost": {
          "type": "integer",
          "description": "차감된 포인트입니다. 실패하면 0입니다."
        },
        "ms": {
          "type": "integer",
          "description": "처리 시간(밀리초)입니다."
        },
        "pl_id": {
          "type": "integer",
          "description": "결제 기록 번호입니다. 성공한 응답에만 옵니다."
        }
      }
    }
  }
}

```

### 정적 응답 예시

```json

{
  "data": {
    "video_id": "dQw4w9WgXcQ",
    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "title": "Rick Astley - Never Gonna Give You Up (Official Video)",
    "description": "영상 설명 전문이 그대로 옵니다.",
    "channel": {
      "id": "UCuAXFkgsw1L7xaCfnd5JJOw",
      "name": "Rick Astley",
      "url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
      "handle": "@RickAstleyYT",
      "follower_count": 4300000,
      "is_verified": true
    },
    "upload_date": "2009-10-25",
    "duration": 213,
    "view_count": 1700000000,
    "like_count": 18000000,
    "comment_count": 2400000,
    "categories": [
      "Music"
    ],
    "tags": [
      "rick astley",
      "never gonna give you up"
    ],
    "language": "en",
    "live_status": "not_live",
    "availability": "public",
    "age_limit": 0,
    "chapters": [],
    "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
    "thumbnails": [
      {
        "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
        "width": 1280,
        "height": 720
      }
    ],
    "subtitle_languages": [
      "en",
      "ja"
    ],
    "automatic_caption_count": 158,
    "success": 1
  },
  "api": {
    "success": true,
    "cost": 20,
    "ms": 3900,
    "pl_id": 1595635
  }
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_metadata' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=https://www.youtube.com/watch?v=dQw4w9WgXcQ'

```

### Node.js (서버 ESM)

```javascript

const form = new FormData();
form.append("url", "https://www.youtube.com/watch?v=dQw4w9WgXcQ");
const response = await fetch("https://apick.app/rest/youtube_metadata", {
  method: "POST",
  headers: { Authorization: "Bearer " + process.env.APICK_API_KEY },
  body: form,
  signal: AbortSignal.timeout(120_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const result = await response.json();
console.log(result);

```

### python

```python

import os
import requests
parts = [
    ("url", (None, "https://www.youtube.com/watch?v=dQw4w9WgXcQ")),
]
response = requests.request("POST", "https://apick.app/rest/youtube_metadata",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120))
response.raise_for_status()
result = response.json()
print(result)

```

### php

```php

<?php
$headers = ["Authorization: Bearer " . getenv("APICK_API_KEY")];
$form = [
    'url' => 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
];
$curl = curl_init('https://apick.app/rest/youtube_metadata');
curl_setopt_array($curl, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $form,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CONNECTTIMEOUT => 10, CURLOPT_TIMEOUT => 120,
]);
$body = curl_exec($curl);
if ($body === false) { throw new RuntimeException(curl_error($curl)); }
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
$result = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
print_r($result);

```

## 사용 예시 1. 영상 주소로 기본 정보 받기

공개 영상 주소를 그대로 보냅니다. watch·youtu.be·shorts·live·embed 주소를 모두 받습니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_metadata' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=https://www.youtube.com/watch?v=dQw4w9WgXcQ'

```

- `data.view_count`·`like_count`·`comment_count`는 숫자이며 비공개 지표는 null입니다.

- `data.upload_date`는 YYYY-MM-DD 형식입니다.

## 사용 예시 2. 쇼츠 주소로 조회

쇼츠 화면에서 복사한 /shorts/ 주소도 그대로 보냅니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_metadata' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=https://www.youtube.com/shorts/dQw4w9WgXcQ'

```

- `data.duration`(초)으로 쇼츠 길이를 확인합니다.

- 연령 제한·회원 전용 영상은 HTTP 424이며 과금되지 않습니다.

## 사용 예시 3. 영상 ID 11자리만 보내기

영상 ID만 저장해 둔 경우 주소로 만들지 않고 11자리 ID를 그대로 보냅니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_metadata' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=dQw4w9WgXcQ'

```

- `data.chapters[]`가 비어 있지 않으면 `start_time`·`end_time`(초)으로 목차를 만들 수 있습니다.

- `data.subtitle_languages`에 수동 자막 언어가 있으면 자막 다운로드 API의 `lang`으로 그대로 씁니다.

- `data.live_status`가 is_live이면 진행 중인 라이브입니다. 조회수 등 지표가 계속 바뀝니다.

## 코드·오류

### 업무 실패 응답

입력 오류·대상 없음·일시 실패는 data.error(사유)와 data.success=0으로 오며 api.cost는 0(과금 없음)입니다. HTTP 상태는 400·404·408·424 중 하나입니다. 입력 오류는 값을 고쳐 다시 요청하고, 408·424는 잠시 후 한 번 다시 시도하세요.

```json

{
  "data": {
    "error": "입력값을 확인해 주세요.",
    "success": 0
  },
  "api": {
    "success": true,
    "cost": 0,
    "ms": 5
  }
}

```

## 상세 기능·요금

이용 전 확인 성공한 조회 한 건당 20P가 차감됩니다. 실제 차감액은 응답의 api.cost에서 확인하세요. 입력 오류·영상 없음·연령 제한·회원 전용·시간 초과처럼 실패한 호출은 data.error로 안내 문구가 오고 과금되지 않습니다(api.cost 0). 영상 하나만 조회합니다. 재생목록은 유튜브 재생목록 조회, 채널은 유튜브 채널 조회를 쓰세요. 자막 내용이 필요하면 subtitle_languages에서 언어를 고른 뒤 유튜브 자막 다운로드를 요청하고, 자동 생성 자막까지 확인하려면 유튜브 자막 목록 조회를 씁니다. 응답 시간은 보통 6초 이내이고 최대 약 60초입니다. 요청 시간 제한을 90초 이상으로 잡으세요. 인증키는 서버 환경변수에 보관하고 공개 저장소·웹페이지에 넣지 마세요. API 호출 요청 요청하기 Key Value url 응답

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/youtube_metadata 인증 헤더Authorization: Bearer — 내 계정의 API 인증키 본문 형식multipart/form-data 요청 예시 영상 주소로 조회하는 예입니다. 성공 시 과금되는 실제 요청입니다. form-data 전체 예제 보기

## 상세 응답

필드타입설명 data.video_idstring영상 ID(11자리)입니다. data.urlstring표준 영상 주소(watch?v=)입니다. data.titlestring제목입니다. data.descriptionstring영상 설명 전문입니다. 없으면 빈 문자열입니다. data.channel.idstring채널 ID(UC…)입니다. data.channel.namestring채널 이름입니다. data.channel.urlstring채널 주소입니다. data.channel.handlestring채널 핸들입니다. 없으면 null입니다. data.channel.follower_countinteger구독자 수입니다. 숨긴 채널은 null입니다. data.channel.is_verifiedboolean인증 채널 여부입니다. data.upload_datestring업로드일(YYYY-MM-DD)입니다. 모르면 null입니다. data.durationinteger영상 길이(초)입니다. 라이브 중이거나 모르면 null입니다. data.view_countinteger조회수입니다. 확인할 수 없으면 null입니다. data.like_countinteger좋아요 수입니다. 숨긴 영상은 null입니다. data.comment_countinteger댓글 수입니다. 댓글이 꺼졌거나 확인할 수 없으면 null입니다. data.categories[]array카테고리 이름 목록입니다. 예: Music data.tags[]array업로더가 단 태그 목록입니다. data.languagestring영상 언어 코드입니다. 모르면 null입니다. data.live_statusstringnot_live·is_live·is_upcoming·was_live·post_live 중 하나입니다. 모르면 null입니다. data.availabilitystring공개 범위입니다. public(공개)·unlisted(링크를 아는 사람만) 등이며 모르면 null입니다. data.age_limitinteger시청 연령 제한입니다. 0이면 제한이 없습니다. data.chapters[]array챕터 목록입니다. 항목마다 title·start_time(초)·end_time(초)이 옵니다. 챕터가 없으면 빈 배열입니다. data.thumbnailstring가장 큰 썸네일 주소입니다. data.thumbnails[]array썸네일 목록입니다. 큰 순서이며 항목마다 url·width·height가 옵니다. data.subtitle_languages[]array업로더가 올린 수동 자막의 언어 코드 목록입니다. 자막 다운로드의 lang에 그대로 씁니다. data.automatic_caption_countinteger자동 생성 자막 언어 수입니다. 목록은 유튜브 자막 목록 조회로 받습니다. data.successinteger성공이면 1입니다. api.costinteger차감된 포인트입니다. 실패하면 0입니다. api.msinteger처리 시간(밀리초)입니다. api.pl_idinteger결제 기록 번호입니다. 성공한 응답에만 옵니다. view_count·like_count·comment_count는 숫자입니다. 채널이 숨긴 지표나 확인할 수 없는 값은 null이므로 0과 구분하세요. live_status가 is_live·is_upcoming이면 지표가 계속 바뀝니다. { "data": { "video_id": "dQw4w9WgXcQ", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "title": "Rick Astley - Never Gonna Give You Up (Official Video)", "description": "영상 설명 전문이 그대로 옵니다.", "channel": { "id": "UCuAXFkgsw1L7xaCfnd5JJOw", "name": "Rick Astley", "url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw", "handle": "@RickAstleyYT", "follower_count": 4300000, "is_verified": true }, "upload_date": "2009-10-25", "duration": 213, "view_count": 1700000000, "like_count": 18000000, "comment_count": 2400000, "categories": ["Music"], "tags": ["rick astley", "never gonna give you up"], "language": "en", "live_status": "not_live", "availability": "public", "age_limit": 0, "chapters": [], "thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", "thumbnails": [{ "url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", "width": 1280, "height": 720 }], "subtitle_languages": ["en", "ja"], "automatic_caption_count": 158, "success": 1 }, "api": { "success": true, "cost": 20, "ms": 3900, "pl_id": 1595635 } } 예시의 수치는 설명을 위한 근삿값입니다.

## 상세 코드·정책

오류와 복구 아래 경우는 data.error로 응답하며 과금되지 않습니다(api.cost 0). 실패 응답은 표의 HTTP 상태 코드와 함께 옵니다. 화면에 보여 줄 안내는 본문의 data.error를 쓰세요. 상황HTTPdata.error해결 입력 오류400입력 항목이 잘못됐습니다. 유튜브 영상 주소 또는 11자리 영상 ID를 입력해 주세요.영상 주소 형식이나 11자리 ID를 확인합니다. 재생목록·채널 주소는 각 조회 API를 씁니다. 영상 없음404영상을 찾을 수 없습니다. 삭제·비공개 영상이거나 잘못된 주소입니다.삭제·비공개·지역 제한 영상입니다. 시작 전 예약 방송도 이 응답이 올 수 있습니다. 주소와 공개 여부를 확인합니다. 연령 제한403연령 제한 영상은 조회할 수 없습니다.연령 제한 영상은 제공하지 않습니다. 다른 영상을 요청합니다. 회원 전용403채널 회원 전용 영상은 조회할 수 없습니다.채널 회원 전용 영상은 제공하지 않습니다. 시간 초과408처리 시간 초과로 실패했습니다. 잠시 후 다시 시도해 주세요.잠시 후 같은 요청을 다시 보냅니다. 일시적 조회 실패424일시적으로 영상 정보를 가져오지 못했습니다. 잠시 후 다시 시도해 주세요.잠시 후 같은 요청을 다시 보냅니다.

## 상세 예제

호출 예시 같은 요청을 JavaScript와 Python으로 옮긴 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽습니다. JavaScript 예시 form-data 전체 예제 보기 Python 예시 form-data 전체 예제 보기
