openapi: "3.0.3"
info:
  version: "1.1.2"
  title: "InsuiteX Public REST API"
  description: "InsuiteX Public REST API Document"
  license:
    name: © DreamArts Corporation.
security:
  - ApiKeyAuth: []
tags:
  - name: accountlink
    description: "アカウントマスタ連携 API"
  - name: new-arrivals
    description: "ポータル右上のベルアイコンをクリックすると表示される「ポータル新着通知」に関する API"
  - name: users
    description: "ユーザー情報に関する API"
  - name: notify
    description: "通知通達に関する API"
  - name: session
    description: "セッションに関連する API"
  - name: qa-bot
    description: "QABotに関連する API"
  - name: portal
    description: "ポータルに関する API"
  - name: qa-bot-v2
    description: "QABotに関連する API V2版"
  - name: media
    description: "mediaに関連する API"
paths:
  /public/api/accountlink/v1/csv:
    post:
      tags:
        - accountlink
      summary: "アカウントマスタ連携の登録"
      description: |
        CSV によるアカウントマスタ連携を登録する。<br>
        少なくとも１つの CSV ファイルをセットする必要がある。<br>
        Request Body の各 CSV フィールドには、Data URI Scheme に変換した CSV をセットする必要がある。空文字の場合は CSV 指定なしとして扱われる。
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CSVAccountLinkJobReservationRequest"
      responses:
        "202":
          description: "Accepted"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CSVAccountLinkJobReservationResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
  /public/api/accountlink/v1/csv/jobs/{jobId}:
    get:
      tags:
        - accountlink
      summary: "アカウントマスタ連携の情報取得"
      description: "CSV によるアカウントマスタ連携の処理状態を取得する。"
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CSVAccountLinkJobStatus"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: `jobId` に該当するアカウントマスタ連携処理が存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/accountlink/v1/{target}/csv:
    get:
      tags:
        - accountlink
      summary: "アカウントマスタ連携のcsv情報取得。"
      description: "指定対象アカウントマスタ連携の情報取得。"
      parameters:
        - name: target
          in: path
          required: true
          schema:
            type: string
            enum:
              - users
              - groups
              - group_members
        - name: bom
          in: query
          required: false
          description: "csvにBOMを付与するかどうか, Excelで開いた際の文字化けを防止したければtrueを指定する"
          schema:
            type: boolean
            default: false
      responses:
        "200":
          description: "ok"
          headers:
            Content-Disposition:
              description: |
                filenameの形式
                {target}_{JST日付}.csv
              schema:
                type: string
                example: 'attachment; filename="users_20220101_083000.csv"'
          content:
            application/csv:
              schema:
                type: string
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
  /public/api/v1/new-arrivals:
    post:
      tags:
        - new-arrivals
      summary: "ポータル新着通知の作成"
      description: "あるユーザーに対するポータル新着通知を作成する。"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewArrivalForEdit"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NewArrival"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: 対象のユーザーが存在しない。"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/v1/new-arrivals/{arrivalId}:
    put:
      tags:
        - new-arrivals
      summary: "ポータル新着通知の更新"
      description: "ポータル新着通知の内容を更新する。作成時に発行された `arrivalId` を用いて対象を指定する。"
      parameters:
        - name: arrivalId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NewArrivalForUpdate"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NewArrival"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: `arrivalId` に該当する新着通知が存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      tags:
        - new-arrivals
      summary: "ポータル新着通知の削除"
      description: "ポータル新着通知を削除する。作成時に発行された `arrivalId` を用いて対象を指定する。"
      parameters:
        - name: arrivalId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      responses:
        "204":
          description: "No Content: 削除に成功"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: `arrivalId` に該当する新着通知が存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/v1/users:
    get:
      tags:
        - users
      summary: "テナントに所属するユーザーの情報を取得する"
      description: |
        テナントに所属するユーザー情報一覧を取得する。その際、返されるuserIdはISXの内部ユーザーIDを示す。
        削除済みのユーザーの情報は取得できない。
        また、primaryGroupIdに対応するグループが存在しない場合は、primaryGroupはnullになる。
        利用には、「ユーザープロフィール(閲覧)」の scopeをもった token が必要になる。
      parameters:
        - name: offset
          in: query
          schema:
            $ref: "#/components/schemas/offset"
        - name: limit
          in: query
          schema:
            $ref: "#/components/schemas/limit"
        - name: sortKey
          in: query
          schema:
            type: string
            default: updatedAt
            enum:
              - updatedAt
              - createdAt
        - name: sortOrder
          in: query
          schema:
            $ref: "#/components/schemas/sortOrder"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/UserMetaData"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
  /public/api/v1/users/{internalUserId}:
    get:
      tags:
        - users
      summary: "内部ユーザーIDを用いてユーザーの情報を取得する"
      description: |
        ISXの内部ユーザーIDを用いてユーザーの情報を取得する。
        削除済みのユーザーの情報は取得できない。
        また、primaryGroupIdに対応するグループが存在しない場合は、primaryGroupはnullになる。
        利用には、「ユーザープロフィール(閲覧)」の scopeをもった token が必要になる。
      parameters:
        - name: internalUserId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuidV4"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserMetaData"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "`internalUserId`に該当するユーザーが存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/v1/users/profile:
    get:
      tags:
        - users
      summary: "外部キーを用いてユーザーのプロフィール情報を取得する"
      parameters:
        - name: userId
          in: query
          required: true
          schema:
            $ref: "#/components/schemas/externalId"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserProfile"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "`userId`に該当するユーザーが存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/v1/users/profile/image:
    get:
      tags:
        - users
      summary: "ユーザーのプロフィール画像 URL を取得する"
      parameters:
        - name: userId
          in: query
          required: true
          schema:
            $ref: "#/components/schemas/externalId"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/UserProfileImageURLResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: `userId` に該当するユーザーが存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/notify/v1/notifications:
    get:
      tags:
        - notify
      description: |
        一般ユーザーに公開された通知通達の一覧を取得。
        利用には、「通知・通達」の scopeをもった token が必要になる。
      summary: "通知通達一覧の取得"
      parameters:
        - name: offset
          in: query
          schema:
            $ref: "#/components/schemas/offset"
        - name: limit
          in: query
          schema:
            $ref: "#/components/schemas/limit"
        - name: sortKey
          in: query
          schema:
            type: string
            default: updatedAt
            enum:
              - updatedAt
              - createdAt
        - name: sortOrder
          in: query
          schema:
            $ref: "#/components/schemas/sortOrder"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/NotificationMetaData"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
    post:
      tags:
        - notify
      description: |
        InsuiteX 上の通知通達テンプレートを基に、新たな通知通達を作成・発信する。
        テンプレートには以下の項目を事前に設定する必要がある。

        - テンプレートの外部キー
        - 通知通達のタイトル (上書き可能)
        - 宛先 (上書き可能)
        - 公開先 (上書き可能)
        - 発信部署
        - 通知通達の作成時点から公開開始までの日数
        - 通知通達の作成時点から公開終了までの日数
        - 通知通達の作成時点から締め切りまでの日数

        通知通達テンプレートの発信部署が承認必須の設定であっても、この API から通知通達を作成すると承認を経ずに即時発信となる。<br>
        本文にテキストを入れる場合は、textType を "text" とし、plainText に多言語形式で指定する。<br>
        本文に HTML を入れる場合は、 textType を "html" とし、htmlText に多言語形式で指定する。<br>
        textType が "text" の場合は、 plainText を必須とする。
        textType が "html" の場合は、 htmlText を必須とする。
        タイトルは title を指定すれば変更できる。<br>
        通知通達テンプレートの宛先・公開先を変更したい場合は、viewTargetsPresetId 及び notifyTargetsPresetId に宛先・公開先プリセットの外部キーを指定する。<br>
        添付ファイルを追加するには、事前にワンタイムURLを取得し、ファイルをアップロードして得られたIDを attachmentIds に指定する。詳細は、「ワンタイムURL取得」を参照。<br>
        公開日openDate、公開終了日closeDate、締切日deadlineを指定することで、テンプレートで設定したそれぞれの日時を上書きできる。<br>
        openDateはcloseDateよりも前の日時でなければならない。<br>
        deadlineはopenDateとcloseDateの間の日時でなければならない。<br>
        deadlineを設定できるのは、通知通達の種類がリクエストの場合だけ。<br>

        リクエストボディにarchive:trueを設定することで、過去に作成した通知通達をアーカイブとして作成できる
        アーカイブの通知通達を作成する場合、リクエストボディにopenDateとcloseDateを設定する必要がある。<br>
        その場合、openDateとcloseDateはアーカイブの通知通達を作成する日より前の日時でなければならない。<br>
        アーカイブとして作成できる通知通達の種類はインフォメーションだけ。<br>
        アーカイブの通知通達は全て既読状態で作成される。<br>

        利用には、「通知・通達」の scopeをもった token が必要になる。
      summary: "通知通達の作成"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/NotificationCreateRequest"
      responses:
        "201":
          description: "Created"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Notification"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: テンプレート、公開先/通知先のプリセットの ID が示すリソースが存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/notify/v1/notifications/{notificationId}:
    get:
      tags:
        - notify
      description: |
        特定の通知通達の詳細を取得。
        利用には、「通知・通達」の scopeをもった token が必要になる。
      summary: "通知通達の詳細を取得する"
      parameters:
        - name: notificationId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationDetailData"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: 通知通達の ID が存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/notify/v1/notifications/{notificationId}/users/{loginId}/user-status:
    post:
      tags:
        - notify
      description: |
        ログイン ID で指定されたユーザーに届いている通知通達の実施情報を更新する。この時、ログイン ID は必ず URL エンコードを行う。

        更新可能な選択肢はそれぞれ次のような意味がある。

        - `read`: 未実施にする
        - `executed`: 実施済みにする

        利用には、「通知・通達」の scopeをもった token が必要になる。
      summary: "ユーザーの通知通達の実施情報を更新する"
      parameters:
        - name: notificationId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
        - name: loginId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/loginId"
        - name: userStatus
          in: query
          required: true
          schema:
            $ref: "#/components/schemas/notificationUserStatus"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationUserStatus"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: 通知通達の ID、もしくはログイン ID に該当するユーザーが存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /public/api/v1/session/login-onetime-token:
    post:
      tags:
        - session
      summary: "create onetime jwt token for authentication"
      deprecated: true
      description: |
        セッション発行用 token を用いて、認証用の onetime jwt token を作成する。
        この token を aadouth2 の認証 endpoint に送信することで session 作成できる
        （session は API Key が紐づく linked application のアプリユーザに紐づけられる）。
        この API が利用できるのは、マスタ連携が未実施の TenantType = sdbQABotTrial のテナントのみ。それ以外のテナントでは jwt token は空で戻る
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        "200":
          description: "ok"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OnetimeTokenResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
  /public/api/v1/qa-bots:
    get:
      tags:
        - qa-bot
      summary: "qa botの一覧を取得する。利用には QA ボットの利用 or 管理の scope をもった token が必要となる。"
      deprecated: true
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/QABot"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
  /public/api/v2/qa-bots:
    get:
      tags:
        - qa-bot-v2
      summary: "qa botの一覧を取得する。利用には QA ボットの利用 or 管理の scope をもった token が必要となる。"
      deprecated: true
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/QABotV2"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
  /public/api/v1/qa-bots/{qaBotId}/setting:
    get:
      tags:
        - qa-bot
      summary: "get qa bot setting"
      description: "qa bot の設定を取得する。利用には QA ボットの利用 or 管理の scope をもった token が必要となる。"
      deprecated: true
      parameters:
        - name: qaBotId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/QABotSetting"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
  /public/api/v1/qa-bots/{qaBotId}/inquiry:
    parameters:
      - name: qaBotId
        in: path
        required: true
        schema:
          $ref: "#/components/schemas/uuid"
    post:
      tags:
        - qa-bot
      summary: "qa bot に質問をする。利用には QA ボットの利用の scope をもった token が必要となる。"
      deprecated: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/QABotInquiry"
      responses:
        "200":
          description: "ok"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/QABotInquiryResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
  /public/api/v2/qa-bots/{qaBotId}/inquiry:
    parameters:
      - name: qaBotId
        in: path
        required: true
        schema:
          $ref: "#/components/schemas/uuid"
    post:
      tags:
        - qa-bot-v2
      summary: "qa bot に質問をする。利用には QA ボットの利用の scope や QA ボット管理の scope をもった token が必要となる。"
      deprecated: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/QABotInquiry"
      responses:
        "200":
          description: "ok"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/QABotInquiryResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
  /public/api/v1/qa-bots/{qaBotId}/reset:
    put:
      tags:
        - qa-bot
      summary: "rest qa bot"
      deprecated: true
      description: |
        qa bot設定を初期化する。初期化対象は「バインダ設定」と「文言設定」です、Statusも「None」にします。
        利用には QA ボット管理の scope をもった token が必要となる。
      parameters:
        - name: qaBotId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      responses:
        "204":
          description: "OK"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
  /public/api/v1/qa-bots/{qaBotId}/inquiry/{inquiryId}/modification-request:
    parameters:
      - name: qaBotId
        in: path
        required: true
        schema:
          $ref: "#/components/schemas/uuid"
      - name: inquiryId
        in: path
        required: true
        schema:
          $ref: "#/components/schemas/uuid"
    post:
      tags:
        - qa-bot
      summary: "qa bot の回答に修正依頼をする"
      deprecated: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/QAInquiryModificationRequest"
      responses:
        "204":
          description: "No Content"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
  /public/api/v2/qa-bots/{qaBotId}/sources:
    get:
      tags:
        - qa-bot-v2
      description: "qa bot source 一覧を取得する。ページングせず、全件を返す。利用には QA ボットの利用 or 管理の scope をもった token が必要となる。"
      summary: "get all qabot sources"
      deprecated: true
      parameters:
        - name: qaBotId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/QABotSource"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
  /public/api/v1/portals:
    get:
      tags:
        - portal
      description: |
        ポータル一覧を取得する。
        利用には ポータル管理の scope をもった token が必要となる。
      summary: "ポータル一覧の取得"
      responses:
        "200":
          description: "OK"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/PortalMetaData"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
  /public/api/v1/ephemeral-id/{ephemeralId}:
    get:
      tags:
        - portal
      description: |
        SmartDBポートレット利用する一時IDに関連するユーザ情報を取得する。
      summary: "SmartDBポートレット利用する一時IDに関連するユーザ情報を取得する"
      parameters:
        - name: ephemeralId
          in: path
          required: true
          schema:
            $ref: "#/components/schemas/uuid"
      responses:
        "200":
          description: ok
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EphemeralIdForUserResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: "Not Found: `ephemeralId` に該当する一時IDが存在しない"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /saml/metadata:
    get:
      tags:
        - aadoauth2
      summary: "get saml metadata"
      description: "SAML の SP の metadataを取得する。metadata 中の binding 先のドメインは認証設定の authDomainType の値により変動する"
      responses:
        "200":
          description: "ok"
          headers:
            Content-Disposition:
              schema:
                type: string
                example: "attachment; filename=metadata.xml"
          content:
            application/samlmetadata+xml:
              schema:
                type: string
  /saml/metadata/v2:
    get:
      tags:
        - aadoauth2
      summary: "get saml metadata"
      description: |
        SAML の SP の metadataを取得するv2版。
        metadata 中の binding 先のドメインは固定的な各テナントのドメインです。
        authDomainType を cluster から tenant へ変更する際に、事前に tenant 用の metadata を idp 側に登録できるようにするため提供している。
      responses:
        "200":
          description: "ok"
          headers:
            Content-Disposition:
              schema:
                type: string
                example: "attachment; filename=metadata.xml"
          content:
            application/samlmetadata+xml:
              schema:
                type: string
  /public/api/v1/media/onetime-url:
    get:
      tags:
        - media
      description: |
        ファイルアップロードに必要なワンタイムURLやリクエストヘッダーを取得するAPI。<br>
        ファイルを通知通達に添付するには、下記の3ステップでAPIを実行する必要がある。<br>

        1. GET /public/api/v1/media/onetime-url でワンタイムURL等を取得する
        2. ステップ1のレスポンスに記載されたメソッド・ワンタイムURL・ヘッダーに従い、ファイルをアップロード
        3. POST /public/api/notify/v1/notifications で通知通達を作成する時、ステップ1で取得したattachmentIdをリクエストボディに追加する

        利用するには「通知・通達」の権限をもったAPIキーが必要となる。
      summary: "ワンタイムURL取得"
      parameters:
        - name: displayName
          description: "アップロードするファイルの名前。拡張子付きが望ましい"
          in: query
          required: true
          schema:
            type: string
            minLength: 0
            maxLength: 255
      responses:
        "200":
          description: ok
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OnetimeURLResponse"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
components:
  securitySchemes:
    ApiKeyAuth:
      name: X-API-Key
      type: apiKey
      in: header
      description: InsuiteX API を利用するための API Key を指定する。
  responses:
    BadRequest:
      description: "Bad Request: Request Body や Query Parameter に不正な値が入っている"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    Unauthorized:
      description: "Unauthorized: X-API-Key Header がないか、API Key が失効している"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    Forbidden:
      description: "Forbidden: API Key の権限スコープが足りない"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
    NotFound:
      description: "not found"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/Error"
  schemas:
    uuid:
      type: string
      maxLength: 36
      example: "38acd29f-453f-4d4b-b652-e19ea73c7346"
    uuidV4:
      type: string
      description: "uuid version 4"
      example: "38acd29f-453f-4d4b-b652-e19ea73c7346"
      format: uuidV4
    emptyAvailableUUIDv4:
      anyOf:
        - $ref: "#/components/schemas/uuidV4"
        - $ref: "#/components/schemas/emptyString"
    emptyString:
      type: string
      minLength: 0
      maxLength: 0
      example: ""
    externalId:
      type: string
      maxLength: 100
      description: |
        ユーザー・グループを特定するための外部キー
        /namespace/{member or group}/id
    loginId:
      type: string
      description: "ユーザーを特定するためのログインID(メールアドレス)"
      example: "user@example.com"
      maxLength: 200
    i18nString:
      type: object
      example: {"ja": "日本語", "en": "English", "zh": "中文"}
      description: "多言語のメッセージを指定するための形式"
    datetime:
      type: string
      format: date-time
      description: "RFC3339形式の時刻"
      example: "2018-09-22T12:42:31.123Z"
    url:
      type: string
      maxLength: 2048 # ref) https://www.tyto-style.com/blog/archives/2725
      example: "https://www.dreamarts.co.jp"
    email:
      type: string
      example: "user@example.com"
      maxLength: 200
    sortOrder:
      type: string
      default: asc
      enum:
        - asc
        - desc
    offset:
      type: integer
      example: 0
      default: 0
      minimum: 0
    limit:
      type: integer
      example: 100
      default: 100
      minimum: 0
      maximum: 1000
    Error:
      type: object
      properties:
        code:
          type: string
          default: isx-001
        message:
          type: string
          example: "error message"
      required:
        - code
        - message
    NewArrivalForEdit:
      type: object
      properties:
        userId:
          $ref: "#/components/schemas/externalId"
        message:
          $ref: "#/components/schemas/i18nString"
        url:
          $ref: "#/components/schemas/url"
      required:
        - userId
        - message
        # - url TODO: 影響範囲を調査
    NewArrivalForUpdate:
      type: object
      properties:
        message:
          $ref: "#/components/schemas/i18nString"
        url:
          $ref: "#/components/schemas/url"
      required:
        - message
        # - url TODO: 影響範囲を調査
    NewArrival:
      allOf:
        - $ref: "#/components/schemas/NewArrivalForEdit"
        - type: object
          properties:
            arrivalId:
              $ref: "#/components/schemas/uuid"
            createdAt:
              $ref: "#/components/schemas/datetime"
            createdBy:
              $ref: "#/components/schemas/externalId"
            updatedAt:
              $ref: "#/components/schemas/datetime"
            updatedBy:
              $ref: "#/components/schemas/externalId"
      required:
        - arrivalId
        - createdAt
        - createdBy
        - updatedAt
        - updatedBy
    UserMetaData:
      type: object
      properties:
        userId:
          $ref: "#/components/schemas/emptyAvailableUUIDv4"
        userName:
          $ref: "#/components/schemas/i18nString"
        email:
          $ref: "#/components/schemas/email"
        primaryGroupId:
          $ref: "#/components/schemas/emptyAvailableUUIDv4"
        primaryGroup:
          $ref: "#/components/schemas/NullableGroupMeta"
        position:
          $ref: "#/components/schemas/position"
      required:
        - userId
        - userName
        - email
        - primaryGroupId
        - primaryGroup
        - position
    position:
      type: string
      maxLength: 400
      example: "部長"
      description: "ユーザーの役職をテキストで指定したもの。役職ロールとは関係なく、権限計算に用いられない表示専用のフィールド"
    UserProfile:
      type: object
      properties:
        userId:
          $ref: "#/components/schemas/externalId"
        userName:
          $ref: "#/components/schemas/i18nString"
        kana:
          $ref: "#/components/schemas/i18nString"
        email:
          $ref: "#/components/schemas/email"
        tel1:
          type: string
          example: "01-2345-1111"
        tel2:
          type: string
          example: "01-2345-2222"
        mobileMail:
          $ref: "#/components/schemas/email"
        extensionNumber:
          type: string
          maxLength: 30
          example: "101"
        mobileNumber:
          type: string
          maxLength: 30
          example: "012-3456-7890"
        employeeId:
          type: string
          maxLength: 400
          example: "101"
        jobs:
          type: string
          maximum: 140
          example: "業務内容"
        interests:
          type: string
          maximum: 140
          example: "興味のある分野"
        comment:
          type: string
          maximum: 140
          example: "ひとことメッセージ"
        freetext:
          type: string
          example: "自由入力欄"
      required:
        - userId
        - userName
        - kana
        - email
        - tel1
        - tel2
        - mobileMail
        - extensionNumber
        - mobileNumber
        - employeeId
        - jobs
        - interests
        - comment
        - freetext
    NullableGroupMeta:
      type: object
      nullable: true
      allOf:
        - $ref: "#/components/schemas/GroupMeta"
    GroupMeta:
      type: object
      properties:
        groupId:
          $ref: "#/components/schemas/uuidV4"
        groupType:
          description: グループには、「グループ」と「プロジェクト」の2種類が存在する。
          type: string
          enum:
            - group
            - project
        parentGroupId:
          $ref: "#/components/schemas/uuidV4"
        groupName:
          $ref: "#/components/schemas/i18nString"
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
      required:
        - groupId
        - groupType
        - parentGroupId
        - groupName
        - createdAt
        - updatedAt
    UserProfileImageURLResponse:
      type: object
      description: "ユーザーのプロフィール画像 URL を返す。アクセスすることができるのは発行から5分間。画像が未設定の場合は空文字となる。"
      properties:
        url:
          $ref: "#/components/schemas/url"
    CSVAccountLinkJobReservationRequest:
      type: object
      description: "CSV によるアカウントマスタ連携の予約を行う際のリクエスト。少なくとも１つのCSVファイルをセットする必要があり、連携が不要な項目については空文字をセットする。"
      properties:
        usersCsv:
          type: string
          description: "ユーザー情報 CSV (Data URI Scheme)"
          example: "data:text/csv;base64,AxBeAd....EAz=="
        groupsCsv:
          type: string
          description: "グループ情報 CSV (Data URI Scheme)"
          example: "data:text/csv;base64,AxBeAd....EAz=="
        groupMembersCsv:
          type: string
          description: "グループ所属情報 CSV (Data URI Scheme)"
          example: "data:text/csv;base64,AxBeAd....EAz=="
        rolesCsv:
          type: string
          description: "ロール情報 CSV (Data URI Scheme)"
          example: "data:text/csv;base64,AxBeAd....EAz=="
        roleAssignmentsCsv:
          type: string
          description: "ロール割り当て情報 CSV (Data URI Scheme)"
          example: "data:text/csv;base64,AxBeAd....EAz=="
      required:
        - usersCsv
        - groupsCsv
        - groupMembersCsv
    CSVAccountLinkJobReservationResponse:
      type: object
      description: "CSV によるアカウントマスタ連携の予約時のレスポンス。"
      properties:
        jobId:
          $ref: "#/components/schemas/uuid"
      required:
        - jobId
    CSVAccountLinkJobStatus:
      type: object
      description: "CSV によるアカウントマスタ連携の処理状況を示す。runAt は処理を開始可能な時間。"
      properties:
        jobId:
          $ref: "#/components/schemas/uuid"
        userId:
          $ref: "#/components/schemas/externalId"
        jobStatus:
          $ref: "#/components/schemas/jobStatus"
        result:
          $ref: "#/components/schemas/accountLinkResult"
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
        runAt:
          $ref: "#/components/schemas/datetime"
      required:
        - jobId
        - userId
        - jobStatus
        - result
        - createdAt
        - updatedAt
        - runAt
    jobStatus:
      type: string
      enum:
        - "waiting"
        - "done"
        - "error"
        - "cancel"
      description: |
        実施状況を示す
        - waiting: 処理待ち
        - done: 処理完了
        - error: エラー終了
        - cancel: キャンセル済み
    accountLinkResult:
      type: object
      description: "アカウントマスタ連携の実行結果詳細"
      properties:
        errors:
          type: array
          items:
            $ref: "#/components/schemas/accountLinkError"
    accountLinkError:
      type: object
      description: "アカウントマスタ連携実行時のエラー詳細"
      properties:
        code:
          type: string
          enum:
            - isx-201
            - isx-202
            - isx-203
            - isx-204
            - isx-205
            - isx-206
            - isx-207
            - isx-208
            - isx-209
            - isx-210
            - isx-211
            - isx-212
            - isx-213
            - isx-214
            - isx-215
            - isx-216
            - isx-217
            - isx-218
            - isx-219
            - isx-220
            - isx-221
            - isx-222
            - isx-223
          description: |
            - isx-201: 予期せぬエラーが発生
            - isx-202: 外部キーの重複
            - isx-203: ログインIDの重複
            - isx-204: 不正なレコードがCSVに含まれている
            - isx-205: 最大文字数を超過している
            - isx-206: ユーザーが同じグループに対してプライマリ所属とセカンダリ所属することはできない
            - isx-207: グループ階層が循環状態に陥っている
            - isx-208: 有効な子グループが存在しているためグループを削除できない
            - isx-209: 親グループが存在しない
            - isx-210: 削除対象のグループの子グループは全て削除指定する必要がある
            - isx-211: 不正なGroupPathフォーマット
            - isx-212: ユーザーは複数のグループにプライマリ所属することができない
            - isx-213: ユーザーはいずれかのグループにプライマリ所属しなければならない
            - isx-214: 対象管理スペース外のリクエストが含まれている
            - isx-215: 削除済みグループに対する所属情報は更新できない
            - isx-216: プロジェクトにユーザーをセカンダリ所属させることはできない
            - isx-217: グループにグループをプライマリ所属させることはできない
            - isx-218: 対象のユーザーが存在しない
            - isx-219: 対象のグループが存在しない
            - isx-220: ヘッダーとレコードのカラム数が一致しない
            - isx-221: 対象のロールが存在しない
            - isx-222: Provider ID, Provider User ID が未指定かつ、デフォルト認証プロバイダーの情報では自動補完できない
            - isx-223: グループの種別（グループ・プロジェクト）を変更することはできない
        linkType:
          type: string
          enum:
            - unspecified
            - users
            - groups
            - group_members
            - roles
            - role_assignments
          description: |
            - unspecified: 連携種別に因らない
            - users: ユーザー情報
            - groups: グループ情報
            - group_members: 所属情報
            - roles: ロール情報
            - role_assignments: ロール割り当て情報
        message:
          type: string
          example: "Account link error."
        externalId:
          type: string
          example: "/{namespace}/member/{id}"
        fields:
          type: array
          description: "エラーに該当するフィールド名"
          items:
            type: string
            example: "namespace"
    NotificationCreateRequest:
      type: object
      description: "事前定義されたテンプレートを用いて通知通達を作成するリクエスト。viewTargetsPresetId / notifyTargetsPresetId の指定がない場合はテンプレートに定義されている宛先・公開先が使用される。"
      properties:
        templateId:
          $ref: "#/components/schemas/notificationTemplateExternalId"
        viewTargetsPresetId:
          $ref: "#/components/schemas/policyTargetsPresetExternalId"
        notifyTargetsPresetId:
          $ref: "#/components/schemas/policyTargetsPresetExternalId"
        title:
          $ref: "#/components/schemas/i18nString"
        plainText:
          $ref: "#/components/schemas/i18nString"
        htmlText:
          $ref: "#/components/schemas/i18nString"
        textType:
          $ref: "#/components/schemas/NotificationTextType"
        attachmentIds:
          type: array
          description: "GET /public/api/v1/media/onetime-url で取得したattachmentIdを指定する"
          items:
            $ref: "#/components/schemas/attachmentId"
        openDate:
          $ref: "#/components/schemas/datetime"
        closeDate:
          $ref: "#/components/schemas/datetime"
        deadline:
          $ref: "#/components/schemas/datetime"
        archive:
          type: boolean
          description: "過去に作成した通知通達をアーカイブとして作成するために設定するフラグ"
      required:
        - templateId
    Notification:
      type: object
      description: "作成された通知通達の内容"
      properties:
        tenantId:
          $ref: "#/components/schemas/uuid"
        notificationId:
          $ref: "#/components/schemas/uuid"
        createdBy:
          $ref: "#/components/schemas/uuid"
        updatedBy:
          $ref: "#/components/schemas/uuid"
        senderId:
          $ref: "#/components/schemas/uuid"
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
        openDate:
          $ref: "#/components/schemas/datetime"
        closeDate:
          $ref: "#/components/schemas/datetime"
        deadline:
          $ref: "#/components/schemas/datetime"
        status:
          $ref: "#/components/schemas/NotificationStatus"
        title:
          $ref: "#/components/schemas/i18nString"
        text:
          $ref: "#/components/schemas/i18nString"
        plainText:
          $ref: "#/components/schemas/i18nString"
        htmlText:
          $ref: "#/components/schemas/i18nString"
        textType:
          $ref: "#/components/schemas/NotificationTextType"
        type:
          $ref: "#/components/schemas/NotificationType"
        videoId:
          $ref: "#/components/schemas/uuid"
        shouldNotify:
          type: boolean
        rootNotificationId:
          $ref: "#/components/schemas/uuid"
      required:
        - tenantId
        - notificationId
        - createdBy
        - updatedBy
        - senderId
        - createdAt
        - updatedAt
        - openDate
        - closeDate
        - deadline
        - status
        - title
        - text
        - plainText
        - type
        - videoId
        - shouldNotify
        - rootNotificationId
    NotificationMetaData:
      type: object
      description: "通知通達の主要な情報を抽出したもの"
      properties:
        notificationId:
          $ref: "#/components/schemas/uuidV4"
        title:
          $ref: "#/components/schemas/i18nString"
        type:
          $ref: "#/components/schemas/NotificationType"
        textType:
          $ref: "#/components/schemas/NotificationTextType"
        status:
          $ref: "#/components/schemas/NotificationStatus"
        deleted:
          type: boolean
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
        openDate:
          $ref: "#/components/schemas/datetime"
        closeDate:
          $ref: "#/components/schemas/datetime"
      required:
        - notificationId
        - title
        - type
        - status
        - deleted
        - createdAt
        - updatedAt
        - openDate
        - closeDate
    NotificationDetailData:
      allOf:
        - $ref: "#/components/schemas/NotificationMetaData"
      properties:
        createdUser:
          $ref: "#/components/schemas/UserMetaData"
        deadline:
          $ref: "#/components/schemas/datetime"
        categories:
          type: array
          items:
            $ref: "#/components/schemas/NotificationCategory"
        text:
          $ref: "#/components/schemas/i18nString"
        plainText:
          $ref: "#/components/schemas/i18nString"
        htmlText:
          $ref: "#/components/schemas/i18nString"
        sender:
          $ref: "#/components/schemas/NullableGroupMeta"
      required:
        - createdUser
    NotificationCategory:
      type: object
      properties:
        categoryId:
          $ref: "#/components/schemas/uuid"
        categoryName:
          $ref: "#/components/schemas/i18nString"
      required:
        - categoryId
        - categoryName
    NotificationStatus:
      type: string
      enum:
        - editing
        - inApproval
        - denied
        - opened
        - modifying
    NotificationType:
      type: string
      enum:
        - request
        - info
        - page
    NotificationTextType:
      type: string
      description: "通知通達本文のテキストの形式。指定がない場合はtextとして扱う。"
      enum:
        - text
        - html
      default: text
    notificationTemplateExternalId:
      type: string
      maxLength: 100
      example: "notification-template.personnel-announcement-01"
      description: "通知通達テンプレートを指定するための外部キー。フォーマットは`notification-template.` + 任意の文字列 (小文字の英字・数字・ハイフンのみ)"
    policyTargetsPresetExternalId:
      type: string
      maxLength: 100
      example: "policy-targets-preset.123-project-members"
      description: "宛先・公開先プリセットを指定するための外部キー。フォーマットは`policy-targets-preset.` + 任意の文字列 (小文字の英字・数字・ハイフンのみ)。空文字は未指定として扱う。"
    NotificationUserStatus:
      type: object
      description: "更新されたユーザーの通知通達の実施情報。"
      properties:
        notificationId:
          $ref: "#/components/schemas/uuid"
        userStatus:
          $ref: "#/components/schemas/notificationUserStatus"
      required:
        - notificationId
        - userStatus
    notificationUserStatus:
      type: string
      enum:
        - read
        - executed
    OnetimeTokenResponse:
      type: object
      properties:
        token:
          type: string
          description: マスタ連携を行うテナントで空値となる
      required:
        - token
    QABot:
      type: object
      description: "簡易的な qa bot 情報"
      properties:
        qaBotId:
          $ref: "#/components/schemas/uuid"
        name:
          $ref: "#/components/schemas/i18nString"
        language:
          $ref: "#/components/schemas/QABotLanguage"
        isAvailable:
          type: boolean
        smartdbBinderId:
          type: string
          maxLength: 36
        smartdbViewId:
          type: string
          maxLength: 36
        teamsTeamId:
          $ref: "#/components/schemas/emptyAvailableUUIDv4"
        teamsChannelId:
          $ref: "#/components/schemas/emptyAvailableUUIDv4"
        status:
          $ref: "#/components/schemas/QABotStatus"
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
      required:
        - qaBotId
        - name
        - language
        - isAvailable
        - smartdbBinderId
        - smartdbViewId
        - teamsTeamId
        - teamsChannelId
        - status
        - createdAt
        - updatedAt
    QABotV2:
      properties:
        qaBotId:
          $ref: "#/components/schemas/uuidV4"
        name:
          $ref: "#/components/schemas/i18nString"
        language:
          $ref: "#/components/schemas/QABotLanguage"
        dashboardPortalId:
          $ref: "#/components/schemas/uuidV4"
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
        createdBy:
          $ref: "#/components/schemas/uuidV4"
        updatedBy:
          $ref: "#/components/schemas/uuidV4"
        isAvailable:
          type: boolean
      required:
        - qaBotId
        - name
        - language
        - dashboardPortalId
        - createdAt
        - updatedAt
        - createdBy
        - updatedBy
        - isAvailable
    QABotSetting:
      type: object
      description: "qa bot の設定"
      properties:
        faqSetting:
          $ref: "#/components/schemas/QABotFaqSetting"
        contactLinks:
          $ref: "#/components/schemas/QABotContactLinks"
      required:
        - faqSetting
        - contactLinks
    QABotFaqSetting:
      type: object
      properties:
        isUse:
          type: boolean
        faqs:
          type: array
          items:
            $ref: "#/components/schemas/QABotFaq"
      required:
        - isUse
        - faqs
    QABotFaq:
      type: object
      properties:
        label:
          $ref: "#/components/schemas/i18nString"
        url:
          $ref: "#/components/schemas/i18nString"
      required:
        - label
        - url
    QABotContactLinks:
      type: array
      items:
        $ref: "#/components/schemas/QABotContactLink"
    QABotContactLink:
      type: object
      properties:
        label:
          $ref: "#/components/schemas/i18nString"
        url:
          $ref: "#/components/schemas/i18nString"
      required:
        - label
        - url
    QABotInquiry:
      type: object
      description: "qa bot へ送る質問"
      properties:
        question:
          type: string
          minLength: 1
          maxLength: 300
        email:
          type: string
          description: "質問を行ったユーザのメールアドレス"
          example: "user@example.com"
          maxLength: 200
      required:
        - question
        - email
    QABotInquiryResponse:
      type: object
      description: "qa bot からの回答。score 順に５件まで返す"
      properties:
        inquiryId:
          $ref: "#/components/schemas/uuid"
        answers:
          type: array
          items:
            $ref: "#/components/schemas/QABotAnswer"
          maxItems: 5
      required:
        - inquiryId
        - answers
    QABotAnswer:
      type: object
      description: "qa bot からの回答の１つ。回答の元となったリソースの url が含まれる場合がある"
      properties:
        dataId:
          type: string
          minLength: 1
          maxLength: 36
        answer:
          type: string
          minLength: 1
        score:
          type: number
          minimum: 0
        url:
          $ref: "#/components/schemas/url"
      required:
        - dataId
        - answer
        - score
        - url
    QAInquiryModificationRequest:
      type: object
      description: "qa bot の回答への修正依頼"
      properties:
        requestComment:
          type: string
          minLength: 0
          maxLength: 1000
      required:
        - requestComment
    QABotStatus:
      description: |
        description: QA ボットの設定状況を示す。
        none = 連携する smartdb の binder view の設定が何もない。
        viewSet = 連携する smartdb の binder view が設定されている。
        qaSet = binder view の設定に加え QA のカラムの指定が終わり QA ボットが利用可能な状態になる。
      type: string
      enum:
        - none
        - viewSet
        - qaSet
    QABotLanguage:
      type: string
      enum:
        - ja
        - en
        - zh-hans
    PortalMetaData:
      description: ポータルの主要情報
      type: object
      properties:
        portalId:
          $ref: "#/components/schemas/uuidV4"
        portalType:
          $ref: "#/components/schemas/PortalType"
        portalName:
          $ref: "#/components/schemas/portalName"
        description:
          $ref: "#/components/schemas/portalDescription"
        status:
          $ref: "#/components/schemas/portalStatus"
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
        publishedAt:
          $ref: "#/components/schemas/datetime"
      required:
        - portalId
        - portalType
        - portalName
        - description
        - status
        - createdAt
        - updatedAt
        - publishedAt
    PortalType:
      description: |
        ポータルの種類を表す。
        customerKarteは顧客カルテのポータル、normalはそれ以外のポータルを表す。
      type: string
      enum:
        - "normal"
        - "customerKarte"
    portalStatus:
      description: |
        ポータルの状態を表す。
        publishedが公開、
        unpublishedが未公開(一時保存済み)、
        editingが編集中(編集中の内容は保存されていない)、
        inApprovingが承認中
        の状態を表す。
      type: string
      enum:
        - "published"
        - "unpublished"
        - "editing"
        - "inApproving"
    portalName:
      type: object
      additionalProperties:
        type: string
        maxLength: 48
      example: {"ja": "日本語", "en": "English"}
    portalDescription:
      type: object
      additionalProperties:
        type: string
        maxLength: 120
      example: {"ja": "日本語", "en": "English"}
    QABotSourceRequest:
      anyOf:
        - $ref: "#/components/schemas/QABotSourceRequestStatusNone"
        - $ref: "#/components/schemas/QABotSourceRequestStatusViewSet"
        - $ref: "#/components/schemas/QABotSourceRequestStatusQASet"
    QABotSourceRequestStatusNone:
      type: object
      description: |
        QABotソースの設定を最低限行ったもの。この設定ではソースは利用できない
      properties:
        status:
          type: string
          enum:
            - none
      required:
        - status
    QABotSourceRequestStatusViewSet:
      type: object
      description: |
        QABotソースの設定を連携する smartdb binder/view まで行ったもの。
        この設定ではソースは利用できないが、連携する smartdb の schema 参照が可能となる
      properties:
        status:
          type: string
          enum:
            - viewSet
        smartdbBinderId:
          type: string
          minLength: 1
          maxLength: 36
        smartdbViewId:
          type: string
          minLength: 1
          maxLength: 36
      required:
        - status
        - smartdbBinderId
        - smartdbViewId
    QABotSourceRequestStatusQASet:
      type: object
      description: |
        QABotソースの設定を全て完了した場合の設定。ソースの利用も可能となる
      properties:
        status:
          type: string
          enum:
            - qaSet
        smartdbBinderId:
          type: string
          minLength: 1
          maxLength: 36
        smartdbViewId:
          type: string
          minLength: 1
          maxLength: 36
        questionColumnIds:
          type: array
          description: |
            QA の Q として用いるカラムの ID を指定する（複数可）。
            文字列型のカラムのみ設定できる（DatasourceColumnType = string / text）。
          minItems: 1
          items:
            type: string
            minLength: 1
            maxLength: 36
        answerColumnId:
          type: string
          description: |
            QA の A として用いるカラムの ID を指定する。
            文字列型のカラムのみ設定できる（DatasourceColumnType = string / text）
          minLength: 1
          maxLength: 36
      required:
        - status
        - smartdbBinderId
        - smartdbViewId
        - questionColumnIds
        - answerColumnId
    QABotSource:
      allOf:
        - $ref: "#/components/schemas/QABotSourceRequest"
      properties:
        qaBotId:
          $ref: "#/components/schemas/uuid"
        qaBotSourceId:
          $ref: "#/components/schemas/uuid"
        createdAt:
          $ref: "#/components/schemas/datetime"
        updatedAt:
          $ref: "#/components/schemas/datetime"
        createdBy:
          $ref: "#/components/schemas/uuid"
        updatedBy:
          $ref: "#/components/schemas/uuid"
        isAvailable:
          type: boolean
      required:
        - qaBotId
        - qaBotSourceId
        - createdAt
        - updatedAt
        - createdBy
        - updatedBy
        - isAvailable
    OnetimeURLResponse:
      description: "ワンタイムURLと必要なヘッダーなどの情報"
      type: object
      properties:
        method:
          description: "アップロードする際に使うHTTPメソッド"
          type: string
          enum:
            - POST
            - PUT
        url:
          description: "アップロードする際に必要なワンタイムURL"
          type: string
          example: "http://example.com"
        header:
          description: "アップロードする際に必要なHTTPリクエストヘッダー"
          type: object
          example: {"key": ["value1", "value2"]}
        attachmentId:
          description: "POST /public/api/notify/v1/notifications で作成する通知通達にファイルを添付するためのID。既に他の通知通達に添付されたファイルのattachmentIdは使用できないので、再度アップロードしてattachmentIdを取得する必要がある。"
          type: string
          maxLength: 36
          example: "38acd29f-453f-4d4b-b652-e19ea73c7346"
    attachmentId:
      type: string
      description: "通知通達に添付するファイルのID。GET /public/api/v1/media/onetime-url で得られるattachmentIdを指す。"
      example: "38acd29f-453f-4d4b-b652-e19ea73c7346"
      format: uuidV4
    EphemeralIdForUserResponse:
      description: "SmartDBポートレット利用する一時IDに関連するユーザ情報"
      type: object
      properties:
        tenantId:
          $ref: "#/components/schemas/uuid"
        userEmail:
          $ref: "#/components/schemas/email"
        userName:
          type: string
        expireTime:
          $ref: "#/components/schemas/datetime"
      required:
        - tenantId
        - userEmail
        - userName
        - expireTime
