{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/softsync-ai/json-schema/softsync-ai-create-meeting-type-dto-schema.json",
  "title": "CreateMeetingTypeDto",
  "x-generated": "2026-11-03",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/softsync-ai-openapi.json#/components/schemas/CreateMeetingTypeDto",
  "type": "object",
  "properties": {
    "bookingMode": {
      "description": "appointment: one guest picks any free time. event: many guests register for scheduled sessions. Default appointment.",
      "allOf": [
        {
          "$ref": "#/$defs/MeetingKind"
        }
      ]
    },
    "maxAttendees": {
      "type": "number",
      "description": "Seats per session. Only used for event meetings (1 to 1000)."
    },
    "title": {
      "type": "string",
      "description": "Name shown on the booking page."
    },
    "description": {
      "type": "string",
      "description": "Text shown on the booking page."
    },
    "bannerImage": {
      "type": "string",
      "description": "Image shown on the booking page: a web address or an uploaded file path."
    },
    "brandDisplay": {
      "description": "Whose name and logo the booking page shows: workspace, custom or hidden.",
      "allOf": [
        {
          "$ref": "#/$defs/MeetingBrandDisplay"
        }
      ]
    },
    "brandName": {
      "type": "string",
      "description": "Name shown when brandDisplay is custom (up to 120 characters)."
    },
    "brandLogo": {
      "type": "string",
      "description": "Logo shown when brandDisplay is custom."
    },
    "replyTo": {
      "description": "Where a guest's reply to a meeting email goes: the hosts, or one custom address.",
      "allOf": [
        {
          "$ref": "#/$defs/MeetingReplyTo"
        }
      ]
    },
    "replyToEmail": {
      "type": "string",
      "description": "Required when replyTo is custom."
    },
    "durationMinutes": {
      "type": "number",
      "description": "Length of each meeting, 5 to 480 minutes."
    },
    "policy": {
      "description": "How hosts are chosen: individual, round_robin, collective or team_pool.",
      "allOf": [
        {
          "$ref": "#/$defs/MeetingPolicy"
        }
      ]
    },
    "hostIds": {
      "description": "User ids of the hosts. At least one; each must be a workspace member.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "fixedHostIds": {
      "description": "Hosts who attend every booking in addition to the rotation. Must also be listed in hostIds.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "notifyMemberIds": {
      "description": "Teammates told about new bookings and copied on host reminders (up to 50).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "minimumHosts": {
      "type": "number",
      "description": "For team_pool only: how many hosts must be free for a time to be offered (at least 2)."
    },
    "timeZone": {
      "type": "string",
      "description": "IANA time zone, e.g. Europe/Oslo. When left out the value falls back to UTC."
    },
    "minimumNoticeMinutes": {
      "type": "number",
      "description": "How far ahead a booking must be made, 0 to 10080 minutes."
    },
    "afterBufferMinutes": {
      "type": "number",
      "description": "Gap kept free after each meeting, 0 to 240 minutes."
    },
    "checkHostCalendars": {
      "type": "boolean",
      "description": "Whether hosts' connected calendars are checked for busy times. Default true."
    },
    "formId": {
      "type": "string",
      "description": "An existing enabled form to use as the booking questions. Left out, a default form is created."
    }
  },
  "required": [
    "title",
    "durationMinutes",
    "policy",
    "hostIds"
  ],
  "$defs": {
    "MeetingBrandDisplay": {
      "type": "string",
      "enum": [
        "workspace",
        "custom",
        "hidden"
      ]
    },
    "MeetingKind": {
      "type": "string",
      "enum": [
        "appointment",
        "event"
      ]
    },
    "MeetingPolicy": {
      "type": "string",
      "enum": [
        "individual",
        "round_robin",
        "collective",
        "team_pool"
      ]
    },
    "MeetingReplyTo": {
      "type": "string",
      "enum": [
        "hosts",
        "custom"
      ]
    }
  }
}