# 유튜브 썸네일 다운로드



공개 영상에서 제공하는 가장 큰 썸네일을 JPG 파일로 받습니다. 성공하면 응답 본문이 이미지 파일 자체입니다.



인증: Authorization: Bearer $APICK_API_KEY

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

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



## POST /rest/youtube_thumbnail 응답 필드

## API 요청: POST /rest/youtube_thumbnail



### 입력

- `url` (string, 필수): 조회할 유튜브 영상의 URL 또는 11자리 ID입니다. 예: https://youtu.be/dQw4w9WgXcQ 또는 dQw4w9WgXcQ. 재생목록·채널 URL은 영상 조회에 쓸 수 없습니다.



### 응답 명세

```json

{
  "type": "string",
  "format": "binary"
}

```

### curl

```curl

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_thumbnail' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=https://www.youtube.com/watch?v=dQw4w9WgXcQ' \
  --dump-header response.headers --output result.bin
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

### 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_thumbnail", {
  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()}`);
if ((response.headers.get("content-type") || "").includes("json")) {
  throw new Error(JSON.stringify(await response.json()));
}
const { writeFile } = await import("node:fs/promises");
await writeFile("result.bin", new Uint8Array(await response.arrayBuffer()));

```

### 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_thumbnail",
    headers={"Authorization": "Bearer " + os.environ["APICK_API_KEY"]},
    files=parts,
    timeout=(10, 120), stream=True)
response.raise_for_status()
if "json" in response.headers.get("Content-Type", ""):
    raise RuntimeError(response.json())
with open("result.bin", "wb") as output:
    for chunk in response.iter_content(65536):
        output.write(chunk)

```

### 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_thumbnail');
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);
$type = curl_getinfo($curl, CURLINFO_CONTENT_TYPE) ?: "";
curl_close($curl);
if ($status >= 400) { throw new RuntimeException($body); }
if (strpos($type, "json") !== false) { throw new RuntimeException($body); }
file_put_contents('result.bin', $body);

```

## 사용 예시 1. 영상 썸네일을 파일로 저장

응답 본문이 JPG 이미지입니다. 파일로 저장할 때는 HTTP 상태와 Content-Type을 먼저 확인합니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_thumbnail' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=https://www.youtube.com/watch?v=dQw4w9WgXcQ' \
  --dump-header response.headers --output result.bin
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- 성공하면 Content-Type이 image/jpeg이고 파일 이름은 `영상ID.jpg`입니다.

- 실패하면 JSON으로 `data.error`가 옵니다. 이 응답을 이미지로 저장하지 마세요.

## 사용 예시 2. 쇼츠 썸네일

쇼츠 주소도 그대로 보냅니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_thumbnail' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=https://www.youtube.com/shorts/dQw4w9WgXcQ' \
  --dump-header response.headers --output result.bin
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- 영상에서 제공하는 가장 큰 썸네일이 옵니다. 크기는 영상마다 다르므로 표시 영역에 맞춰 축소하세요.

## 사용 예시 3. 영상 ID 목록으로 일괄 저장

검색·채널 조회 결과의 `id`를 하나씩 넣어 썸네일을 차례로 받습니다.

```bash

curl --fail-with-body --request POST 'https://apick.app/rest/youtube_thumbnail' \
  --header "Authorization: Bearer $APICK_API_KEY" \
  --form-string 'url=dQw4w9WgXcQ' \
  --dump-header response.headers --output result.bin
# response.headers의 Content-Type을 확인한 뒤 파일을 사용하세요.

```

- 삭제·비공개 영상은 HTTP 404이며 과금되지 않습니다. 해당 ID는 건너뛰고 다음 ID를 요청하세요.

## 코드·오류

## 상세 기능·요금

이용 전 확인 성공한 다운로드 한 건당 20P가 차감됩니다. 파일 응답에는 form-data 본문이 없으므로 차감액은 응답 헤더 cost에서 확인하세요. 입력 오류·영상 없음·연령 제한·회원 전용·시간 초과처럼 실패한 호출은 이미지 대신 JSON 오류(data.error)가 오고 과금되지 않습니다(api.cost 0). 성공과 실패의 본문 형식이 다르므로, 저장하기 전에 HTTP 상태가 200이고 Content-Type이 image/jpeg인지 먼저 확인하세요. 썸네일 주소만 필요하면 유튜브 영상 정보 조회의 thumbnail·thumbnails[]를 쓰세요. 응답 시간은 보통 6초 이내이고 최대 약 60초입니다. 요청 시간 제한을 90초 이상으로 잡으세요. 인증키는 서버 환경변수에 보관하고 공개 저장소·웹페이지에 넣지 마세요.

## 상세 요청

항목설정 메서드·주소POST https://apick.app/rest/youtube_thumbnail 인증 헤더Authorization: Bearer — 내 계정의 API 인증키 본문 형식multipart/form-data 요청 예시 썸네일을 파일로 저장하는 예입니다. 성공 시 과금되는 실제 요청입니다. --fail을 붙이면 실패 응답(JSON)을 이미지 파일로 저장하지 않습니다. form-data 전체 예제 보기

## 상세 응답

성공하면 HTTP 200과 함께 JPG 이미지가 본문으로 옵니다. 크기는 영상마다 다르므로 표시 영역에 맞춰 축소하세요. 성공 응답 헤더 헤더값설명 Content-Typeimage/jpeg본문이 JPG 이미지입니다. Content-Dispositionattachment; filename=영상ID.jpg저장할 파일 이름입니다. 예: dQw4w9WgXcQ.jpg Content-Length정수이미지 크기(바이트)입니다. cost정수차감된 포인트입니다. success1성공 표시입니다. ms정수처리 시간(밀리초)입니다. 실패하면 이미지 대신 아래 형식의 JSON이 옵니다. 이 응답을 이미지로 저장하지 마세요. { "data": { "error": "영상을 찾을 수 없습니다. 삭제·비공개 영상이거나 잘못된 주소입니다.", "success": 0 }, "api": { "cost": 0, "success": true, "ms": 2100 } }

## 상세 코드·정책

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

## 상세 예제

호출 예시 같은 요청을 JavaScript(Node.js 18 이상)와 Python으로 옮긴 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽고, 성공 응답만 파일로 저장합니다. JavaScript 예시 form-data 전체 예제 보기 Python 예시 form-data 전체 예제 보기
