swagger: '2.0'
info:
  title: Meetings API
  description: Endpoints for meetings, agenda items, attachments, attendance, resolutions,
    votes, and minutes.
  version: v1
host: eboard.devsgraphics.com
schemes:
- https
basePath: /api/v1/meetings
consumes:
- application/json
produces:
- application/json
securityDefinitions:
  Basic:
    type: basic
security:
- Basic: []
paths:
  /agenda-items/:
    get:
      operationId: agenda-items_list
      description: ''
      parameters:
      - name: page
        in: query
        description: A page number within the paginated result set.
        required: false
        type: integer
      - name: page_size
        in: query
        description: Number of results to return per page.
        required: false
        type: integer
      responses:
        '200':
          description: ''
          schema:
            required:
            - count
            - results
            type: object
            properties:
              count:
                type: integer
              next:
                type: string
                format: uri
                x-nullable: true
              previous:
                type: string
                format: uri
                x-nullable: true
              results:
                type: array
                items:
                  $ref: '#/definitions/AgendaItem'
      tags:
      - agenda-items
    post:
      operationId: agenda-items_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AgendaItem'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/AgendaItem'
      tags:
      - agenda-items
    parameters: []
  /agenda-items/{id}/:
    get:
      operationId: agenda-items_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/AgendaItem'
      tags:
      - agenda-items
    put:
      operationId: agenda-items_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AgendaItem'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/AgendaItem'
      tags:
      - agenda-items
    patch:
      operationId: agenda-items_partial_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AgendaItem'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/AgendaItem'
      tags:
      - agenda-items
    delete:
      operationId: agenda-items_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - agenda-items
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this agenda item.
      required: true
      type: integer
  /attendance/:
    get:
      operationId: attendance_list
      description: |-
        Standard CRUD for Attendance + a unified 'check_in' endpoint
        that is safe for:
          - logged-in members
          - guests coming from QR / magic link
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            type: array
            items:
              $ref: '#/definitions/Attendance'
      tags:
      - attendance
    post:
      operationId: attendance_create
      description: |-
        Standard CRUD for Attendance + a unified 'check_in' endpoint
        that is safe for:
          - logged-in members
          - guests coming from QR / magic link
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Attendance'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Attendance'
      tags:
      - attendance
    parameters: []
  /attendance/check-in/:
    post:
      operationId: attendance_check_in
      summary: Handles *both* member and guest check-ins using the same endpoint.
      description: |-
        Frontend sends:
          {
            "meeting": <meeting_id>,
            "email": "optional@example.com",   # optional if logged in user has email
            "first_name": "Optional",
            "last_name": "Optional",
            "present": true                    # true=check-in, false=check-out
          }
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/UnifiedAttendanceCheckIn'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/UnifiedAttendanceCheckIn'
      tags:
      - attendance
    parameters: []
  /attendance/{id}/:
    get:
      operationId: attendance_read
      description: |-
        Standard CRUD for Attendance + a unified 'check_in' endpoint
        that is safe for:
          - logged-in members
          - guests coming from QR / magic link
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Attendance'
      tags:
      - attendance
    put:
      operationId: attendance_update
      description: |-
        Standard CRUD for Attendance + a unified 'check_in' endpoint
        that is safe for:
          - logged-in members
          - guests coming from QR / magic link
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Attendance'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Attendance'
      tags:
      - attendance
    patch:
      operationId: attendance_partial_update
      description: |-
        Standard CRUD for Attendance + a unified 'check_in' endpoint
        that is safe for:
          - logged-in members
          - guests coming from QR / magic link
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Attendance'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Attendance'
      tags:
      - attendance
    delete:
      operationId: attendance_delete
      description: |-
        Standard CRUD for Attendance + a unified 'check_in' endpoint
        that is safe for:
          - logged-in members
          - guests coming from QR / magic link
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - attendance
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this attendance.
      required: true
      type: integer
  /attendance/{id}/qr/:
    get:
      operationId: attendance_meeting_qr
      description: Generate a Meeting QR PNG for check-in.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - attendance
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /calendar/{id}/export-ical/:
    get:
      operationId: calendar_export_ical
      description: ViewSet for exporting meeting calendar events as iCal files.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - calendar
    parameters:
    - name: id
      in: path
      required: true
      type: string
  /meeting-stats/summary/:
    get:
      operationId: meeting-stats_summary
      description: |-
        ViewSet to provide aggregated statistics for meetings.
        Supports filtering by org, board, or user via query params.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - meeting-stats
    parameters: []
  /meeting-types/:
    get:
      operationId: meeting-types_list
      description: ''
      parameters:
      - name: search
        in: query
        description: A search term.
        required: false
        type: string
      - name: ordering
        in: query
        description: Which field to use when ordering the results.
        required: false
        type: string
      - name: page
        in: query
        description: A page number within the paginated result set.
        required: false
        type: integer
      - name: page_size
        in: query
        description: Number of results to return per page.
        required: false
        type: integer
      responses:
        '200':
          description: ''
          schema:
            required:
            - count
            - results
            type: object
            properties:
              count:
                type: integer
              next:
                type: string
                format: uri
                x-nullable: true
              previous:
                type: string
                format: uri
                x-nullable: true
              results:
                type: array
                items:
                  $ref: '#/definitions/MeetingType'
      tags:
      - meeting-types
    post:
      operationId: meeting-types_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingType'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/MeetingType'
      tags:
      - meeting-types
    parameters: []
  /meeting-types/activate/:
    post:
      operationId: meeting-types_activate
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingType'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/MeetingType'
      tags:
      - meeting-types
    parameters: []
  /meeting-types/deactivate/:
    post:
      operationId: meeting-types_deactivate
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingType'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/MeetingType'
      tags:
      - meeting-types
    parameters: []
  /meeting-types/{id}/:
    get:
      operationId: meeting-types_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingType'
      tags:
      - meeting-types
    put:
      operationId: meeting-types_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingType'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingType'
      tags:
      - meeting-types
    patch:
      operationId: meeting-types_partial_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingType'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingType'
      tags:
      - meeting-types
    delete:
      operationId: meeting-types_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - meeting-types
    parameters:
    - name: id
      in: path
      required: true
      type: string
  /meetings/:
    get:
      operationId: meetings_list
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            type: array
            items:
              $ref: '#/definitions/MeetingSummary'
      tags:
      - meetings
    post:
      operationId: meetings_create
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingCreateUpdate'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/MeetingCreateUpdate'
      tags:
      - meetings
    parameters: []
  /meetings/{id}/:
    get:
      operationId: meetings_read
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Meeting'
      tags:
      - meetings
    put:
      operationId: meetings_update
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingCreateUpdate'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingCreateUpdate'
      tags:
      - meetings
    patch:
      operationId: meetings_partial_update
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingCreateUpdate'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingCreateUpdate'
      tags:
      - meetings
    delete:
      operationId: meetings_delete
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - meetings
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /meetings/{id}/cancel/:
    post:
      operationId: meetings_cancel
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Meeting'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Meeting'
      tags:
      - meetings
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /meetings/{id}/complete/:
    post:
      operationId: meetings_complete
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Meeting'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Meeting'
      tags:
      - meetings
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /meetings/{id}/invite-from-committees/:
    post:
      operationId: meetings_invite_from_committees
      description: |-
        POST body:
        {
          "committee_ids": [1,2,3],
          "key_roles": ["chair","secretary","official"],    // optional
          "specials": ["observer"]                          // optional
        }
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Meeting'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Meeting'
      tags:
      - meetings
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /meetings/{id}/publish/:
    post:
      operationId: meetings_publish
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Meeting'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Meeting'
      tags:
      - meetings
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /meetings/{id}/quorum/:
    get:
      operationId: meetings_quorum
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Meeting'
      tags:
      - meetings
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /meetings/{id}/start/:
    post:
      operationId: meetings_start
      description: |-
        ViewSet for Meetings with CRUD, status transitions, quorum checks,
        and scoped querysets (org/board context).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Meeting'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Meeting'
      tags:
      - meetings
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting.
      required: true
      type: integer
  /minutes/:
    get:
      operationId: minutes_list
      description: ''
      parameters:
      - name: page
        in: query
        description: A page number within the paginated result set.
        required: false
        type: integer
      - name: page_size
        in: query
        description: Number of results to return per page.
        required: false
        type: integer
      responses:
        '200':
          description: ''
          schema:
            required:
            - count
            - results
            type: object
            properties:
              count:
                type: integer
              next:
                type: string
                format: uri
                x-nullable: true
              previous:
                type: string
                format: uri
                x-nullable: true
              results:
                type: array
                items:
                  $ref: '#/definitions/Minutes'
      tags:
      - minutes
    post:
      operationId: minutes_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Minutes'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Minutes'
      tags:
      - minutes
    parameters: []
  /minutes/draft/:
    post:
      operationId: minutes_draft
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Minutes'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Minutes'
      tags:
      - minutes
    parameters: []
  /minutes/{id}/:
    get:
      operationId: minutes_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Minutes'
      tags:
      - minutes
    put:
      operationId: minutes_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Minutes'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Minutes'
      tags:
      - minutes
    patch:
      operationId: minutes_partial_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Minutes'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Minutes'
      tags:
      - minutes
    delete:
      operationId: minutes_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - minutes
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this minutes.
      required: true
      type: integer
  /minutes/{id}/approve/:
    post:
      operationId: minutes_approve
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Minutes'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Minutes'
      tags:
      - minutes
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this minutes.
      required: true
      type: integer
  /notes/:
    get:
      operationId: notes_list
      description: ''
      parameters:
      - name: page
        in: query
        description: A page number within the paginated result set.
        required: false
        type: integer
      - name: page_size
        in: query
        description: Number of results to return per page.
        required: false
        type: integer
      responses:
        '200':
          description: ''
          schema:
            required:
            - count
            - results
            type: object
            properties:
              count:
                type: integer
              next:
                type: string
                format: uri
                x-nullable: true
              previous:
                type: string
                format: uri
                x-nullable: true
              results:
                type: array
                items:
                  $ref: '#/definitions/MeetingNote'
      tags:
      - notes
    post:
      operationId: notes_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingNote'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/MeetingNote'
      tags:
      - notes
    parameters: []
  /notes/{id}/:
    get:
      operationId: notes_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingNote'
      tags:
      - notes
    put:
      operationId: notes_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingNote'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingNote'
      tags:
      - notes
    patch:
      operationId: notes_partial_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MeetingNote'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/MeetingNote'
      tags:
      - notes
    delete:
      operationId: notes_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - notes
    parameters:
    - name: id
      in: path
      description: A unique integer value identifying this meeting note.
      required: true
      type: integer
  /platforms/:
    get:
      operationId: platforms_list
      description: ''
      parameters:
      - name: search
        in: query
        description: A search term.
        required: false
        type: string
      - name: ordering
        in: query
        description: Which field to use when ordering the results.
        required: false
        type: string
      - name: page
        in: query
        description: A page number within the paginated result set.
        required: false
        type: integer
      - name: page_size
        in: query
        description: Number of results to return per page.
        required: false
        type: integer
      responses:
        '200':
          description: ''
          schema:
            required:
            - count
            - results
            type: object
            properties:
              count:
                type: integer
              next:
                type: string
                format: uri
                x-nullable: true
              previous:
                type: string
                format: uri
                x-nullable: true
              results:
                type: array
                items:
                  $ref: '#/definitions/Platform'
      tags:
      - platforms
    post:
      operationId: platforms_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Platform'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Platform'
      tags:
      - platforms
    parameters: []
  /platforms/activate/:
    post:
      operationId: platforms_activate
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Platform'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Platform'
      tags:
      - platforms
    parameters: []
  /platforms/deactivate/:
    post:
      operationId: platforms_deactivate
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Platform'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/Platform'
      tags:
      - platforms
    parameters: []
  /platforms/{id}/:
    get:
      operationId: platforms_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Platform'
      tags:
      - platforms
    put:
      operationId: platforms_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Platform'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Platform'
      tags:
      - platforms
    patch:
      operationId: platforms_partial_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Platform'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/Platform'
      tags:
      - platforms
    delete:
      operationId: platforms_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - platforms
    parameters:
    - name: id
      in: path
      required: true
      type: string
  /venue-types/:
    get:
      operationId: venue-types_list
      description: ''
      parameters:
      - name: search
        in: query
        description: A search term.
        required: false
        type: string
      - name: ordering
        in: query
        description: Which field to use when ordering the results.
        required: false
        type: string
      - name: page
        in: query
        description: A page number within the paginated result set.
        required: false
        type: integer
      - name: page_size
        in: query
        description: Number of results to return per page.
        required: false
        type: integer
      responses:
        '200':
          description: ''
          schema:
            required:
            - count
            - results
            type: object
            properties:
              count:
                type: integer
              next:
                type: string
                format: uri
                x-nullable: true
              previous:
                type: string
                format: uri
                x-nullable: true
              results:
                type: array
                items:
                  $ref: '#/definitions/VenueType'
      tags:
      - venue-types
    post:
      operationId: venue-types_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/VenueType'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/VenueType'
      tags:
      - venue-types
    parameters: []
  /venue-types/activate/:
    post:
      operationId: venue-types_activate
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/VenueType'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/VenueType'
      tags:
      - venue-types
    parameters: []
  /venue-types/deactivate/:
    post:
      operationId: venue-types_deactivate
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/VenueType'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/VenueType'
      tags:
      - venue-types
    parameters: []
  /venue-types/{id}/:
    get:
      operationId: venue-types_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/VenueType'
      tags:
      - venue-types
    put:
      operationId: venue-types_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/VenueType'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/VenueType'
      tags:
      - venue-types
    patch:
      operationId: venue-types_partial_update
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/VenueType'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/VenueType'
      tags:
      - venue-types
    delete:
      operationId: venue-types_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - venue-types
    parameters:
    - name: id
      in: path
      required: true
      type: string
definitions:
  AgendaItem:
    required:
    - meeting
    - title
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      meeting:
        title: Meeting
        type: integer
      meeting_title:
        title: Meeting title
        type: string
        readOnly: true
        minLength: 1
      order:
        title: Order
        type: integer
        default: 1
        maximum: 9223372036854775807
        minimum: 0
      title:
        title: Title
        type: string
        maxLength: 200
        minLength: 1
      description:
        title: Description
        type: string
      presenter:
        title: Presenter
        type: integer
        x-nullable: true
      time_allocated_min:
        title: Time allocated min
        type: integer
        maximum: 9223372036854775807
        minimum: 0
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
  Attendance:
    required:
    - meeting
    - email
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      meeting:
        title: Meeting
        type: integer
      meeting_title:
        title: Meeting title
        type: string
        readOnly: true
        minLength: 1
      meeting_description:
        title: Meeting description
        type: string
        readOnly: true
        minLength: 1
      user:
        title: User
        type: integer
        x-nullable: true
      email:
        title: Email
        type: string
        format: email
        maxLength: 254
        minLength: 1
      first_name:
        title: First name
        type: string
        maxLength: 150
      last_name:
        title: Last name
        type: string
        maxLength: 150
      is_member:
        title: Is member
        type: boolean
        readOnly: true
      role_at_meeting:
        title: Role at meeting
        type: string
        enum:
        - BoardAdmin
        - BoardMember
        - Guest
      status:
        title: Status
        type: string
        enum:
        - invited
        - accepted
        - declined
        - tentative
        - present
        - absent
        - excused
      check_in_at:
        title: Check in at
        type: string
        format: date-time
        readOnly: true
        x-nullable: true
      check_out_at:
        title: Check out at
        type: string
        format: date-time
        readOnly: true
        x-nullable: true
      proxy_for:
        title: Proxy for
        type: integer
        x-nullable: true
  UnifiedAttendanceCheckIn:
    required:
    - meeting
    type: object
    properties:
      meeting:
        title: Meeting
        type: integer
      email:
        title: Email
        type: string
        format: email
      first_name:
        title: First name
        type: string
      last_name:
        title: Last name
        type: string
      present:
        title: Present
        type: boolean
        default: true
  MeetingType:
    required:
    - name
    - code
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 100
        minLength: 1
      code:
        title: Code
        description: Stable key, e.g. 'board', 'zoom', 'hybrid'.
        type: string
        format: slug
        pattern: ^[-a-zA-Z0-9_]+$
        maxLength: 50
        minLength: 1
      description:
        title: Description
        type: string
        maxLength: 255
      is_active:
        title: Is active
        type: boolean
      sort_order:
        title: Sort order
        type: integer
        maximum: 9223372036854775807
        minimum: 0
  MeetingSummary:
    required:
    - title
    - board
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      title:
        title: Title
        type: string
        maxLength: 200
        minLength: 1
      board:
        title: Board
        type: integer
      status:
        title: Status
        type: string
        enum:
        - draft
        - scheduled
        - in_progress
        - completed
        - archived
        - cancelled
      start_at:
        title: Start at
        type: string
        format: date-time
        x-nullable: true
      end_at:
        title: End at
        type: string
        format: date-time
        x-nullable: true
  MeetingCreateUpdate:
    required:
    - org
    - board
    - title
    type: object
    properties:
      org:
        title: Org
        type: integer
      board:
        title: Board
        type: integer
      title:
        title: Title
        type: string
        maxLength: 200
        minLength: 1
      description:
        title: Description
        type: string
      location:
        title: Location
        description: Required for Physical/Hybrid.
        type: string
        maxLength: 255
      start_at:
        title: Start at
        type: string
        format: date-time
        x-nullable: true
      end_at:
        title: End at
        type: string
        format: date-time
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - draft
        - scheduled
        - in_progress
        - completed
        - archived
        - cancelled
      quorum_required:
        title: Quorum required
        type: integer
        maximum: 9223372036854775807
        minimum: 0
  Meeting:
    required:
    - org
    - board
    - title
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      org:
        title: Org
        type: integer
      org_name:
        title: Org name
        type: string
        readOnly: true
        minLength: 1
      board:
        title: Board
        type: integer
      board_name:
        title: Board name
        type: string
        readOnly: true
        minLength: 1
      title:
        title: Title
        type: string
        maxLength: 200
        minLength: 1
      description:
        title: Description
        type: string
      location:
        title: Location
        description: Required for Physical/Hybrid.
        type: string
        maxLength: 255
      start_at:
        title: Start at
        type: string
        format: date-time
        x-nullable: true
      end_at:
        title: End at
        type: string
        format: date-time
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - draft
        - scheduled
        - in_progress
        - completed
        - archived
        - cancelled
      quorum_required:
        title: Quorum required
        type: integer
        maximum: 9223372036854775807
        minimum: 0
      created_by:
        title: Created by
        type: integer
        readOnly: true
        x-nullable: true
      created_by_email:
        title: Created by email
        type: string
        format: email
        readOnly: true
        minLength: 1
      updated_by:
        title: Updated by
        type: integer
        readOnly: true
        x-nullable: true
      updated_by_email:
        title: Updated by email
        type: string
        format: email
        readOnly: true
        minLength: 1
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      duration:
        title: Duration
        type: string
        readOnly: true
      actual_duration:
        title: Actual duration
        type: string
        readOnly: true
  Minutes:
    required:
    - meeting
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      meeting:
        title: Meeting
        type: integer
      content_json:
        title: Content json
        type: object
      drafted_by:
        title: Drafted by
        type: integer
        readOnly: true
        x-nullable: true
      drafted_at:
        title: Drafted at
        type: string
        format: date-time
        readOnly: true
      approved_by:
        title: Approved by
        type: integer
        readOnly: true
        x-nullable: true
      approved_at:
        title: Approved at
        type: string
        format: date-time
        readOnly: true
        x-nullable: true
      version:
        title: Version
        type: integer
        readOnly: true
      published_pdf_url:
        title: Published pdf url
        type: string
        format: uri
        maxLength: 200
  MeetingNote:
    required:
    - meeting
    - text
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      meeting:
        title: Meeting
        type: integer
      author:
        title: Author
        type: integer
        readOnly: true
        x-nullable: true
      author_email:
        title: Author email
        type: string
        format: email
        readOnly: true
        minLength: 1
      text:
        title: Text
        type: string
        minLength: 1
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
  Platform:
    required:
    - name
    - code
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 100
        minLength: 1
      code:
        title: Code
        description: Stable key, e.g. 'board', 'zoom', 'hybrid'.
        type: string
        format: slug
        pattern: ^[-a-zA-Z0-9_]+$
        maxLength: 50
        minLength: 1
      description:
        title: Description
        type: string
        maxLength: 255
      is_active:
        title: Is active
        type: boolean
      sort_order:
        title: Sort order
        type: integer
        maximum: 9223372036854775807
        minimum: 0
  VenueType:
    required:
    - name
    - code
    type: object
    properties:
      id:
        title: ID
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 100
        minLength: 1
      code:
        title: Code
        description: Stable key, e.g. 'board', 'zoom', 'hybrid'.
        type: string
        format: slug
        pattern: ^[-a-zA-Z0-9_]+$
        maxLength: 50
        minLength: 1
      description:
        title: Description
        type: string
        maxLength: 255
      is_active:
        title: Is active
        type: boolean
      sort_order:
        title: Sort order
        type: integer
        maximum: 9223372036854775807
        minimum: 0
