> ## Documentation Index
> Fetch the complete documentation index at: https://docs.utage-system.com/llms.txt
> Use this file to discover all available pages before exploring further.

# コース作成

> 会員サイトにコースを作成します。作成したコースはコース一覧の末尾に未分類（`course_group_id` が null）で追加されます。コースグループへの振り分けはコース並び替えで行います。レッスングループ「メインレッスン」が自動で作成されます。応答はコース取得と同じ全項目です。

400（`bad_request`）になる場合:
- 契約内容によるコースの件数上限に達している
- `type` に `normal` / `url` 以外を指定した
- `release_type` / `close_type` / `limited_offers[].type` に `reader_date` を指定したが、会員サイトの `login_type` が `optional` / `none` ではない

422（`validation_error`）の `details` には項目ごとのエラーが入ります。条件付き必須（`type` が `url` のときの `url`、`show_non_purchaser` が true のときの `url_for_non_purchaser`、`use_limited_offer` と `limited_offers` の整合、`has_target_persons` が true のときの登録日、`release_type` / `close_type` ごとの日数・月数・日付・時刻）と、同じ会員サイトに無いカテゴリ（`category_ids.{index}`）・バンドル（`limited_offers.{index}.bundle_id`）の指定を含みます。


`POST`

```
https://api.utage-system.com/v1/members/{site_id}/courses
```


## OpenAPI

````yaml POST /members/{site_id}/courses
openapi: 3.0.3
info:
  title: UTAGE API
  description: >
    UTAGEのパブリックAPIです。ファネル、メール・LINE配信、会員サイト、イベント・予約、決済、メディアなどのリソースをプログラムから操作できます。


    ## 認証

    すべてのリクエストにAPIキーによるBearer認証が必要です（要素タイプ・LINEメッセージタイプ・配信条件タイプの参照エンドポイントを除く）。


    ```

    Authorization: Bearer {api_key}

    ```


    APIキーはUTAGE管理画面から発行できます。APIキーが未指定・無効・無効化済みの場合、またはアカウントが利用停止中の場合は `401
    Unauthorized`（`error.code` は `unauthorized`）が返されます。


    ## レート制限

    リクエスト数には以下の制限があります。表の値は既定値で、契約内容により異なる場合があります。


    | 分間上限 | 日間上限 |

    |----------|----------|

    | 60リクエスト/分（APIキー単位・暦の1分ごと） | 10,000リクエスト/日（アカウント単位・暦日ごと） |


    レスポンスヘッダーで分間上限の窓が終わる時刻を確認できます（分間の残数と日間の残数はヘッダーに含まれません）。


    | ヘッダー | 説明 |

    |----------|------|

    | X-RateLimit-Limit | 接続元IP単位でAPI全体に掛かる制限の上限値（APIキー単位の分間上限ではありません） |

    | X-RateLimit-Remaining | 接続元IP単位の制限の残りリクエスト数（分間上限の残数ではありません） |

    | X-RateLimit-Reset | APIキー単位の分間上限で、現在の1分間の窓が終わる（次の分が始まる）UNIXタイムスタンプ |


    上限を超えた場合は `429 Too Many Requests`（`error.code` は
    `rate_limit_exceeded`）が返されます。日間上限の超過時は `X-RateLimit-Reset`
    が翌日0:00になります（`X-RateLimit-Limit` / `X-RateLimit-Remaining`
    は超過時も接続元IP単位の値です）。認証不要のエンドポイントと読者作成（`POST
    /accounts/{account_id}/scenarios/{scenario_id}/readers`、`POST
    /accounts/{account_id}/line/friends/{friend_id}/readers`）はレート制限の対象外で、`X-RateLimit-Reset`
    ヘッダーは付きません。


    データを作成するAPIには、これとは別にAPI経由の作成件数の上限があります。超過時は `429` で `total_limit_exceeded` /
    `hourly_limit_exceeded` / `monthly_limit_exceeded`
    が返され、`details.resource_type` に対象のリソース種別が含まれます。


    ## エラーレスポンス

    エラー時は以下の形式で返されます。


    ```json

    {
      "error": {
        "code": "error_code",
        "message": "エラーメッセージ"
      }
    }

    ```


    エラーの種類によっては `error.details`
    に補足情報（バリデーションの項目別エラー、`retry_after`、`resource_type` など）が含まれます。
  version: '1.0'
  contact:
    name: UTAGE サポート
servers:
  - url: https://api.utage-system.com/v1
    description: UTAGE API
security:
  - BearerAuth: []
tags:
  - name: ファネル
    description: ファネルの作成・更新・一覧取得
  - name: ステップ
    description: ファネル内のステップの作成・更新・並び替え・一覧取得
  - name: ページ
    description: ステップ内のページの作成・更新・取得・削除・一覧取得
  - name: 配信アカウント
    description: 配信アカウントの作成・一覧取得
  - name: シナリオ
    description: シナリオの作成・一覧取得
  - name: メディア
    description: 動画・音声・通常メディアの一覧取得・アップロード・名称変更
  - name: 要素タイプ
    description: ファネルページ・レッスン・HTMLメールの要素タイプ定義、LINEメッセージタイプ・配信条件タイプの取得（認証不要）
  - name: ファネル統計
    description: ファネルの集計データ・登録者・登録経路の取得
  - name: 配信メッセージ
    description: 配信メッセージの作成・更新・テスト送信・配信統計、置き換え文字の取得
  - name: 読者
    description: 読者の作成・更新・取得、ラベル・配信履歴・開封/クリック履歴の取得
  - name: LINE
    description: LINE友だち・カスタム送信者・1対1チャット・テンプレート・テンプレートグループ・リッチメニュー・自動応答の操作
  - name: ラベル・共通読者・登録経路
    description: ラベル・共通読者・アクション・登録経路の操作
  - name: 登録経路
    description: ファネルの登録経路・登録経路グループの作成・取得・更新・削除
  - name: ファネルアクション
    description: ファネルアクション（管理画面「アクション設定」）の作成・取得・更新・削除とアクショングループの一覧取得
  - name: 登録フォーム・読者項目
    description: 読者項目と登録フォーム項目の作成・更新・取得・削除・並び替え
  - name: 連携
    description: Googleスプレッドシート連携アカウント・広告連携設定の一覧取得
  - name: 会員サイト
    description: 会員サイトの一覧取得・作成・取得・更新・削除・並び替え
  - name: コース
    description: 会員サイト配下のコースの一覧取得・作成・取得・更新・削除・並び替え
  - name: コースグループ
    description: コースグループの一覧取得・作成・取得・更新・削除
  - name: バンドル
    description: バンドル（受講生に開放するコース・コミュニティグループのセット）の一覧取得・作成・取得・更新・削除・並び替え
  - name: レッスン
    description: 会員サイトのレッスン・レッスングループの操作と、レッスンごと受講状況・受講完了者の取得
  - name: 受講生
    description: 会員サイトの受講生の作成・更新・取得・削除、受講状況・操作履歴の取得、コース・バンドルの登録受講生一覧
  - name: 登録コース・コミュニティ
    description: 受講生のバンドル・単一コース・コミュニティグループへの登録の追加・更新・解除・一覧取得
  - name: コミュニティグループ
    description: 会員サイトのコミュニティグループの一覧取得
  - name: イベント
    description: イベント（セミナー・説明会、個別相談・個別予約）の一覧取得・作成・取得・更新・削除
  - name: 日程
    description: イベントの日程の一覧取得・作成・取得・更新・削除
  - name: 日程設定
    description: 個別相談・個別予約タイプのイベントの日程設定（開催する曜日・時間帯・特定日の開催設定・担当者・日程の表示期間）の取得・更新
  - name: 申込フォーム・申込者項目
    description: イベントの申込フォームの基本項目・申込者項目の取得・更新
  - name: 申込者
    description: イベントの申込者の一覧取得・詳細取得・更新
  - name: イベントグループ
    description: イベントグループ（イベント一覧の「グループ管理」）の作成・更新・一覧取得・削除
  - name: 担当者
    description: 担当者（個別相談・個別予約の「担当者設定」）の作成・更新・一覧取得・削除と連携用リンクの発行・削除
  - name: 商品
    description: 商品の一覧取得・作成・取得・更新・削除・並び替え
  - name: 商品グループ
    description: 商品グループの一覧取得・作成・取得・更新・削除
  - name: 商品詳細
    description: 商品配下の商品詳細（価格・支払方法・決済代行会社・支払回数・購入後の動作・通知設定）の作成・更新・並び替え・取得・削除
  - name: 売上
    description: 売上の一覧・詳細取得、領収書・請求書設定の更新、銀行振込の入金反映、削除、月別・日別売上集計
paths:
  /members/{site_id}/courses:
    post:
      tags:
        - コース
      summary: コース作成
      description: >
        会員サイトにコースを作成します。作成したコースはコース一覧の末尾に未分類（`course_group_id` が
        null）で追加されます。コースグループへの振り分けはコース並び替えで行います。レッスングループ「メインレッスン」が自動で作成されます。応答はコース取得と同じ全項目です。


        400（`bad_request`）になる場合:

        - 契約内容によるコースの件数上限に達している

        - `type` に `normal` / `url` 以外を指定した

        - `release_type` / `close_type` / `limited_offers[].type` に
        `reader_date` を指定したが、会員サイトの `login_type` が `optional` / `none` ではない


        422（`validation_error`）の `details` には項目ごとのエラーが入ります。条件付き必須（`type` が `url`
        のときの `url`、`show_non_purchaser` が true のときの
        `url_for_non_purchaser`、`use_limited_offer` と `limited_offers`
        の整合、`has_target_persons` が true のときの登録日、`release_type` / `close_type`
        ごとの日数・月数・日付・時刻）と、同じ会員サイトに無いカテゴリ（`category_ids.{index}`）・バンドル（`limited_offers.{index}.bundle_id`）の指定を含みます。
      operationId: createMemberCourse
      parameters:
        - $ref: '#/components/parameters/MemberSiteId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MemberCourseCreateRequest'
      responses:
        '201':
          description: 作成されたコース
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/MemberCourse'
        '400':
          description: >-
            契約内容による件数上限、`type` が `normal` / `url` 以外、または `reader_date`
            を指定できない会員サイト（`bad_request`）
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                plan_limit:
                  summary: 契約内容による件数上限
                  value:
                    error:
                      code: bad_request
                      message: これ以上コースを追加することができません
                reader_date:
                  summary: reader_date を指定できない会員サイト
                  value:
                    error:
                      code: bad_request
                      message: >-
                        release_type=reader_date
                        は会員サイトのログイン設定が「任意」または「不要」の場合のみ指定できます
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          description: バリデーションエラー（`validation_error`）。`details` に項目ごとのエラーが入ります
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: validation_error
                  message: 入力内容に誤りがあります
                  details:
                    url:
                      - type=url時にurlは必須です
        '429':
          $ref: '#/components/responses/ResourceLimitExceeded'
components:
  parameters:
    MemberSiteId:
      name: site_id
      in: path
      required: true
      description: 会員サイトID
      schema:
        type: string
  schemas:
    MemberCourseCreateRequest:
      type: object
      description: コースの作成内容。省略できる項目に null を指定した場合は、省略したときと同じ扱い（既定値）になります
      required:
        - name
      properties:
        name:
          type: string
          maxLength: 255
          description: コース名
        system_name:
          type: string
          nullable: true
          maxLength: 255
          description: 管理名称（設定すると管理画面の一覧でコース名の代わりに表示）
        type:
          type: string
          nullable: true
          enum:
            - normal
            - url
          default: normal
          description: '種類。normal: 通常コース / url: 指定したURLへリンク（それ以外の値は 400 `bad_request`）'
        url:
          type: string
          nullable: true
          maxLength: 2048
          description: リンク先URL。`type` が `url` のとき必須
        href_type:
          type: string
          nullable: true
          enum:
            - blank
          description: 'リンクの開き方（`type` が `url` のとき）。null: 通常 / blank: 別ウィンドウ'
        image_url:
          type: string
          nullable: true
          maxLength: 255
          description: コース画像URL（URL形式。不正な形式は 422）
        button_text:
          type: string
          nullable: true
          maxLength: 255
          description: ボタンテキスト（省略時は「受講する」と表示）
        is_hide_progress:
          type: boolean
          nullable: true
          default: false
          description: 進捗率を表示しないか（true は表示しない）
        is_video_autoplay_setting:
          type: boolean
          nullable: true
          default: true
          description: 動画自動再生/視聴完了設定を表示するか
        comment_setting_type:
          type: string
          nullable: true
          enum:
            - individual
            - enable_all
          default: individual
          description: 'コメント機能。individual: 各レッスンごとに設定 / enable_all: 全レッスンで利用する'
        is_published:
          type: boolean
          nullable: true
          default: false
          description: ステータス（true は公開、false は下書き）
        category_ids:
          type: array
          nullable: true
          description: コースカテゴリID（同じ会員サイトのカテゴリ以外は 422）
          items:
            type: string
        require_login:
          type: boolean
          nullable: true
          default: true
          description: 未ログイン時の閲覧（true は不可、false は可）
        show_non_purchaser:
          type: boolean
          nullable: true
          default: false
          description: 未購入者へのオファー設定「常時表示オファー」を利用するか
        url_for_non_purchaser:
          type: string
          nullable: true
          maxLength: 255
          description: 常時オファーページURL。`show_non_purchaser` が true のとき必須（false のときは保存されません）
        use_limited_offer:
          type: boolean
          nullable: true
          default: false
          description: 期間限定オファーを利用するか
        limited_offers:
          type: array
          nullable: true
          description: 期間限定オファー。`use_limited_offer` が true のとき 1 件以上必須、false のときは指定できません
          items:
            $ref: '#/components/schemas/MemberCourseLimitedOfferInput'
        has_target_persons:
          type: boolean
          nullable: true
          default: false
          description: >-
            受講対象者をコース登録日で指定するか。true のときは `target_persons_date_from` と
            `target_persons_date_to` の少なくとも一方が必須
        target_persons_date_from:
          type: string
          nullable: true
          description: 受講対象者のコース登録日の開始日（Y-m-d）
        target_persons_date_to:
          type: string
          nullable: true
          description: 受講対象者のコース登録日の終了日（Y-m-d。開始日以降）
        course_style:
          type: string
          nullable: true
          enum:
            - open_all
            - one_by_one
          default: open_all
          description: >-
            受講スタイル。open_all: 最初から開放済みの全てのレッスンが受講可能 / one_by_one:
            受講完了に変更すると次のレッスンが受講可能
        release_type:
          type: string
          nullable: true
          enum:
            - immediately
            - scheduled
            - scheduled_month
            - datetime
            - reader_date
          default: immediately
          description: >-
            開放日（開始日）。immediately: コースへ登録後すぐに開放 / scheduled: コースへ登録後、指定した日数経過後に開放
            / scheduled_month: コースへ登録後、指定した月数経過後に開放 / datetime: 指定した日時に開放 /
            reader_date: アクセス元シナリオの配信基準日時から指定した日数経過後に開放（会員サイトの `login_type` が
            `optional` または `none` のときのみ。それ以外は 400 `bad_request`）
        release_day:
          type: integer
          nullable: true
          minimum: 0
          maximum: 9999
          description: 開放日数。`release_type` が `scheduled` / `reader_date` のとき必須
        release_month:
          type: integer
          nullable: true
          minimum: 0
          maximum: 9999
          description: 開放月数。`release_type` が `scheduled_month` のとき必須
        release_date:
          type: string
          nullable: true
          description: 開放日（Y-m-d）。`release_type` が `datetime` のとき必須
        release_hour:
          type: integer
          nullable: true
          minimum: 0
          maximum: 23
          description: 開放時刻（0〜23）。`release_type` が `immediately` 以外のとき必須
        action_before_release:
          type: string
          nullable: true
          enum:
            - show
            - hide
          default: show
          description: '開放前の表示。show: 表示する / hide: 表示しない'
        close_type:
          type: string
          nullable: true
          enum:
            - none
            - scheduled
            - datetime
            - reader_date
          default: none
          description: >-
            締め切り（終了日）。none: 締め切りを設けない / scheduled: コースへ登録後、指定した日数経過後に終了 /
            datetime: 指定した日時に終了 / reader_date:
            アクセス元シナリオの配信基準日時から指定した日数経過後に終了（会員サイトの `login_type` が `optional` または
            `none` のときのみ。それ以外は 400 `bad_request`）
        close_day:
          type: integer
          nullable: true
          minimum: 0
          maximum: 9999
          description: 締め切り日数。`close_type` が `scheduled` / `reader_date` のとき必須
        close_date:
          type: string
          nullable: true
          description: 締め切り日（Y-m-d）。`close_type` が `datetime` のとき必須
        close_hour:
          type: integer
          nullable: true
          minimum: 0
          maximum: 23
          description: 締め切り時刻（0〜23）。`close_type` が `none` 以外のとき必須
        cancel_type:
          type: string
          nullable: true
          enum:
            - close
            - release
          default: close
          description: '受講停止時の動作。close: 全て閲覧不可 / release: 停止日までに開放済みのレッスンは引き続き閲覧可'
    MemberCourse:
      type: object
      description: コース（設定を含む全項目）
      properties:
        id:
          type: string
          description: コースID
        name:
          type: string
          description: コース名
        system_name:
          type: string
          nullable: true
          description: 管理名称（設定すると管理画面の一覧でコース名の代わりに表示）
        type:
          type: string
          enum:
            - normal
            - url
            - page
          description: >-
            種類。normal: 通常コース / url: 指定したURLへリンク。`page`
            は過去に設定された値で、新しく指定することはできません
        course_url:
          type: string
          nullable: true
          description: 受講生向けのコースページURL（`type` が `url` のコースは null）
        url:
          type: string
          nullable: true
          description: リンク先URL（`type` が `url` のとき）
        href_type:
          type: string
          nullable: true
          description: 'リンクの開き方（`type` が `url` のとき）。null: 通常 / blank: 別ウィンドウ'
        image_url:
          type: string
          nullable: true
          description: コース画像URL
        button_text:
          type: string
          nullable: true
          description: ボタンテキスト（null のときは「受講する」と表示）
        is_hide_progress:
          type: boolean
          description: 進捗率を表示しないか（true は表示しない）
        is_video_autoplay_setting:
          type: boolean
          description: 動画自動再生/視聴完了設定を表示するか
        comment_setting_type:
          type: string
          enum:
            - individual
            - enable_all
          description: 'コメント機能。individual: 各レッスンごとに設定 / enable_all: 全レッスンで利用する'
        is_published:
          type: boolean
          description: ステータス（true は公開、false は下書き）
        category_ids:
          type: array
          description: コースカテゴリID（コースカテゴリ設定で作成したカテゴリ）
          items:
            type: string
        require_login:
          type: boolean
          description: 未ログイン時の閲覧（true は不可、false は可）
        show_non_purchaser:
          type: boolean
          description: 未購入者へのオファー設定「常時表示オファー」を利用するか
        url_for_non_purchaser:
          type: string
          nullable: true
          description: >-
            常時オファーページURL。保存されている値をそのまま返します（API で作成・更新したコースは `show_non_purchaser`
            が false のとき null）
        use_limited_offer:
          type: boolean
          description: 期間限定オファーを利用するか（オファーが 0 件のときは false）
        limited_offers:
          type: array
          description: 期間限定オファー（`use_limited_offer` が false のときは空配列）
          items:
            $ref: '#/components/schemas/MemberCourseLimitedOffer'
        has_target_persons:
          type: boolean
          description: 受講対象者をコース登録日で指定するか
        target_persons_date_from:
          type: string
          nullable: true
          description: 受講対象者のコース登録日の開始日（Y-m-d）
        target_persons_date_to:
          type: string
          nullable: true
          description: 受講対象者のコース登録日の終了日（Y-m-d）
        course_style:
          type: string
          enum:
            - open_all
            - one_by_one
          description: >-
            受講スタイル。open_all: 最初から開放済みの全てのレッスンが受講可能 / one_by_one:
            受講完了に変更すると次のレッスンが受講可能
        release_type:
          type: string
          enum:
            - immediately
            - scheduled
            - scheduled_month
            - datetime
            - reader_date
            - reader_date_addition
          description: >-
            開放日（開始日）。immediately: コースへ登録後すぐに開放 / scheduled: コースへ登録後、指定した日数経過後に開放
            / scheduled_month: コースへ登録後、指定した月数経過後に開放 / datetime: 指定した日時に開放 /
            reader_date: アクセス元シナリオの配信基準日時から指定した日数経過後に開放。`reader_date_addition`
            は過去に設定された値で、新しく指定することはできません
        release_day:
          type: integer
          nullable: true
          description: 開放日数（`release_type` が `scheduled` / `reader_date` のとき。起算日の何日後に開放するか）
        release_month:
          type: integer
          nullable: true
          description: 開放月数（`release_type` が `scheduled_month` のとき。コース登録の何ヶ月後に開放するか）
        release_date:
          type: string
          nullable: true
          description: 開放日（`release_type` が `datetime` のとき。Y-m-d）
        release_hour:
          type: integer
          nullable: true
          description: 開放時刻（0〜23。`release_type` が `immediately` 以外のとき）
        action_before_release:
          type: string
          enum:
            - show
            - hide
          description: '開放前の表示。show: 表示する / hide: 表示しない'
        close_type:
          type: string
          enum:
            - none
            - scheduled
            - datetime
            - reader_date
            - scheduled_month
            - reader_date_addition
          description: >-
            締め切り（終了日）。none: 締め切りを設けない / scheduled: コースへ登録後、指定した日数経過後に終了 /
            datetime: 指定した日時に終了 / reader_date:
            アクセス元シナリオの配信基準日時から指定した日数経過後に終了。`scheduled_month`・`reader_date_addition`
            は過去に設定された値で、新しく指定することはできません
        close_day:
          type: integer
          nullable: true
          description: 締め切り日数（`close_type` が `scheduled` / `reader_date` のとき。起算日の何日後に終了するか）
        close_date:
          type: string
          nullable: true
          description: 締め切り日（`close_type` が `datetime` のとき。Y-m-d）
        close_hour:
          type: integer
          nullable: true
          description: 締め切り時刻（0〜23。`close_type` が `none` 以外のとき）
        cancel_type:
          type: string
          enum:
            - close
            - release
          description: '受講停止時の動作。close: 全て閲覧不可 / release: 停止日までに開放済みのレッスンは引き続き閲覧可'
        course_group_id:
          type: string
          nullable: true
          description: 所属コースグループID（未分類は null）。変更はコース並び替えで行います
        order:
          type: integer
          description: 表示順（0 始まり）
        created_at:
          type: string
          nullable: true
          description: 作成日時（Y-m-d H:i:s）
        updated_at:
          type: string
          nullable: true
          description: 更新日時（Y-m-d H:i:s）
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: エラーコード
            message:
              type: string
              description: エラーメッセージ
            details:
              type: object
              nullable: true
              description: >-
                エラーの補足情報（`retry_after` /
                `resource_type`、項目別のエラーメッセージ等）。エラー種別により含まれる場合があります。`422`
                の項目別エラーの値は通常はメッセージの配列ですが、会員サイト更新・コース更新の変更時だけ行う検証では文字列です。
    MemberCourseLimitedOfferInput:
      type: object
      description: 期間限定オファー（作成・更新時）
      required:
        - day
        - hour
        - url
      properties:
        type:
          type: string
          enum:
            - bundle_enrolled_date
            - reader_date
          default: bundle_enrolled_date
          description: >-
            起算日時。bundle_enrolled_date: バンドル登録日時 / reader_date:
            アクセス元シナリオの配信基準日時（会員サイトの `login_type` が `optional` または `none`
            のときのみ。それ以外は 400 `bad_request`）
        bundle_id:
          type: string
          description: バンドルID。`type` が `bundle_enrolled_date` のとき必須（同じ会員サイトのバンドル以外は 422）
        day:
          type: integer
          minimum: 0
          maximum: 9999
          description: 起算日時から何日後まで表示するか
        hour:
          type: integer
          minimum: 0
          maximum: 23
          description: 表示を終了する時刻（0〜23）
        url:
          type: string
          maxLength: 2048
          description: 表示するオファーページURL
    MemberCourseLimitedOffer:
      type: object
      description: 期間限定オファー
      properties:
        type:
          type: string
          enum:
            - bundle_enrolled_date
            - reader_date
            - bundle_enrolled_date_addition
            - reader_date_addition
          description: >-
            起算日時。bundle_enrolled_date: バンドル登録日時 / reader_date:
            アクセス元シナリオの配信基準日時。`bundle_enrolled_date_addition`・`reader_date_addition`
            は過去に設定された値で、新しく指定することはできません
        bundle_id:
          type: string
          nullable: true
          description: バンドルID（`type` が `reader_date` のとき、または参照先のバンドルが削除されているときは null）
        day:
          type: integer
          description: 起算日時から何日後まで表示するか
        hour:
          type: integer
          description: 表示を終了する時刻（0〜23）
        url:
          type: string
          description: 表示するオファーページURL
  responses:
    Unauthorized:
      description: 認証エラー。APIキーが未指定・無効・無効化済み、またはアカウントが利用停止中。
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: unauthorized
              message: APIキーが無効です
    NotFound:
      description: 指定されたリソースが見つかりません（`error.code` は `not_found`。`message` は資源ごとに異なります）。
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: not_found
              message: ページが見つかりません
    ResourceLimitExceeded:
      description: >-
        作成上限超過。`error.code` は `total_limit_exceeded`（累計）/
        `monthly_limit_exceeded`（月間）のいずれかで、`hourly_limit_exceeded`（1時間）は読者作成（`reader`）と受講生作成（`members_user`）だけで返ります。`details.resource_type`
        に対象リソース、月間上限のときは `details.retry_after` に上限判定が再計算される日時（Y-m-d
        H:i:s）を含みます。同じ `429`
        で、分間・日間のレート制限超過（`rate_limit_exceeded`。`X-RateLimit-Reset`
        の時刻以降に再試行）も返ります。
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: monthly_limit_exceeded
              message: 月間の作成上限に達しました
              details:
                resource_type: message
                retry_after: '2026-11-01 00:05:00'
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: APIキーをBearerトークンとして指定

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.