본문 바로가기
개발가이드SNS 조회유튜브 영상 정보 조회

유튜브 영상 정보 조회 API

명세 내보내기
OpenAPI 3.0.3Postman 컬렉션Markdown

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

POSThttps://apick.app/rest/youtube_metadata
인증
Bearer 키
요청 형식
form-data
응답
JSON
경로
1개

왜 유튜브 영상 정보 조회인가

영상 링크 하나로 조회수·태그·챕터 끝

조회수, 좋아요, 태그를 매번 복사해 시트에 붙여 넣고 계신가요. 공개 영상의 제목·길이·조회수·설명·태그·챕터·썸네일 목록까지 한 번에 받아 리포트를 자동으로 채우세요.

도입 효과

  • 캠페인 성과표 수작업이 사라진다
  • 태그·챕터로 영상 SEO까지 분석
  • 링크 미리보기 카드를 손쉽게 구현

이런 곳에서 많이 씁니다

  • 광고 대행사 협찬 영상 성과 리포트
  • 콘텐츠 관리 시스템 영상 카드 생성
  • 영상 SEO 분석 도구
가입하고 API 키 받기API 키 하나로 바로 호출 · 실패한 요청은 과금되지 않습니다

알아둘 점

이용 전 확인

성공한 조회 한 건당 20P가 차감됩니다. 실제 차감액은 응답의 api.cost에서 확인하세요. 입력 오류·영상 없음·연령 제한·회원 전용·시간 초과처럼 실패한 호출은 data.error로 안내 문구가 오고 과금되지 않습니다(api.cost 0).

영상 하나만 조회합니다. 재생목록은 유튜브 재생목록 조회, 채널은 유튜브 채널 조회를 쓰세요. 자막 내용이 필요하면 subtitle_languages에서 언어를 고른 뒤 유튜브 자막 다운로드를 요청하고, 자동 생성 자막까지 확인하려면 유튜브 자막 목록 조회를 씁니다.

응답 시간은 보통 6초 이내이고 최대 약 60초입니다. 요청 시간 제한을 90초 이상으로 잡으세요.

인증키는 서버 환경변수에 보관하고 공개 저장소·웹페이지에 넣지 마세요.

API 호출

요청
Key
Value
url
응답

            

요청과 응답

API 요청
POST/rest/youtube_metadata
  • Bearer 인증
  • multipart/form-data
  • JSON 응답
요청 파라미터 1개 · 필수 1
파라미터
설명
urlstring필수
유튜브 영상 URL 또는 11자리 영상 ID (예: https://www.youtube.com/watch?v=..., https://youtu.be/..., /shorts/...)
예시
https://www.youtube.com/watch?v=dQw4w9WgXcQ
응답 필드 37개
응답 필드
설명
dataobject
요청 처리 결과 묶음입니다. 조회한 값·작업 상태·오류 설명이 이 안에 들어 있으며, 실제 하위 필드 구성은 서비스마다 다릅니다. 값이 없으면 null·빈 배열·필드 생략 중 해당 서비스의 규칙을 따릅니다.
data.video_idstring
영상의 고유 ID입니다. 같은 영상을 다시 조회해도 같은 값이 오며, 요청에서 지정한 영상 ID를 그대로 반환합니다.
data.urlstring
표준 영상 주소(watch?v=)입니다. http·https로 시작하는 전체 URL입니다. 대상 페이지를 앱에서 바로 열 수 있으며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다.
data.titlestring
제목입니다. 대상의 제목 또는 이름입니다. 서비스에 따라 상품명·영상 제목·페이지 제목을 뜻하며, 줄바꿈·이모지가 포함될 수 있습니다.
data.descriptionstring
영상 설명 전문입니다. 없으면 빈 문자열입니다. 대상의 설명문입니다. 게시자·서비스가 작성한 소개문이며, 줄바꿈과 이모지가 포함될 수 있습니다. 비어 있으면 설명이 등록되지 않은 것입니다.
data.channelobject
채널 정보 묶음입니다. 채널 이름·주소·구독자 수·인증 여부가 들어 있으며, 채널을 찾지 못하면 null입니다.
data.upload_datestring
영상이 공개된 날짜(YYYY-MM-DD)입니다. 업로드 시각이 아닌 날짜만 오며, 예약 공개 영상은 공개일 기준입니다. null 허용.
data.durationinteger
요청한 영상 길이(초)입니다. 제품·등급별 허용 범위가 다르며, 접수 후에는 변경할 수 없습니다. null 허용.
data.view_countinteger
영상·재생목록의 조회수입니다. 비공개·삭제된 항목은 집계에서 빠지며, 실시간으로 변동됩니다. null 허용.
data.like_countinteger
영상의 좋아요 수입니다. 비공개로 설정된 경우 null이며, 0과 구분해 표시하세요. null 허용.
data.comment_countinteger
영상의 댓글 수입니다. 댓글이 비공개·삭제되었거나 확인할 수 없으면 null입니다. null 허용.
data.categoriesarray
상품 카테고리 목록입니다. 카테고리 이름과 페이지 주소가 들어 있습니다.
data.tagsarray
업로더가 단 태그 목록입니다. 태그 목록입니다. 값이 없으면 빈 배열입니다.
data.languagestring
영상 언어 코드입니다. 모르면 null입니다. 콘텐츠의 언어 코드입니다. 예: ko, en. 자동 감지 값이므로 실제 언어와 다를 수 있습니다. null 허용.
data.live_statusstring
not_live·is_live·is_upcoming·was_live·post_live 중 하나입니다. 모르면 null입니다. 가능한 값은 4가지입니다. is_live = 지금 라이브 방송이 진행 중인 경우, was_live = 과거 라이브가 끝나 다시보기로 남은 경우, is_upcoming = 라이브가 예정되어 아직 시작하지 않은 경우, not_live = 라이브가 아닌 일반 업로드 영상인 경우입니다. null이면 상태를 확인하지 못한 것입니다. null 허용.
data.availabilitystring
공개 범위입니다. public(공개)·unlisted(링크를 아는 사람만) 등이며 모르면 null입니다. null 허용.
data.age_limitinteger
시청 연령 제한입니다. 0이면 제한이 없습니다. 콘텐츠의 연령 제한(세)입니다. 0이면 제한이 없고, 18이면 성인 대상으로 표시됩니다.
data.chaptersarray
영상 설명에 표시된 챕터 목록입니다. 챕터가 없으면 빈 배열이며, start_time 순서로 정렬됩니다.
data.thumbnailstring
영상의 대표 썸네일 주소입니다. 가장 큰 해상도의 이미지가 오며, 없으면 빈 문자열입니다.
data.thumbnailsarray
해상도별 썸네일 목록입니다. 큰 이미지부터 정렬되며, 각 항목에 주소·가로·세로 크기가 들어 있습니다.
data.subtitle_languagesarray
사용자가 직접 등록한 자막의 언어 코드 목록입니다. 자동 생성 자막은 포함되지 않습니다.
data.automatic_caption_countinteger
자동 생성 자막이 제공되는 언어의 수입니다. 0이면 자동 자막이 없습니다.
data.successinteger
업무 처리 결과 코드입니다. 1은 정상 결과, 0은 실패 또는 무료 응답입니다. 서비스에 따라 2·3처럼 추가 코드를 쓰므로 같은 응답의 status·msg·error 필드도 함께 확인하세요.
apiobject
API 호출 메타데이터입니다. 이번 요청의 서버 처리 성공 여부(api.success), 실제 차감 포인트(api.cost), 결제 기록 ID(api.pl_id)를 담습니다. 처리 시간(api.ms)은 응답에 포함된 경우에만 제공됩니다. 업무 결과는 data에서 확인합니다.
api.successboolean
API 서버가 이번 요청을 정상 처리했는지 여부입니다. true여도 업무 결과가 실패일 수 있으므로 data.success·data.status와 함께 판단합니다. 인증 실패·잘못된 입력·서버 오류 응답에서는 false입니다.
api.costinteger
이번 호출에서 실제로 차감된 포인트입니다. 유료 성공 응답에서만 단가만큼 차감되며, 실패·무료 조회·같은 요청의 멱등 재전송은 0입니다. 화면의 표시 단가와 실제 차감액이 다를 수 있으므로 정산은 이 값을 기준으로 합니다.
api.msinteger
서버가 요청을 받아 응답 본문을 만들기까지 걸린 처리 시간(밀리초)입니다. 네트워크 왕복 시간과 클라이언트 대기 시간은 포함되지 않습니다.
api.pl_idinteger
포인트 차감 기록 ID입니다. 차감이 발생한 호출에만 값이 있으며, 과금 내역을 문의할 때 이 번호를 사용합니다. 무과금 응답은 -1·null이거나 필드가 생략됩니다.
하위 필드 9개 더 보기
응답 필드
설명
data.channel.idstring
채널 고유 ID입니다. UC로 시작하며, 채널을 식별하는 가장 정확한 값입니다.
data.channel.namestring
채널 표시 이름입니다. 문자열로 오며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다. 같은 응답의 다른 필드와 함께 해석하세요.
data.channel.urlstring
채널 페이지 주소입니다. http·https로 시작하는 전체 URL입니다. 대상 페이지를 앱에서 바로 열 수 있으며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다.
data.channel.handlestring
채널 핸들(@이름)입니다. 핸들을 설정하지 않은 채널은 null이거나 생략됩니다. null 허용.
data.channel.follower_countinteger
구독자 수입니다. 숨긴 채널은 null입니다. 채널·계정의 구독자·팔로워 수입니다. 비공개로 설정되면 null이며, 0과 구분해 표시하세요. null 허용.
data.channel.is_verifiedboolean
인증 채널 여부입니다. 검증 완료 여부입니다. true면 서비스가 공식 인증한 계정·채널이고, false면 인증 표시가 없습니다.
data.thumbnails[].urlstring
http·https로 시작하는 전체 URL입니다. 대상 페이지를 앱에서 바로 열 수 있으며, 값이 없으면 빈 문자열이거나 필드가 생략됩니다.
data.thumbnails[].widthinteger
썸네일 이미지의 가로 크기(픽셀)입니다. 화면 배치 전에 원본 비율을 확인하세요.
data.thumbnails[].heightinteger
썸네일 이미지의 세로 크기(픽셀)입니다. width와 함께 원본 비율을 계산할 수 있습니다.
입력 조건·전송 규칙
항목
설정
메서드·주소
POST https://apick.app/rest/youtube_metadata
인증 헤더
Authorization: Bearer — 내 계정의 API 인증키
본문 형식
multipart/form-data
요청 예시

영상 주소로 조회하는 예입니다. 성공 시 과금되는 실제 요청입니다.

사용 예시

상황별로 보내는 값과 응답에서 확인할 값을 모았습니다. 언어 탭에서 그대로 복사해 쓸 수 있습니다.

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

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

요청POST/rest/youtube_metadata
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/ 주소도 그대로 보냅니다.

요청POST/rest/youtube_metadata
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를 그대로 보냅니다.

요청POST/rest/youtube_metadata
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이면 진행 중인 라이브입니다. 조회수 등 지표가 계속 바뀝니다.

응답 처리

HTTP 성공과 업무 결과를 구분하세요. 경로별 응답 필드와 예시는 위 요청과 응답에 함께 있습니다.

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

오류 코드

응답을 아래 순서로 확인하세요. 결과 유무와 과금 여부는 서로 다릅니다.

  1. HTTP 상태전송·인증·입력 오류
  2. api.successAPI 처리 여부
  3. data · result업무 결과와 오류 문구
  4. api.cost이번 요청의 과금
업무 실패 응답 data.error
  • 입력값이 맞지 않거나 대상 자료가 없거나 일시적으로 처리하지 못하면 data.error(사유 문구)와 data.success=0을 돌려줍니다. HTTP 상태는 사유에 따라 400·404·408·424 중 하나입니다.
  • 이때 api.cost는 0이며 과금되지 않습니다. data.error 문구를 그대로 기록하고 사용자에게 보여 주세요.
  • 입력 오류(400)는 값을 고친 뒤 다시 요청하세요. 408·424는 잠시 후 한 번 다시 시도하고, 같은 입력으로 짧은 간격의 자동 반복은 하지 마세요.
{
  "data": {
    "error": "입력값을 확인해 주세요.",
    "success": 0
  },
  "api": {
    "success": true,
    "cost": 0,
    "ms": 5
  }
}
서비스 코드·조건

오류와 복구

아래 경우는 data.error로 응답하며 과금되지 않습니다(api.cost 0). 실패 응답은 표의 HTTP 상태 코드와 함께 옵니다. 화면에 보여 줄 안내는 본문의 data.error를 쓰세요.

상황
HTTP
data.error
해결
입력 오류
400
입력 항목이 잘못됐습니다. 유튜브 영상 주소 또는 11자리 영상 ID를 입력해 주세요.
영상 주소 형식이나 11자리 ID를 확인합니다. 재생목록·채널 주소는 각 조회 API를 씁니다.
영상 없음
404
영상을 찾을 수 없습니다. 삭제·비공개 영상이거나 잘못된 주소입니다.
삭제·비공개·지역 제한 영상입니다. 시작 전 예약 방송도 이 응답이 올 수 있습니다. 주소와 공개 여부를 확인합니다.
연령 제한
403
연령 제한 영상은 조회할 수 없습니다.
연령 제한 영상은 제공하지 않습니다. 다른 영상을 요청합니다.
회원 전용
403
채널 회원 전용 영상은 조회할 수 없습니다.
채널 회원 전용 영상은 제공하지 않습니다.
시간 초과
408
처리 시간 초과로 실패했습니다. 잠시 후 다시 시도해 주세요.
잠시 후 같은 요청을 다시 보냅니다.
일시적 조회 실패
424
일시적으로 영상 정보를 가져오지 못했습니다. 잠시 후 다시 시도해 주세요.
잠시 후 같은 요청을 다시 보냅니다.
인증·포인트 오류 result.error 문구
코드
HTTP
의미·조치
유효하지 않은 API키 입니다.
401
Authorization: Bearer 헤더의 인증키를 확인하세요.
허용되지 않은 IP주소 입니다.
401
마이페이지의 허용 IP 설정과 요청 서버 IP를 확인하세요.
비활성화된 계정입니다.
401
계정 이용 상태를 고객지원으로 문의하세요.
사용 가능한 포인트이 부족합니다.
200
HTTP 200이어도 result.error가 있으면 실패입니다. 포인트를 충전한 뒤 다시 요청하세요. 이 응답은 과금되지 않습니다.
인증 정보를 확인할 수 없습니다.
424
일시적인 확인 실패입니다. 잠시 후 다시 시도하세요.
폼 입력 오류 error.code
코드
HTTP
의미·조치
FORM_DATA_INVALID
400
필드 이름·값의 타입·배열 인덱스를 확인하세요. 인덱스는 0부터 연속으로 사용합니다.
FORM_DATA_FIELD_CONFLICT
400
같은 값과 중첩 경로를 동시에 지정하지 마세요.
MULTIPART_LIMIT_OR_PARSE_ERROR
400·413
boundary·파일 크기·필드 개수를 확인하세요. 서비스별 제한이 우선 적용됩니다.

요금·이용 조건

기본 요금기본 단가 20P · 건당

실제 차감 금액은 응답의 api.cost로 확인하세요. 상세 요금은 요금정책에서 볼 수 있습니다.

연동 팁

  • 요청 예제의 오류 처리 포함 모드는 시간 제한과 업무 실패 판정을 함께 보여줍니다.
  • 인증키는 서버 환경변수에 두고 브라우저·앱에 넣지 마세요.
  • HTTP 성공과 업무 결과를 구분하고, 실패 응답의 오류 문구를 그대로 기록하세요.
추가 예제·서비스별 연동 안내

호출 예시

같은 요청을 JavaScript와 Python으로 옮긴 예시입니다. 키는 환경변수 APICK_API_KEY 에서 읽습니다.

JavaScript 예시
Python 예시

개발가이드 검색

API 이름·경로·파라미터·오류 코드로 찾을 수 있습니다.

표시 가격은 기본 단가입니다. 상세 과금 조건은 각 가이드에서 확인하세요.