bash python php javascript

auth/code

인증 코드 발급 (POST)

유저 인증 과정은 ‘1) 인증요청 > 2) 인증 코드 발급 > 3) 토큰 발급 > 4) 인증 완료’의 프로세스로 진행됩니다.

인증 코드 발급은 GET/POST의 2가지 방법으로 요청 가능합니다.(GET은 하단 참고)

POST로 요청 시에는 client_id, auth_type, certification_number(아프리카TV 모바일 앱 > 내 정보 > 인증 번호)의 요청 인자가 필요합니다.
리턴 시에는 json 형태의 code 변수로 인증 코드를 발급합니다.


Requires authentication

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/auth/code" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'client_id=ae1d3e4XXXXXXX&auth_type=api&certification_number=111111'
import requests
import json

url = 'https://openapi.afreecatv.com/auth/code'
data = {
    "client_id": "ae1d3e4XXXXXXX",
    "auth_type": "api",
    "certification_number": 111111
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/auth/code',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'client_id' => 'ae1d3e4XXXXXXX',
            'auth_type' => 'api',
            'certification_number' => 111111,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/auth/code"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "client_id": "ae1d3e4XXXXXXX",
    "auth_type": "api",
    "certification_number": 111111
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "code": "34197c7e4XXXXXXXX"
}

HTTP Request

POST auth/code

Body Parameters

Parameter Type Status Description
client_id string required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
auth_type string optional POST로 호출 시 필요한 타입입니다.(“api”로 고정입니다.)
certification_number integer optional POST로 호출 시 로그인을 대체할 6자리의 인증 번호입니다. (모바일 앱에서 확인 가능합니다.)

Response Parameters

Parameter Type Description
code string 토큰 발급에 필요한 인증 코드입니다.

인증 코드 발급 (GET)

유저 인증 과정은 ‘1) 인증요청 > 2) 인증 코드 발급 > 3) 토큰 발급 > 4) 인증 완료’의 프로세스로 진행됩니다.

인증 코드 발급은 GET/POST의 2가지 방법으로 요청 가능합니다.

GET으로 요청 시에는 미리 설정한 Redirect URI가 필요합니다.(Developers > 내 계정 관리 페이지에서 확인/수정 가능)
요청 인자는 client_id입니다.
비로그인 시에는 로그인 페이지로 리다이렉트합니다. 로그인 완료 후, Redirect URI에 code 변수로 인증 코드를 발급합니다.


Requires authentication

Example request:

curl -X GET \
    -G "https://openapi.afreecatv.com/auth/code?client_id=ae1d3e4XXXXXXX" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*"
import requests

url = 'https://openapi.afreecatv.com/auth/code'
params = {
  'client_id': 'ae1d3e4XXXXXXX'
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://openapi.afreecatv.com/auth/code',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'query' => [
            'client_id' => 'ae1d3e4XXXXXXX',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/auth/code"
);

let params = {
    "client_id": "ae1d3e4XXXXXXX",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

fetch(url, {
    method: "GET",
    headers: headers,
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

https://afreecatv.com?code=34197c7e4XXXXXXXX

HTTP Request

GET auth/code

Query Parameters

Parameter Status Description
client_id required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)

Response Parameters

Parameter Type Description
code string 토큰 발급에 필요한 인증 코드입니다.

auth/token

토큰 발급/재발급

인증 코드 발급 후의 리턴값 code를 인자값으로 하여 토큰(유저 정보를 암호화한 고윳값)을 발급/재발급합니다.

토큰이 만료된 후, 재발급 시에는 이전 토큰 발급시의 리턴값 중 refresh_token(재인증 토큰값)을 요청 인자로 호출합니다.

토큰 발급에 사용된 code는 일회용이며, 재사용할 수 없습니다.

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/auth/token" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'grant_type=authorization_code&client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX&redirect_uri=https://afreecatv.com&code=cfacf4bXXXXXXX&refresh_token=78d3acb626dXXXXXXX'
import requests
import json

url = 'https://openapi.afreecatv.com/auth/token'
data = {
    "grant_type": "authorization_code",
    "client_id": "ae1d3e4XXXXXXX",
    "client_secret": "dafgc12fvXXXXXXX",
    "redirect_uri": "https://afreecatv.com",
    "code": "cfacf4bXXXXXXX",
    "refresh_token": "78d3acb626dXXXXXXX"
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/auth/token',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'grant_type' => 'authorization_code',
            'client_id' => 'ae1d3e4XXXXXXX',
            'client_secret' => 'dafgc12fvXXXXXXX',
            'redirect_uri' => 'https://afreecatv.com',
            'code' => 'cfacf4bXXXXXXX',
            'refresh_token' => '78d3acb626dXXXXXXX',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/auth/token"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "grant_type": "authorization_code",
    "client_id": "ae1d3e4XXXXXXX",
    "client_secret": "dafgc12fvXXXXXXX",
    "redirect_uri": "https://afreecatv.com",
    "code": "cfacf4bXXXXXXX",
    "refresh_token": "78d3acb626dXXXXXXX"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "access_token": "a3b2d88XXXXXXXX",
    "expires_in": 28800,
    "token_type": "Bearer",
    "scope": null,
    "refresh_token": "a924bfXXXXXXXX"
}

HTTP Request

POST auth/token

Body Parameters

Parameter Type Status Description
grant_type string required 코드 발급 타입입니다.
*토큰 발급 시에는 grant_type을 authorization_code, 토큰 재발급 시에는 refresh_token으로 요청합니다.
client_id string required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
client_secret string required 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
redirect_uri string optional 콜백 주소입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
urlencoding된 값이어야 합니다.
code string required auth/code의 인증 코드이며, 발급 시에만 사용합니다.
refresh_token string required 토큰 발급 시 갖고 있던 재발급 토큰(토큰 발급 시의 refresh_token)입니다.
재발급 시에만 사용합니다.

Response Parameters

Parameter Type Description
access_token string 토큰(유저 정보를 암호화한 고윳값입니다.)
expires_in integer 토큰의 만료 시간입니다.(단위:초)
token_type string 토큰의 타입입니다.(“Bearer” 고정)
scope string 토큰으로 사용할 수 있는 open api 범위입니다. 클라이언트 애플리케이션마다 권한이 다르게 설정됩니다.
refresh_token string 토큰 재발급 시 필요한 재인증 토큰값입니다.

broad/rtmp

방송 송출 기본 구성

방송 송출을 하기 위해서는 사용자 지정 RTMP(외부장치) 연결이 필요합니다.
방송 송출을 위한 아프리카TV의 RTMP url과 스트림 키를 제공합니다.

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/broad/rtmp" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'platform_type=AfreecaTV&access_token=ae1d3e4XXXXXXX'
import requests
import json

url = 'https://openapi.afreecatv.com/broad/rtmp'
data = {
    "platform_type": "AfreecaTV",
    "access_token": "ae1d3e4XXXXXXX"
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/broad/rtmp',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'platform_type' => 'AfreecaTV',
            'access_token' => 'ae1d3e4XXXXXXX',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/broad/rtmp"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "platform_type": "AfreecaTV",
    "access_token": "ae1d3e4XXXXXXX"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "result": 1,
    "msg": "성공",
    "data": {
        "rtmp": "rtmp://rtmpmanager-freecat.afreeca.tv/app/",
        "key": "afid-1234567",
        "info": {
            "title": "xxxxx님의 아프리카TV 방송",
            "category": "00000000",
            "allowed_view_cnt": 100000,
            "is_password": 0,
            "broad_hidden": 0,
            "broad_grade": 0,
            "hashtags": "",
            "broad_ending_msg": "",
            "is_wait": 0,
            "waiting_time": 10,
            "water_mark": 1,
            "broad_tune_out": 1,
            "paid_promotion": 0
        }
    }
}

HTTP Request

POST broad/rtmp

Body Parameters

Parameter Type Status Description
platform_type string required 제휴 업체명입니다.
access_token string required 토큰값입니다.

Response Parameters

Parameter Type Description
result integer 결과 코드입니다.(1:성공, 음수:에러)
msg string 결과 메시지입니다.
data array RTMP 정보를 담고 있는 배열입니다.
rtmp string RTMP url입니다.
key string 스트림 키입니다.
info array RTMP 유저 등록 정보를 담고 있는 배열입니다.
title string 방송 제목입니다
category string 방송 카테고리 번호입니다.
allowed_view_cnt integer 방송 시, 시청 가능한 최대 시청자 수 설정입니다.
is_password integer 방송의 비밀번호 설정 여부입니다.(0:미설정, 1:설정)
broad_hidden integer 방송 시, 리스트에서 숨김 설정 여부입니다.(0:노출, 1:숨김)
broad_grade integer 방송 시, 시청 등급입니다.(19:연령 제한 방송, 0:일반 방송)
hashtags string 방송 시, 제공하는 해시태그입니다.
broad_ending_msg string 방송 종료 시, 노출되는 자동 인사말입니다.
is_wait string 방송 대기 설정 여부입니다.(0:해제, 1:설정)
waiting_time integer 방송 대기 시간입니다.
water_mark integer 19/잠금표시 위치입니다.
(1:좌측 상단, 2:중앙 상단, 3:우측 상단, 4:좌측 하단, 5:중앙 하단, 6:우측 하단)
broad_tune_out integer 방송 시, 탐방사절 안내 표시 여부입니다.(0:탐방허용, 1:탐방사절)
paid_promotion integer 방송 시, 유료 광고 포함 표시 여부입니다.(0:미포함, 1:포함)

broad/info/update

방송 송출 정보 변경

방송에 대한 제목, 카테고리, 속성 설정(비밀번호 여부/리스트 숨김/시청 등급 등), 시청 허용 인원, 해시태그, 종료 후 자동 인사말 등 관련된 정보를 변경할 수 있습니다.

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/broad/info/update" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'access_token=ae1d3e4XXXXXXX&title=백호구님의 아프리카TV 방송&category=40066&allowed_view_cnt=100000&broad_pwd_chk=1&broad_pwd=pass12&broad_hidden=0&broad_tune_out=0&paid_promotion=0&broad_grade=0&hashtags=게임, 배틀그라운드, 배그&broad_ending_msg=다음에 또 만나요~!&is_wait=1&waiting_time=10&water_mark=1'
import requests
import json

url = 'https://openapi.afreecatv.com/broad/info/update'
data = {
    "access_token": "ae1d3e4XXXXXXX",
    "title": "백호구님의 아프리카TV 방송",
    "category": 40066,
    "allowed_view_cnt": 100000,
    "broad_pwd_chk": 1,
    "broad_pwd": "pass12",
    "broad_hidden": 0,
    "broad_tune_out": 0,
    "paid_promotion": 0,
    "broad_grade": 0,
    "hashtags": "게임, 배틀그라운드, 배그",
    "broad_ending_msg": "다음에 또 만나요~!",
    "is_wait": "1",
    "waiting_time": 10,
    "water_mark": "1"
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/broad/info/update',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'access_token' => 'ae1d3e4XXXXXXX',
            'title' => '백호구님의 아프리카TV 방송',
            'category' => 40066,
            'allowed_view_cnt' => 100000,
            'broad_pwd_chk' => 1,
            'broad_pwd' => 'pass12',
            'broad_hidden' => 0,
            'broad_tune_out' => 0,
            'paid_promotion' => 0,
            'broad_grade' => 0,
            'hashtags' => '게임, 배틀그라운드, 배그',
            'broad_ending_msg' => '다음에 또 만나요~!',
            'is_wait' => '1',
            'waiting_time' => 10,
            'water_mark' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/broad/info/update"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "access_token": "ae1d3e4XXXXXXX",
    "title": "백호구님의 아프리카TV 방송",
    "category": 40066,
    "allowed_view_cnt": 100000,
    "broad_pwd_chk": 1,
    "broad_pwd": "pass12",
    "broad_hidden": 0,
    "broad_tune_out": 0,
    "paid_promotion": 0,
    "broad_grade": 0,
    "hashtags": "게임, 배틀그라운드, 배그",
    "broad_ending_msg": "다음에 또 만나요~!",
    "is_wait": "1",
    "waiting_time": 10,
    "water_mark": "1"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "result": 1,
    "msg": "방송정보 변경이 정상적으로 처리 되었습니다."
}

Example response (200):

{
    "result": -1320,
    "msg": "방송대기 설정 시간이 올바르지 않습니다.(515)"
}

HTTP Request

POST broad/info/update

Body Parameters

Parameter Type Status Description
access_token string required 토큰값입니다.
title string optional 방송 제목입니다.
*최대 75자까지 입력 가능합니다.
category integer optional 방송 카테고리 번호입니다.
*카테고리 리스트는 본 개발 가이드 항목의 최하단 ‘카테고리 리스트’를 참고 부탁 드립니다.
allowed_view_cnt integer optional 방송 시, 시청 가능한 최대 시청자 수 설정입니다.
*기본으로 최대 시청자 수는 100,000명이며, 계정 등급 상향 또는 아이템 사용으로 시청자 수를 추가할 수 있습니다.
broad_pwd_chk integer optional 비밀번호 방송 설정 여부입니다.(0:해제, 1:설정)
broad_pwd string optional 방송의 비밀번호입니다.
*비밀번호는 영문+숫자의 조합이며, 6자이상으로 설정해야 합니다.
broad_hidden integer optional 방송 시, 리스트에서 숨김 설정 여부입니다.(0:노출, 1:숨김)
broad_tune_out integer optional 방송 시, 탐방사절 안내 표시 여부입니다.(0:탐방허용, 1:탐방사절)
*탐방사절이란, 방송이 사전 동의 없이 무단으로 재송출됨을 거절하는 의사 표현 UI입니다.
paid_promotion integer optional 방송 시, 유료 광고 포함 표시 여부입니다.(0:미포함, 1:포함)
*유료 광고 포함 표시란, BJ와 브랜드는 유료광고 또는 협찬이 포함되는 콘텐츠의 경우 대가 관계를 표시할 법적 의무가 있습니다.시청 환경 및 다시보기 영상 내 '유료광고 포함' 메시지가 노출됩니다.
broad_grade integer optional 방송 시, 시청 등급입니다.(19:연령 제한 방송, 0:일반 방송)
*연령 제한 방송은 19세 미만 시청 불가입니다.
hashtags string optional 방송 시, 제공하는 해시태그입니다.
*최대 5개까지 입력 가능하며, 특수문자는 입력할 수 없습니다. 다중 입력 시, 다중 입력 시, ‘띄어쓰기’와 ‘,’로 구분됩니다.
broad_ending_msg string optional 방송 종료 시, 노출되는 자동 인사말입니다.
*최대 40자까지 입력 가능합니다.
is_wait string optional 방송 대기 설정 여부입니다.(0:해제, 1:설정)
*방송 대기 설정이란, 방송이 예기치 못하게 비정상 종료가 되었을 때, 대기 상태로 전환하는 기능입니다.
waiting_time integer optional 방송 대기 시간입니다.
*최소 1분부터 1분 간격으로 최대 10분까지 설정할 수 있습니다.
water_mark string optional 19/잠금표시 위치입니다.
(1:좌측 상단, 2:중앙 상단, 3:우측 상단, 4:좌측 하단, 5:중앙 하단, 6:우측 하단)

Response Parameters

Parameter Type Description
result integer 결과 코드입니다.(1:성공, 음수:에러)
msg string 결과 메시지입니다.

broad/rtmp/reset

방송 송출 스트림 키 변경

방송 중 스트림 키를 변경하면, 기존 진행중인 방송은 종료되고 새로운 스트림 키가 발급됩니다.

다만, 방송 대기 상태에서 스트림 키를 변경할 경우 즉시 신규 스트림 키가 발급되지만, 방송 대기 시간이 모두 경과한 뒤 방송을 진행할 수 있습니다.

스트림 키는 방송 송출에서 패스워드와 같은 역할을 합니다. 노출이 될 경우 해당 스트림 키를 이용해 타인이 방송을 진행할 수 있기에 주의가 필요합니다.

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/broad/rtmp/reset" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'access_token=ae1d3e4XXXXXXX'
import requests
import json

url = 'https://openapi.afreecatv.com/broad/rtmp/reset'
data = {
    "access_token": "ae1d3e4XXXXXXX"
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/broad/rtmp/reset',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'access_token' => 'ae1d3e4XXXXXXX',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/broad/rtmp/reset"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "access_token": "ae1d3e4XXXXXXX"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "result": 1,
    "msg": "성공",
    "stream_key": "afid-1234567"
}

HTTP Request

POST broad/rtmp/reset

Body Parameters

Parameter Type Status Description
access_token string required 토큰값입니다.

Response Parameters

Parameter Type Description
result integer 결과 코드입니다.(1:성공, 음수:에러)
msg string 결과 메시지입니다.
stream_key string 재발급한 스트림 키입니다.

broad/list

방송 리스트 구성

호출 타입에 따라 현재 방송 중인 리스트 정보를 json 타입으로 전달합니다. 전체 또는 카테고리별 방송 리스트 정보를 얻을 수 있습니다.

카테고리별 방송 리스트를 얻고 싶다면 select_key: "cate", select_value: 카테고리 리스트 api의 "cate_no"를 이용합니다.
select_value가 빈값일 경우 전체 방송 리스트 정보를 제공합니다.
page별 방송 리스트에서 제공하는 갯수는 60개입니다.

해당 방송 리스트의 정보로 아프리카TV 시청 페이지(http://play.afreecatv.com/{user_id}/{broad_no})로 이동을 하거나,
임베디드 플레이어(http://play.afreecatv.com/{user_id}/{broad_no}/embed)로 연결이 가능합니다.
*임베디드 플레이어 연결이란 애플리케이션에 아프리카TV 플레이어를 삽입하는 방식을 뜻합니다.

Example request:

curl -X GET \
    -G "https://openapi.afreecatv.com/broad/list?client_id=ae1d3e4XXXXXXX&select_key=cate&select_value=00130000&order_type=view_cnt&page_no=1&callback=callback" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*"
import requests

url = 'https://openapi.afreecatv.com/broad/list'
params = {
  'client_id': 'ae1d3e4XXXXXXX',
  'select_key': 'cate',
  'select_value': '00130000',
  'order_type': 'view_cnt',
  'page_no': '1',
  'callback': 'callback'
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://openapi.afreecatv.com/broad/list',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'query' => [
            'client_id' => 'ae1d3e4XXXXXXX',
            'select_key' => 'cate',
            'select_value' => '00130000',
            'order_type' => 'view_cnt',
            'page_no' => '1',
            'callback' => 'callback',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/broad/list"
);

let params = {
    "client_id": "ae1d3e4XXXXXXX",
    "select_key": "cate",
    "select_value": "00130000",
    "order_type": "view_cnt",
    "page_no": "1",
    "callback": "callback",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

fetch(url, {
    method: "GET",
    headers: headers,
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

callback({
    "total_cnt": 6,
    "page_no" : 1,
    "page_block" : 60,
    "broad":
    [
         {
              "broad_title": "[생]아티님의 아프리카TV 방송",
              "visit_broad_type": "1",
              "is_password": "1",
              "broad_cate_no": "00130000",
              "broad_no": "2232",
              "user_id": "afreecatv1234",
              "user_nick": "아티",
              "profile_img": "//profile.img.afreecatv.com/LOGO/af/afreecatv1234/afreecatv1234.jpg?dummy=123456789",
              "broad_thumb": "//liveimg.afreecatv.com/m/2232",
              "broad_start": "2020-01-15 15:26:31",
              "broad_grade": "0",
              "broad_bps": "2000",
              "broad_resolution": "1280x720",
              "paid_promotion : 0,
              "total_view_cnt": "2232"
         },
         {
              "broad_title": "[생]백호구님의 아프리카TV 방송",
              "visit_broad_type": "1",
              "is_password": "0",
              "broad_cate_no": "00130000",
              "broad_no": "2232",
              "user_id": "afreecatv123",
              "user_nick": "백호구",
              "profile_img": "//profile.img.afreecatv.com/LOGO/af/afreecatv123/afreecatv123.jpg?dummy=123456789",
              "broad_thumb": "//liveimg.afreecatv.com/m/2232",
              "broad_start": "2020-01-15 15:26:31",
              "broad_grade": "19",
              "broad_bps": "2000",
              "broad_resolution": "1280x720",
              "paid_promotion: 1
              "total_view_cnt": "2456"
         }
    ],
    "time": 1586326329
  });

HTTP Request

GET broad/list

Query Parameters

Parameter Status Description
client_id required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
select_key optional 리스트 호출 타입입니다.(cate:카테고리 호출, 기본값)
select_value optional select_key:"cate"일 경우, 방송 카테고리 번호입니다. 빈 값일 경우 전체 방송 리스트를 제공합니다.
*대카테고리 번호를 넣을 경우 자식 카테고리 방송 리스트까지 포함합니다.
order_type optional 리스트 정렬 순서입니다.
* view_cnt:시청자순(기본값)
* broad_start:최신방송순
page_no optional 페이지 번호입니다.
callback optional 콜백입니다.
jsonp로 호출할 경우 사용 가능합니다.

Response Parameters

Parameter Type Description
total_cnt integer 전체 방송 개수입니다.
page_no integer 현재 페이지 번호입니다.
page_block integer 페이지당 제공하는 방송 갯수입니다.
broad array 방송 정보 리스트입니다.
time integer 방송 리스트 생성된 시간입니다.(유닉스 타임 스탬프)
broad_title string 방송 제목입니다.
visit_broad_type string 방송 시, 탐방사절 안내 표시 여부입니다.(0:탐방허용, 1:탐방사절)
*탐방사절이란, 방송이 사전 동의 없이 무단으로 재송출됨을 거절하는 의사 표현 UI입니다.
is_password string 비밀번호 방송 여부입니다.(1:비밀번호 설정 방송, 0:미설정 방송)
*비밀번호는 영문+숫자의 조합이며, 6자이상으로 설정해야 합니다.
broad_cate_no string 방송 카테고리 번호입니다.
*카테고리 리스트는 본 개발 가이드 항목의 최하단 ‘카테고리 리스트’를 참고 부탁 드립니다.
broad_no string 방송 번호입니다.
user_id string BJ 아이디입니다.
user_nick string BJ 닉네임입니다.
profile_img string BJ 프로필 이미지입니다.
broad_thumb string 방송 썸네일입니다.
*방송 썸네일은 480x270 사이즈이며, 확장자는 jpg입니다. 썸네일이 포함되는 UI 구성 시 함께 고려되어야 합니다.
broad_start string 방송 시작 시간입니다.
broad_grade string 방송 등급입니다.(19:연령 제한 방송, 0:일반 방송)
*연령 제한 방송은 19세 미만 시청 불가입니다.
broad_bps string 방송 화질입니다.
*단위는 kbps이며, 최대 8000kbps까지 설정 가능합니다.
broad_resolution string 방송 해상도입니다.
*1280x720/1920x1080등의 해상도가 있습니다.
total_view_cnt string 총 시청자 수입니다.
paid_promotion integer 방송 시, 유료 광고 포함 표시 여부입니다.(0:미포함, 1:포함)
*유료 광고 포함 표시란, BJ와 브랜드는 유료광고 또는 협찬이 포함되는 콘텐츠의 경우 대가 관계를 표시할 법적 의무가 있습니다.시청 환경 및 다시보기 영상 내 '유료광고 포함' 메시지가 노출됩니다.

aqua/component/get

전자비서, 컴포넌트

전자비서 component를 연동하기 위한 링크입니다. 전자비서의 component를 연동 할 수 있습니다. 전자비서 스타일 및 설정을 변경하려면 ‘https://aqua.afreecatv.com’ 페이지에서 변경 후 저장해 주세요.

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/aqua/component/get" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'access_token=ae1d3e4XXXXXXX&platform_type=pc&component_type=chat'
import requests
import json

url = 'https://openapi.afreecatv.com/aqua/component/get'
data = {
    "access_token": "ae1d3e4XXXXXXX",
    "platform_type": "pc",
    "component_type": "chat"
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/aqua/component/get',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'access_token' => 'ae1d3e4XXXXXXX',
            'platform_type' => 'pc',
            'component_type' => 'chat',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/aqua/component/get"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "access_token": "ae1d3e4XXXXXXX",
    "platform_type": "pc",
    "component_type": "chat"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "result": 1,
    "msg": "성공",
    "data": {
        "component_url": "https://aqua.afreecatv.com/component.php?szKey=.A32.7bbT56vyHMxxxxxxx"
    }
}

HTTP Request

POST aqua/component/get

Body Parameters

Parameter Type Status Description
access_token string required 토큰값입니다.
platform_type string optional 전자비서 플랫폼 타입입니다.(pc/mobile)
component_type string optional 전자비서 component 타입입니다.(chat:채팅/notice:알림/goal:목표그래프)

Response Parameters

Parameter Type Description
result integer 결과 코드입니다.(1:성공, 음수:에러)
msg string 결과 메시지입니다.
data array component 정보를 담고 있는 배열입니다.
component_url string 전자비서 component url입니다.

filter/{type}

방송 필터링 등록/수정(POST)

방송 리스트에서 필터링 하고자 하는 BJ/카테고리/키워드를 등록합니다. 또한, 기존에 등록한 데이터를 호출하여 수정할 수 있습니다.

예시) filter/bj, filter/category, filter/keyword

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/filter/bj" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX&black_id=afreecatv&cate_no=00300000&keyword=사설&reason=저작권 관련 필터링'
import requests
import json

url = 'https://openapi.afreecatv.com/filter/bj'
data = {
    "client_id": "ae1d3e4XXXXXXX",
    "client_secret": "dafgc12fvXXXXXXX",
    "black_id": "afreecatv",
    "cate_no": "00300000",
    "keyword": "사설",
    "reason": "저작권 관련 필터링"
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/filter/bj',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'client_id' => 'ae1d3e4XXXXXXX',
            'client_secret' => 'dafgc12fvXXXXXXX',
            'black_id' => 'afreecatv',
            'cate_no' => '00300000',
            'keyword' => '사설',
            'reason' => '저작권 관련 필터링',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/filter/bj"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "client_id": "ae1d3e4XXXXXXX",
    "client_secret": "dafgc12fvXXXXXXX",
    "black_id": "afreecatv",
    "cate_no": "00300000",
    "keyword": "사설",
    "reason": "저작권 관련 필터링"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "result": 1,
    "msg": "등록 완료"
}

HTTP Request

POST filter/{type}

URL Parameters

Parameter Status Description
type required 필터링 타입입니다.
(bj: BJ(기본값), category: 카테고리, keyword: 키워드)

Body Parameters

Parameter Type Status Description
client_id string required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
client_secret string required 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
black_id string required 필터링 대상 BJ 아이디입니다.
(type이 bj일 경우)
cate_no string required 필터링 카테고리 번호입니다.
(type이 category일 경우)
keyword string required 필터링 키워드입니다.
*한글,영어,숫자,특수문자 총 20자 입력 가능하며 이모지는 불가능합니다.
(type이 keyword일 경우)
reason string required 등록 사유입니다.

Response Parameters

Parameter Type Description
result integer 결과 코드입니다.(1:성공, 음수:에러)
msg string 결과 메시지입니다.

방송 필터링 삭제(DELETE)

방송 리스트에서 필터링하는 BJ/카테고리/키워드를 삭제합니다. 아프리카TV 자체에서 필터링하는 BJ/카테고리/키워드는 삭제가 불가능합니다.

예시) filter/bj, filter/category, filter/keyword

Example request:

curl -X DELETE \
    "https://openapi.afreecatv.com/filter/bj" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX&black_id=afreecatv&cate_no=00300000&keyword=사설'
import requests

url = 'https://openapi.afreecatv.com/filter/bj'
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('DELETE', url, headers=headers)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->delete(
    'https://openapi.afreecatv.com/filter/bj',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'client_id' => 'ae1d3e4XXXXXXX',
            'client_secret' => 'dafgc12fvXXXXXXX',
            'black_id' => 'afreecatv',
            'cate_no' => '00300000',
            'keyword' => '사설',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/filter/bj"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "client_id": "ae1d3e4XXXXXXX",
    "client_secret": "dafgc12fvXXXXXXX",
    "black_id": "afreecatv",
    "cate_no": "00300000",
    "keyword": "사설"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "DELETE",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "result": 1,
    "msg": "삭제 완료"
}

HTTP Request

DELETE filter/{type}

URL Parameters

Parameter Status Description
type required 필터링 타입입니다.
(bj: BJ(기본값), category: 카테고리, keyword: 키워드)

Body Parameters

Parameter Type Status Description
client_id string required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
client_secret string required 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
black_id string required 필터링 대상 BJ 아이디입니다.
(type이 bj일 경우)
cate_no string required 필터링 카테고리 번호입니다.
(type이 category일 경우)
keyword string required 필터링 키워드입니다. (글자수 제한: 20자 내외)
(type이 keyword일 경우)

Response Parameters

Parameter Type Description
result integer 결과 코드입니다.(1:성공, 음수:에러)
msg string 결과 메시지입니다.

방송 필터링 리스트(GET)

방송 리스트에서 필터링 대상으로 등록한 BJ/카테고리/키워드 리스트입니다. 아프리카TV 자체에서 등록한 BJ/카테고리/키워드도 포함될 수 있습니다.

예시) filter/bj, filter/category, filter/keyword

Example request:

curl -X GET \
    -G "https://openapi.afreecatv.com/filter/bj?client_id=ae1d3e4XXXXXXX&client_secret=dafgc12fvXXXXXXX" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*"
import requests

url = 'https://openapi.afreecatv.com/filter/bj'
params = {
  'client_id': 'ae1d3e4XXXXXXX',
  'client_secret': 'dafgc12fvXXXXXXX'
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://openapi.afreecatv.com/filter/bj',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'query' => [
            'client_id' => 'ae1d3e4XXXXXXX',
            'client_secret' => 'dafgc12fvXXXXXXX',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/filter/bj"
);

let params = {
    "client_id": "ae1d3e4XXXXXXX",
    "client_secret": "dafgc12fvXXXXXXX",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

fetch(url, {
    method: "GET",
    headers: headers,
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "filter_list": [
        {
            "black_id": "afreecatv1",
            "reason": "토토 방송 근절",
            "type": 2
        },
        {
            "black_id": "afreecatv2",
            "reason": "불법 방송 근절",
            "type": 1
        }
    ]
}

Example response (200):

{
    "filter_list": [
        {
            "cate_name": "LOL",
            "cate_no": "00040019",
            "reason": "저작권 관련 보호 요청",
            "type": 2
        },
        {
            "cate_name": "배틀그라운드",
            "cate_no": "00040066",
            "reason": "게임사 요청",
            "type": 1
        }
    ]
}

Example response (200):

{
    "filter_list": [
        {
            "keyword": "토토",
            "reason": "토토 방송 근절",
            "type": 2
        },
        {
            "keyword": "도박",
            "reason": "사설 도박 방송 근절",
            "type": 1
        }
    ]
}

HTTP Request

GET filter/{type}

URL Parameters

Parameter Status Description
type required 필터링 타입입니다.
(bj: BJ(기본값), category: 카테고리, keyword: 키워드)

Query Parameters

Parameter Status Description
client_id required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
client_secret required 클라이언트 비밀 키입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)

Response Parameters

Parameter Type Description
filter_list array 필터링 리스트입니다.
black_id string 필터링 BJ 아이디입니다.
(type이 bj일 경우)
cate_name string 필터링 카테고리 명입니다.
(type이 category일 경우)
cate_no string 필터링 카테고리 번호입니다.
(type이 category일 경우)
keyword string 필터링 키워드입니다. (type이 keyword일 경우)
reason string 등록 사유입니다.
type integer 등록 타입입니다.(1: 본인이 등록, 2: 아프리카TV에서 등록)

broad/category/list

카테고리 리스트

생방송 진행 시 선택 가능한 카테고리 리스트를 json 타입으로 제공합니다. locale 값을 설정할 경우, 언어별 카테고리 리스트를 요청할 수 있습니다.
locale 값을 넣지 않을 경우엔 기본으로 한국어 카테고리 리스트를 제공합니다.

자식 카테고리가 있는 경우 child 배열을 포함하고 있습니다.

Example request:

curl -X GET \
    -G "https://openapi.afreecatv.com/broad/category/list?client_id=ae1d3e4XXXXXXX&locale=ko_KR" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*"
import requests

url = 'https://openapi.afreecatv.com/broad/category/list'
params = {
  'client_id': 'ae1d3e4XXXXXXX',
  'locale': 'ko_KR'
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://openapi.afreecatv.com/broad/category/list',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'query' => [
            'client_id' => 'ae1d3e4XXXXXXX',
            'locale' => 'ko_KR',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/broad/category/list"
);

let params = {
    "client_id": "ae1d3e4XXXXXXX",
    "locale": "ko_KR",
};
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

fetch(url, {
    method: "GET",
    headers: headers,
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "broad_category": [
        {
            "cate_name": "토크/캠방",
            "cate_no": "00130000",
            "child": []
        },
        {
            "cate_name": "먹방/쿡방",
            "cate_no": "00330000",
            "child": []
        },
        {
            "cate_name": "게임",
            "cate_no": "00040000",
            "child": [
                {
                    "cate_name": "LOL",
                    "cate_no": "00040019"
                },
                {
                    "cate_name": "TFT",
                    "cate_no": "00040075"
                },
                {
                    "cate_name": "레전드 오브 룬테라",
                    "cate_no": "00040103"
                },
                {
                    "cate_name": "배틀그라운드",
                    "cate_no": "00040066"
                }
            ]
        }
    ]
}

HTTP Request

GET broad/category/list

Query Parameters

Parameter Status Description
client_id required 클라이언트 아이디입니다.(Developers > 내 계정 메뉴에서 확인 가능합니다.)
locale optional 로드할 카테고리 언어 타입 입니다.
ko_KR : 한국어
en_US : 영어
zh_CN : 중국어 간체
zh_TW : 중국어 번체
ja_JP : 일본어
th_TH : 태국어
vi_VN : 베트남어

Response Parameters

Parameter Type Description
broad_category array 카테고리 정보 리스트입니다.
cate_name string 카테고리 명입니다.
cate_no string 카테고리 번호입니다.
child array 자식 카테고리입니다.

oembed/embedinfo

게시판 VOD 영상 첨부

VOD URL을 외부 게시글에 작성할 수 있도록 임베디드 태그로 변환된 데이터를 json 타입으로 제공합니다.

width, height 값 설정을 통해 게시글에 추가될 임베디드 플레이어 크기를 지정할 수 있습니다.(width에 맞춰서 비율은 16:9로 자동 셋팅됩니다.)

Width, height 값을 설정하지 않을 경우 기본 크기(640x360)으로 제공됩니다

Example request:

curl -X GET \
    -G "https://openapi.afreecatv.com/oembed/embedinfo" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'vod_url=https://vod.afreecatv.com/player/71021072&width=640&height=360'
curl -X POST \
    "https://openapi.afreecatv.com/oembed/embedinfo" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'vod_url=https://vod.afreecatv.com/player/71021072&width=640&height=360'
import requests

url = 'https://openapi.afreecatv.com/oembed/embedinfo'
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('GET', url, headers=headers)
response.json()
import requests
import json

url = 'https://openapi.afreecatv.com/oembed/embedinfo'
data = {
    "vod_url": "https://vod.afreecatv.com/player/71021072",
    "width": 640,
    "height": 360
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->get(
    'https://openapi.afreecatv.com/oembed/embedinfo',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'vod_url' => 'https://vod.afreecatv.com/player/71021072',
            'width' => 640,
            'height' => 360,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/oembed/embedinfo"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "vod_url": "https://vod.afreecatv.com/player/71021072",
    "width": 640,
    "height": 360
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "GET",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "version": "1.0",
    "type": "video",
    "provider_name": "AFREECATV",
    "provider_url": "https://www.afreecatv.com",
    "width": 720,
    "height": 480,
    "title": "[DK vs GEN] 4세트 / 2021 LCK 스프링 결승전",
    "author_name": "LoL_공식",
    "author_url": "https://bj.afreecatv.com/aflol",
    "html": "<iframe width='720' height='480' src='//vod.afreecatv.com/player/71021072/embed?type=station&isAfreeca=false&autoPlay=false&showChat=true&mutePlay=false&szBjId=aflol&nStationNo=9691678&nBbsNo=18532080&nTitleNo=71021072&szCategory=00010000&szVodCategory=00040019&szPart=REVIEW&szVodType=STATION&nPlaylistIdx=0&isEmbedautoPlay=false&szSysType=html5' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen=''></iframe>"
}

HTTP Request

GET oembed/embedinfo

POST oembed/embedinfo

Body Parameters

Parameter Type Status Description
vod_url string required VOD URL입니다.
예시)
https://vod.afreecatv.com/player/71021072
https://vod.afreecatv.com/ST/71021072
https://v.afree.ca/ST/71021072
width integer optional 설정할 임베디드 플레이어의 width 값입니다.
height integer optional 설정할 임베디드 플레이어의 height 값입니다.

Response Parameters

Parameter Type Description
version integer 아프리카TV의 API 버전입니다.
type string 임베디드 영상 타입입니다.
provider_name string API 제공사입니다.
*제공사는 아프리카TV입니다.
provider_url string API 제공사의 메인 URL입니다.
*아프리카TV의 메인 URL입니다.
width integer 임베디드 플레이어 width값 입니다.
height integer 임베디드 플레이어 height값 입니다.
title string 해당 VOD의 타이틀입니다.
author_name string 해당 VOD 업로드 사용자의 닉네임입니다.
author_url string 해당 VOD 업로드 사용자의 방송국 주소입니다.
* 방송국이란 아프리카TV의 사용자가 본인의 VOD, 게시글, LIVE 방송 등을 관리할 수 있는 사용자 홈 개념의 공간입니다.
html string(iframe_tag) 임베디드 태그로 변환한 데이터입니다.

member/stationinfo

방송국 정보 조회

유저의 방송국 기본 정보를 조회 합니다.

Example request:

curl -X POST \
    "https://openapi.afreecatv.com/user/stationinfo" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -H "Accept: */*" \
    -d 'access_token=ae1d3e4XXXXXXX'
import requests
import json

url = 'https://openapi.afreecatv.com/user/stationinfo'
data = {
    "access_token": "ae1d3e4XXXXXXX"
}
headers = {
  'Content-Type': 'application/x-www-form-urlencoded',
  'Accept': '*/*'
}
response = requests.request('POST', url, headers=headers, params=params)
response.json()

$client = new \GuzzleHttp\Client();
$response = $client->post(
    'https://openapi.afreecatv.com/user/stationinfo',
    [
        'headers' => [
            'Content-Type' => 'application/x-www-form-urlencoded',
            'Accept' => '*/*',
        ],
        'json' => [
            'access_token' => 'ae1d3e4XXXXXXX',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://openapi.afreecatv.com/user/stationinfo"
);

let headers = {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "*/*",
};

let body = {
    "access_token": "ae1d3e4XXXXXXX"
}

let formBody = [];
for (var property in details) {
let encodedKey = encodeURIComponent(property);
let encodedValue = encodeURIComponent(details[property]);
formBody.push(encodedKey + "=" + encodedValue);
}
formBody = formBody.join("&");

fetch(url, {
    method: "POST",
    headers: headers,
    body: formBody
}).then(response => response.json()).then(json => console.log(json));

Example response (200):

{
    "result": 1,
    "msg": "성공",
    "data": {
        "user_nick": "xxxxxxxx",
        "station_name": "xxxxxxxxx",
        "profile_image": "xxxxxxxxxxxx.jpg",
        "lately_broad_date": "2024-01-01 00:00",
        "favorite_cnt": 100
    }
}

HTTP Request

POST user/stationinfo

Body Parameters

Parameter Type Status Description
access_token string required 토큰값입니다.

Response Parameters

Parameter Type Description
result integer 결과 코드입니다.(1:성공, 음수:에러)
msg string 결과 메시지입니다.
data array 방송국 정보를 담고 있는 배열입니다.
user_nick string 유저 닉네임입니다.
station_name string 방송국 이름입니다.
profile_image string 프로필 이미지 경로입니다.
lately_broad_date datetime 최근 방송일입니다.
favorite_cnt integer 애청자 수입니다.