05 채널별 예약 저장
5.1 설명
POST/contents/schedule
계정은 그 워크스페이스에 연결되어 있고 활성 상태여야 합니다. 한 요청 안에서 같은 계정을 두 번 지정할 수 없습니다. 같은 플랫폼의 다른 계정은 함께 지정할 수 있습니다.
올릴 계정을 고르는 방법이 두 가지입니다.
targets— 계정을 하나하나 적습니다. 계정마다 시각·공개 범위·옵션을 달리 줄 수 있습니다.target_language— 그 언어를 맡는 계정 전부가 대상이 됩니다. 이때 예약 시각은publish_at또는local_publish_at을 최상위에 함께 보내고,visibility·platform_options도 최상위에서 받아 모든 대상에 같이 적용합니다.
둘을 함께 보내면 targets 가 이깁니다. 둘 다 보내지 않으면 400 입니다.
예약 시각은 publish_at 과 local_publish_at 중 하나만 보냅니다. 둘 다 보내면 거절합니다.
targets 의 한 줄은 다음 칸으로 이루어집니다.
5.2 파라미터
| 이름 | 구분 | 설명 |
|---|---|---|
workspace | 필수 | 워크스페이스 코드 |
content_id | 필수 | 예약할 콘텐츠 ID. GET /contents 의 id 입니다 |
targets | 선택 | 채널별 예약 목록. 50개까지. 한 줄의 모양은 위 표와 같습니다. target_language 와 둘 중 하나는 있어야 합니다 |
target_language | 선택 | 이 언어를 맡는 계정 전부를 대상으로 삼습니다(ko · en · pt-br 꼴, 2~5자 소문자). targets 를 함께 주면 무시됩니다 |
publish_at | 선택 | target_language 로 고를 때의 예약 시각. UTC 오프셋을 포함한 ISO-8601 |
local_publish_at | 선택 | target_language 로 고를 때의 예약 시각. 워크스페이스 시간대의 현지 시각. publish_at 과 둘 중 하나만 보냅니다 |
visibility | 선택 | target_language 로 고른 모든 대상의 공개 범위. 생략하면 public |
platform_options | 선택 | target_language 로 고른 모든 대상의 플랫폼별 발행 옵션 |
5.3 요청
curl -X POST https://moacast.com/api/moacast/v1/contents/schedule \
-H 'Authorization: Bearer <ACCESS_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{"workspace":"a1b2c3d4","content_id":"value"}'5.4 성공 응답
{
"result": "SUCCESS",
"result_code": 0,
"message": "예약을 저장했습니다.",
"data": {
"content": {
"id": 12,
"title": "9월 넷째 주 요약",
"publications": [
{
"id": 34,
"channel": "youtube",
"external_id": "UC...",
"status": "SCHEDULED",
"publish_at": "2026-09-28T01:00:00+00:00",
"visibility": "public",
"platform_options": []
}
]
}
}
}5.5 필드
| 칸 | 타입 | 필수 | 설명 |
|---|---|---|---|
channel_key | string | ✓ | 채널 키. youtube · instagram · facebook · threads · tiktok · x · linkedin |
external_id | string | 올릴 계정입니다. GET /channels 의 external_id 를 그대로 씁니다. 그 플랫폼에 계정이 둘 이상이면 반드시 주어야 하고, 주지 않으면 400 입니다 | |
publish_at | string | UTC 오프셋을 포함한 ISO-8601(2026-09-28T01:00:00Z) | |
local_publish_at | string | 워크스페이스 시간대의 현지 시각(2026-09-28T10:00) | |
visibility | string | public · unlisted · private. 생략하면 public | |
platform_options | object | 플랫폼별 발행 옵션. 배열이 아니라 객체여야 합니다 |
| 필드 | 타입 | 설명 |
|---|---|---|
content | object | 예약을 반영한 콘텐츠. 모양은 GET /contents 의 한 줄과 같고, 방금 저장한 예약이 publications 에 실립니다 |
5.6 실패
| 코드 | HTTP | 언제 |
|---|---|---|
9912 | 400 | workspace 또는 content_id 가 빠졌습니다 |
1004 | 400 | 대상이 규칙에 맞지 않습니다(targets 와 target_language 가 둘 다 없음 · 51개 이상 · 같은 계정 두 번 · 시각 형식 · 연결되지 않았거나 활성 상태가 아닌(다시 연결해야 하는) 계정 · 같은 플랫폼에 계정이 둘 이상인데 external_id 를 주지 않음 · target_language 형식이나 그 언어의 계정이 없음 · 서머타임으로 없거나 중복되는 시각 등) |
1001 | 401 | 헤더가 없거나 토큰이 올바르지 않습니다 |
1002 | 403 | 정지된 워크스페이스입니다 |
1003 | 403 | 세션으로 부른 쓰기인데 요청 출처가 이 사이트가 아닙니다 |
2000 | 404 | 그 워크스페이스가 없거나, 그 콘텐츠를 찾을 수 없습니다 |
4090 | 409 | 이미 발행 처리된 예약은 수정할 수 없습니다 |
5000 | 500 | 예약을 저장하지 못했습니다 |
5000 | 503 | 예약 저장소가 준비되지 않았습니다 |
