01 시작하기
1.1 먼저 API 키를 준비하세요
작업 공간의 API 키 화면에서 키를 만든 뒤, 토큰 발급 경로를 호출합니다. 키는 발급할 때 한 번만 보입니다.
- 앱의
/app/w/{워크스페이스}/api-keys화면에서 API 키를 발급받습니다. 평문은 발급하는 순간에 한 번만 보이므로 그때 안전한 곳에 옮겨 두십시오. - 서버에서
POST /auth/token를 호출해 1시간짜리 토큰을 받습니다. - 이후 요청의
Authorization: Bearer <ACCESS_TOKEN>헤더에 받은 토큰을 싣습니다.
기준 주소 · v1
https://moacast.com/api/moacast/v1
02 인증 흐름
2.1 키에서 토큰으로
- API 키 만들기
- 토큰 발급
- Bearer로 호출
API 키를 요청 헤더에 직접 싣지 않습니다. 키로 한 번 토큰을 받고, 그 토큰으로 호출합니다. 키는 오래 사는 비밀이라 매 요청에 실으면 프록시 기록과 디버그 출력에 계속 남지만, 토큰은 새어 나가도 1시간이면 죽습니다.
| 항목 | 값 |
|---|---|
Authorization | Bearer <ACCESS_TOKEN> — 토큰 발급 응답의 data.access_token 를 그대로 싣습니다. |
| 토큰 수명 | 1시간(3,600초). 만료되면 같은 키로 다시 받습니다. |
| 다루는 범위 | 토큰을 받을 때 고른 워크스페이스 한 곳입니다. 다른 워크스페이스를 다루려면 그 코드로 토큰을 다시 받으십시오. |
| 갱신 | 갱신 전용 엔드포인트는 없습니다. 만료 전이나 만료 후에 토큰을 다시 발급받으면 됩니다. |
키를 폐기하면 그 키로 만든 토큰도 다음 호출부터 막힙니다. 만료를 기다릴 필요가 없습니다.
03 요청과 응답
3.1 첫 요청을 따라가 보세요
아래 값은 형식을 보여 주는 가짜 예시입니다. 실제 키와 토큰은 넣지 않았습니다.
REQUEST · bash — POST /auth/token
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
{
"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시간 뒤 만료됩니다.
curl https://moacast.com/api/moacast/v1/workspaces \
-H 'Authorization: Bearer <ACCESS_TOKEN>'3.2 응답 형식
모든 응답은 같은 봉투에 담깁니다. 성공과 실패를 가르는 값은 두 가지입니다 — HTTP 상태 코드와 봉투의 result 입니다.
| 필드 | 뜻 |
|---|---|
result | SUCCESS 또는 FAILED |
result_code | 성공은 0, 실패는 아래 오류 절의 코드입니다. |
message | 사람이 읽는 한 줄입니다. 조회 응답에는 없을 수 있으므로 분기 조건으로 쓰지 마십시오. |
data | 실제 내용입니다. 엔드포인트마다 모양이 다릅니다. |
origin_time | 서버가 요청을 받은 시각(Unix 초)입니다. |
elapsed_time | 서버가 처리한 시간(초)입니다. |
성공
{
"result": "SUCCESS",
"result_code": 0,
"origin_time": 1790385521,
"data": {},
"elapsed_time": "0.0291"
}실패
{
"result": "FAILED",
"result_code": 1001,
"origin_time": 1790385678,
"message": "...",
"elapsed_time": "0.0240"
}실패 응답에는 data 가 없습니다. 어느 칸이 문제였는지 알려 줄 수 있을 때는 field 나 missing_params 가 봉투 맨 위에 함께 실립니다.
목록의 페이징
여러 건을 돌려주는 엔드포인트는 pagination 를 함께 줍니다. has_more 가 true 이면 다음 쪽이 있습니다.
"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 헤더를 따라 재시도합니다.
대표 오류
| HTTP | result_code | 뜻 |
|---|---|---|
| 401 | 1001 | 인증 헤더가 없거나 올바르지 않음 |
| 400 | 9912 | 필수 파라미터 누락 |
| 429 | 4290 | 호출 한도 초과 |
아래 표는 그 밖에 처리 중 만날 수 있는 오류와 대응 방법입니다.
| 코드 | HTTP | 언제 | 무엇을 하면 되나 |
|---|---|---|---|
1001 | 401 | Authorization 헤더가 없거나 토큰이 올바르지 않습니다. | 키로 토큰을 다시 받아 헤더에 싣습니다. |
4013 | 401 | 토큰이 만료되었습니다. | 같은 키로 토큰을 다시 받습니다. |
4014 | 401 | 토큰을 만든 API 키가 폐기되었습니다. | 새 키를 발급받아 토큰을 다시 받습니다. |
1004 | 400 | 파라미터의 값이 규칙에 맞지 않습니다. | field 에 적힌 칸을 고쳐 다시 보냅니다. |
9912 | 400 | 필수 파라미터가 빠졌습니다. | missing_params 에 적힌 이름을 채워 보냅니다. |
2000 | 404 | 가리킨 워크스페이스나 채널이 없습니다. | 코드와 채널 키를 확인합니다. 권한이 없는 대상도 같은 응답입니다. |
4013 | 409 | 채널의 권한이 만료되어 되살릴 수 없습니다. | 앱의 채널 화면에서 그 채널을 다시 연결합니다. |
4290 | 429 | 요청이 너무 잦습니다. | Retry-After 헤더가 알려 주는 초만큼 기다린 뒤 다시 보냅니다. |
5000 | 500 | 서버에서 처리하지 못했습니다. | 잠시 뒤 다시 시도합니다. 계속되면 알려 주십시오. |
9901–9904 | 400 · 405 | 그 주소가 받지 않는 메서드로 불렀습니다. | 엔드포인트가 받는 메서드로 보냅니다. PATCH 는 받지 않으므로 PUT 를 쓰십시오. |
9999 | 404 | 그런 주소가 없습니다. | 경로의 철자와 버전(v1)을 확인합니다. |
5.2 요청 한도
한도를 넘으면 429 로 답하고, 언제 다시 보내도 되는지 헤더로 알려 줍니다.
| 대상 | 한도 |
|---|---|
| 전체 호출 | IP 하나당 1분에 600회 |
POST /auth/token | IP 하나당 1분에 30회. 토큰이 1시간짜리라 정상적인 사용에는 넉넉합니다. |
POST /channels/sync | 채널 하나당 60초에 1회 |
| 헤더 | 뜻 |
|---|---|
X-RateLimit-Limit | 이 창에서 허용되는 횟수 |
X-RateLimit-Remaining | 남은 횟수 |
Retry-After | 다시 보내도 되기까지 남은 초. 429 일 때만 실립니다. |
06 엔드포인트
기능별 경로 탐색
고객 API 문서 대장에 공개된 경로입니다. 각 행을 누르면 실제 상세 문서로 이동합니다. 발급받은 API 키를 짧게 사는 토큰으로 바꿉니다. 고객 API 의 첫 호출이고, 인증 없이 부를 수 있는 유일한 엔드포인트입니다. 작업 공간입니다. 채널·피드·키가 모두 이 공간에 매달립니다. 토큰은 공간 하나에 묶여 발급되므로, 여기서 받은 코드가 이후 거의 모든 호출의 파라미터입니다. 워크스페이스가 연결한 플랫폼 계정입니다. 연결을 새로 만드는 일만은 API 로 할 수 없습니다 — 플랫폼의 동의 화면을 브라우저로 직접 거쳐야 하기 때문입니다. 연결한 채널에 실제로 올라가 있는 글입니다. 읽기는 받아 둔 것만 주므로 빠르고, 새로 받는 일은 따로 부릅니다. 올릴 것을 원장에 올리는 자리입니다. 영상은 파일까지 함께 받고, 외부 식별자를 주면 같은 요청을 다시 보내도 두 줄이 되지 않습니다. 등록과 동시에 채널별 예약을 걸 수도 있습니다. 언제 무엇이 어느 채널로 나가는지를 시각 순으로 봅니다. 달력과 타임라인이 이 하나로 그려집니다. 6.1 인증
POST /auth/token6.2 워크스페이스
GET /workspacesPUT /workspaces/{code}6.3 채널
GET /channelsPOST /channels/syncDELETE /channels6.4 피드
GET /feedPOST /feed6.5 콘텐츠
GET /contentsPOST /contentsGET /contents/{id}PUT /contents/{id}POST /contents/schedule6.6 예약
GET /publishes
