openapi: 3.1.0
info:
  title: ベースマキナ公開API
  version: 1.0.0
  description: >-
    ベースマキナのアクション情報の取得とアクション実行を行う公開APIです。

    エラーレスポンスは [RFC 9457 Problem Details](https://www.rfc-editor.org/rfc/rfc9457) 形式（`Content-Type:
    application/problem+json`）で返ります。

    ただし、トークン交換エンドポイント `/token` のエラーレスポンスのみ [RFC 8693](https://www.rfc-editor.org/rfc/rfc8693) / [RFC 6749
    §5.2](https://www.rfc-editor.org/rfc/rfc6749#section-5.2) 形式（`{ error, error_description }`、`Content-Type:
    application/json`）で返ります。

    認証方法の詳細（`bm login` で取得した JWT・外部 OIDC ID Token の取得方法、シナリオ別の利用例）は[認証して呼び出す](/public_api/authentication)を参照してください。
servers:
  - url: https://platform.basemachina.com/public/v1
    description: 本番環境
security:
  - bearerAuth: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Bearer トークン認証。トークン交換エンドポイント `/token` を除く各リクエストに `Authorization: Bearer <token>` を付与する。

        トークンは不透明な資格情報として扱い、内容を解釈しない。利用できるトークンは以下の 2 種類:


        - **`bm login` で取得したトークン**: そのまま受け付ける。ローカル端末からの呼び出し向け。

        - **`POST /token` で取得したアクセストークン**: 外部 OIDC IdP（GitHub Actions・Google Cloud・AWS・自社 IdP など）が発行した ID Token を
        `/token` で交換して取得する。CI/CD やクラウドからの呼び出し向け。


        取得手順とシナリオ別の利用例は[認証して呼び出す](/public_api/authentication)を参照。
  schemas:
    TokenExchangeResponse:
      type: object
      properties:
        access_token:
          type: string
          description: "発行されたベースマキナのアクセストークン。不透明な文字列として扱い、内容を解釈せず、以降の公開APIリクエストの `Authorization: Bearer` にそのまま指定する"
        issued_token_type:
          type: string
          enum:
            - urn:ietf:params:oauth:token-type:access_token
          description: "`access_token` の種別。OAuth 2.0 アクセストークンを表す固定値"
        token_type:
          type: string
          enum:
            - Bearer
          description: "`access_token` の利用方法。常に `Bearer`"
        expires_in:
          type: integer
          description: "`access_token` の有効期間（秒）"
      required:
        - access_token
        - issued_token_type
        - token_type
        - expires_in
      additionalProperties: false
    InvalidRequestTokenExchangeError:
      type: object
      properties:
        error:
          type: string
          enum:
            - invalid_request
        error_description:
          type: string
      required:
        - error
        - error_description
      additionalProperties: false
    InvalidGrantTokenExchangeError:
      type: object
      properties:
        error:
          type: string
          enum:
            - invalid_grant
        error_description:
          type: string
      required:
        - error
        - error_description
      additionalProperties: false
    ServerErrorTokenExchangeError:
      type: object
      properties:
        error:
          type: string
          enum:
            - server_error
        error_description:
          type: string
      required:
        - error
        - error_description
      additionalProperties: false
    TemporarilyUnavailableTokenExchangeError:
      type: object
      properties:
        error:
          type: string
          enum:
            - temporarily_unavailable
        error_description:
          type: string
      required:
        - error
        - error_description
      additionalProperties: false
    TokenExchangeRequest:
      type: object
      properties:
        grant_type:
          type: string
          enum:
            - urn:ietf:params:oauth:grant-type:token-exchange
          description: トークン交換を表す固定値 `urn:ietf:params:oauth:grant-type:token-exchange` を指定する
        subject_token:
          type: string
          minLength: 1
          description: 交換元のトークン。ベースマキナの OIDC 信頼ポリシーで受け入れ設定済みの発行元（GitHub Actions・Google Cloud・AWS・自社 IdP など）が発行した ID Token
        subject_token_type:
          type: string
          enum:
            - urn:ietf:params:oauth:token-type:jwt
          description: "`subject_token` の種別。JWT を表す固定値 `urn:ietf:params:oauth:token-type:jwt` を指定する"
      required:
        - grant_type
        - subject_token
        - subject_token_type
      additionalProperties: false
    ListActionsResponse:
      oneOf:
        - $ref: "#/components/schemas/ListActionsLastPageResponse"
        - $ref: "#/components/schemas/ListActionsPageResponse"
      discriminator:
        propertyName: has_more
        mapping:
          "false": "#/components/schemas/ListActionsLastPageResponse"
          "true": "#/components/schemas/ListActionsPageResponse"
    ListActionsLastPageResponse:
      type: object
      properties:
        has_more:
          type: boolean
          enum:
            - false
          description: 次のページが存在しないことを示す
        data:
          type: array
          items:
            $ref: "#/components/schemas/Action"
          maxItems: 100
          description: 現在のページに含まれるアクションの配列
      required:
        - has_more
        - data
      additionalProperties: false
    Action:
      type: object
      properties:
        id:
          type: string
          example: send_email
          description: アクションID、または識別子。識別子が設定されている場合は識別子、未設定の場合は自動生成されたアクションIDを返す
        name:
          type: string
          example: メール送信
          description: アクション名
        description:
          type: string
          example: ユーザーにメールを送信する
          description: アクションの説明。未設定の場合は空文字列
        input_schema:
          $ref: "#/components/schemas/ActionInputSchema"
      required:
        - id
        - name
        - description
        - input_schema
      description: アクション 1 件分のリソース表現。識別子・名前・説明・引数の入力スキーマを含む
    ActionInputSchema:
      type: object
      properties:
        type:
          type: string
          enum:
            - object
        properties:
          type: object
          additionalProperties:
            $ref: "#/components/schemas/ActionParameter"
        required:
          type: array
          items:
            type: string
        additionalProperties:
          type: boolean
          enum:
            - false
      required:
        - type
        - properties
        - required
        - additionalProperties
      description: アクション実行時に `arguments` へ指定できるパラメーターの構造を JSON Schema (2020-12) 形式で表したもの。各プロパティの `x-basemachina-input-type`
        はパラメーターの種類（テキスト・数値・真偽値・SQL・ファイル・日付・JSON値・配列・タプル）を表す
    ActionParameter:
      oneOf:
        - $ref: "#/components/schemas/ActionTextParameter"
        - $ref: "#/components/schemas/ActionNumberParameter"
        - $ref: "#/components/schemas/ActionBooleanParameter"
        - $ref: "#/components/schemas/ActionSQLParameter"
        - $ref: "#/components/schemas/ActionFileParameter"
        - $ref: "#/components/schemas/ActionDateParameter"
        - $ref: "#/components/schemas/ActionArrayParameter"
        - $ref: "#/components/schemas/ActionTupleParameter"
        - $ref: "#/components/schemas/ActionJSONTextParameter"
        - $ref: "#/components/schemas/ActionJSONNumberParameter"
        - $ref: "#/components/schemas/ActionJSONDateParameter"
      discriminator:
        propertyName: x-basemachina-input-type
        mapping:
          text: "#/components/schemas/ActionTextParameter"
          number: "#/components/schemas/ActionNumberParameter"
          bool: "#/components/schemas/ActionBooleanParameter"
          sql: "#/components/schemas/ActionSQLParameter"
          file: "#/components/schemas/ActionFileParameter"
          date: "#/components/schemas/ActionDateParameter"
          array: "#/components/schemas/ActionArrayParameter"
          tuple: "#/components/schemas/ActionTupleParameter"
          json_text: "#/components/schemas/ActionJSONTextParameter"
          json_number: "#/components/schemas/ActionJSONNumberParameter"
          json_date: "#/components/schemas/ActionJSONDateParameter"
    ActionTextParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - string
        x-basemachina-input-type:
          type: string
          enum:
            - text
        pattern:
          type: string
        minLength:
          type: integer
          minimum: 0
        maxLength:
          type: integer
          minimum: 0
        enum:
          type: array
          items:
            type: string
        x-basemachina-multiline:
          type: boolean
          enum:
            - true
        x-basemachina-pattern-error-message:
          type: string
        x-basemachina-enum-labels:
          type: object
          additionalProperties:
            type: string
      required:
        - type
        - x-basemachina-input-type
      description: "テキストパラメーター。複数行入力の場合は `x-basemachina-multiline: true` が付与される"
    ActionNumberParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - number
        x-basemachina-input-type:
          type: string
          enum:
            - number
        minimum:
          type: number
        maximum:
          type: number
        enum:
          type: array
          items:
            type: number
        x-basemachina-enum-labels:
          type: object
          additionalProperties:
            type: string
      required:
        - type
        - x-basemachina-input-type
      description: 数値パラメーター
    ActionBooleanParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - boolean
        x-basemachina-input-type:
          type: string
          enum:
            - bool
      required:
        - type
        - x-basemachina-input-type
      description: 真偽値パラメーター
    ActionSQLParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - string
        format:
          type: string
          enum:
            - sql
        x-basemachina-input-type:
          type: string
          enum:
            - sql
        enum:
          type: array
          items:
            type: string
        x-basemachina-enum-labels:
          type: object
          additionalProperties:
            type: string
      required:
        - type
        - format
        - x-basemachina-input-type
      description: SQL パラメーター
    ActionFileParameter:
      type: object
      properties:
        description:
          type: string
        type:
          type: string
          enum:
            - string
        x-basemachina-input-type:
          type: string
          enum:
            - file
        contentEncoding:
          type: string
          enum:
            - base64
        contentMediaType:
          type: string
        readOnly:
          type: boolean
          enum:
            - true
      required:
        - type
        - x-basemachina-input-type
        - contentEncoding
        - contentMediaType
        - readOnly
      description: "ファイルパラメーター。公開APIではファイル値を送信できないため `readOnly: true` が付与される。ファイルパラメーターを持つアクションはアクション実行画面から実行する必要がある"
    ActionDateParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - string
        format:
          type: string
          enum:
            - date
            - date-time
        x-basemachina-input-type:
          type: string
          enum:
            - date
      required:
        - type
        - format
        - x-basemachina-input-type
      description: 日付パラメーター。`format` が `date` の場合は日付のみ、`date-time` の場合は日付と時刻を扱う
    ActionArrayParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - array
        x-basemachina-input-type:
          type: string
          enum:
            - array
        items:
          $ref: "#/components/schemas/ActionArrayItemParameter"
        minItems:
          type: integer
          minimum: 0
        maxItems:
          type: integer
          minimum: 0
      required:
        - type
        - x-basemachina-input-type
      description: 配列パラメーター。各要素の構造は `items` に従う
    ActionArrayItemParameter:
      oneOf:
        - $ref: "#/components/schemas/ActionTextParameter"
        - $ref: "#/components/schemas/ActionNumberParameter"
        - $ref: "#/components/schemas/ActionBooleanParameter"
        - $ref: "#/components/schemas/ActionSQLParameter"
        - $ref: "#/components/schemas/ActionFileParameter"
        - $ref: "#/components/schemas/ActionDateParameter"
        - $ref: "#/components/schemas/ActionJSONTextParameter"
        - $ref: "#/components/schemas/ActionJSONNumberParameter"
        - $ref: "#/components/schemas/ActionJSONDateParameter"
        - $ref: "#/components/schemas/ActionNestedArrayParameter"
        - $ref: "#/components/schemas/ActionTupleParameter"
      discriminator:
        propertyName: x-basemachina-input-type
        mapping:
          text: "#/components/schemas/ActionTextParameter"
          number: "#/components/schemas/ActionNumberParameter"
          bool: "#/components/schemas/ActionBooleanParameter"
          sql: "#/components/schemas/ActionSQLParameter"
          file: "#/components/schemas/ActionFileParameter"
          date: "#/components/schemas/ActionDateParameter"
          json_text: "#/components/schemas/ActionJSONTextParameter"
          json_number: "#/components/schemas/ActionJSONNumberParameter"
          json_date: "#/components/schemas/ActionJSONDateParameter"
          array: "#/components/schemas/ActionNestedArrayParameter"
          tuple: "#/components/schemas/ActionTupleParameter"
    ActionJSONTextParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - string
        x-basemachina-input-type:
          type: string
          enum:
            - json_text
        enum:
          type: array
          items:
            type: string
        x-basemachina-select-labels:
          type: object
          additionalProperties:
            type: string
      required:
        - type
        - x-basemachina-input-type
      description: "JSON値パラメーター（JSON値の種類: テキスト）"
    ActionJSONNumberParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - number
        x-basemachina-input-type:
          type: string
          enum:
            - json_number
        enum:
          type: array
          items:
            type: number
        x-basemachina-select-labels:
          type: object
          additionalProperties:
            type: string
      required:
        - type
        - x-basemachina-input-type
      description: "JSON値パラメーター（JSON値の種類: 数値）"
    ActionJSONDateParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - string
        format:
          type: string
          enum:
            - date
            - date-time
        x-basemachina-input-type:
          type: string
          enum:
            - json_date
      required:
        - type
        - format
        - x-basemachina-input-type
      description: "JSON値パラメーター（JSON値の種類: 日付）。`format` が `date` の場合は日付のみ、`date-time` の場合は日付と時刻を扱う"
    ActionNestedArrayParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - array
        x-basemachina-input-type:
          type: string
          enum:
            - array
        items:
          $ref: "#/components/schemas/ActionSingleValueParameter"
        minItems:
          type: integer
          minimum: 0
        maxItems:
          type: integer
          minimum: 0
      required:
        - type
        - x-basemachina-input-type
      description: 配列パラメーターの要素として使う配列パラメーター。各要素の構造は `items` に従う
    ActionSingleValueParameter:
      oneOf:
        - $ref: "#/components/schemas/ActionTextParameter"
        - $ref: "#/components/schemas/ActionNumberParameter"
        - $ref: "#/components/schemas/ActionBooleanParameter"
        - $ref: "#/components/schemas/ActionSQLParameter"
        - $ref: "#/components/schemas/ActionFileParameter"
        - $ref: "#/components/schemas/ActionDateParameter"
        - $ref: "#/components/schemas/ActionJSONTextParameter"
        - $ref: "#/components/schemas/ActionJSONNumberParameter"
        - $ref: "#/components/schemas/ActionJSONDateParameter"
      discriminator:
        propertyName: x-basemachina-input-type
        mapping:
          text: "#/components/schemas/ActionTextParameter"
          number: "#/components/schemas/ActionNumberParameter"
          bool: "#/components/schemas/ActionBooleanParameter"
          sql: "#/components/schemas/ActionSQLParameter"
          file: "#/components/schemas/ActionFileParameter"
          date: "#/components/schemas/ActionDateParameter"
          json_text: "#/components/schemas/ActionJSONTextParameter"
          json_number: "#/components/schemas/ActionJSONNumberParameter"
          json_date: "#/components/schemas/ActionJSONDateParameter"
    ActionTupleParameter:
      type: object
      properties:
        description:
          type: string
        default: {}
        type:
          type: string
          enum:
            - array
        x-basemachina-input-type:
          type: string
          enum:
            - tuple
        prefixItems:
          type: array
          items:
            $ref: "#/components/schemas/ActionSingleValueParameter"
        minItems:
          type: integer
          minimum: 0
        maxItems:
          type: integer
          minimum: 0
      required:
        - type
        - x-basemachina-input-type
      description: タプルパラメーター。各要素の構造は `prefixItems` の対応する位置のスキーマに従う
    ListActionsPageResponse:
      type: object
      properties:
        has_more:
          type: boolean
          enum:
            - true
          description: 次のページが存在することを示す。next_cursor を使って次のページを取得できる
        data:
          type: array
          items:
            $ref: "#/components/schemas/Action"
          maxItems: 100
          description: 現在のページに含まれるアクションの配列
        next_cursor:
          type: string
          description: 次のページを取得するためのカーソル。値の中身は解釈せず、そのまま次のリクエストの cursor クエリパラメーターに渡す
      required:
        - has_more
        - data
        - next_cursor
      additionalProperties: false
    UnauthorizedProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#unauthorized
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - unauthorized
        status:
          type: number
          enum:
            - 401
        title:
          type: string
          enum:
            - Unauthorized
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    ArgumentInvalidProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#argument_invalid
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - argument_invalid
        status:
          type: number
          enum:
            - 422
        title:
          type: string
          enum:
            - Argument Invalid
        action_id:
          type: string
        violations:
          type: array
          items:
            $ref: "#/components/schemas/ArgumentViolation"
          description: 入力エラーのフィールド単位の詳細。フィールド単位の内訳を出せない場合は空配列
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
        - violations
      additionalProperties: false
    ArgumentViolation:
      type: object
      properties:
        field:
          type: string
          example: arguments.user_id
          description: 入力エラーが発生したフィールド。`arguments.user_id` のような、リクエストボディからのドット区切りパス
        reason:
          type: string
          example: required
          description: 入力エラーの種類または詳細メッセージ。required、unknown_property など一意な種別で表せる場合はその種別、それ以外はユーザー向けの説明文
      required:
        - field
        - reason
      additionalProperties: false
    InternalErrorProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#internal_error
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - internal_error
        status:
          type: number
          enum:
            - 500
        title:
          type: string
          enum:
            - Internal Error
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    BadRequestProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#bad_request
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - bad_request
        status:
          type: number
          enum:
            - 400
        title:
          type: string
          enum:
            - Bad Request
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    NotFoundProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#not_found
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - not_found
        status:
          type: number
          enum:
            - 404
        title:
          type: string
          enum:
            - Not Found
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    ActionExecutionResult:
      type: object
      properties:
        action_id:
          type: string
          example: send_email
          description: 実行したアクションID、または識別子
        output:
          $ref: "#/components/schemas/ActionExecutionOutput"
      required:
        - action_id
        - output
      description: アクション実行が成功したときに返されるリソース。`output.type` をdiscriminatorとして実行結果の形状を判別する
    ActionExecutionOutput:
      oneOf:
        - $ref: "#/components/schemas/ActionMySQLExecutionOutput"
        - $ref: "#/components/schemas/ActionPostgreSQLExecutionOutput"
        - $ref: "#/components/schemas/ActionAmazonAthenaExecutionOutput"
        - $ref: "#/components/schemas/ActionBigQueryExecutionOutput"
        - $ref: "#/components/schemas/ActionSnowflakeExecutionOutput"
        - $ref: "#/components/schemas/ActionGoogleSheetsExecutionOutput"
        - $ref: "#/components/schemas/ActionAmazonS3ObjectListExecutionOutput"
        - $ref: "#/components/schemas/ActionAmazonS3SignedURLExecutionOutput"
        - $ref: "#/components/schemas/ActionGoogleCloudStorageObjectListExecutionOutput"
        - $ref: "#/components/schemas/ActionGoogleCloudStorageSignedURLExecutionOutput"
        - $ref: "#/components/schemas/ActionHttpApiExecutionOutput"
        - $ref: "#/components/schemas/ActionGrpcExecutionOutput"
        - $ref: "#/components/schemas/ActionFirestoreExecutionOutput"
        - $ref: "#/components/schemas/ActionJavaScriptExecutionOutput"
      discriminator:
        propertyName: type
        mapping:
          mysql: "#/components/schemas/ActionMySQLExecutionOutput"
          postgresql: "#/components/schemas/ActionPostgreSQLExecutionOutput"
          amazon_athena: "#/components/schemas/ActionAmazonAthenaExecutionOutput"
          bigquery: "#/components/schemas/ActionBigQueryExecutionOutput"
          snowflake: "#/components/schemas/ActionSnowflakeExecutionOutput"
          google_sheets: "#/components/schemas/ActionGoogleSheetsExecutionOutput"
          amazon_s3_object_list: "#/components/schemas/ActionAmazonS3ObjectListExecutionOutput"
          amazon_s3_signed_url: "#/components/schemas/ActionAmazonS3SignedURLExecutionOutput"
          google_cloud_storage_object_list: "#/components/schemas/ActionGoogleCloudStorageObjectListExecutionOutput"
          google_cloud_storage_signed_url: "#/components/schemas/ActionGoogleCloudStorageSignedURLExecutionOutput"
          http_api: "#/components/schemas/ActionHttpApiExecutionOutput"
          grpc: "#/components/schemas/ActionGrpcExecutionOutput"
          firestore: "#/components/schemas/ActionFirestoreExecutionOutput"
          javascript: "#/components/schemas/ActionJavaScriptExecutionOutput"
      description: アクションの実行結果。`type` をdiscriminatorとして、アクション種別ごとに含まれるフィールドが異なる（SQL系は `statement_results`、ストレージ一覧は
        `items`、署名付きURLは `signed_url`、HTTP API / gRPC / Firestore / JavaScript は `value`）
    ActionMySQLExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - mysql
        statement_results:
          type: array
          items:
            $ref: "#/components/schemas/ActionSQLStatementExecutionResultWithoutColumns"
          description: 実行された SQL ステートメントごとの結果
      required:
        - type
        - statement_results
      description: MySQL アクションの実行結果
    ActionSQLStatementExecutionResultWithoutColumns:
      oneOf:
        - $ref: "#/components/schemas/ActionSQLQueryStatementExecutionResultWithoutColumns"
        - $ref: "#/components/schemas/ActionSQLUpdateStatementExecutionResult"
      discriminator:
        propertyName: type
        mapping:
          query: "#/components/schemas/ActionSQLQueryStatementExecutionResultWithoutColumns"
          update: "#/components/schemas/ActionSQLUpdateStatementExecutionResult"
      description: 列メタデータなし SQL ステートメント実行結果。MySQL / PostgreSQL で使用される
    ActionSQLQueryStatementExecutionResultWithoutColumns:
      type: object
      properties:
        type:
          type: string
          enum:
            - query
        title:
          type: string
          description: アクション設定画面で各ステートメントに設定したタイトル
        rows:
          type: array
          items:
            type: object
            additionalProperties: {}
          description: クエリ結果の行配列。このデータソースでは列の論理型情報を取得できないため、各セルは生の値そのもの（型は SQL 実行時の動的な型に依存）
      required:
        - type
        - title
        - rows
    ActionSQLUpdateStatementExecutionResult:
      type: object
      properties:
        type:
          type: string
          enum:
            - update
        title:
          type: string
          description: アクション設定画面で各ステートメントに設定したタイトル
      required:
        - type
        - title
    ActionPostgreSQLExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - postgresql
        statement_results:
          type: array
          items:
            $ref: "#/components/schemas/ActionSQLStatementExecutionResultWithoutColumns"
          description: 実行された SQL ステートメントごとの結果
      required:
        - type
        - statement_results
      description: PostgreSQL アクションの実行結果
    ActionAmazonAthenaExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - amazon_athena
        statement_results:
          type: array
          items:
            $ref: "#/components/schemas/ActionSQLStatementExecutionResultWithColumns"
          description: 実行された SQL ステートメントごとの結果
      required:
        - type
        - statement_results
      description: Amazon Athena アクションの実行結果
    ActionSQLStatementExecutionResultWithColumns:
      type: object
      properties:
        type:
          type: string
          enum:
            - query
        title:
          type: string
          description: アクション設定画面で各ステートメントに設定したタイトル
        rows:
          type: array
          items:
            type: object
            additionalProperties: {}
          description: クエリ結果の行配列。各要素は列名をキーとするオブジェクト
        columns:
          type: object
          additionalProperties:
            type: object
            properties:
              database_type_name:
                type: string
                description: データソースのドライバが返す列の生の型名。ドライバ依存（BigQuery なら "INT64"、Snowflake なら "TEXT" 等）
              nullable:
                type: boolean
                description: この列が NULL を許容するかどうか
              supported:
                type: boolean
                description: 公開APIのレスポンス JSON でこの列の値を表現できるかどうか。false の場合、rows 内の該当列値は文字列化された fallback になる
            required:
              - database_type_name
              - nullable
              - supported
          description: 列名をキーとした列メタデータ
      required:
        - type
        - title
        - rows
        - columns
      description: 列メタデータ付き SQL ステートメント実行結果。BigQuery / Amazon Athena / Snowflake で使用される
    ActionBigQueryExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - bigquery
        statement_results:
          type: array
          items:
            $ref: "#/components/schemas/ActionSQLStatementExecutionResultWithColumns"
          description: 実行された SQL ステートメントごとの結果
      required:
        - type
        - statement_results
      description: BigQuery アクションの実行結果
    ActionSnowflakeExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - snowflake
        statement_results:
          type: array
          items:
            $ref: "#/components/schemas/ActionSQLStatementExecutionResultWithColumns"
          description: 実行された SQL ステートメントごとの結果
      required:
        - type
        - statement_results
      description: Snowflake アクションの実行結果
    ActionGoogleSheetsExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - google_sheets
        rows:
          type: array
          items:
            type: object
            additionalProperties: {}
          description: Google スプレッドシートアクションの結果。各行を、ヘッダー行のセル値をキーとするオブジェクトに変換した配列
      required:
        - type
        - rows
      description: Google スプレッドシートアクションの実行結果
    ActionAmazonS3ObjectListExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - amazon_s3_object_list
        items:
          type: array
          items:
            $ref: "#/components/schemas/ActionStorageObject"
      required:
        - type
        - items
      description: Amazon S3 アクションで取得したオブジェクト一覧
    ActionStorageObject:
      type: object
      properties:
        object_key:
          type: string
          description: オブジェクト名（オブジェクトキー）
        last_modified:
          type: number
          description: ファイルの更新日時の Unix タイムスタンプ（秒）
        size:
          type: number
          description: ファイルのバイトサイズ
      required:
        - object_key
        - last_modified
        - size
      description: Amazon S3 / Google Cloud Storage アクションで取得したオブジェクト 1 件分の情報
    ActionAmazonS3SignedURLExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - amazon_s3_signed_url
        signed_url:
          type: string
          format: uri
          description: 発行した署名付き URL
      required:
        - type
        - signed_url
      description: Amazon S3 アクションで発行した署名付き URL
    ActionGoogleCloudStorageObjectListExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - google_cloud_storage_object_list
        items:
          type: array
          items:
            $ref: "#/components/schemas/ActionStorageObject"
      required:
        - type
        - items
      description: Google Cloud Storage アクションで取得したオブジェクト一覧
    ActionGoogleCloudStorageSignedURLExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - google_cloud_storage_signed_url
        signed_url:
          type: string
          format: uri
          description: 発行した署名付き URL
      required:
        - type
        - signed_url
      description: Google Cloud Storage アクションで発行した署名付き URL
    ActionHttpApiExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - http_api
        value:
          description: HTTP API / gRPC / Firestore / JavaScript アクションが返した任意の JSON 値（オブジェクト、配列、プリミティブ、null
            のいずれか）。具体的な形はアクション側の実装に依存する
      required:
        - type
        - value
      description: HTTP API アクションの実行結果
    ActionGrpcExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - grpc
        value:
          description: HTTP API / gRPC / Firestore / JavaScript アクションが返した任意の JSON 値（オブジェクト、配列、プリミティブ、null
            のいずれか）。具体的な形はアクション側の実装に依存する
      required:
        - type
        - value
      description: gRPC アクションの実行結果
    ActionFirestoreExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - firestore
        value:
          description: HTTP API / gRPC / Firestore / JavaScript アクションが返した任意の JSON 値（オブジェクト、配列、プリミティブ、null
            のいずれか）。具体的な形はアクション側の実装に依存する
      required:
        - type
        - value
      description: Firestore アクションの実行結果
    ActionJavaScriptExecutionOutput:
      type: object
      properties:
        type:
          type: string
          enum:
            - javascript
        value:
          description: HTTP API / gRPC / Firestore / JavaScript アクションが返した任意の JSON 値（オブジェクト、配列、プリミティブ、null
            のいずれか）。具体的な形はアクション側の実装に依存する
      required:
        - type
        - value
      description: JavaScriptアクションの実行結果
    ForbiddenProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#forbidden
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - forbidden
        status:
          type: number
          enum:
            - 403
        title:
          type: string
          enum:
            - Forbidden
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    StateConflictProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#state_conflict
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - state_conflict
        status:
          type: number
          enum:
            - 409
        title:
          type: string
          enum:
            - State Conflict
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    PayloadTooLargeProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#payload_too_large
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - payload_too_large
        status:
          type: number
          enum:
            - 413
        title:
          type: string
          enum:
            - Content Too Large
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    UnsupportedMediaTypeProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#unsupported_media_type
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - unsupported_media_type
        status:
          type: number
          enum:
            - 415
        title:
          type: string
          enum:
            - Unsupported Media Type
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    JavaScriptActionErrorProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#javascript_action_error
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - javascript_action_error
        status:
          type: number
          enum:
            - 422
        title:
          type: string
          enum:
            - JavaScript Action Error
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    DataSourceErrorProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#data_source_error
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - data_source_error
        status:
          type: number
          enum:
            - 422
        title:
          type: string
          enum:
            - Data Source Error
        action_id:
          type: string
        data_source:
          $ref: "#/components/schemas/DataSourceErrorResponseSummary"
        statement_results:
          type: array
          items:
            $ref: "#/components/schemas/SQLStatementExecutionStatus"
          description: SQL アクション（MySQL / PostgreSQL / BigQuery / Amazon Athena / Snowflake）のときに含まれる、実行された各 SQL ステートメントの結果
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    DataSourceErrorResponseSummary:
      type: object
      properties:
        status:
          type: integer
          example: 503
          description: データソースが返した HTTP ステータスコード
        body_snippet:
          type: string
          description: データソースから返されたレスポンスボディの先頭部分（最大 200 文字、機密情報や個人情報の可能性がある値は伏字化済み）
      required:
        - status
      additionalProperties: false
      description: "データソース（接続先データベース・外部 API など）が返したレスポンスの要約。`code: data_source_error` かつ HTTP 系データソースの HTTP ステータスを取得できたときに含まれる"
    SQLStatementExecutionStatus:
      oneOf:
        - $ref: "#/components/schemas/SQLStatementExecutionSuccess"
        - $ref: "#/components/schemas/SQLStatementExecutionFailure"
      discriminator:
        propertyName: type
        mapping:
          success: "#/components/schemas/SQLStatementExecutionSuccess"
          failure: "#/components/schemas/SQLStatementExecutionFailure"
    SQLStatementExecutionSuccess:
      type: object
      properties:
        type:
          type: string
          enum:
            - success
          description: このステートメント単体の実行は成功した
        title:
          type: string
          description: アクション設定画面で各ステートメントに設定したタイトル
      required:
        - type
        - title
      additionalProperties: false
    SQLStatementExecutionFailure:
      type: object
      properties:
        type:
          type: string
          enum:
            - failure
          description: このステートメント単体の実行は失敗した。先行ステートメントが success でも、後続が failure になった場合は全体として失敗扱いとなる
        title:
          type: string
          description: アクション設定画面で各ステートメントに設定したタイトル
        error:
          type: string
          description: 失敗の詳細メッセージ
      required:
        - type
        - title
        - error
      additionalProperties: false
    ServiceUnavailableProblem:
      type: object
      properties:
        type:
          type: string
          format: uri
          example: https://docs.basemachina.com/public_api/#service_unavailable
          description: エラーの種類を識別する URI。APIリファレンスの該当セクションを指す
        detail:
          type: string
          description: このリクエストで発生したエラーの内容と、API 利用者が取るべき対処
        instance:
          type: string
          example: /public/v1/projects/csi2hcc0iaejrqgivkfg/environments/9m4e2mr0ui3e8a215n4g/actions/send_email/executions
          description: エラーが発生したリクエストのパス
        code:
          type: string
          enum:
            - service_unavailable
        status:
          type: number
          enum:
            - 503
        title:
          type: string
          enum:
            - Service Unavailable
        action_id:
          type: string
      required:
        - type
        - detail
        - instance
        - code
        - status
        - title
      additionalProperties: false
    ExecuteActionRequest:
      type: object
      properties:
        arguments:
          type: object
          additionalProperties: {}
          default: {}
          description: アクションのパラメーター名をキー、実行時に渡す値を値とするオブジェクト。各値の型と形式はアクション詳細の `input_schema` に従う
    ListEnvironmentsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: "#/components/schemas/Environment"
          description: 有効化されている環境の配列
      required:
        - data
      description: 環境一覧。有効化されている環境のみを含む（無効化された環境は除外される）
    Environment:
      type: object
      properties:
        id:
          type: string
          example: 9m4e2mr0ui3e8a215n4g
          description: 環境のID
        name:
          type: string
          example: 本番環境
          description: 環境名
      required:
        - id
        - name
      description: 環境 1 件分のリソース表現。ID と名前を含む
  parameters: {}
paths:
  /token:
    post:
      operationId: exchangeToken
      tags:
        - 認証
      summary: アクセストークンを取得
      description: >-
        外部 OIDC IdP が発行した ID Token を、ベースマキナのアクセストークンに交換する。

        交換前のリクエストのため認証は不要。発行されたアクセストークンは有効期限まで使い回す。


        エラーレスポンスは他の `/public/v1/*` エンドポイントと異なり、RFC 8693 / RFC 6749 §5.2 形式 (`{ error, error_description }`,
        `Content-Type: application/json`) で返る。
      security: []
      requestBody:
        required: true
        description: "トークン交換リクエスト。`Content-Type: application/json` 必須"
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TokenExchangeRequest"
      responses:
        "200":
          description: 交換に成功し、ベースマキナのアクセストークンを返す
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TokenExchangeResponse"
        "400":
          description: リクエストボディが不正、または subject_token が無効・期限切れ・信頼ポリシーで拒否
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: "#/components/schemas/InvalidRequestTokenExchangeError"
                  - $ref: "#/components/schemas/InvalidGrantTokenExchangeError"
                discriminator:
                  propertyName: error
                  mapping:
                    invalid_request: "#/components/schemas/InvalidRequestTokenExchangeError"
                    invalid_grant: "#/components/schemas/InvalidGrantTokenExchangeError"
        "415":
          description: Content-Type が application/json ではない
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InvalidRequestTokenExchangeError"
        "422":
          description: リクエストパラメーターの形式が不正
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InvalidRequestTokenExchangeError"
        "500":
          description: サーバー内部でエラーが発生した
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ServerErrorTokenExchangeError"
        "503":
          description: ベースマキナ側の一時的な障害
          headers:
            Retry-After:
              description: 再試行までの待機秒数。RFC 7231 §7.1.3 の delta-seconds 形式
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TemporarilyUnavailableTokenExchangeError"
  /projects/{project_id}/environments/{environment_id}/actions:
    get:
      operationId: listActions
      tags:
        - アクション
      summary: アクション一覧を取得
      parameters:
        - schema:
            type: string
            minLength: 1
            description: 対象プロジェクトのID
            example: csi2hcc0iaejrqgivkfg
          required: true
          description: 対象プロジェクトのID
          name: project_id
          in: path
        - schema:
            type: string
            minLength: 1
            description: 対象環境のID
            example: 9m4e2mr0ui3e8a215n4g
          required: true
          description: 対象環境のID
          name: environment_id
          in: path
        - schema:
            type: string
            minLength: 1
            pattern: ^[A-Za-z0-9+/=_-]+$
            description: 次のページを取得するためのカーソル。前回レスポンスの next_cursor の値をそのまま渡す
          required: false
          description: 次のページを取得するためのカーソル。前回レスポンスの next_cursor の値をそのまま渡す
          name: cursor
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
            description: "1ページあたりに取得するアクションの最大件数（既定値: 20、最大値: 100）"
          required: false
          description: "1ページあたりに取得するアクションの最大件数（既定値: 20、最大値: 100）"
          name: limit
          in: query
      responses:
        "200":
          description: アクション一覧を返す
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListActionsResponse"
        "401":
          description: Bearer トークンが不正、欠落、または期限切れの場合の認証エラー
          headers:
            WWW-Authenticate:
              schema:
                type: string
              description: RFC 6750 §3 の Bearer チャレンジ
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/UnauthorizedProblem"
        "422":
          description: クエリパラメーターの値が不正（cursor の形式違反、limit の範囲外など）
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ArgumentInvalidProblem"
        "500":
          description: サーバー内部でエラーが発生した
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/InternalErrorProblem"
  /projects/{project_id}/environments/{environment_id}/actions/{action_id}:
    get:
      operationId: getAction
      tags:
        - アクション
      summary: アクション詳細を取得
      parameters:
        - schema:
            type: string
            minLength: 1
            description: 対象プロジェクトのID
            example: csi2hcc0iaejrqgivkfg
          required: true
          description: 対象プロジェクトのID
          name: project_id
          in: path
        - schema:
            type: string
            minLength: 1
            description: 対象環境のID
            example: 9m4e2mr0ui3e8a215n4g
          required: true
          description: 対象環境のID
          name: environment_id
          in: path
        - schema:
            type: string
            minLength: 1
            description: 取得するアクションID、または識別子
          required: true
          description: 取得するアクションID、または識別子
          name: action_id
          in: path
      responses:
        "200":
          description: アクション詳細を返す
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Action"
        "400":
          description: リクエストパラメーターが不正
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/BadRequestProblem"
        "401":
          description: Bearer トークンが不正、欠落、または期限切れの場合の認証エラー
          headers:
            WWW-Authenticate:
              schema:
                type: string
              description: RFC 6750 §3 の Bearer チャレンジ
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/UnauthorizedProblem"
        "404":
          description: アクションが存在しない
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/NotFoundProblem"
        "500":
          description: サーバー内部でエラーが発生した
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/InternalErrorProblem"
  /projects/{project_id}/environments/{environment_id}/actions/{action_id}/executions:
    post:
      operationId: executeAction
      tags:
        - アクション
      summary: アクションを実行
      parameters:
        - schema:
            type: string
            minLength: 1
            description: 対象プロジェクトのID
            example: csi2hcc0iaejrqgivkfg
          required: true
          description: 対象プロジェクトのID
          name: project_id
          in: path
        - schema:
            type: string
            minLength: 1
            description: 対象環境のID
            example: 9m4e2mr0ui3e8a215n4g
          required: true
          description: 対象環境のID
          name: environment_id
          in: path
        - schema:
            type: string
            minLength: 1
            description: 実行するアクションID、または識別子
          required: true
          description: 実行するアクションID、または識別子
          name: action_id
          in: path
      requestBody:
        required: true
        description: |-
          実行するアクションの引数を含む JSON ボディ。`Content-Type: application/json` 必須。
          引数の値はアクション詳細の `input_schema` に従う。`arguments` を省略した場合は空オブジェクトとして扱う。
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExecuteActionRequest"
      responses:
        "200":
          description: アクションの実行結果を返す
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ActionExecutionResult"
        "400":
          description: リクエストパラメーターが不正
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/BadRequestProblem"
        "401":
          description: Bearer トークンが不正、欠落、または期限切れの場合の認証エラー
          headers:
            WWW-Authenticate:
              schema:
                type: string
              description: RFC 6750 §3 の Bearer チャレンジ
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/UnauthorizedProblem"
        "403":
          description: "認可エラー（例: サービスアカウントで書き込み系の操作を実行した場合）"
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ForbiddenProblem"
        "404":
          description: アクションが存在しない、対象環境に未デプロイ、無効化されている、または使用するデータソースが現在の環境に接続されていない
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/NotFoundProblem"
        "409":
          description: リソースの状態が競合
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/StateConflictProblem"
        "413":
          description: リクエストペイロードサイズが上限を超過
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/PayloadTooLargeProblem"
        "415":
          description: Content-Type が application/json ではない
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/UnsupportedMediaTypeProblem"
        "422":
          description: "argument_invalid:
            引数の値がアクション定義と一致しない、公開APIで実行できないアクション（(旧)JavaScriptアクション、ファイルパラメーターを持つアクション、ストレージのダウンロード操作のアクション）が指定された、または実\
            行結果にファイル（バイナリデータ）が含まれていた。これらのアクションは、アクション実行画面から実行する必要がある。 / javascript_action_error: JavaScriptアクション内で throw
            されたエラー / data_source_error: データソース（接続先データベース・外部 API など）がエラーを返した"
          content:
            application/problem+json:
              schema:
                oneOf:
                  - $ref: "#/components/schemas/ArgumentInvalidProblem"
                  - $ref: "#/components/schemas/JavaScriptActionErrorProblem"
                  - $ref: "#/components/schemas/DataSourceErrorProblem"
                discriminator:
                  propertyName: code
                  mapping:
                    argument_invalid: "#/components/schemas/ArgumentInvalidProblem"
                    javascript_action_error: "#/components/schemas/JavaScriptActionErrorProblem"
                    data_source_error: "#/components/schemas/DataSourceErrorProblem"
        "500":
          description: サーバー内部でエラーが発生した
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/InternalErrorProblem"
        "503":
          description: ベースマキナ側の一時的な障害。Retry-After ヘッダに従ってリトライ可能
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/ServiceUnavailableProblem"
  /projects/{project_id}/environments:
    get:
      operationId: listEnvironments
      tags:
        - 環境
      summary: 環境一覧を取得
      parameters:
        - schema:
            type: string
            minLength: 1
            description: 対象プロジェクトのID
            example: csi2hcc0iaejrqgivkfg
          required: true
          description: 対象プロジェクトのID
          name: project_id
          in: path
      responses:
        "200":
          description: 有効化されている環境の一覧を返す
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ListEnvironmentsResponse"
        "401":
          description: Bearer トークンが不正、欠落、または期限切れの場合の認証エラー
          headers:
            WWW-Authenticate:
              schema:
                type: string
              description: RFC 6750 §3 の Bearer チャレンジ
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/UnauthorizedProblem"
        "500":
          description: サーバー内部でエラーが発生した
          content:
            application/problem+json:
              schema:
                $ref: "#/components/schemas/InternalErrorProblem"
