API 문서

채널별 예약 저장

이미 등록된 콘텐츠를 어느 계정에 언제 올릴지 정합니다. 같은 콘텐츠와 같은 계정에 예약이 이미 있으면 그 예약을 덮어씁니다.

버전: v1

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 요청

Terminal — bash
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 성공 응답

Response — JSON
{
    "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_keystring✓채널 키. youtube · instagram · facebook · threads · tiktok · x · linkedin
external_idstring올릴 계정입니다. GET /channels 의 external_id 를 그대로 씁니다. 그 플랫폼에 계정이 둘 이상이면 반드시 주어야 하고, 주지 않으면 400 입니다
publish_atstringUTC 오프셋을 포함한 ISO-8601(2026-09-28T01:00:00Z)
local_publish_atstring워크스페이스 시간대의 현지 시각(2026-09-28T10:00)
visibilitystringpublic · unlisted · private. 생략하면 public
platform_optionsobject플랫폼별 발행 옵션. 배열이 아니라 객체여야 합니다
채널별 예약 저장 필드
필드타입설명
contentobject예약을 반영한 콘텐츠. 모양은 GET /contents 의 한 줄과 같고, 방금 저장한 예약이 publications 에 실립니다

5.6 실패

채널별 예약 저장 실패
코드HTTP언제
9912400workspace 또는 content_id 가 빠졌습니다
1004400대상이 규칙에 맞지 않습니다(targets 와 target_language 가 둘 다 없음 · 51개 이상 · 같은 계정 두 번 · 시각 형식 · 연결되지 않았거나 활성 상태가 아닌(다시 연결해야 하는) 계정 · 같은 플랫폼에 계정이 둘 이상인데 external_id 를 주지 않음 · target_language 형식이나 그 언어의 계정이 없음 · 서머타임으로 없거나 중복되는 시각 등)
1001401헤더가 없거나 토큰이 올바르지 않습니다
1002403정지된 워크스페이스입니다
1003403세션으로 부른 쓰기인데 요청 출처가 이 사이트가 아닙니다
2000404그 워크스페이스가 없거나, 그 콘텐츠를 찾을 수 없습니다
4090409이미 발행 처리된 예약은 수정할 수 없습니다
5000500예약을 저장하지 못했습니다
5000503예약 저장소가 준비되지 않았습니다

한 줄이라도 규칙에 어긋나면 그 요청의 예약은 하나도 저장되지 않습니다.

이미 발행 처리된(SCHEDULED 가 아닌) 예약은 고칠 수 없습니다.

계정의 언어는 채널 화면에서 정합니다(GET /channels 의 language). 언어를 정하지 않은 계정은 target_language 로 고를 수 없습니다. 그 언어의 계정이 하나도 없으면 400 이고 예약은 하나도 저장되지 않습니다.