DEVELOPERS / V1

개발자를 위한 명료한 길잡이.

moaCast API를 이용할 때 필요한 인증 흐름과 주요 경로를 빠르게 찾는 문서 레이아웃입니다.

버전: v1

01 시작하기

1.1 먼저 API 키를 준비하세요

작업 공간의 API 키 화면에서 키를 만든 뒤, 토큰 발급 경로를 호출합니다. 키는 발급할 때 한 번만 보입니다.

  1. 앱의 /app/w/{워크스페이스}/api-keys 화면에서 API 키를 발급받습니다. 평문은 발급하는 순간에 한 번만 보이므로 그때 안전한 곳에 옮겨 두십시오.
  2. 서버에서 POST /auth/token 를 호출해 1시간짜리 토큰을 받습니다.
  3. 이후 요청의 Authorization: Bearer <ACCESS_TOKEN> 헤더에 받은 토큰을 싣습니다.

기준 주소 · v1

https://moacast.com/api/moacast/v1

아래 엔드포인트 절에서는 기준 주소를 생략해 적습니다.

02 인증 흐름

2.1 키에서 토큰으로

  1. API 키 만들기
  2. 토큰 발급
  3. Bearer로 호출

API 키를 요청 헤더에 직접 싣지 않습니다. 키로 한 번 토큰을 받고, 그 토큰으로 호출합니다. 키는 오래 사는 비밀이라 매 요청에 실으면 프록시 기록과 디버그 출력에 계속 남지만, 토큰은 새어 나가도 1시간이면 죽습니다.

인증 규격
항목값
AuthorizationBearer <ACCESS_TOKEN> — 토큰 발급 응답의 data.access_token 를 그대로 싣습니다.
토큰 수명1시간(3,600초). 만료되면 같은 키로 다시 받습니다.
다루는 범위토큰을 받을 때 고른 워크스페이스 한 곳입니다. 다른 워크스페이스를 다루려면 그 코드로 토큰을 다시 받으십시오.
갱신갱신 전용 엔드포인트는 없습니다. 만료 전이나 만료 후에 토큰을 다시 발급받으면 됩니다.

키를 폐기하면 그 키로 만든 토큰도 다음 호출부터 막힙니다. 만료를 기다릴 필요가 없습니다.

키가 새어 나간 것으로 의심되면 앱의 API 키 화면에서 즉시 폐기하고 새 키를 발급받으십시오. 폐기한 키는 되살릴 수 없습니다.

03 요청과 응답

3.1 첫 요청을 따라가 보세요

아래 값은 형식을 보여 주는 가짜 예시입니다. 실제 키와 토큰은 넣지 않았습니다.

REQUEST · bash — POST /auth/token

Terminal — bash
curl -X POST https://moacast.com/api/moacast/v1/auth/token \
  -H 'Content-Type: application/json' \
  -d '{"api_key":"mc_live_xxxxxxxxxxxx","workspace":"a1b2c3d4"}'

RESPONSE · JSON — 200 OK

Response — JSON
{
  "result": "SUCCESS",
  "result_code": 0,
  "origin_time": 1790385521,
  "message": "토큰을 발급했습니다.",
  "data": {
    "access_token": "<ACCESS_TOKEN>",
    "token_type": "Bearer",
    "expires_in": 3600,
    "workspace": "a1b2c3d4"
  },
  "elapsed_time": "0.0291"
}

이후 요청은 Authorization: Bearer <ACCESS_TOKEN> 헤더를 사용합니다. 토큰은 한 워크스페이스에만 유효하며 1시간 뒤 만료됩니다.

Terminal — bash
curl https://moacast.com/api/moacast/v1/workspaces \
  -H 'Authorization: Bearer <ACCESS_TOKEN>'

3.2 응답 형식

모든 응답은 같은 봉투에 담깁니다. 성공과 실패를 가르는 값은 두 가지입니다 — HTTP 상태 코드와 봉투의 result 입니다.

응답 봉투의 필드
필드뜻
resultSUCCESS 또는 FAILED
result_code성공은 0, 실패는 아래 오류 절의 코드입니다.
message사람이 읽는 한 줄입니다. 조회 응답에는 없을 수 있으므로 분기 조건으로 쓰지 마십시오.
data실제 내용입니다. 엔드포인트마다 모양이 다릅니다.
origin_time서버가 요청을 받은 시각(Unix 초)입니다.
elapsed_time서버가 처리한 시간(초)입니다.

성공

Response — JSON
{
  "result": "SUCCESS",
  "result_code": 0,
  "origin_time": 1790385521,
  "data": {},
  "elapsed_time": "0.0291"
}

실패

Response — JSON
{
  "result": "FAILED",
  "result_code": 1001,
  "origin_time": 1790385678,
  "message": "...",
  "elapsed_time": "0.0240"
}

실패 응답에는 data 가 없습니다. 어느 칸이 문제였는지 알려 줄 수 있을 때는 field 나 missing_params 가 봉투 맨 위에 함께 실립니다.

목록의 페이징

여러 건을 돌려주는 엔드포인트는 pagination 를 함께 줍니다. has_more 가 true 이면 다음 쪽이 있습니다.

Response — JSON
"pagination": {
  "mode": "page",
  "page": 1,
  "limit": 20,
  "total": 1,
  "total_pages": 1,
  "has_more": false
}

04 파라미터

4.1 요청에 필요한 값

토큰 발급을 예로 든 파라미터입니다. 각 경로의 실제 규격은 연결된 상세 문서를 확인하세요.

토큰 발급 파라미터

토큰 발급 파라미터
이름구분설명
api_key필수앱에서 발급한 API 키
workspace필수토큰이 접근할 워크스페이스 코드

토큰 발급 상세 문서

05 오류와 한도

5.1 실패도 읽기 쉽게

응답의 HTTP 상태와 result_code를 함께 확인합니다. 호출 한도를 넘으면 Retry-After 헤더를 따라 재시도합니다.

대표 오류

대표 오류
HTTPresult_code뜻
4011001인증 헤더가 없거나 올바르지 않음
4009912필수 파라미터 누락
4294290호출 한도 초과

아래 표는 그 밖에 처리 중 만날 수 있는 오류와 대응 방법입니다.

오류 코드
코드HTTP언제무엇을 하면 되나
1001401Authorization 헤더가 없거나 토큰이 올바르지 않습니다.키로 토큰을 다시 받아 헤더에 싣습니다.
4013401토큰이 만료되었습니다.같은 키로 토큰을 다시 받습니다.
4014401토큰을 만든 API 키가 폐기되었습니다.새 키를 발급받아 토큰을 다시 받습니다.
1004400파라미터의 값이 규칙에 맞지 않습니다.field 에 적힌 칸을 고쳐 다시 보냅니다.
9912400필수 파라미터가 빠졌습니다.missing_params 에 적힌 이름을 채워 보냅니다.
2000404가리킨 워크스페이스나 채널이 없습니다.코드와 채널 키를 확인합니다. 권한이 없는 대상도 같은 응답입니다.
4013409채널의 권한이 만료되어 되살릴 수 없습니다.앱의 채널 화면에서 그 채널을 다시 연결합니다.
4290429요청이 너무 잦습니다.Retry-After 헤더가 알려 주는 초만큼 기다린 뒤 다시 보냅니다.
5000500서버에서 처리하지 못했습니다.잠시 뒤 다시 시도합니다. 계속되면 알려 주십시오.
9901–9904400 · 405그 주소가 받지 않는 메서드로 불렀습니다.엔드포인트가 받는 메서드로 보냅니다. PATCH 는 받지 않으므로 PUT 를 쓰십시오.
9999404그런 주소가 없습니다.경로의 철자와 버전(v1)을 확인합니다.

4013 는 HTTP 상태 코드에 따라 뜻이 갈립니다 — 401 이면 토큰 만료이고, 409 이면 채널을 다시 연결해야 한다는 뜻입니다.

없는 대상과 권한이 없는 대상을 가려 알려 주지 않습니다. 남의 워크스페이스가 있는지 없는지가 응답으로 새지 않게 하기 위한 것입니다.

5.2 요청 한도

한도를 넘으면 429 로 답하고, 언제 다시 보내도 되는지 헤더로 알려 줍니다.

요청 한도
대상한도
전체 호출IP 하나당 1분에 600회
POST /auth/tokenIP 하나당 1분에 30회. 토큰이 1시간짜리라 정상적인 사용에는 넉넉합니다.
POST /channels/sync채널 하나당 60초에 1회
한도 관련 응답 헤더
헤더뜻
X-RateLimit-Limit이 창에서 허용되는 횟수
X-RateLimit-Remaining남은 횟수
Retry-After다시 보내도 되기까지 남은 초. 429 일 때만 실립니다.

요금제에 딸린 호출 한도와 크레딧 차감은 아직 적용되지 않습니다. 적용되면 이 절에 숫자가 실립니다.

06 엔드포인트

기능별 경로 탐색

고객 API 문서 대장에 공개된 경로입니다. 각 행을 누르면 실제 상세 문서로 이동합니다.

6.1 인증

발급받은 API 키를 짧게 사는 토큰으로 바꿉니다. 고객 API 의 첫 호출이고, 인증 없이 부를 수 있는 유일한 엔드포인트입니다.

인증 묶음 전체 보기

6.2 워크스페이스

작업 공간입니다. 채널·피드·키가 모두 이 공간에 매달립니다. 토큰은 공간 하나에 묶여 발급되므로, 여기서 받은 코드가 이후 거의 모든 호출의 파라미터입니다.

워크스페이스 묶음 전체 보기

6.3 채널

워크스페이스가 연결한 플랫폼 계정입니다. 연결을 새로 만드는 일만은 API 로 할 수 없습니다 — 플랫폼의 동의 화면을 브라우저로 직접 거쳐야 하기 때문입니다.

채널 묶음 전체 보기

6.4 피드

연결한 채널에 실제로 올라가 있는 글입니다. 읽기는 받아 둔 것만 주므로 빠르고, 새로 받는 일은 따로 부릅니다.

피드 묶음 전체 보기

6.5 콘텐츠

올릴 것을 원장에 올리는 자리입니다. 영상은 파일까지 함께 받고, 외부 식별자를 주면 같은 요청을 다시 보내도 두 줄이 되지 않습니다. 등록과 동시에 채널별 예약을 걸 수도 있습니다.

콘텐츠 묶음 전체 보기

6.6 예약

언제 무엇이 어느 채널로 나가는지를 시각 순으로 봅니다. 달력과 타임라인이 이 하나로 그려집니다.

예약 묶음 전체 보기