swagger: '2.0'
info:
  title: Your Project API
  description: Internal API documentation for Your Project
  termsOfService: https://www.google.com/policies/terms/
  contact:
    email: contact@yourproject.local
  license:
    name: BSD License
  version: v1
host: api.density.io
schemes:
- https
basePath: /
consumes:
- application/json
produces:
- application/json
- text/csv
securityDefinitions:
  Bearer:
    type: apiKey
    name: Authorization
    in: header
    description: Bearer token containing required permissions (ie, it is often `core_read`
      for GET, `core_write` for POST)
security:
- Bearer: []
paths:
  /:
    get:
      operationId: _list
      description: Check server health status (GET or HEAD).
      parameters: []
      responses:
        '200':
          description: ''
      produces:
      - application/json
      tags:
      - Health
    parameters: []
  /connman-status/:
    get:
      operationId: connman-status_list
      description: ConnMan network connectivity check endpoint (GET).
      parameters: []
      responses:
        '200':
          description: ''
      produces:
      - application/json
      tags:
      - Health
    parameters: []
  /internal-api/v1/{org_id}/multipoint_installations/:
    get:
      operationId: internal-api_v1_multipoint_installations_list
      description: MultipointInstallationListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalMultipointInstallationDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - MPI
      security:
      - Bearer: []
    post:
      operationId: internal-api_v1_multipoint_installations_create
      description: MultipointInstallationListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MultipointInstallationDetail'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalMultipointInstallationDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - MPI
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /internal-api/v1/{org_id}/multipoint_installations/sensors/{serial_number}/:
    get:
      operationId: internal-api_v1_multipoint_installations_sensors_read
      description: MultipointInstallationSensorDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalMultipointInstallationSensorDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - MPI
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /internal-api/v1/{org_id}/multipoint_installations/{multipoint_installation_id}/:
    get:
      operationId: internal-api_v1_multipoint_installations_read
      description: MultipointInstallationDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalMultipointInstallationDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - MPI
      security:
      - Bearer: []
    put:
      operationId: internal-api_v1_multipoint_installations_update
      description: MultipointInstallationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MultipointInstallationDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalMultipointInstallationDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - MPI
      security:
      - Bearer: []
    patch:
      operationId: internal-api_v1_multipoint_installations_partial_update
      description: MultipointInstallationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/MultipointInstallationDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalMultipointInstallationDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - MPI
      security:
      - Bearer: []
    delete:
      operationId: internal-api_v1_multipoint_installations_delete
      description: MultipointInstallationDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - MPI
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: multipoint_installation_id
      in: path
      required: true
      type: string
  /v1/app/login/:
    get:
      operationId: v1_app_login_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/app/login/callback/:
    get:
      operationId: v1_app_login_callback_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/displays/:
    get:
      operationId: v1_displays_list
      description: DisplayListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays
      security:
      - Bearer: []
    post:
      operationId: v1_displays_create
      description: DisplayListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    parameters: []
  /v1/displays/{display_id}/:
    get:
      operationId: v1_displays_read
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays
      security:
      - Bearer: []
    put:
      operationId: v1_displays_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    patch:
      operationId: v1_displays_partial_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    delete:
      operationId: v1_displays_delete
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Displays
      security:
      - Bearer: []
    parameters:
    - name: display_id
      in: path
      required: true
      type: string
  /v1/displays/{display_id}/refresh:
    post:
      operationId: v1_displays_refresh_create
      description: |-
        View used to refresh a display, proxying a message to the
            websocket redis queue.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    parameters:
    - name: display_id
      in: path
      required: true
      type: string
  /v1/doorways/:
    get:
      operationId: v1_doorways_list
      description: DoorwayListView operations.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    post:
      operationId: v1_doorways_create
      description: DoorwayListView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    parameters: []
  /v1/doorways/{doorway_id}/:
    get:
      operationId: v1_doorways_read
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwayDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    put:
      operationId: v1_doorways_update
      description: DoorwayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    patch:
      operationId: v1_doorways_partial_update
      description: DoorwayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    delete:
      operationId: v1_doorways_delete
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    parameters:
    - name: doorway_id
      in: path
      required: true
      type: string
  /v1/links/:
    get:
      operationId: v1_links_list
      description: LinkListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links
      security:
      - Bearer: []
    post:
      operationId: v1_links_create
      description: LinkListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links
      security:
      - Bearer: []
    parameters: []
  /v1/links/{link_id}/:
    get:
      operationId: v1_links_read
      description: LinkDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links
      security:
      - Bearer: []
    delete:
      operationId: v1_links_delete
      description: LinkDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Links
      security:
      - Bearer: []
    parameters:
    - name: link_id
      in: path
      required: true
      type: string
  /v1/login/:
    post:
      operationId: v1_login_create
      description: POST to this view to login and create a new session token
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/logout/:
    delete:
      operationId: v1_logout_delete
      description: |-
        DELETE to this view to logout and delete all of a user's session tokens
        Tokens are deleted individually, so the pre-delete signal will fire and clean up the cache
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/machine_user/client_id/{client_id}/:
    get:
      operationId: v1_machine_user_client_id_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_machine_user_client_id_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v1_machine_user_client_id_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: client_id
      in: path
      required: true
      type: string
  /v1/machine_user/me/:
    get:
      operationId: v1_machine_user_me_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_machine_user_me_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v1_machine_user_me_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/notifications/:
    get:
      operationId: v1_notifications_list
      description: NotificationListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalNotificationSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications
      security:
      - Bearer: []
    post:
      operationId: v1_notifications_create
      description: NotificationListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications
      security:
      - Bearer: []
    parameters: []
  /v1/notifications/{notification_id}/:
    put:
      operationId: v1_notifications_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications
      security:
      - Bearer: []
    patch:
      operationId: v1_notifications_partial_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications
      security:
      - Bearer: []
    delete:
      operationId: v1_notifications_delete
      description: NotificationDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Notifications
      security:
      - Bearer: []
    parameters:
    - name: notification_id
      in: path
      required: true
      type: string
  /v1/organization/create_with_user/:
    post:
      operationId: v1_organization_create_with_user_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OrganizationCreateAccount'
      responses:
        '201':
          description: Account created successfully.
      tags:
      - Organisations
    parameters: []
  /v1/organization/logo_image/:
    post:
      operationId: v1_organization_logo_image_create
      description: Sign and return a URL for uploading a
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Organisations
    delete:
      operationId: v1_organization_logo_image_delete
      description: Sign and return a URL for uploading a
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v1/organization/logo_image/{upload_id}/:
    get:
      operationId: v1_organization_logo_image_read
      description: Return the status of an upload, including media
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    parameters:
    - name: upload_id
      in: path
      required: true
      type: string
  /v1/organizations/:
    get:
      operationId: v1_organizations_list
      description: List organizations (special/staff access only)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v1/organizations/create_with_service_user/:
    post:
      operationId: v1_organizations_create_with_service_user_create
      summary: Create an organization for scoping purposes.
      description: |-
        - Creates an organization w/ disposition set to `scoping`
        - Creates a service user for impersonation use. This user is ephemeral, CS will delete
          on account materialization
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v1/organizations/me/:
    put:
      operationId: v1_organizations_me_update
      description: Update own-organization fields that "owner" type users can affect
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v1/organizations/{organization_id}/:
    get:
      operationId: v1_organizations_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    delete:
      operationId: v1_organizations_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Organisations
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v1/organizations/{organization_id}/disposition/:
    patch:
      operationId: v1_organizations_disposition_partial_update
      description: Set or clear an organization's disposition.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OrganizationDisposition'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/OrganizationDisposition'
      tags:
      - Organisations
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v1/plans/:
    get:
      operationId: v1_plans_list
      description: |-
        List / Create view.

            Utilizes the List serializer for GET - only includees required fields
            for clients consuming the list.

            Utilizes the Detail serializer for POST - accepts and returns
            all Plan details.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    post:
      operationId: v1_plans_create
      description: |-
        List / Create view.

            Utilizes the List serializer for GET - only includees required fields
            for clients consuming the list.

            Utilizes the Detail serializer for POST - accepts and returns
            all Plan details.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    parameters: []
  /v1/plans/image-upload/:
    post:
      operationId: v1_plans_image-upload_create
      description: |-
        Used for generating a signed URL for uploading plan images / source pdfs

            Only accepts POST requests.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    parameters: []
  /v1/plans/migrate/{oaplan_id}/:
    post:
      operationId: v1_plans_migrate_create
      description: Performs the migration.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: oaplan_id
      in: path
      required: true
      type: string
  /v1/plans/via_sensor/{serial_number}/:
    get:
      operationId: v1_plans_via_sensor_read
      description: Plan Detail View, via sensor serial querying
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    put:
      operationId: v1_plans_via_sensor_update
      description: Plan Detail View, via sensor serial querying
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_via_sensor_partial_update
      description: Plan Detail View, via sensor serial querying
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_via_sensor_delete
      description: Plan Detail View, via sensor serial querying
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v1/plans/{plan_id}/:
    get:
      operationId: v1_plans_read
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    put:
      operationId: v1_plans_update
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_partial_update
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_delete
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/plans/{plan_id}/check/access:
    get:
      operationId: v1_plans_check_access_read
      description: Plan Detail Access check. Checks if the user has core read/write
        perms
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/plans/{plan_id}/photo-groups/:
    get:
      operationId: v1_plans_photo-groups_list
      description: PlanPhotoGroupListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    post:
      operationId: v1_plans_photo-groups_create
      description: PlanPhotoGroupListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/plans/{plan_id}/photo-groups/upload/:
    post:
      operationId: v1_plans_photo-groups_upload_create
      description: PlanPhotoGroupUploadView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/plans/{plan_id}/photo-groups/{photogroup_id}/:
    get:
      operationId: v1_plans_photo-groups_read
      description: PlanPhotoGroupDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    put:
      operationId: v1_plans_photo-groups_update
      description: PlanPhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_photo-groups_partial_update
      description: PlanPhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_photo-groups_delete
      description: PlanPhotoGroupDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
  /v1/plans/{plan_id}/photo-groups/{photogroup_id}/photos/{photo_id}/:
    put:
      operationId: v1_plans_photo-groups_photos_update
      description: PlanPhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhoto'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_photo-groups_photos_partial_update
      description: PlanPhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhoto'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_photo-groups_photos_delete
      description: PlanPhotoUpdateDeleteView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
    - name: photo_id
      in: path
      required: true
      type: string
  /v1/redirects/:
    post:
      operationId: v1_redirects_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Redirects
    parameters: []
  /v1/redirects/{code}/:
    get:
      operationId: v1_redirects_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Redirects
    parameters:
    - name: code
      in: path
      required: true
      type: string
  /v1/sensors/:
    get:
      operationId: v1_sensors_list
      description: SensorListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters: []
  /v1/sensors/me/:
    get:
      operationId: v1_sensors_me_list
      description: View a sensor's info
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/sensors/{sensor_id}/:
    get:
      operationId: v1_sensors_read
      description: SensorDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: sensor_id
      in: path
      required: true
      type: string
  /v1/spaces/:
    get:
      operationId: v1_spaces_list
      description: SpaceListView operations.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v1_spaces_create
      description: SpaceListView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v1/spaces/{space_id}/:
    get:
      operationId: v1_spaces_read
      description: SpaceDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    put:
      operationId: v1_spaces_update
      description: SpaceDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v1_spaces_partial_update
      description: SpaceDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    delete:
      operationId: v1_spaces_delete
      description: SpaceDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v1/tokens/:
    get:
      operationId: v1_tokens_list
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    post:
      operationId: v1_tokens_create
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_tokens_update
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v1_tokens_delete
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/tokens/check/:
    get:
      operationId: v1_tokens_check_list
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_tokens_check_update
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/tokens/exchange/auth0/:
    post:
      operationId: v1_tokens_exchange_auth0_create
      description: Exchanges an Auth0 JWT for an session token for an existing user
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/tokens/recache/:
    get:
      operationId: v1_tokens_recache_list
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_tokens_recache_update
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/tokens/sensor/{sensor_id}/:
    delete:
      operationId: v1_tokens_sensor_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: sensor_id
      in: path
      required: true
      type: string
  /v1/users/:
    get:
      operationId: v1_users_list
      description: List users
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/invite/:
    post:
      operationId: v1_users_invite_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/invite/resend/{user_id}/:
    put:
      operationId: v1_users_invite_resend_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: user_id
      in: path
      required: true
      type: string
  /v1/users/me/:
    get:
      operationId: v1_users_me_list
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_users_me_update
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v1_users_me_delete
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/me/devices/:
    post:
      operationId: v1_users_me_devices_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/GCMDevice'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/GCMDevice'
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/me/password/:
    post:
      operationId: v1_users_me_password_create
      description: Change a user's password
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/password/forgot/:
    put:
      operationId: v1_users_password_forgot_update
      summary: /v1/users/password/forgot/
      description: |-
        Initiates the password reset process by sending an email if the user email exists.
        Catches any errors if the user exist. We always want to return 200s for
        security.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/password/reset/:
    put:
      operationId: v1_users_password_reset_update
      summary: /v1/users/password/reset
      description: Assuming a valid password reset token, assigns the new password
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/register/:
    put:
      operationId: v1_users_register_update
      description: Register a user (accept invite)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/sso/:
    post:
      operationId: v1_users_sso_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v1/users/{email}/:
    get:
      operationId: v1_users_read
      description: Get users by their email address.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: email
      in: path
      required: true
      type: string
  /v1/users/{user_id}/:
    get:
      operationId: v1_users_read
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_users_update
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v1_users_delete
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: user_id
      in: path
      required: true
      type: string
  /v1/users/{user_id}/password/:
    post:
      operationId: v1_users_password_create
      description: Change a user's password
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: user_id
      in: path
      required: true
      type: string
  /v1/webhooks/:
    get:
      operationId: v1_webhooks_list
      description: WebhookListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v1_webhooks_create
      description: WebhookListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v1/webhooks/{webhook_id}/:
    get:
      operationId: v1_webhooks_read
      description: WebhookDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v1_webhooks_update
      description: WebhookDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v1_webhooks_partial_update
      description: WebhookDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v1_webhooks_delete
      description: WebhookDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: webhook_id
      in: path
      required: true
      type: string
  /v1/{org_id}/displays/:
    get:
      operationId: v1_displays_list
      description: DisplayListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_displays_create
      description: DisplayListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/displays/{display_id}/:
    get:
      operationId: v1_displays_read
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    put:
      operationId: v1_displays_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_displays_partial_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_displays_delete
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: display_id
      in: path
      required: true
      type: string
  /v1/{org_id}/displays/{display_id}/refresh:
    post:
      operationId: v1_displays_refresh_create
      description: |-
        View used to refresh a display, proxying a message to the
            websocket redis queue.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: display_id
      in: path
      required: true
      type: string
  /v1/{org_id}/doorways/:
    get:
      operationId: v1_doorways_list
      description: DoorwayListView operations.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_doorways_create
      description: DoorwayListView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/doorways/{doorway_id}/:
    get:
      operationId: v1_doorways_read
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwayDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    put:
      operationId: v1_doorways_update
      description: DoorwayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_doorways_partial_update
      description: DoorwayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_doorways_delete
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
  /v1/{org_id}/links/:
    get:
      operationId: v1_links_list
      description: LinkListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_links_create
      description: LinkListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/links/{link_id}/:
    get:
      operationId: v1_links_read
      description: LinkDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_links_delete
      description: LinkDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Links - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: link_id
      in: path
      required: true
      type: string
  /v1/{org_id}/notifications/:
    get:
      operationId: v1_notifications_list
      description: NotificationListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalNotificationSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_notifications_create
      description: NotificationListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/notifications/{notification_id}/:
    put:
      operationId: v1_notifications_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_notifications_partial_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_notifications_delete
      description: NotificationDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: notification_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/:
    get:
      operationId: v1_plans_list
      description: |-
        List / Create view.

            Utilizes the List serializer for GET - only includees required fields
            for clients consuming the list.

            Utilizes the Detail serializer for POST - accepts and returns
            all Plan details.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_plans_create
      description: |-
        List / Create view.

            Utilizes the List serializer for GET - only includees required fields
            for clients consuming the list.

            Utilizes the Detail serializer for POST - accepts and returns
            all Plan details.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/image-upload/:
    post:
      operationId: v1_plans_image-upload_create
      description: |-
        Used for generating a signed URL for uploading plan images / source pdfs

            Only accepts POST requests.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/migrate/{oaplan_id}/:
    post:
      operationId: v1_plans_migrate_create
      description: Performs the migration.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: oaplan_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/via_sensor/{serial_number}/:
    get:
      operationId: v1_plans_via_sensor_read
      description: Plan Detail View, via sensor serial querying
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    put:
      operationId: v1_plans_via_sensor_update
      description: Plan Detail View, via sensor serial querying
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_via_sensor_partial_update
      description: Plan Detail View, via sensor serial querying
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_via_sensor_delete
      description: Plan Detail View, via sensor serial querying
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/{plan_id}/:
    get:
      operationId: v1_plans_read
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    put:
      operationId: v1_plans_update
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_partial_update
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_delete
      description: |-
        Retrieve / Update / Destroy view.

            Only PATCH is allowed for updating to avoid undesired deletion
            of nested relationships, due to the nested JSON API structure.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/{plan_id}/check/access:
    get:
      operationId: v1_plans_check_access_read
      description: Plan Detail Access check. Checks if the user has core read/write
        perms
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/{plan_id}/photo-groups/:
    get:
      operationId: v1_plans_photo-groups_list
      description: PlanPhotoGroupListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_plans_photo-groups_create
      description: PlanPhotoGroupListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/{plan_id}/photo-groups/upload/:
    post:
      operationId: v1_plans_photo-groups_upload_create
      description: PlanPhotoGroupUploadView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/{plan_id}/photo-groups/{photogroup_id}/:
    get:
      operationId: v1_plans_photo-groups_read
      description: PlanPhotoGroupDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    put:
      operationId: v1_plans_photo-groups_update
      description: PlanPhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_photo-groups_partial_update
      description: PlanPhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_photo-groups_delete
      description: PlanPhotoGroupDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
  /v1/{org_id}/plans/{plan_id}/photo-groups/{photogroup_id}/photos/{photo_id}/:
    put:
      operationId: v1_plans_photo-groups_photos_update
      description: PlanPhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhoto'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_plans_photo-groups_photos_partial_update
      description: PlanPhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanPhoto'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_plans_photo-groups_photos_delete
      description: PlanPhotoUpdateDeleteView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Plans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
    - name: photo_id
      in: path
      required: true
      type: string
  /v1/{org_id}/sensors/:
    get:
      operationId: v1_sensors_list
      description: SensorListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/sensors/{sensor_id}/:
    get:
      operationId: v1_sensors_read
      description: SensorDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: sensor_id
      in: path
      required: true
      type: string
  /v1/{org_id}/spaces/:
    get:
      operationId: v1_spaces_list
      description: SpaceListView operations.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_spaces_create
      description: SpaceListView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/spaces/{space_id}/:
    get:
      operationId: v1_spaces_read
      description: SpaceDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    put:
      operationId: v1_spaces_update
      description: SpaceDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_spaces_partial_update
      description: SpaceDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_spaces_delete
      description: SpaceDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v1/{org_id}/webhooks/:
    get:
      operationId: v1_webhooks_list
      description: WebhookListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v1_webhooks_create
      description: WebhookListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV1'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v1/{org_id}/webhooks/{webhook_id}/:
    get:
      operationId: v1_webhooks_read
      description: WebhookDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    put:
      operationId: v1_webhooks_update
      description: WebhookDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v1_webhooks_partial_update
      description: WebhookDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV1'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v1_webhooks_delete
      description: WebhookDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: webhook_id
      in: path
      required: true
      type: string
  /v1/{organization_id}/machine_user/:
    get:
      operationId: v1_machine_user_list
      description: List machine users
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    post:
      operationId: v1_machine_user_create
      description: List machine users
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v1/{organization_id}/machine_user/client_id/{client_id}/rotate/:
    patch:
      operationId: v1_machine_user_client_id_rotate_partial_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
    - name: client_id
      in: path
      required: true
      type: string
  /v1/{organization_id}/machine_user/id/{machine_user_id}/:
    get:
      operationId: v1_machine_user_id_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v1_machine_user_id_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v1_machine_user_id_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
    - name: machine_user_id
      in: path
      required: true
      type: string
  /v1/{organization_id}/users/invite/:
    post:
      operationId: v1_users_invite_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v1/{organization_id}/users/invite/resend/{user_id}/:
    put:
      operationId: v1_users_invite_resend_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
    - name: user_id
      in: path
      required: true
      type: string
  /v2/app/login/:
    get:
      operationId: v2_app_login_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/app/login/callback/:
    get:
      operationId: v2_app_login_callback_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/assigned_teams/:
    get:
      operationId: v2_assigned_teams_list
      description: Standard view for listing assigned teams for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalAssignedTeamListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Assigned Teams
      security:
      - Bearer: []
    patch:
      operationId: v2_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AssignedTeamList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAssignedTeamListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Assigned Teams
      security:
      - Bearer: []
    parameters: []
  /v2/assigned_teams/{assigned_team_id}/:
    get:
      operationId: v2_assigned_teams_read
      description: Standard view for viewing details for a team assignment
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalAssignedTeamDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Assigned Teams
      security:
      - Bearer: []
    patch:
      operationId: v2_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AssignedTeamDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAssignedTeamDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Assigned Teams
      security:
      - Bearer: []
    parameters:
    - name: assigned_team_id
      in: path
      required: true
      type: string
  /v2/capture_schedules/:
    post:
      operationId: v2_capture_schedules_create
      description: |-
        CaptureScheduleCreateView allows capture schedules
            to be created for a number of installations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links
      security:
      - Bearer: []
    patch:
      operationId: v2_capture_schedules_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links
      security:
      - Bearer: []
    parameters: []
  /v2/commands/{command_id}/status/:
    get:
      operationId: v2_commands_status_read
      description: Only PATCH is allowed at this endpoint
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_commands_status_update
      description: Only PATCH is allowed at this endpoint
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_commands_status_partial_update
      description: Update command with a return_status
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    delete:
      operationId: v2_commands_status_delete
      description: Only PATCH is allowed at this endpoint
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: command_id
      in: path
      required: true
      type: string
  /v2/displays/:
    get:
      operationId: v2_displays_list
      description: DisplayListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays
      security:
      - Bearer: []
    post:
      operationId: v2_displays_create
      description: DisplayListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    parameters: []
  /v2/displays/{display_id}/:
    get:
      operationId: v2_displays_read
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays
      security:
      - Bearer: []
    put:
      operationId: v2_displays_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    patch:
      operationId: v2_displays_partial_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    delete:
      operationId: v2_displays_delete
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Displays
      security:
      - Bearer: []
    parameters:
    - name: display_id
      in: path
      required: true
      type: string
  /v2/displays/{display_id}/checkin/:
    get:
      operationId: v2_displays_checkin_list
      description: DisplayCheckinView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDisplayCheckinSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays
      security:
      - Bearer: []
    post:
      operationId: v2_displays_checkin_create
      description: Create a new heartbeat for this {display, visitor}
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayCheckin'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplayCheckinSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    parameters:
    - name: display_id
      in: path
      required: true
      type: string
  /v2/displays/{display_id}/refresh:
    post:
      operationId: v2_displays_refresh_create
      description: |-
        View used to refresh a display, proxying a message to the
            websocket redis queue.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays
      security:
      - Bearer: []
    parameters:
    - name: display_id
      in: path
      required: true
      type: string
  /v2/doorways/:
    get:
      operationId: v2_doorways_list
      description: DoorwayListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    post:
      operationId: v2_doorways_create
      description: DoorwayListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    parameters: []
  /v2/doorways/{doorway_id}/:
    get:
      operationId: v2_doorways_read
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    put:
      operationId: v2_doorways_update
      description: DoorwayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    delete:
      operationId: v2_doorways_delete
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    parameters:
    - name: doorway_id
      in: path
      required: true
      type: string
  /v2/doorways/{doorway_id}/images/{doorway_image_side}/:
    put:
      operationId: v2_doorways_images_update
      description: Upload an image file for a doorway
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      consumes: []
      tags:
      - Doorways
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_images_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      consumes: []
      tags:
      - Doorways
      security:
      - Bearer: []
    parameters:
    - name: doorway_id
      in: path
      required: true
      type: string
    - name: doorway_image_side
      in: path
      required: true
      type: string
  /v2/doorways/{doorway_id}/installation/:
    get:
      operationId: v2_doorways_installation_read
      description: Return a Doorway's associated Installation ID
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwayInstallationSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    put:
      operationId: v2_doorways_installation_update
      description: Assign an Installation to a Doorway (and clear it from other Doorways)
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayInstallation'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayInstallationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_installation_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayInstallation'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayInstallationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways
      security:
      - Bearer: []
    parameters:
    - name: doorway_id
      in: path
      required: true
      type: string
  /v2/floorplans/:
    get:
      operationId: v2_floorplans_list
      description: FloorPlanListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalFloorPlanListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_create
      description: FloorPlanListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCreate'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalFloorPlanCreateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters: []
  /v2/floorplans/image-upload/:
    post:
      operationId: v2_floorplans_image-upload_create
      description: |-
        Used for generating a signed URL for uploading plan images, source pdfs,
            and rasters.

            Only accepts POST requests.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters: []
  /v2/floorplans/{plan_id}/:
    get:
      operationId: v2_floorplans_read
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_update
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_partial_update
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_delete
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/areas-of-coverage/:
    get:
      operationId: v2_floorplans_areas-of-coverage_list
      description: AreaOfCoverageListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalAreaOfCoverageSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_areas-of-coverage_create
      description: AreaOfCoverageListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaOfCoverage'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/areas-of-coverage/{area_of_coverage_id}:
    get:
      operationId: v2_floorplans_areas-of-coverage_read
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_areas-of-coverage_update
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaOfCoverage'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_areas-of-coverage_partial_update
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaOfCoverage'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_areas-of-coverage_delete
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: area_of_coverage_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/areas/:
    get:
      operationId: v2_floorplans_areas_list
      description: AreaListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalAreaSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_areas_create
      description: AreaListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/areas/{area_id}:
    get:
      operationId: v2_floorplans_areas_read
      description: AreaRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_areas_update
      description: AreaRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_areas_partial_update
      description: AreaRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_areas_delete
      description: AreaRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: area_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/bulk-update/:
    put:
      operationId: v2_floorplans_bulk-update_update
      description: BulkUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanBulkUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanBulkUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_bulk-update_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanBulkUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanBulkUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/calculate-fov/:
    put:
      operationId: v2_floorplans_calculate-fov_update
      description: |-
        Given a plan id:
                1. Fetch the PlanSensors and WallSegments in that Plan
                2. Publish the PlanSensor to the sensor_fov service
                3. Validate the output, AKA clipped FOV polygon
                4. Save the new clipped FOV to PlanSensoe
                5. Publish a websocket message
                6. Make sure the

            Raises exections if Plan or PlanSensors do not exist, or if
            the resulting clipped FOV is invalid (as per shapely). Note that
            it's business as usual if there are no wall segments in this plan.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/ceiling-raster-position/:
    put:
      operationId: v2_floorplans_ceiling-raster-position_update
      description: CeilingRasterPositionUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterPositionUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterPositionUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_ceiling-raster-position_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterPositionUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterPositionUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/ceiling-raster/:
    put:
      operationId: v2_floorplans_ceiling-raster_update
      description: CeilingRasterUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_ceiling-raster_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/doorways/:
    get:
      operationId: v2_floorplans_doorways_list
      description: DoorwayListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_doorways_create
      description: DoorwayListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerPlanV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/doorways/{doorway_id}/:
    get:
      operationId: v2_floorplans_doorways_read
      description: DoorwayDetailUpdateDeleteView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_doorways_update
      description: DoorwayDetailUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerPlanV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_doorways_partial_update
      description: DoorwayDetailUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerPlanV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_doorways_delete
      description: DoorwayDetailUpdateDeleteView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/dxfs/:
    get:
      operationId: v2_floorplans_dxfs_list
      description: PlanDXFListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanDXFSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/dxfs/process/:
    post:
      operationId: v2_floorplans_dxfs_process_create
      description: PlanDXFProcessView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXFUpload'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanDXFUploadSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/dxfs/{dxf_id}/:
    get:
      operationId: v2_floorplans_dxfs_read
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDXFSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_dxfs_update
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXF'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_dxfs_partial_update
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXF'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_dxfs_delete
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: dxf_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/dxfs/{dxf_id}/reprocess/:
    put:
      operationId: v2_floorplans_dxfs_reprocess_update
      description: PlanDXFReprocessView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXFReprocess'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFReprocessSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_dxfs_reprocess_partial_update
      description: PlanDXFReprocessView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXFReprocess'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFReprocessSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: dxf_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/events/{object_id}/:
    get:
      operationId: v2_floorplans_events_list
      description: PlanEventListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanEventSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_events_create
      description: PlanEventListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanEvent'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanEventSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: object_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/exports/:
    get:
      operationId: v2_floorplans_exports_list
      description: PlanExportListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanExportSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_exports_create
      description: PlanExportListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanExport'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/exports/{export_id}/:
    get:
      operationId: v2_floorplans_exports_read
      description: PlanExportRetrieveUpdateView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_exports_update
      description: PlanExportRetrieveUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanExport'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_exports_partial_update
      description: PlanExportRetrieveUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanExport'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: export_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/image/:
    put:
      operationId: v2_floorplans_image_update
      description: ImageUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanImageUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanImageUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_image_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanImageUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanImageUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/photo-groups/:
    get:
      operationId: v2_floorplans_photo-groups_list
      description: PhotoGroupListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_photo-groups_create
      description: PhotoGroupListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PhotoGroupSerialzer'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/photo-groups/upload/:
    post:
      operationId: v2_floorplans_photo-groups_upload_create
      description: PhotoGroupUploadView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/photo-groups/{photogroup_id}/:
    get:
      operationId: v2_floorplans_photo-groups_read
      description: PhotoGroupDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_photo-groups_update
      description: PhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_photo-groups_partial_update
      description: PhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_photo-groups_delete
      description: PhotoGroupDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/photo-groups/{photogroup_id}/photos/{photo_id}/:
    put:
      operationId: v2_floorplans_photo-groups_photos_update
      description: PhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Photo'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_photo-groups_photos_partial_update
      description: PhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Photo'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_photo-groups_photos_delete
      description: PhotoUpdateDeleteView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
    - name: photo_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/reference-heights/:
    get:
      operationId: v2_floorplans_reference-heights_list
      description: ReferenceHeightListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalReferenceHeightSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_reference-heights_create
      description: ReferenceHeightListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceHeightSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/reference-heights/{reference_height_id}/:
    get:
      operationId: v2_floorplans_reference-heights_read
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_reference-heights_update
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceHeightSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_reference-heights_partial_update
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceHeightSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_reference-heights_delete
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: reference_height_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/reference-rulers/:
    get:
      operationId: v2_floorplans_reference-rulers_list
      description: ReferenceRulerListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalReferenceRulerSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_reference-rulers_create
      description: ReferenceRulerListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceRulerSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/reference-rulers/{reference_ruler_id}/:
    get:
      operationId: v2_floorplans_reference-rulers_read
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_reference-rulers_update
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceRulerSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_reference-rulers_partial_update
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceRulerSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_reference-rulers_delete
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: reference_ruler_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/scale/:
    put:
      operationId: v2_floorplans_scale_update
      description: ScaleUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanScaleUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanScaleUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_scale_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanScaleUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanScaleUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/sensors/:
    get:
      operationId: v2_floorplans_sensors_list
      description: List / Create view.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_sensors_create
      description: List / Create view.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/sensors/{sensor_id}/:
    get:
      operationId: v2_floorplans_sensors_read
      description: SensorRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_sensors_update
      description: SensorRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_sensors_partial_update
      description: SensorRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_sensors_delete
      description: SensorRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: sensor_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/sensors/{sensor_id}/calculate-fov/:
    put:
      operationId: v2_floorplans_sensors_calculate-fov_update
      description: |-
        Given a plan sensor id:
                1. Fetch the PlanSensor and WallSegments in that Plan
                2. Generate the clipped FOV using sensors_fov package
                3. Validate the output, AKA clipped FOV polygon
                4. Save the new clipped FOV to PlanSensor
                5. Publish a websocket message
                6. Make sure the

            Raises exections if Plan or PlanSensors do not exist, or if
            the resulting clipped FOV is invalid (as per shapely). Note that
            it's business as usual if there are no wall segments in this plan.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_sensors_calculate-fov_delete
      description: Delete the clipped FOV, aka set the defaults.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: sensor_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/serialnumbers/csv/:
    post:
      operationId: v2_floorplans_serialnumbers_csv_create
      description: |-
        Parse a CSV into a JSON format with serial number to cad id mappings

                Args:
                    request: the HTTP request
                    format: default to CSV

                Returns:
                    either a 400 or 201 depending on whether a file was included and
                    located in the request.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/spaces/:
    get:
      operationId: v2_floorplans_spaces_list
      description: SpaceListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_spaces_create
      description: SpaceListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerPlansV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/spaces/bulk-presence-debounce/:
    post:
      operationId: v2_floorplans_spaces_bulk-presence-debounce_create
      description: |-
        POST: apply the same presence debounce settings to all spaces under the plan's floor
            in a single database transaction.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BulkSpacePresenceDebounce'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBulkSpacePresenceDebounceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/spaces/{space_id}:
    get:
      operationId: v2_floorplans_spaces_read
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_spaces_update
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerPlansV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_spaces_partial_update
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerPlansV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_spaces_delete
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/thresholds/calculate/:
    post:
      operationId: v2_floorplans_thresholds_calculate_create
      description: |-
        Validate the arguments and hand off to 'open_entry_auto_calibration' library
            maintained by Algorithm folks to calculate the trigger region.

            See TriggerRegionSerializer for more detailed information; at a glance, though:

                This endpoint required a single argument to run: 'doorway_id'.
                If 'doorway_id' is provided, the tied PlanSensors are automatically looked up,
                and so are WallSegments on this Plan.

            If "push_to_doorway": True is provided, this calculated trigger region will automatically be
            saved to api.Doorway.trigger_region AND pushed to the sensor's config if a sensor is attached to
            the plan sensor.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TriggerRegion'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalTriggerRegionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/waffle-sensors/:
    get:
      operationId: v2_floorplans_waffle-sensors_list
      description: List view for Waffle sensors
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWafflePlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/waffle-sensors/{serial_number}/:
    get:
      operationId: v2_floorplans_waffle-sensors_read
      description: WaffleSensorRetrieveView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWafflePlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/wall-segments/:
    get:
      operationId: v2_floorplans_wall-segments_list
      description: WallSegmentListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWallSegmentSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_wall-segments_create
      description: WallSegmentListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WallSegment'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/floorplans/{plan_id}/wall-segments/{wall_segment_id}/:
    get:
      operationId: v2_floorplans_wall-segments_read
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_wall-segments_update
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WallSegment'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_wall-segments_partial_update
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WallSegment'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_wall-segments_delete
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans
      security:
      - Bearer: []
    parameters:
    - name: plan_id
      in: path
      required: true
      type: string
    - name: wall_segment_id
      in: path
      required: true
      type: string
  /v2/integrations/access_points/:
    get:
      operationId: v2_integrations_access_points_list
      description: AccessPointListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalAccessPointSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    post:
      operationId: v2_integrations_access_points_create
      description: AccessPointListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AccessPoint'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalAccessPointSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters: []
  /v2/integrations/access_points/{access_point_id}/:
    get:
      operationId: v2_integrations_access_points_read
      description: AccessPointDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalAccessPointSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    delete:
      operationId: v2_integrations_access_points_delete
      description: AccessPointDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters:
    - name: access_point_id
      in: path
      required: true
      type: string
  /v2/integrations/brivo/:
    get:
      operationId: v2_integrations_brivo_list
      summary: Setup new Brivo integration.
      description: Returns the URL that the front-end should redirect to.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/brivo/callback/:
    get:
      operationId: v2_integrations_brivo_callback_list
      description: |-
        Receives the authorization code back from Brivo, trades it for an access token, authorizes the service,
        # and creates a Brivo event_subscription (webhook)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/brivo/events/{token}/:
    post:
      operationId: v2_integrations_brivo_events_create
      description: |-
        This endpoint receives events from the Brivo access control integration.
        After an event subscription is setup, the webhook will send a message
        to this endpoint with the badge data (who/when/etc).
        We need to proxy this down to the DPU via IoT so that the DPU
        can run the tailgating algorithm.
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Integrations
    parameters:
    - name: token
      in: path
      required: true
      type: string
  /v2/integrations/brivo/sites/:
    get:
      operationId: v2_integrations_brivo_sites_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/brivo/sites/{site_id}/access_points/:
    get:
      operationId: v2_integrations_brivo_sites_access_points_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters:
    - name: site_id
      in: path
      required: true
      type: string
  /v2/integrations/brivo/sites/{site_id}/event_subscription/:
    post:
      operationId: v2_integrations_brivo_sites_event_subscription_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Integrations
    parameters:
    - name: site_id
      in: path
      required: true
      type: string
  /v2/integrations/brivo/sites/{site_id}/event_subscription/{event_subscription_id}/:
    delete:
      operationId: v2_integrations_brivo_sites_event_subscription_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Integrations
    parameters:
    - name: site_id
      in: path
      required: true
      type: string
    - name: event_subscription_id
      in: path
      required: true
      type: string
  /v2/integrations/doorway_mappings/:
    get:
      operationId: v2_integrations_doorway_mappings_list
      description: DoorwayMappingListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDoorwayMappingSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    post:
      operationId: v2_integrations_doorway_mappings_create
      description: DoorwayMappingListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayMapping'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDoorwayMappingSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters: []
  /v2/integrations/doorway_mappings/{doorway_mapping_id}/:
    get:
      operationId: v2_integrations_doorway_mappings_read
      description: DoorwayMappingDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwayMappingSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    put:
      operationId: v2_integrations_doorway_mappings_update
      description: DoorwayMappingDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayMapping'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayMappingSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    patch:
      operationId: v2_integrations_doorway_mappings_partial_update
      description: DoorwayMappingDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayMapping'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayMappingSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    delete:
      operationId: v2_integrations_doorway_mappings_delete
      description: DoorwayMappingDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters:
    - name: doorway_mapping_id
      in: path
      required: true
      type: string
  /v2/integrations/entrata/callback/:
    get:
      operationId: v2_integrations_entrata_callback_list
      summary: Entrata Callback stores the Entrata user token as an Integration.
      description: Redirects back to the Dashboard.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/facebook/:
    get:
      operationId: v2_integrations_facebook_list
      description: |-
        Handle Facebook Workplace Endpoint Verification.
                Docs - https://developers.facebook.com/docs/messenger-platform/getting-started/webhook-setup
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    post:
      operationId: v2_integrations_facebook_create
      description: Webhook endpoint for Facebook Workplace. All messages / notifications
        from FBW come to this endpoint.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters: []
  /v2/integrations/google_calendar/:
    get:
      operationId: v2_integrations_google_calendar_list
      summary: Setup new Google Calendar Integration.
      description: Returns the URL that the front-end should redirect to.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/google_calendar/callback:
    get:
      operationId: v2_integrations_google_calendar_callback_list
      description: |-
        Google Calendar Callback stores the google user credentials as an Integration.
        Redirects back to the Dashboard.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/outlook/:
    get:
      operationId: v2_integrations_outlook_list
      summary: Setup new Outlook integration.
      description: Returns the URL that the front-end should redirect to.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/outlook/callback:
    get:
      operationId: v2_integrations_outlook_callback_list
      summary: Outlook stores the user credentials.
      description: Redirects back to the Dashboard.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/robin/:
    post:
      operationId: v2_integrations_robin_create
      description: |-
        Setup new Robin Integration.
        Requires Robin API token and Organization ID
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/robin/locations/:
    get:
      operationId: v2_integrations_robin_locations_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/room_booking/{space_id}/calendar_events/:
    get:
      operationId: v2_integrations_room_booking_calendar_events_list
      description: Fetches the calendar events + counts for a specific space, based
        on the org-default room-booking service
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/integrations/service_authorizations/{service_authorization_id}/:
    get:
      operationId: v2_integrations_service_authorizations_read
      description: ServiceAuthorizationDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalServiceAuthorizationSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    put:
      operationId: v2_integrations_service_authorizations_update
      description: ServiceAuthorizationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ServiceAuthorization'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalServiceAuthorizationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    patch:
      operationId: v2_integrations_service_authorizations_partial_update
      description: ServiceAuthorizationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ServiceAuthorization'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalServiceAuthorizationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    delete:
      operationId: v2_integrations_service_authorizations_delete
      description: ServiceAuthorizationDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters:
    - name: service_authorization_id
      in: path
      required: true
      type: string
  /v2/integrations/service_authorizations/{service_authorization_id}/request_sync/:
    post:
      operationId: v2_integrations_service_authorizations_request_sync_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Integrations
    parameters:
    - name: service_authorization_id
      in: path
      required: true
      type: string
  /v2/integrations/services/:
    get:
      operationId: v2_integrations_services_list
      description: Returns a list of services as well as service authorizations
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/slack/:
    post:
      operationId: v2_integrations_slack_create
      description: |-
        Slack requires apps to verify ownership of URL endpoints.
                Docs - https://api.slack.com/events/url_verification
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters: []
  /v2/integrations/slack/auth/:
    get:
      operationId: v2_integrations_slack_auth_list
      description: SlackNotificationAuthView operations.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters: []
  /v2/integrations/slack/redirect/:
    get:
      operationId: v2_integrations_slack_redirect_list
      description: SlackOauthFlowRedirect operations.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters: []
  /v2/integrations/space_mappings/:
    get:
      operationId: v2_integrations_space_mappings_list
      description: SpaceMappingListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceMappingSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    post:
      operationId: v2_integrations_space_mappings_create
      description: SpaceMappingListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceMapping'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceMappingSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters: []
  /v2/integrations/space_mappings/{space_mapping_id}/:
    get:
      operationId: v2_integrations_space_mappings_read
      description: SpaceMappingDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceMappingSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    put:
      operationId: v2_integrations_space_mappings_update
      description: SpaceMappingDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceMapping'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceMappingSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    patch:
      operationId: v2_integrations_space_mappings_partial_update
      description: SpaceMappingDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceMapping'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceMappingSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Integrations
      security:
      - Bearer: []
    delete:
      operationId: v2_integrations_space_mappings_delete
      description: SpaceMappingDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Integrations
      security:
      - Bearer: []
    parameters:
    - name: space_mapping_id
      in: path
      required: true
      type: string
  /v2/integrations/teem/:
    get:
      operationId: v2_integrations_teem_list
      summary: Setup new Teem integration.
      description: Returns the URL that the front-end should redirect to.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/teem/callback/:
    get:
      operationId: v2_integrations_teem_callback_list
      description: Receives the authorization code back from Teem, trades it for an
        access token, and authorizes the service.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters: []
  /v2/integrations/{service_name}/spaces/:
    get:
      operationId: v2_integrations_spaces_list
      description: Lists all spaces for a service integration
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Integrations
    parameters:
    - name: service_name
      in: path
      required: true
      type: string
  /v2/labels/:
    get:
      operationId: v2_labels_list
      description: Standard view for listing labels for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLabelListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_labels_create
      description: Standard view for listing labels for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/labels/groups/:
    get:
      operationId: v2_labels_groups_list
      description: Standard view for listing labels for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLabelGroupListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_labels_groups_create
      description: Standard view for listing labels for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLabelGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/labels/groups/{label_group_id}/:
    get:
      operationId: v2_labels_groups_read
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLabelGroupDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v2_labels_groups_update
      description: Standard view for viewing details for a label, relies on the serializer
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v2_labels_groups_delete
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: label_group_id
      in: path
      required: true
      type: string
  /v2/labels/{label_id}/:
    get:
      operationId: v2_labels_read
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLabelDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v2_labels_update
      description: Standard view for viewing details for a label, relies on the serializer
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_partial_update
      description: Standard view for viewing details for a label, relies on the serializer
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v2_labels_delete
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: label_id
      in: path
      required: true
      type: string
  /v2/links/:
    get:
      operationId: v2_links_list
      description: LinkListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links
      security:
      - Bearer: []
    post:
      operationId: v2_links_create
      description: LinkListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links
      security:
      - Bearer: []
    patch:
      operationId: v2_links_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links
      security:
      - Bearer: []
    parameters: []
  /v2/links/{link_id}/:
    get:
      operationId: v2_links_read
      description: Single link between a space and doorway. Mostly used to "expire"
        a link.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links
      security:
      - Bearer: []
    patch:
      operationId: v2_links_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links
      security:
      - Bearer: []
    delete:
      operationId: v2_links_delete
      description: Single link between a space and doorway. Mostly used to "expire"
        a link.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Links
      security:
      - Bearer: []
    parameters:
    - name: link_id
      in: path
      required: true
      type: string
  /v2/links/{link_id}/set_placement/:
    post:
      operationId: v2_links_set_placement_create
      description: |-
        Modifies the sensor placement for a link, either by creating a new link
        or updating the existing one
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - v2
    parameters:
    - name: link_id
      in: path
      required: true
      type: string
  /v2/login/:
    post:
      operationId: v2_login_create
      description: POST to this view to login and create a new session token
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/logout/:
    delete:
      operationId: v2_logout_delete
      description: |-
        DELETE to this view to logout and delete all of a user's session tokens
        Tokens are deleted individually, so the pre-delete signal will fire and clean up the cache
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/machine_user/client_id/{client_id}/:
    get:
      operationId: v2_machine_user_client_id_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_machine_user_client_id_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v2_machine_user_client_id_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: client_id
      in: path
      required: true
      type: string
  /v2/machine_user/me/:
    get:
      operationId: v2_machine_user_me_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_machine_user_me_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v2_machine_user_me_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/notifications/:
    get:
      operationId: v2_notifications_list
      description: NotificationListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalNotificationSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications
      security:
      - Bearer: []
    post:
      operationId: v2_notifications_create
      description: NotificationListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications
      security:
      - Bearer: []
    parameters: []
  /v2/notifications/fromtoken/:
    get:
      operationId: v2_notifications_fromtoken_list
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Notifications
    parameters: []
  /v2/notifications/recipients/{notification_recipient_id}:
    get:
      operationId: v2_notifications_recipients_read
      description: NotificationRecipientDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalNotificationRecipientSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications
      security:
      - Bearer: []
    post:
      operationId: v2_notifications_recipients_create
      description: NotificationRecipientDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationRecipient'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalNotificationRecipientSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications
      security:
      - Bearer: []
    delete:
      operationId: v2_notifications_recipients_delete
      description: NotificationRecipientDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Notifications
      security:
      - Bearer: []
    parameters:
    - name: notification_recipient_id
      in: path
      required: true
      type: string
  /v2/notifications/subscribe/:
    post:
      operationId: v2_notifications_subscribe_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Notifications
    parameters: []
  /v2/notifications/unsubscribe/:
    post:
      operationId: v2_notifications_unsubscribe_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Notifications
    parameters: []
  /v2/notifications/unsubscribe/{contact_info}:
    get:
      operationId: v2_notifications_unsubscribe_read
      description: NotificationRecipientByContactInfoDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications
      security:
      - Bearer: []
    parameters:
    - name: contact_info
      in: path
      required: true
      type: string
  /v2/notifications/{notification_id}/:
    put:
      operationId: v2_notifications_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications
      security:
      - Bearer: []
    patch:
      operationId: v2_notifications_partial_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications
      security:
      - Bearer: []
    delete:
      operationId: v2_notifications_delete
      description: NotificationDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Notifications
      security:
      - Bearer: []
    parameters:
    - name: notification_id
      in: path
      required: true
      type: string
  /v2/oa/captures/:
    get:
      operationId: v2_oa_captures_list
      description: View to list captures for sensor or plan.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - v2
    parameters: []
  /v2/oa/plans/:
    get:
      operationId: v2_oa_plans_list
      description: View to list and create OA plans.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalOAPlanSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_oa_plans_create
      description: View to list and create OA plans.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_oa_plans_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/oa/plans/{oaplan_id}/:
    get:
      operationId: v2_oa_plans_read
      description: View to retrieve, update, or destroy OA plans.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v2_oa_plans_update
      description: View to retrieve, update, or destroy OA plans.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_oa_plans_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v2_oa_plans_delete
      description: View to retrieve, update, or destroy OA plans.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: oaplan_id
      in: path
      required: true
      type: string
  /v2/organization/create_with_user/:
    post:
      operationId: v2_organization_create_with_user_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OrganizationCreateAccount'
      responses:
        '201':
          description: Account created successfully.
      tags:
      - Organisations
    parameters: []
  /v2/organization/logo_image/:
    post:
      operationId: v2_organization_logo_image_create
      description: Sign and return a URL for uploading a
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Organisations
    delete:
      operationId: v2_organization_logo_image_delete
      description: Sign and return a URL for uploading a
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v2/organization/logo_image/{upload_id}/:
    get:
      operationId: v2_organization_logo_image_read
      description: Return the status of an upload, including media
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    parameters:
    - name: upload_id
      in: path
      required: true
      type: string
  /v2/organizations/:
    get:
      operationId: v2_organizations_list
      description: List organizations (special/staff access only)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v2/organizations/create_with_service_user/:
    post:
      operationId: v2_organizations_create_with_service_user_create
      summary: Create an organization for scoping purposes.
      description: |-
        - Creates an organization w/ disposition set to `scoping`
        - Creates a service user for impersonation use. This user is ephemeral, CS will delete
          on account materialization
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v2/organizations/me/:
    put:
      operationId: v2_organizations_me_update
      description: Update own-organization fields that "owner" type users can affect
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    parameters: []
  /v2/organizations/{organization_id}/:
    get:
      operationId: v2_organizations_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Organisations
    delete:
      operationId: v2_organizations_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Organisations
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v2/organizations/{organization_id}/disposition/:
    patch:
      operationId: v2_organizations_disposition_partial_update
      description: Set or clear an organization's disposition.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OrganizationDisposition'
      responses:
        '200':
          description: ''
          schema:
            $ref: '#/definitions/OrganizationDisposition'
      tags:
      - Organisations
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v2/payment-intents/{payment_intent_id}/sensors/:
    get:
      operationId: v2_payment-intents_sensors_list
      description: |-
        Get sensor serial numbers for a Payment Intent.

                Args:
                    payment_intent_id: Stripe Payment Intent ID

                Returns:
                    JSON response with serial numbers list
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Subscriptions
      security:
      - Bearer: []
    patch:
      operationId: v2_payment-intents_sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions
      security:
      - Bearer: []
    parameters:
    - name: payment_intent_id
      in: path
      required: true
      type: string
  /v2/project-login/:
    post:
      operationId: v2_project-login_create
      description: Login with a project short code. Returns the project and access
        token.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/project-login/{building_external_id}/code/:
    get:
      operationId: v2_project-login_code_list
      description: Retrieve a short code for a project.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_project-login_code_create
      description: Generates a short code for a project.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v2_project-login_code_update
      description: Updates/rotates the short code for a project.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_project-login_code_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: building_external_id
      in: path
      required: true
      type: string
  /v2/sensor-alert-preferences/:
    get:
      operationId: v2_sensor-alert-preferences_list
      description: |-
        GET  - List the current user's sensor alert preferences.
            POST - Create or update a sensor alert preference (upsert by alert_type).
      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: Success
          schema:
            $ref: '#/definitions/OptionalSensorAlertPreferenceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensor Alert Preferences
      security:
      - Bearer: []
    post:
      operationId: v2_sensor-alert-preferences_create
      description: |-
        GET  - List the current user's sensor alert preferences.
            POST - Create or update a sensor alert preference (upsert by alert_type).
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorAlertPreference'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSensorAlertPreferenceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensor Alert Preferences
      security:
      - Bearer: []
    parameters: []
  /v2/sensor-alert-preferences/{alert_type}/:
    get:
      operationId: v2_sensor-alert-preferences_read
      description: |-
        GET    - Retrieve a single sensor alert preference by alert_type.
            PUT    - Update a sensor alert preference by alert_type.
            DELETE - Remove a sensor alert preference by alert_type.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorAlertPreferenceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensor Alert Preferences
      security:
      - Bearer: []
    put:
      operationId: v2_sensor-alert-preferences_update
      description: |-
        GET    - Retrieve a single sensor alert preference by alert_type.
            PUT    - Update a sensor alert preference by alert_type.
            DELETE - Remove a sensor alert preference by alert_type.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorAlertPreference'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorAlertPreferenceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensor Alert Preferences
      security:
      - Bearer: []
    delete:
      operationId: v2_sensor-alert-preferences_delete
      description: |-
        GET    - Retrieve a single sensor alert preference by alert_type.
            PUT    - Update a sensor alert preference by alert_type.
            DELETE - Remove a sensor alert preference by alert_type.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensor Alert Preferences
      security:
      - Bearer: []
    parameters:
    - name: alert_type
      in: path
      required: true
      type: string
  /v2/sensors/:
    get:
      operationId: v2_sensors_list
      description: List sensors for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_create
      description: List sensors for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSensorListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters: []
  /v2/sensors/config/:
    get:
      operationId: v2_sensors_config_list
      description: Retrieve reported or assigned configs for a list of sensors.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalBatchSensorConfigSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BatchSensorConfig'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalBatchSensorConfigSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters: []
  /v2/sensors/me/:
    get:
      operationId: v2_sensors_me_list
      description: View a sensor's info
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/sensors/status_history/:
    get:
      operationId: v2_sensors_status_history_list
      description: SensorStatusHistoryListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorStatusHistorySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_status_history_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorStatusHistory'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorStatusHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters: []
  /v2/sensors/{serial_number}/:
    get:
      operationId: v2_sensors_read
      description: View a single sensor from an organization
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_update
      description: View a single sensor from an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_delete
      description: View a single sensor from an organization
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/capture_schedule/:
    get:
      operationId: v2_sensors_capture_schedule_read
      description: SensorCaptureScheduleDetailView allows sensor capture schedules
        to be read/updated
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_capture_schedule_update
      description: SensorCaptureScheduleDetailView allows sensor capture schedules
        to be read/updated
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_capture_schedule_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/capture_schedules/:
    patch:
      operationId: v2_sensors_capture_schedules_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_capture_schedules_delete
      description: Deletes all capture schedules associated with a sensor.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/capture_upload_url/:
    post:
      operationId: v2_sensors_capture_upload_url_create
      description: Generate a signed URL for this capture upload (ignore which DPU
        is making the request)
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_capture_upload_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/checkin/:
    put:
      operationId: v2_sensors_checkin_update
      description: Any PUT request coming in should update diagnostics and create
        a new heartbeat
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_checkin_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/commands/:
    get:
      operationId: v2_sensors_commands_list
      description: Any GET request coming from a sensor should create a new heartbeat
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalCommandSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_commands_create
      description: This endpoint is for listing commands for a sensor
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_commands_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/commands/{command_id}/:
    get:
      operationId: v2_sensors_commands_read
      description: This endpoint is for completing a sensor command from a sensor
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_commands_update
      description: Only PATCH is allowed at this endpoint
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_commands_partial_update
      description: Update command with a return_status
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_commands_delete
      description: DELETE method will eventually only be used by superusers
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
    - name: command_id
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/config/:
    get:
      operationId: v2_sensors_config_read
      description: Return the value of a sensor's `sensor_config`
      parameters: []
      responses:
        '200':
          description: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_config_update
      description: Replace `sensor_config` with valid JSON from the request body
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_partial_update
      description: Merge valid JSON from the request body into `sensor_config`
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/config/algo/:
    put:
      operationId: v2_sensors_config_algo_update
      description: Update `algo_config` for the corresponding DPU
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorAlgoConfig'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorAlgoConfigSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_algo_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorAlgoConfig'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorAlgoConfigSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/config/height/:
    put:
      operationId: v2_sensors_config_height_update
      description: |-
        Merge new height into existing `sensor_config` JSON or,
                if it doesn't exist yet, create a minimal JSON string
                that only includes the new height setting.

                Example JSON request body: `{"sensor_height": 2.64}`
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_height_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/debug_capture_upload_url/:
    post:
      operationId: v2_sensors_debug_capture_upload_url_create
      description: Generate a signed URL for this debug capture upload (ignore which
        DPU is making the request)
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_debug_capture_upload_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/diagnostics/:
    get:
      operationId: v2_sensors_diagnostics_read
      description: View a sensor's diagnostics
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorDiagnosticsSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_diagnostics_update
      description: Update the diagnostics for a sensor
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDiagnostics'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDiagnosticsSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_diagnostics_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDiagnostics'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDiagnosticsSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/disposition/:
    get:
      operationId: v2_sensors_disposition_list
      description: Get disposition history for given DPU
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDispositionSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_disposition_create
      description: Add new disposition row for existing DPU
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Disposition'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDispositionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/firmware_url/:
    post:
      operationId: v2_sensors_firmware_url_create
      description: This endpoint is for getting a signed S3 url for the firmware image
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_firmware_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/function/:
    get:
      operationId: v2_sensors_function_read
      description: View the assigned device function for a single sensor
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorFunctionSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_function_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorFunction'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorFunctionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/id/:
    get:
      operationId: v2_sensors_id_read
      description: Custom GET method is simplest
      parameters: []
      responses:
        '200':
          description: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_id_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/locate/:
    get:
      operationId: v2_sensors_locate_list
      description: |-
        When queried, this endpoint will cause a sensor's front LED to blink so that a user can identify
            the correct sensor is positioned in the right place.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_locate_create
      description: |-
        When queried, this endpoint will cause a sensor's front LED to blink so that a user can identify
            the correct sensor is positioned in the right place.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_locate_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/log_upload_url/:
    post:
      operationId: v2_sensors_log_upload_url_create
      description: Generate a signed URL for this log upload
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_log_upload_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/provision/:
    post:
      operationId: v2_sensors_provision_create
      description: Create sensor commands and return a new DPU token (sensor status
        is no longer updated)
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorProvision'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSensorProvisionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_provision_update
      description: 'DEPRECATED: Early versions of Unit Setup PUT to this endpoint
        instead'
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorProvision'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorProvisionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_provision_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorProvision'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorProvisionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/register/:
    post:
      operationId: v2_sensors_register_create
      description: Register a sensor to user org
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_register_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/reset/:
    post:
      operationId: v2_sensors_reset_create
      description: Reset the sensor's configuration back to 'factory defaults' and
        clear all tokens.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_reset_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/salesforce/:
    get:
      operationId: v2_sensors_salesforce_read
      description: View a saleforce opp id registered for this sensor
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorSalesforceDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_salesforce_update
      description: View a saleforce opp id registered for this sensor
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorSalesforceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorSalesforceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_salesforce_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorSalesforceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorSalesforceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_salesforce_delete
      description: View a saleforce opp id registered for this sensor
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/status_history/:
    get:
      operationId: v2_sensors_status_history_list
      description: SensorStatusHistoryDetailView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorStatusHistorySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_status_history_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorStatusHistory'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorStatusHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sensors/{serial_number}/update_os/:
    put:
      operationId: v2_sensors_update_os_update
      description: Tell the OTA server to reset a sensor to a given OS
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_update_os_partial_update
      description: |-
        Update the stored OS version for a sensor. This does not trigger an OTA update unless the specified OS exists
                in the database and the specified value differs from reported OS version.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_update_os_delete
      description: Set the stored OS version to null
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/sockets/:
    post:
      operationId: v2_sockets_create
      description: Create a websocket connection.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_sockets_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/spaces/:
    get:
      operationId: v2_spaces_list
      description: List spaces for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v2_spaces_create
      description: List spaces for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v2/spaces/functions/:
    get:
      operationId: v2_spaces_functions_list
      description: |-
        Return all spaces functions and the their program.
                Program in this context basically means a function category.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_functions_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v2/spaces/hierarchy/:
    get:
      operationId: v2_spaces_hierarchy_list
      description: Return all spaces that user has purview over AND their ancestors
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_hierarchy_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v2/spaces/programs/:
    get:
      operationId: v2_spaces_programs_list
      description: |-
        Return all spaces functions and the their program.
                Program in this context basically means a function category.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_programs_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v2/spaces/{space_id}/:
    get:
      operationId: v2_spaces_read
      description: Standard view for space details relies on the serializer
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    put:
      operationId: v2_spaces_update
      description: log some (hopefully) useful info because core started complaining
        about this endpoint
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_delete
      description: Must pass the space name in the body of a DELETE request
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/assigned_teams/:
    post:
      operationId: v2_spaces_assigned_teams_create
      description: Add a team assignment to a space
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceAssignedTeamList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceAssignedTeamListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceAssignedTeamList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceAssignedTeamListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/assigned_teams/{assigned_team_id}/:
    patch:
      operationId: v2_spaces_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_assigned_teams_delete
      description: Remove a particular team from a space
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
    - name: assigned_team_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/check/access/:
    get:
      operationId: v2_spaces_check_access_list
      summary: Check that the provided token/user has access to write to the space.
      description: |-
        In particular, this checks that:
        1. The user is either part of the organization to which the space belongs
           or has the impersonate permission.
        2. The space is within the user's space purview.
        3. The user has the core_write permission.

        Note that some of this is handled by the density_api_view decorator.

        If the user has no access, for any reason, this will return a 404.
        Otherwise, will return a 200 with a JSON body indicating level of access.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - v2
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/children/:
    get:
      operationId: v2_spaces_children_list
      description: Return a nested view of all spaces that are children of the given
        space
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_children_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/dwell/:
    get:
      operationId: v2_spaces_dwell_list
      description: Calculate dwell (loiter) time statistics for a single space.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_dwell_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/elders/:
    get:
      operationId: v2_spaces_elders_list
      description: Return a nested view of all spaces that are elders of the given
        space
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_elders_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/hierarchy/:
    get:
      operationId: v2_spaces_hierarchy_list
      description: |-
        Return all spaces that user has purview over AND their ancestors
                using the space_id provided as the root space
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_hierarchy_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/labels/:
    post:
      operationId: v2_spaces_labels_create
      description: Add a label to a space
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceLabelList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceLabelList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/labels/{label_id}/:
    patch:
      operationId: v2_spaces_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_labels_delete
      description: Must pass the label name in the body of a DELETE request
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
    - name: label_id
      in: path
      required: true
      type: string
  /v2/spaces/{space_id}/sensors/:
    get:
      operationId: v2_spaces_sensors_read
      description: Single link between a space and waffle device.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v2_spaces_sensors_create
      description: Single link between a space and waffle device.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSensor'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSensor'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_sensors_delete
      description: Single link between a space and waffle device.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/subscriptions/:
    get:
      operationId: v2_subscriptions_list
      description: ListSubscriptionView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSubscriptionSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Subscriptions
      security:
      - Bearer: []
    patch:
      operationId: v2_subscriptions_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Subscription'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSubscriptionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions
      security:
      - Bearer: []
    parameters: []
  /v2/subscriptions/billing_portal/sessions/:
    post:
      operationId: v2_subscriptions_billing_portal_sessions_create
      description: Generate a link to a customer's Stripe Billing Portal
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions
      security:
      - Bearer: []
    patch:
      operationId: v2_subscriptions_billing_portal_sessions_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions
      security:
      - Bearer: []
    parameters: []
  /v2/subscriptions/disable-sensors/:
    post:
      operationId: v2_subscriptions_disable-sensors_create
      description: SubscriptionDisableSensorsView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions
      security:
      - Bearer: []
    patch:
      operationId: v2_subscriptions_disable-sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions
      security:
      - Bearer: []
    parameters: []
  /v2/time_segment_groups/:
    get:
      operationId: v2_time_segment_groups_list
      description: Standard view for listing TimeSegmentGroups for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalTimeSegmentGroupListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_time_segment_groups_create
      description: Standard view for listing TimeSegmentGroups for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segment_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/time_segment_groups/{time_segment_group_id}/:
    get:
      operationId: v2_time_segment_groups_read
      description: Standard view for viewing details for a TimeSegmentGroup
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v2_time_segment_groups_update
      description: Standard view for viewing details for a TimeSegmentGroup
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segment_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v2_time_segment_groups_delete
      description: Standard view for viewing details for a TimeSegmentGroup
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: time_segment_group_id
      in: path
      required: true
      type: string
  /v2/time_segments/:
    get:
      operationId: v2_time_segments_list
      description: Standard view for listing all TimeSegments for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalTimeSegmentListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_time_segments_create
      description: Standard view for listing all TimeSegments for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalTimeSegmentListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segments_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/time_segments/labels/:
    get:
      operationId: v2_time_segments_labels_list
      description: Standard view for listing TimeSegment labels for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalTimeSegmentLabelListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segments_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentLabelList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/time_segments/{time_segment_id}/:
    get:
      operationId: v2_time_segments_read
      description: For viewing details for a TimeSegment
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalTimeSegmentDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v2_time_segments_update
      description: For viewing details for a TimeSegment
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segments_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v2_time_segments_delete
      description: For viewing details for a TimeSegment
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: time_segment_id
      in: path
      required: true
      type: string
  /v2/tokens/:
    get:
      operationId: v2_tokens_list
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    post:
      operationId: v2_tokens_create
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_tokens_update
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v2_tokens_delete
      description: |-
        List, create, update, or delete organization/integrations tokens.
        This endpoint is also used to create sensor tokens, but they can't be listed/modified.
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/tokens/check/:
    get:
      operationId: v2_tokens_check_list
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_tokens_check_update
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/tokens/exchange/auth0/:
    post:
      operationId: v2_tokens_exchange_auth0_create
      description: Exchanges an Auth0 JWT for an session token for an existing user
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/tokens/recache/:
    get:
      operationId: v2_tokens_recache_list
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_tokens_recache_update
      description: Token check endpoint (returns the dict `request.auth` except for
        the token key)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/tokens/sensor/{sensor_id}/:
    delete:
      operationId: v2_tokens_sensor_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: sensor_id
      in: path
      required: true
      type: string
  /v2/uploads/floor_plans/{building_id}/:
    post:
      operationId: v2_uploads_floor_plans_create
      description: Sign and return a URL for uploading a PDF w/ floor plans
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    patch:
      operationId: v2_uploads_floor_plans_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    parameters:
    - name: building_id
      in: path
      required: true
      type: string
  /v2/uploads/floor_plans/{upload_id}/complete/:
    post:
      operationId: v2_uploads_floor_plans_complete_create
      description: Create FloorPlan objects for completed PDF pages
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    patch:
      operationId: v2_uploads_floor_plans_complete_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    parameters:
    - name: upload_id
      in: path
      required: true
      type: string
  /v2/uploads/image/{upload_id}/complete/:
    post:
      operationId: v2_uploads_image_complete_create
      description: Create Media object for uploaded image
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    patch:
      operationId: v2_uploads_image_complete_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    parameters:
    - name: upload_id
      in: path
      required: true
      type: string
  /v2/uploads/space_image/{space_id}/:
    get:
      operationId: v2_uploads_space_image_read
      description: List uploads for this space
      parameters: []
      responses:
        '200':
          description: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Media Upload
      security:
      - Bearer: []
    post:
      operationId: v2_uploads_space_image_create
      description: Sign and return a URL for uploading a space image
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    patch:
      operationId: v2_uploads_space_image_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v2/uploads/{upload_id}/:
    get:
      operationId: v2_uploads_read
      description: Return the status of an upload, including media
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalUploadSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Media Upload
      security:
      - Bearer: []
    patch:
      operationId: v2_uploads_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Upload'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalUploadSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Media Upload
      security:
      - Bearer: []
    parameters:
    - name: upload_id
      in: path
      required: true
      type: string
  /v2/users/:
    get:
      operationId: v2_users_list
      description: List users
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/invite/:
    post:
      operationId: v2_users_invite_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/invite/resend/{user_id}/:
    put:
      operationId: v2_users_invite_resend_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: user_id
      in: path
      required: true
      type: string
  /v2/users/me/:
    get:
      operationId: v2_users_me_list
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_users_me_update
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v2_users_me_delete
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/me/devices/:
    post:
      operationId: v2_users_me_devices_create
      description: ''
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/GCMDevice'
      responses:
        '201':
          description: ''
          schema:
            $ref: '#/definitions/GCMDevice'
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/me/password/:
    post:
      operationId: v2_users_me_password_create
      description: Change a user's password
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/password/forgot/:
    put:
      operationId: v2_users_password_forgot_update
      summary: /v1/users/password/forgot/
      description: |-
        Initiates the password reset process by sending an email if the user email exists.
        Catches any errors if the user exist. We always want to return 200s for
        security.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/password/reset/:
    put:
      operationId: v2_users_password_reset_update
      summary: /v1/users/password/reset
      description: Assuming a valid password reset token, assigns the new password
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/register/:
    put:
      operationId: v2_users_register_update
      description: Register a user (accept invite)
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/sso/:
    post:
      operationId: v2_users_sso_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters: []
  /v2/users/{email}/:
    get:
      operationId: v2_users_read
      description: Get users by their email address.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: email
      in: path
      required: true
      type: string
  /v2/users/{user_id}/:
    get:
      operationId: v2_users_read
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_users_update
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v2_users_delete
      description: Get details, update, or delete a user
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: user_id
      in: path
      required: true
      type: string
  /v2/users/{user_id}/password/:
    post:
      operationId: v2_users_password_create
      description: Change a user's password
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: user_id
      in: path
      required: true
      type: string
  /v2/waffle/free-subscription-sensors/:
    get:
      operationId: v2_waffle_free-subscription-sensors_list
      description: FreeSubscriptionSensorsListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalFreeSubscriptionSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_waffle_free-subscription-sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FreeSubscriptionSensor'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFreeSubscriptionSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters: []
  /v2/waffle/free-subscription-sensors/{serial_number}/:
    post:
      operationId: v2_waffle_free-subscription-sensors_create
      description: FreeSubscriptionSensorsCreateView operations.
      parameters: []
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalFreeSubscriptionSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    patch:
      operationId: v2_waffle_free-subscription-sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FreeSubscriptionSensor'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFreeSubscriptionSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/waffle_fulfillment_info/:
    get:
      operationId: v2_waffle_fulfillment_info_list
      description: List/Create waffle fulfillment data
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWaffleFulfillmentInfoSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_waffle_fulfillment_info_create
      description: List/Create waffle fulfillment data
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WaffleFulfillmentInfo'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWaffleFulfillmentInfoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/waffle_fulfillment_info/bulk/:
    post:
      operationId: v2_waffle_fulfillment_info_bulk_create
      description: Create waffle fulfillment data in bulk
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WaffleFulfillmentInfo'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWaffleFulfillmentInfoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/waffle_fulfillment_info/{serial_number}/:
    get:
      operationId: v2_waffle_fulfillment_info_read
      description: Get/Delete waffle fulfillment data for a specific sensor
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWaffleFulfillmentInfoSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v2_waffle_fulfillment_info_delete
      description: Get/Delete waffle fulfillment data for a specific sensor
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/webhooks/:
    get:
      operationId: v2_webhooks_list
      description: List webhooks for an organization, or create a new webhook
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    post:
      operationId: v2_webhooks_create
      description: List webhooks for an organization, or create a new webhook
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_webhooks_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    parameters: []
  /v2/webhooks/{webhook_id}/:
    get:
      operationId: v2_webhooks_read
      description: View a single webhook, update the endpoint, or delete it
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    put:
      operationId: v2_webhooks_update
      description: View a single webhook, update the endpoint, or delete it
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    patch:
      operationId: v2_webhooks_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others
      security:
      - Bearer: []
    delete:
      operationId: v2_webhooks_delete
      description: View a single webhook, update the endpoint, or delete it
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others
      security:
      - Bearer: []
    parameters:
    - name: webhook_id
      in: path
      required: true
      type: string
  /v2/{org_id}/assigned_teams/:
    get:
      operationId: v2_assigned_teams_list
      description: Standard view for listing assigned teams for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalAssignedTeamListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Assigned Teams - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AssignedTeamList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAssignedTeamListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Assigned Teams - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/assigned_teams/{assigned_team_id}/:
    get:
      operationId: v2_assigned_teams_read
      description: Standard view for viewing details for a team assignment
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalAssignedTeamDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Assigned Teams - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AssignedTeamDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAssignedTeamDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Assigned Teams - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: assigned_team_id
      in: path
      required: true
      type: string
  /v2/{org_id}/capture_schedules/:
    post:
      operationId: v2_capture_schedules_create
      description: |-
        CaptureScheduleCreateView allows capture schedules
            to be created for a number of installations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_capture_schedules_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/commands/{command_id}/status/:
    get:
      operationId: v2_commands_status_read
      description: Only PATCH is allowed at this endpoint
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_commands_status_update
      description: Only PATCH is allowed at this endpoint
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_commands_status_partial_update
      description: Update command with a return_status
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_commands_status_delete
      description: Only PATCH is allowed at this endpoint
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: command_id
      in: path
      required: true
      type: string
  /v2/{org_id}/displays/:
    get:
      operationId: v2_displays_list
      description: DisplayListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_displays_create
      description: DisplayListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/displays/{display_id}/:
    get:
      operationId: v2_displays_read
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_displays_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_displays_partial_update
      description: DisplayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_displays_delete
      description: DisplayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: display_id
      in: path
      required: true
      type: string
  /v2/{org_id}/displays/{display_id}/checkin/:
    get:
      operationId: v2_displays_checkin_list
      description: DisplayCheckinView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDisplayCheckinSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_displays_checkin_create
      description: Create a new heartbeat for this {display, visitor}
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayCheckin'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplayCheckinSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: display_id
      in: path
      required: true
      type: string
  /v2/{org_id}/displays/{display_id}/refresh:
    post:
      operationId: v2_displays_refresh_create
      description: |-
        View used to refresh a display, proxying a message to the
            websocket redis queue.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DisplayV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDisplaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Displays - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: display_id
      in: path
      required: true
      type: string
  /v2/{org_id}/doorways/:
    get:
      operationId: v2_doorways_list
      description: DoorwayListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_doorways_create
      description: DoorwayListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/doorways/{doorway_id}/:
    get:
      operationId: v2_doorways_read
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_doorways_update
      description: DoorwayDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_doorways_delete
      description: DoorwayDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
  /v2/{org_id}/doorways/{doorway_id}/images/{doorway_image_side}/:
    put:
      operationId: v2_doorways_images_update
      description: Upload an image file for a doorway
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      consumes: []
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_images_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      consumes: []
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
    - name: doorway_image_side
      in: path
      required: true
      type: string
  /v2/{org_id}/doorways/{doorway_id}/installation/:
    get:
      operationId: v2_doorways_installation_read
      description: Return a Doorway's associated Installation ID
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwayInstallationSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_doorways_installation_update
      description: Assign an Installation to a Doorway (and clear it from other Doorways)
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayInstallation'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayInstallationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_doorways_installation_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwayInstallation'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwayInstallationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/:
    get:
      operationId: v2_floorplans_list
      description: FloorPlanListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalFloorPlanListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_create
      description: FloorPlanListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCreate'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalFloorPlanCreateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/image-upload/:
    post:
      operationId: v2_floorplans_image-upload_create
      description: |-
        Used for generating a signed URL for uploading plan images, source pdfs,
            and rasters.

            Only accepts POST requests.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/:
    get:
      operationId: v2_floorplans_read
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_update
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_partial_update
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_delete
      description: FloorPlanRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/areas-of-coverage/:
    get:
      operationId: v2_floorplans_areas-of-coverage_list
      description: AreaOfCoverageListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalAreaOfCoverageSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_areas-of-coverage_create
      description: AreaOfCoverageListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaOfCoverage'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/areas-of-coverage/{area_of_coverage_id}:
    get:
      operationId: v2_floorplans_areas-of-coverage_read
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_areas-of-coverage_update
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaOfCoverage'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_areas-of-coverage_partial_update
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaOfCoverage'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_areas-of-coverage_delete
      description: AreaOfCoverageRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: area_of_coverage_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/areas/:
    get:
      operationId: v2_floorplans_areas_list
      description: AreaListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalAreaSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_areas_create
      description: AreaListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/areas/{area_id}:
    get:
      operationId: v2_floorplans_areas_read
      description: AreaRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_areas_update
      description: AreaRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_areas_partial_update
      description: AreaRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/AreaSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalAreaSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_areas_delete
      description: AreaRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: area_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/bulk-update/:
    put:
      operationId: v2_floorplans_bulk-update_update
      description: BulkUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanBulkUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanBulkUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_bulk-update_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanBulkUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanBulkUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/calculate-fov/:
    put:
      operationId: v2_floorplans_calculate-fov_update
      description: |-
        Given a plan id:
                1. Fetch the PlanSensors and WallSegments in that Plan
                2. Publish the PlanSensor to the sensor_fov service
                3. Validate the output, AKA clipped FOV polygon
                4. Save the new clipped FOV to PlanSensoe
                5. Publish a websocket message
                6. Make sure the

            Raises exections if Plan or PlanSensors do not exist, or if
            the resulting clipped FOV is invalid (as per shapely). Note that
            it's business as usual if there are no wall segments in this plan.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/ceiling-raster-position/:
    put:
      operationId: v2_floorplans_ceiling-raster-position_update
      description: CeilingRasterPositionUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterPositionUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterPositionUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_ceiling-raster-position_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterPositionUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterPositionUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/ceiling-raster/:
    put:
      operationId: v2_floorplans_ceiling-raster_update
      description: CeilingRasterUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_ceiling-raster_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanCeilingRasterUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanCeilingRasterUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/doorways/:
    get:
      operationId: v2_floorplans_doorways_list
      description: DoorwayListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_doorways_create
      description: DoorwayListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerPlanV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/doorways/{doorway_id}/:
    get:
      operationId: v2_floorplans_doorways_read
      description: DoorwayDetailUpdateDeleteView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_doorways_update
      description: DoorwayDetailUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerPlanV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_doorways_partial_update
      description: DoorwayDetailUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/DoorwaySerializerPlanV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_doorways_delete
      description: DoorwayDetailUpdateDeleteView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/dxfs/:
    get:
      operationId: v2_floorplans_dxfs_list
      description: PlanDXFListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanDXFSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/dxfs/process/:
    post:
      operationId: v2_floorplans_dxfs_process_create
      description: PlanDXFProcessView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXFUpload'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanDXFUploadSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/dxfs/{dxf_id}/:
    get:
      operationId: v2_floorplans_dxfs_read
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanDXFSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_dxfs_update
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXF'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_dxfs_partial_update
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXF'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_dxfs_delete
      description: PlanDXFRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: dxf_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/dxfs/{dxf_id}/reprocess/:
    put:
      operationId: v2_floorplans_dxfs_reprocess_update
      description: PlanDXFReprocessView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXFReprocess'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFReprocessSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_dxfs_reprocess_partial_update
      description: PlanDXFReprocessView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanDXFReprocess'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanDXFReprocessSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: dxf_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/events/{object_id}/:
    get:
      operationId: v2_floorplans_events_list
      description: PlanEventListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanEventSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_events_create
      description: PlanEventListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanEvent'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanEventSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: object_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/exports/:
    get:
      operationId: v2_floorplans_exports_list
      description: PlanExportListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanExportSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_exports_create
      description: PlanExportListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanExport'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/exports/{export_id}/:
    get:
      operationId: v2_floorplans_exports_read
      description: PlanExportRetrieveUpdateView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_exports_update
      description: PlanExportRetrieveUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanExport'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_exports_partial_update
      description: PlanExportRetrieveUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanExport'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanExportSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: export_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/image/:
    put:
      operationId: v2_floorplans_image_update
      description: ImageUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanImageUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanImageUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_image_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanImageUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanImageUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/photo-groups/:
    get:
      operationId: v2_floorplans_photo-groups_list
      description: PhotoGroupListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_photo-groups_create
      description: PhotoGroupListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PhotoGroupSerialzer'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/photo-groups/upload/:
    post:
      operationId: v2_floorplans_photo-groups_upload_create
      description: PhotoGroupUploadView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/photo-groups/{photogroup_id}/:
    get:
      operationId: v2_floorplans_photo-groups_read
      description: PhotoGroupDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_photo-groups_update
      description: PhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_photo-groups_partial_update
      description: PhotoGroupDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PhotoGroupSerialzer'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoGroupSerialzer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_photo-groups_delete
      description: PhotoGroupDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/photo-groups/{photogroup_id}/photos/{photo_id}/:
    put:
      operationId: v2_floorplans_photo-groups_photos_update
      description: PhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Photo'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_photo-groups_photos_partial_update
      description: PhotoUpdateDeleteView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Photo'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPhotoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_photo-groups_photos_delete
      description: PhotoUpdateDeleteView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: photogroup_id
      in: path
      required: true
      type: string
    - name: photo_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/reference-heights/:
    get:
      operationId: v2_floorplans_reference-heights_list
      description: ReferenceHeightListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalReferenceHeightSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_reference-heights_create
      description: ReferenceHeightListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceHeightSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/reference-heights/{reference_height_id}/:
    get:
      operationId: v2_floorplans_reference-heights_read
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_reference-heights_update
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceHeightSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_reference-heights_partial_update
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceHeightSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceHeightSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_reference-heights_delete
      description: ReferenceHeightRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: reference_height_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/reference-rulers/:
    get:
      operationId: v2_floorplans_reference-rulers_list
      description: ReferenceRulerListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalReferenceRulerSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_reference-rulers_create
      description: ReferenceRulerListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceRulerSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/reference-rulers/{reference_ruler_id}/:
    get:
      operationId: v2_floorplans_reference-rulers_read
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_reference-rulers_update
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceRulerSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_reference-rulers_partial_update
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/ReferenceRulerSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalReferenceRulerSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_reference-rulers_delete
      description: ReferenceRulerRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: reference_ruler_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/scale/:
    put:
      operationId: v2_floorplans_scale_update
      description: ScaleUpdateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanScaleUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanScaleUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_scale_partial_update
      description: Only allow PUT.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FloorPlanScaleUpdate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFloorPlanScaleUpdateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/sensors/:
    get:
      operationId: v2_floorplans_sensors_list
      description: List / Create view.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalPlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_sensors_create
      description: List / Create view.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/sensors/{sensor_id}/:
    get:
      operationId: v2_floorplans_sensors_read
      description: SensorRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_sensors_update
      description: SensorRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_sensors_partial_update
      description: SensorRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_sensors_delete
      description: SensorRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: sensor_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/sensors/{sensor_id}/calculate-fov/:
    put:
      operationId: v2_floorplans_sensors_calculate-fov_update
      description: |-
        Given a plan sensor id:
                1. Fetch the PlanSensor and WallSegments in that Plan
                2. Generate the clipped FOV using sensors_fov package
                3. Validate the output, AKA clipped FOV polygon
                4. Save the new clipped FOV to PlanSensor
                5. Publish a websocket message
                6. Make sure the

            Raises exections if Plan or PlanSensors do not exist, or if
            the resulting clipped FOV is invalid (as per shapely). Note that
            it's business as usual if there are no wall segments in this plan.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/PlanSensorSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalPlanSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_sensors_calculate-fov_delete
      description: Delete the clipped FOV, aka set the defaults.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: sensor_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/serialnumbers/csv/:
    post:
      operationId: v2_floorplans_serialnumbers_csv_create
      description: |-
        Parse a CSV into a JSON format with serial number to cad id mappings

                Args:
                    request: the HTTP request
                    format: default to CSV

                Returns:
                    either a 400 or 201 depending on whether a file was included and
                    located in the request.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/spaces/:
    get:
      operationId: v2_floorplans_spaces_list
      description: SpaceListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_spaces_create
      description: SpaceListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerPlansV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/spaces/bulk-presence-debounce/:
    post:
      operationId: v2_floorplans_spaces_bulk-presence-debounce_create
      description: |-
        POST: apply the same presence debounce settings to all spaces under the plan's floor
            in a single database transaction.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BulkSpacePresenceDebounce'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBulkSpacePresenceDebounceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/spaces/{space_id}:
    get:
      operationId: v2_floorplans_spaces_read
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_spaces_update
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerPlansV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_spaces_partial_update
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerPlansV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_spaces_delete
      description: SpaceRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/thresholds/calculate/:
    post:
      operationId: v2_floorplans_thresholds_calculate_create
      description: |-
        Validate the arguments and hand off to 'open_entry_auto_calibration' library
            maintained by Algorithm folks to calculate the trigger region.

            See TriggerRegionSerializer for more detailed information; at a glance, though:

                This endpoint required a single argument to run: 'doorway_id'.
                If 'doorway_id' is provided, the tied PlanSensors are automatically looked up,
                and so are WallSegments on this Plan.

            If "push_to_doorway": True is provided, this calculated trigger region will automatically be
            saved to api.Doorway.trigger_region AND pushed to the sensor's config if a sensor is attached to
            the plan sensor.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TriggerRegion'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalTriggerRegionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/waffle-sensors/:
    get:
      operationId: v2_floorplans_waffle-sensors_list
      description: List view for Waffle sensors
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWafflePlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/waffle-sensors/{serial_number}/:
    get:
      operationId: v2_floorplans_waffle-sensors_read
      description: WaffleSensorRetrieveView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWafflePlanSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/wall-segments/:
    get:
      operationId: v2_floorplans_wall-segments_list
      description: WallSegmentListCreateView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWallSegmentSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_floorplans_wall-segments_create
      description: WallSegmentListCreateView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WallSegment'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/floorplans/{plan_id}/wall-segments/{wall_segment_id}/:
    get:
      operationId: v2_floorplans_wall-segments_read
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_floorplans_wall-segments_update
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WallSegment'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_floorplans_wall-segments_partial_update
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WallSegment'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWallSegmentSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_floorplans_wall-segments_delete
      description: WallSegmentRetrieveUpdateDestroyView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Floorplans - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: plan_id
      in: path
      required: true
      type: string
    - name: wall_segment_id
      in: path
      required: true
      type: string
  /v2/{org_id}/labels/:
    get:
      operationId: v2_labels_list
      description: Standard view for listing labels for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLabelListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_labels_create
      description: Standard view for listing labels for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/labels/groups/:
    get:
      operationId: v2_labels_groups_list
      description: Standard view for listing labels for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLabelGroupListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_labels_groups_create
      description: Standard view for listing labels for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLabelGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/labels/groups/{label_group_id}/:
    get:
      operationId: v2_labels_groups_read
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLabelGroupDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_labels_groups_update
      description: Standard view for viewing details for a label, relies on the serializer
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_labels_groups_delete
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: label_group_id
      in: path
      required: true
      type: string
  /v2/{org_id}/labels/{label_id}/:
    get:
      operationId: v2_labels_read
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLabelDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_labels_update
      description: Standard view for viewing details for a label, relies on the serializer
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_labels_partial_update
      description: Standard view for viewing details for a label, relies on the serializer
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LabelDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLabelDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_labels_delete
      description: Standard view for viewing details for a label, relies on the serializer
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: label_id
      in: path
      required: true
      type: string
  /v2/{org_id}/links/:
    get:
      operationId: v2_links_list
      description: LinkListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_links_create
      description: LinkListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_links_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/links/{link_id}/:
    get:
      operationId: v2_links_read
      description: Single link between a space and doorway. Mostly used to "expire"
        a link.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Links - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_links_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/LinkSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalLinkSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Links - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_links_delete
      description: Single link between a space and doorway. Mostly used to "expire"
        a link.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Links - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: link_id
      in: path
      required: true
      type: string
  /v2/{org_id}/links/{link_id}/set_placement/:
    post:
      operationId: v2_links_set_placement_create
      description: |-
        Modifies the sensor placement for a link, either by creating a new link
        or updating the existing one
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - v2
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: link_id
      in: path
      required: true
      type: string
  /v2/{org_id}/network-templates/:
    get:
      operationId: v2_network-templates_list
      description: |-
        List and create network templates for an organization.

            GET: List all network templates for the organization (requires CanListSensors)
            POST: Create a new network template (requires CanRegisterSensors)
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalNetworkTemplateSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Network Templates
      security:
      - Bearer: []
    post:
      operationId: v2_network-templates_create
      description: |-
        List and create network templates for an organization.

            GET: List all network templates for the organization (requires CanListSensors)
            POST: Create a new network template (requires CanRegisterSensors)
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NetworkTemplate'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalNetworkTemplateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Network Templates
      security:
      - Bearer: []
    patch:
      operationId: v2_network-templates_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NetworkTemplate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNetworkTemplateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Network Templates
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/network-templates/{id}/:
    get:
      operationId: v2_network-templates_read
      description: |-
        Retrieve, update, or delete a specific network template.

            GET: Retrieve a network template by ID (requires CanListSensors)
            PUT: Update a network template by ID (requires CanRegisterSensors)
            DELETE: Delete a network template by ID (requires CanRegisterSensors)
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalNetworkTemplateSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Network Templates
      security:
      - Bearer: []
    put:
      operationId: v2_network-templates_update
      description: |-
        Retrieve, update, or delete a specific network template.

            GET: Retrieve a network template by ID (requires CanListSensors)
            PUT: Update a network template by ID (requires CanRegisterSensors)
            DELETE: Delete a network template by ID (requires CanRegisterSensors)
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NetworkTemplate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNetworkTemplateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Network Templates
      security:
      - Bearer: []
    patch:
      operationId: v2_network-templates_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NetworkTemplate'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNetworkTemplateSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Network Templates
      security:
      - Bearer: []
    delete:
      operationId: v2_network-templates_delete
      description: |-
        Retrieve, update, or delete a specific network template.

            GET: Retrieve a network template by ID (requires CanListSensors)
            PUT: Update a network template by ID (requires CanRegisterSensors)
            DELETE: Delete a network template by ID (requires CanRegisterSensors)
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Network Templates
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: id
      in: path
      required: true
      type: string
  /v2/{org_id}/notifications/:
    get:
      operationId: v2_notifications_list
      description: NotificationListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalNotificationSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_notifications_create
      description: NotificationListView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/notifications/recipients/{notification_recipient_id}:
    get:
      operationId: v2_notifications_recipients_read
      description: NotificationRecipientDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalNotificationRecipientSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_notifications_recipients_create
      description: NotificationRecipientDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationRecipient'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalNotificationRecipientSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_notifications_recipients_delete
      description: NotificationRecipientDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: notification_recipient_id
      in: path
      required: true
      type: string
  /v2/{org_id}/notifications/unsubscribe/{contact_info}:
    get:
      operationId: v2_notifications_unsubscribe_read
      description: NotificationRecipientByContactInfoDetailView operations.
      parameters: []
      responses:
        '200':
          description: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: contact_info
      in: path
      required: true
      type: string
  /v2/{org_id}/notifications/{notification_id}/:
    put:
      operationId: v2_notifications_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_notifications_partial_update
      description: NotificationDetailView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/NotificationSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalNotificationSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_notifications_delete
      description: NotificationDetailView operations.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Notifications - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: notification_id
      in: path
      required: true
      type: string
  /v2/{org_id}/oa/captures/:
    get:
      operationId: v2_oa_captures_list
      description: View to list captures for sensor or plan.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - v2
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/oa/plans/:
    get:
      operationId: v2_oa_plans_list
      description: View to list and create OA plans.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalOAPlanSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_oa_plans_create
      description: View to list and create OA plans.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_oa_plans_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/oa/plans/{oaplan_id}/:
    get:
      operationId: v2_oa_plans_read
      description: View to retrieve, update, or destroy OA plans.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_oa_plans_update
      description: View to retrieve, update, or destroy OA plans.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_oa_plans_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/OAPlan'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalOAPlanSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_oa_plans_delete
      description: View to retrieve, update, or destroy OA plans.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: oaplan_id
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/:
    get:
      operationId: v2_sensors_list
      description: List sensors for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_create
      description: List sensors for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSensorListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/config/:
    get:
      operationId: v2_sensors_config_list
      description: Retrieve reported or assigned configs for a list of sensors.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalBatchSensorConfigSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BatchSensorConfig'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalBatchSensorConfigSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/status_history/:
    get:
      operationId: v2_sensors_status_history_list
      description: SensorStatusHistoryListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorStatusHistorySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_status_history_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorStatusHistory'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorStatusHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/:
    get:
      operationId: v2_sensors_read
      description: View a single sensor from an organization
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_update
      description: View a single sensor from an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_delete
      description: View a single sensor from an organization
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/capture_schedule/:
    get:
      operationId: v2_sensors_capture_schedule_read
      description: SensorCaptureScheduleDetailView allows sensor capture schedules
        to be read/updated
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_capture_schedule_update
      description: SensorCaptureScheduleDetailView allows sensor capture schedules
        to be read/updated
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_capture_schedule_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/CaptureScheduleDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCaptureScheduleDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/capture_schedules/:
    patch:
      operationId: v2_sensors_capture_schedules_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_capture_schedules_delete
      description: Deletes all capture schedules associated with a sensor.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/capture_upload_url/:
    post:
      operationId: v2_sensors_capture_upload_url_create
      description: Generate a signed URL for this capture upload (ignore which DPU
        is making the request)
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_capture_upload_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/checkin/:
    put:
      operationId: v2_sensors_checkin_update
      description: Any PUT request coming in should update diagnostics and create
        a new heartbeat
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_checkin_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/commands/:
    get:
      operationId: v2_sensors_commands_list
      description: Any GET request coming from a sensor should create a new heartbeat
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalCommandSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_commands_create
      description: This endpoint is for listing commands for a sensor
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_commands_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/commands/{command_id}/:
    get:
      operationId: v2_sensors_commands_read
      description: This endpoint is for completing a sensor command from a sensor
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_commands_update
      description: Only PATCH is allowed at this endpoint
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_commands_partial_update
      description: Update command with a return_status
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Command'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalCommandSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_commands_delete
      description: DELETE method will eventually only be used by superusers
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
    - name: command_id
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/config/:
    get:
      operationId: v2_sensors_config_read
      description: Return the value of a sensor's `sensor_config`
      parameters: []
      responses:
        '200':
          description: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_config_update
      description: Replace `sensor_config` with valid JSON from the request body
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_partial_update
      description: Merge valid JSON from the request body into `sensor_config`
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/config/algo/:
    put:
      operationId: v2_sensors_config_algo_update
      description: Update `algo_config` for the corresponding DPU
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorAlgoConfig'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorAlgoConfigSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_algo_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorAlgoConfig'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorAlgoConfigSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/config/height/:
    put:
      operationId: v2_sensors_config_height_update
      description: |-
        Merge new height into existing `sensor_config` JSON or,
                if it doesn't exist yet, create a minimal JSON string
                that only includes the new height setting.

                Example JSON request body: `{"sensor_height": 2.64}`
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_config_height_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/debug_capture_upload_url/:
    post:
      operationId: v2_sensors_debug_capture_upload_url_create
      description: Generate a signed URL for this debug capture upload (ignore which
        DPU is making the request)
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_debug_capture_upload_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/diagnostics/:
    get:
      operationId: v2_sensors_diagnostics_read
      description: View a sensor's diagnostics
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorDiagnosticsSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_diagnostics_update
      description: Update the diagnostics for a sensor
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDiagnostics'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDiagnosticsSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_diagnostics_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorDiagnostics'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorDiagnosticsSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/disposition/:
    get:
      operationId: v2_sensors_disposition_list
      description: Get disposition history for given DPU
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalDispositionSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_disposition_create
      description: Add new disposition row for existing DPU
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Disposition'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalDispositionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/firmware_url/:
    post:
      operationId: v2_sensors_firmware_url_create
      description: This endpoint is for getting a signed S3 url for the firmware image
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_firmware_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/id/:
    get:
      operationId: v2_sensors_id_read
      description: Custom GET method is simplest
      parameters: []
      responses:
        '200':
          description: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_id_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/locate/:
    get:
      operationId: v2_sensors_locate_list
      description: |-
        When queried, this endpoint will cause a sensor's front LED to blink so that a user can identify
            the correct sensor is positioned in the right place.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_sensors_locate_create
      description: |-
        When queried, this endpoint will cause a sensor's front LED to blink so that a user can identify
            the correct sensor is positioned in the right place.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_locate_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/log_upload_url/:
    post:
      operationId: v2_sensors_log_upload_url_create
      description: Generate a signed URL for this log upload
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_log_upload_url_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/provision/:
    post:
      operationId: v2_sensors_provision_create
      description: Create sensor commands and return a new DPU token (sensor status
        is no longer updated)
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorProvision'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSensorProvisionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_provision_update
      description: 'DEPRECATED: Early versions of Unit Setup PUT to this endpoint
        instead'
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorProvision'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorProvisionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_provision_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorProvision'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorProvisionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/register/:
    post:
      operationId: v2_sensors_register_create
      description: Register a sensor to user org
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_register_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/salesforce/:
    get:
      operationId: v2_sensors_salesforce_read
      description: View a saleforce opp id registered for this sensor
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorSalesforceDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_sensors_salesforce_update
      description: View a saleforce opp id registered for this sensor
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorSalesforceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorSalesforceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_salesforce_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorSalesforceDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorSalesforceDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_sensors_salesforce_delete
      description: View a saleforce opp id registered for this sensor
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sensors/{serial_number}/status_history/:
    get:
      operationId: v2_sensors_status_history_list
      description: SensorStatusHistoryDetailView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSensorStatusHistorySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sensors_status_history_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SensorStatusHistory'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSensorStatusHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/sockets/:
    post:
      operationId: v2_sockets_create
      description: Create a websocket connection.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_sockets_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/:
    get:
      operationId: v2_spaces_list
      description: List spaces for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_spaces_create
      description: List spaces for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/functions/:
    get:
      operationId: v2_spaces_functions_list
      description: |-
        Return all spaces functions and the their program.
                Program in this context basically means a function category.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_functions_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/hierarchy/:
    get:
      operationId: v2_spaces_hierarchy_list
      description: Return all spaces that user has purview over AND their ancestors
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_hierarchy_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/programs/:
    get:
      operationId: v2_spaces_programs_list
      description: |-
        Return all spaces functions and the their program.
                Program in this context basically means a function category.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_programs_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/:
    get:
      operationId: v2_spaces_read
      description: Standard view for space details relies on the serializer
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_spaces_update
      description: log some (hopefully) useful info because core started complaining
        about this endpoint
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_delete
      description: Must pass the space name in the body of a DELETE request
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/assigned_teams/:
    post:
      operationId: v2_spaces_assigned_teams_create
      description: Add a team assignment to a space
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceAssignedTeamList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceAssignedTeamListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceAssignedTeamList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceAssignedTeamListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/assigned_teams/{assigned_team_id}/:
    patch:
      operationId: v2_spaces_assigned_teams_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_assigned_teams_delete
      description: Remove a particular team from a space
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
    - name: assigned_team_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/check/access/:
    get:
      operationId: v2_spaces_check_access_list
      summary: Check that the provided token/user has access to write to the space.
      description: |-
        In particular, this checks that:
        1. The user is either part of the organization to which the space belongs
           or has the impersonate permission.
        2. The space is within the user's space purview.
        3. The user has the core_write permission.

        Note that some of this is handled by the density_api_view decorator.

        If the user has no access, for any reason, this will return a 404.
        Otherwise, will return a 200 with a JSON body indicating level of access.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - v2
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/children/:
    get:
      operationId: v2_spaces_children_list
      description: Return a nested view of all spaces that are children of the given
        space
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_children_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/dwell/:
    get:
      operationId: v2_spaces_dwell_list
      description: Calculate dwell (loiter) time statistics for a single space.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_dwell_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/elders/:
    get:
      operationId: v2_spaces_elders_list
      description: Return a nested view of all spaces that are elders of the given
        space
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_elders_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/hierarchy/:
    get:
      operationId: v2_spaces_hierarchy_list
      description: |-
        Return all spaces that user has purview over AND their ancestors
                using the space_id provided as the root space
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_hierarchy_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/labels/:
    post:
      operationId: v2_spaces_labels_create
      description: Add a label to a space
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceLabelList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceLabelList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/labels/{label_id}/:
    patch:
      operationId: v2_spaces_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_labels_delete
      description: Must pass the label name in the body of a DELETE request
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
    - name: label_id
      in: path
      required: true
      type: string
  /v2/{org_id}/spaces/{space_id}/sensors/:
    get:
      operationId: v2_spaces_sensors_read
      description: Single link between a space and waffle device.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_spaces_sensors_create
      description: Single link between a space and waffle device.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSensor'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_spaces_sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSensor'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_spaces_sensors_delete
      description: Single link between a space and waffle device.
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v2/{org_id}/subscriptions/:
    get:
      operationId: v2_subscriptions_list
      description: ListSubscriptionView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSubscriptionSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Subscriptions - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_subscriptions_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/Subscription'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSubscriptionSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/subscriptions/billing_portal/sessions/:
    post:
      operationId: v2_subscriptions_billing_portal_sessions_create
      description: Generate a link to a customer's Stripe Billing Portal
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_subscriptions_billing_portal_sessions_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/subscriptions/disable-sensors/:
    post:
      operationId: v2_subscriptions_disable-sensors_create
      description: SubscriptionDisableSensorsView operations.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_subscriptions_disable-sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Subscriptions - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/time_segment_groups/:
    get:
      operationId: v2_time_segment_groups_list
      description: Standard view for listing TimeSegmentGroups for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalTimeSegmentGroupListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_time_segment_groups_create
      description: Standard view for listing TimeSegmentGroups for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segment_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/time_segment_groups/{time_segment_group_id}/:
    get:
      operationId: v2_time_segment_groups_read
      description: Standard view for viewing details for a TimeSegmentGroup
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_time_segment_groups_update
      description: Standard view for viewing details for a TimeSegmentGroup
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segment_groups_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentGroupDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentGroupDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_time_segment_groups_delete
      description: Standard view for viewing details for a TimeSegmentGroup
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: time_segment_group_id
      in: path
      required: true
      type: string
  /v2/{org_id}/time_segments/:
    get:
      operationId: v2_time_segments_list
      description: Standard view for listing all TimeSegments for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalTimeSegmentListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_time_segments_create
      description: Standard view for listing all TimeSegments for an organization
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentList'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalTimeSegmentListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segments_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/time_segments/labels/:
    get:
      operationId: v2_time_segments_labels_list
      description: Standard view for listing TimeSegment labels for an organization
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalTimeSegmentLabelListSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segments_labels_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentLabelList'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentLabelListSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/time_segments/{time_segment_id}/:
    get:
      operationId: v2_time_segments_read
      description: For viewing details for a TimeSegment
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalTimeSegmentDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_time_segments_update
      description: For viewing details for a TimeSegment
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_time_segments_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/TimeSegmentDetail'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalTimeSegmentDetailSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_time_segments_delete
      description: For viewing details for a TimeSegment
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: time_segment_id
      in: path
      required: true
      type: string
  /v2/{org_id}/waffle/free-subscription-sensors/:
    get:
      operationId: v2_waffle_free-subscription-sensors_list
      description: FreeSubscriptionSensorsListView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalFreeSubscriptionSensorSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_waffle_free-subscription-sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FreeSubscriptionSensor'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFreeSubscriptionSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/waffle/free-subscription-sensors/{serial_number}/:
    post:
      operationId: v2_waffle_free-subscription-sensors_create
      description: FreeSubscriptionSensorsCreateView operations.
      parameters: []
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalFreeSubscriptionSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_waffle_free-subscription-sensors_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/FreeSubscriptionSensor'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalFreeSubscriptionSensorSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/waffle_fulfillment_info/:
    get:
      operationId: v2_waffle_fulfillment_info_list
      description: List/Create waffle fulfillment data
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWaffleFulfillmentInfoSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_waffle_fulfillment_info_create
      description: List/Create waffle fulfillment data
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WaffleFulfillmentInfo'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWaffleFulfillmentInfoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/waffle_fulfillment_info/bulk/:
    post:
      operationId: v2_waffle_fulfillment_info_bulk_create
      description: Create waffle fulfillment data in bulk
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WaffleFulfillmentInfo'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWaffleFulfillmentInfoSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/waffle_fulfillment_info/{serial_number}/:
    get:
      operationId: v2_waffle_fulfillment_info_read
      description: Get/Delete waffle fulfillment data for a specific sensor
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWaffleFulfillmentInfoSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_waffle_fulfillment_info_delete
      description: Get/Delete waffle fulfillment data for a specific sensor
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v2/{org_id}/webhooks/:
    get:
      operationId: v2_webhooks_list
      description: List webhooks for an organization, or create a new webhook
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    post:
      operationId: v2_webhooks_create
      description: List webhooks for an organization, or create a new webhook
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_webhooks_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v2/{org_id}/webhooks/{webhook_id}/:
    get:
      operationId: v2_webhooks_read
      description: View a single webhook, update the endpoint, or delete it
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    put:
      operationId: v2_webhooks_update
      description: View a single webhook, update the endpoint, or delete it
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    patch:
      operationId: v2_webhooks_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/WebhookSerializerV2'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalWebhookSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Others - By Org
      security:
      - Bearer: []
    delete:
      operationId: v2_webhooks_delete
      description: View a single webhook, update the endpoint, or delete it
      parameters: []
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
        '404':
          description: Not Found
      tags:
      - Others - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: webhook_id
      in: path
      required: true
      type: string
  /v2/{organization_id}/machine_user/:
    get:
      operationId: v2_machine_user_list
      description: List machine users
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    post:
      operationId: v2_machine_user_create
      description: List machine users
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v2/{organization_id}/machine_user/client_id/{client_id}/rotate/:
    patch:
      operationId: v2_machine_user_client_id_rotate_partial_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
    - name: client_id
      in: path
      required: true
      type: string
  /v2/{organization_id}/machine_user/id/{machine_user_id}/:
    get:
      operationId: v2_machine_user_id_read
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    put:
      operationId: v2_machine_user_id_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    delete:
      operationId: v2_machine_user_id_delete
      description: ''
      parameters: []
      responses:
        '204':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
    - name: machine_user_id
      in: path
      required: true
      type: string
  /v2/{organization_id}/users/invite/:
    post:
      operationId: v2_users_invite_create
      description: ''
      parameters: []
      responses:
        '201':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
  /v2/{organization_id}/users/invite/resend/{user_id}/:
    put:
      operationId: v2_users_invite_resend_update
      description: ''
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - Users & Tokens
    parameters:
    - name: organization_id
      in: path
      required: true
      type: string
    - name: user_id
      in: path
      required: true
      type: string
  /v3/doorways/switch/{doorway_id}/:
    put:
      operationId: v3_doorways_switch_update
      description: |-
        Operation to be carried out when the physical orientation is switched.
        Modifies orientation_switch on all installation history
        with the doorway and current attached serial number.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - v3
    parameters:
    - name: doorway_id
      in: path
      required: true
      type: string
  /v3/doorways/{doorway_id}/:
    get:
      operationId: v3_doorways_read
      description: DoorwayDetailReadView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways
      security:
      - Bearer: []
    parameters:
    - name: doorway_id
      in: path
      required: true
      type: string
  /v3/installations/at/:
    get:
      operationId: v3_installations_at_list
      description: InstallationAtReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalBaseInstallationHistorySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Installations
      security:
      - Bearer: []
    post:
      operationId: v3_installations_at_create
      description: InstallationAtReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseInstallationHistory'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseInstallationHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Installations
      security:
      - Bearer: []
    parameters: []
  /v3/installations/history/:
    post:
      operationId: v3_installations_history_create
      description: InstallationRangeReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseInstallationHistory'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseInstallationHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Installations
      security:
      - Bearer: []
    parameters: []
  /v3/sensors/generate_noise_filters/:
    post:
      operationId: v3_sensors_generate_noise_filters_create
      description: |-
        This endpoint posts a message onto Amazon SQS which then kicks off
                a noise polygon generation job in the cloud (async).

                Expected in Request Body:
                ------------------------
                    serial_numbers: List[str] - List of serial numbers that need noise polygons generated.

                Returns:
                -------
                    200 if at least one message posts successfully. Inspect the body for failures
                    400 if request body or any of the passed serial numbers are invalid
                    500 if there are issues with AWS credentials or all posts fail
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseDensity'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseDensitySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters: []
  /v3/sensors/{serial_number}/doorways/:
    get:
      operationId: v3_sensors_doorways_read
      description: SensorDoorwayDetailReadView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorDoorwayDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v3/sensors/{serial_number}/noise_filter/:
    put:
      operationId: v3_sensors_noise_filter_update
      description: |-
        Update sensor's `noise_filter` attribute and config.json.

                This endpoint posts a message onto Planner's websocket that PlanSensor has
                been updated (if one is tied to this serial number).

                Expected in Request Body:
                ------------------------
                    noise_filter: Dict[List] - List of noise polygons adhering to schema defined in api/constants.py

                Returns:
                -------
                    Dict with the following keys:
                        sensor_config: Dict - The current config.json with updated `noise_filter` attributes.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseDensity'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalBaseDensitySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors
      security:
      - Bearer: []
    parameters:
    - name: serial_number
      in: path
      required: true
      type: string
  /v3/spaces/geometry:
    get:
      operationId: v3_spaces_geometry_list
      description: SpaceGeometryReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceGeometrySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_geometry_create
      description: SpaceGeometryReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceGeometry'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceGeometrySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v3/spaces/meta/csv:
    get:
      operationId: v3_spaces_meta_csv_list
      description: SpaceMetadataCsvUploadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceExtendedSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_meta_csv_create
      description: Upload CSV file that contains space metadata and update those spaces
        with that metadata.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceExtendedSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v3/spaces/{floor_id}/floor_presence_read/:
    get:
      operationId: v3_spaces_floor_presence_read_list
      description: Return presence debounce settings for a floor and its direct OA/Waffle
        children.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_floor_presence_read_create
      description: Return presence debounce settings for a floor and its direct OA/Waffle
        children.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v3_spaces_floor_presence_read_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: floor_id
      in: path
      required: true
      type: string
  /v3/spaces/{space_id}/doorways:
    get:
      operationId: v3_spaces_doorways_read
      description: SpaceDoorwayReadView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v3_spaces_doorways_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceDoorway'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v3/spaces/{space_id}/entry_occupancy_read/:
    get:
      operationId: v3_spaces_entry_occupancy_read_list
      description: Return a flat list of subscribable spaces in the subtree rooted
        at space_id.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    patch:
      operationId: v3_spaces_entry_occupancy_read_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters:
    - name: space_id
      in: path
      required: true
      type: string
  /v3/spaces_extended_read/:
    get:
      operationId: v3_spaces_extended_read_list
      description: SpaceExtendedReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceExtendedSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_extended_read_create
      description: SpaceExtendedReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceExtendedSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v3/spaces_hierarchy_read/:
    get:
      operationId: v3_spaces_hierarchy_read_list
      description: SpaceHierarchyReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_hierarchy_read_create
      description: SpaceHierarchyReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v3/spaces_minimal_read/:
    get:
      operationId: v3_spaces_minimal_read_list
      description: BaseSpaceReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalBaseSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_minimal_read_create
      description: BaseSpaceReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseSpace'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v3/spaces_read/:
    get:
      operationId: v3_spaces_read_list
      description: SpaceReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_read_create
      description: SpaceReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces
      security:
      - Bearer: []
    parameters: []
  /v3/{org_id}/doorways/switch/{doorway_id}/:
    put:
      operationId: v3_doorways_switch_update
      description: |-
        Operation to be carried out when the physical orientation is switched.
        Modifies orientation_switch on all installation history
        with the doorway and current attached serial number.
      parameters: []
      responses:
        '200':
          description: ''
      tags:
      - v3
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
  /v3/{org_id}/doorways/{doorway_id}/:
    get:
      operationId: v3_doorways_read
      description: DoorwayDetailReadView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Doorways - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: doorway_id
      in: path
      required: true
      type: string
  /v3/{org_id}/installations/at/:
    get:
      operationId: v3_installations_at_list
      description: InstallationAtReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalBaseInstallationHistorySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Installations - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_installations_at_create
      description: InstallationAtReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseInstallationHistory'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseInstallationHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Installations - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/installations/history/:
    post:
      operationId: v3_installations_history_create
      description: InstallationRangeReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseInstallationHistory'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseInstallationHistorySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Installations - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/sensors/generate_noise_filters/:
    post:
      operationId: v3_sensors_generate_noise_filters_create
      description: |-
        This endpoint posts a message onto Amazon SQS which then kicks off
                a noise polygon generation job in the cloud (async).

                Expected in Request Body:
                ------------------------
                    serial_numbers: List[str] - List of serial numbers that need noise polygons generated.

                Returns:
                -------
                    200 if at least one message posts successfully. Inspect the body for failures
                    400 if request body or any of the passed serial numbers are invalid
                    500 if there are issues with AWS credentials or all posts fail
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseDensity'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseDensitySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/sensors/{serial_number}/doorways/:
    get:
      operationId: v3_sensors_doorways_read
      description: SensorDoorwayDetailReadView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSensorDoorwayDetailSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v3/{org_id}/sensors/{serial_number}/noise_filter/:
    put:
      operationId: v3_sensors_noise_filter_update
      description: |-
        Update sensor's `noise_filter` attribute and config.json.

                This endpoint posts a message onto Planner's websocket that PlanSensor has
                been updated (if one is tied to this serial number).

                Expected in Request Body:
                ------------------------
                    noise_filter: Dict[List] - List of noise polygons adhering to schema defined in api/constants.py

                Returns:
                -------
                    Dict with the following keys:
                        sensor_config: Dict - The current config.json with updated `noise_filter` attributes.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseDensity'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalBaseDensitySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Sensors - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: serial_number
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces/geometry:
    get:
      operationId: v3_spaces_geometry_list
      description: SpaceGeometryReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceGeometrySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_geometry_create
      description: SpaceGeometryReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceGeometry'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceGeometrySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces/meta/csv:
    get:
      operationId: v3_spaces_meta_csv_list
      description: SpaceMetadataCsvUploadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceExtendedSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_meta_csv_create
      description: Upload CSV file that contains space metadata and update those spaces
        with that metadata.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceExtendedSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces/{floor_id}/floor_presence_read/:
    get:
      operationId: v3_spaces_floor_presence_read_list
      description: Return presence debounce settings for a floor and its direct OA/Waffle
        children.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_floor_presence_read_create
      description: Return presence debounce settings for a floor and its direct OA/Waffle
        children.
      parameters: []
      responses:
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v3_spaces_floor_presence_read_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: floor_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces/{space_id}/doorways:
    get:
      operationId: v3_spaces_doorways_read
      description: SpaceDoorwayReadView operations.
      parameters: []
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/OptionalSpaceDoorwaySerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v3_spaces_doorways_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceDoorway'
      responses:
        '200':
          description: Updated
          schema:
            $ref: '#/definitions/OptionalSpaceDoorwaySerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces/{space_id}/entry_occupancy_read/:
    get:
      operationId: v3_spaces_entry_occupancy_read_list
      description: Return a flat list of subscribable spaces in the subtree rooted
        at space_id.
      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: Success
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    patch:
      operationId: v3_spaces_entry_occupancy_read_partial_update
      description: Django will happily PATCH in an empty request and vaporize a database
        object.
      parameters: []
      responses:
        '200':
          description: Updated
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
    - name: space_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces_extended_read/:
    get:
      operationId: v3_spaces_extended_read_list
      description: SpaceExtendedReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceExtendedSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_extended_read_create
      description: SpaceExtendedReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceExtendedSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces_hierarchy_read/:
    get:
      operationId: v3_spaces_hierarchy_read_list
      description: SpaceHierarchyReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_hierarchy_read_create
      description: SpaceHierarchyReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces_minimal_read/:
    get:
      operationId: v3_spaces_minimal_read_list
      description: BaseSpaceReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalBaseSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_minimal_read_create
      description: BaseSpaceReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/BaseSpace'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalBaseSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
  /v3/{org_id}/spaces_read/:
    get:
      operationId: v3_spaces_read_list
      description: SpaceReadView operations.
      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: Success
          schema:
            $ref: '#/definitions/PaginatedOptionalSpaceSerializer'
        '403':
          description: Forbidden - Access Denied
        '404':
          description: Not Found
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    post:
      operationId: v3_spaces_read_create
      description: SpaceReadView operations.
      parameters:
      - name: data
        in: body
        required: true
        schema:
          $ref: '#/definitions/SpaceSerializerV3'
      responses:
        '201':
          description: Created
          schema:
            $ref: '#/definitions/OptionalSpaceSerializer'
        '400':
          description: Bad Request
        '403':
          description: Forbidden
      tags:
      - Spaces - By Org
      security:
      - Bearer: []
    parameters:
    - name: org_id
      in: path
      required: true
      type: string
definitions:
  OptionalMultipointInstallationDetailSerializer:
    required:
    - id
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      sensors:
        title: Sensors
        type: string
        readOnly: true
      config:
        title: Config
        type: object
      sensor_height:
        title: Sensor height
        type: number
        x-nullable: true
  PaginatedOptionalMultipointInstallationDetailSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalMultipointInstallationDetailSerializer'
  MultipointInstallationDetail:
    required:
    - id
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      sensors:
        title: Sensors
        type: string
        readOnly: true
      config:
        title: Config
        type: object
      sensor_height:
        title: Sensor height
        type: number
        x-nullable: true
  OptionalMultipointInstallationSensorDetailSerializer:
    type: object
    properties:
      sensor_serial:
        title: Sensor serial
        type: string
        readOnly: true
      position:
        title: Position
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      spacing_right:
        title: Spacing right
        type: number
        x-nullable: true
      multipoint_installation_id:
        title: Multipoint installation id
        type: string
        readOnly: true
  DisplaySpaceSerializerV1:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      space_type:
        title: Space type
        type: string
        enum:
        - space
        - floor
        - building
        - campus
        - region
        - portfolio
      current_count:
        title: Current count
        type: string
        readOnly: true
      ancestry:
        title: Ancestry
        type: string
        readOnly: true
      time_zone:
        title: Time zone
        type: string
        minLength: 1
        x-nullable: true
      daily_reset:
        title: Daily reset
        type: string
        x-nullable: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      target_capacity:
        title: Target capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      safe_threshold_mode:
        title: Safe threshold mode
        type: string
        enum:
        - SAFE_CAPACITY
        - UTILIZATION_PERC_TARGET
        - UTILIZATION_PERC_LEGAL
        x-nullable: true
      safe_threshold_value:
        title: Safe threshold value
        type: number
        x-nullable: true
      safe_capacity:
        title: Safe capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
  OptionalDisplaySerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      screen_type:
        title: Screen type
        type: string
        enum:
        - MONITOR
        - TABLET
        - TV
        - MOBILE
      display_type:
        title: Display type
        type: string
        enum:
        - DEDICATED_SPACE
        - SPACE_DIRECTORY
        - FLOORPLAN
      dedicated_space:
        $ref: '#/definitions/DisplaySpaceSerializerV1'
      dedicated_space_id:
        title: Dedicated space id
        type: integer
      space:
        $ref: '#/definitions/DisplaySpaceSerializerV1'
      space_id:
        title: Space id
        type: integer
      list_spaces:
        title: List spaces
        type: string
        readOnly: true
      list_space_ids:
        type: array
        items:
          type: integer
        default: []
      sidebar_list_spaces:
        title: Sidebar list spaces
        type: string
        readOnly: true
      sidebar_list_space_ids:
        title: Sidebar list space ids
        type: string
        readOnly: true
      token:
        title: Token
        type: string
        readOnly: true
      message:
        title: Message
        type: string
      contact_email:
        title: Contact email
        type: string
      display_wait_time:
        title: Display wait time
        type: boolean
      display_count:
        title: Display count
        type: boolean
      sidebar_mode:
        title: Sidebar mode
        type: string
        enum:
        - MESSAGE
        - LIST_SPACES
        - NONE
      linked_display_id:
        title: Linked display id
        type: integer
      linked_display_hash:
        title: Linked display hash
        type: string
        readOnly: true
      display_trend:
        title: Display trend
        type: boolean
      black_and_white_mode:
        title: Black and white mode
        type: boolean
      at_or_above_threshold_text:
        title: At or above threshold text
        type: string
        maxLength: 10
        minLength: 1
      below_threshold_text:
        title: Below threshold text
        type: string
        maxLength: 10
        minLength: 1
      display_occupancy_metric:
        title: Display occupancy metric
        type: boolean
      analytics_time:
        title: Analytics time
        type: string
        enum:
        - TODAY
        - FIFTEEN_MINUTES
        - THIRTY_MINUTES
        - ONE_HOUR
        - THREE_HOURS
        - SIX_HOURS
        - TWELVE_HOURS
        x-nullable: true
  PaginatedOptionalDisplaySerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalDisplaySerializer'
  DisplayV1:
    required:
    - name
    - screen_type
    - display_type
    - sidebar_mode
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      screen_type:
        title: Screen type
        type: string
        enum:
        - MONITOR
        - TABLET
        - TV
        - MOBILE
      display_type:
        title: Display type
        type: string
        enum:
        - DEDICATED_SPACE
        - SPACE_DIRECTORY
        - FLOORPLAN
      dedicated_space:
        $ref: '#/definitions/DisplaySpaceSerializerV1'
      dedicated_space_id:
        title: Dedicated space id
        type: integer
      space:
        $ref: '#/definitions/DisplaySpaceSerializerV1'
      space_id:
        title: Space id
        type: integer
      list_spaces:
        title: List spaces
        type: string
        readOnly: true
      list_space_ids:
        type: array
        items:
          type: integer
        default: []
      sidebar_list_spaces:
        title: Sidebar list spaces
        type: string
        readOnly: true
      sidebar_list_space_ids:
        title: Sidebar list space ids
        type: string
        readOnly: true
      token:
        title: Token
        type: string
        readOnly: true
      message:
        title: Message
        type: string
      contact_email:
        title: Contact email
        type: string
      display_wait_time:
        title: Display wait time
        type: boolean
      display_count:
        title: Display count
        type: boolean
      sidebar_mode:
        title: Sidebar mode
        type: string
        enum:
        - MESSAGE
        - LIST_SPACES
        - NONE
      linked_display_id:
        title: Linked display id
        type: integer
      linked_display_hash:
        title: Linked display hash
        type: string
        readOnly: true
      display_trend:
        title: Display trend
        type: boolean
      black_and_white_mode:
        title: Black and white mode
        type: boolean
      at_or_above_threshold_text:
        title: At or above threshold text
        type: string
        maxLength: 10
        minLength: 1
      below_threshold_text:
        title: Below threshold text
        type: string
        maxLength: 10
        minLength: 1
      display_occupancy_metric:
        title: Display occupancy metric
        type: boolean
      analytics_time:
        title: Analytics time
        type: string
        enum:
        - TODAY
        - FIFTEEN_MINUTES
        - THIRTY_MINUTES
        - ONE_HOUR
        - THREE_HOURS
        - SIX_HOURS
        - TWELVE_HOURS
        x-nullable: true
  OptionalDoorwayDetailSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      sensor_id:
        title: Sensor id
        type: string
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      description:
        title: Description
        type: string
        maxLength: 1000
      spaces:
        title: Spaces
        type: string
        readOnly: true
  DoorwayDetail:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      sensor_id:
        title: Sensor id
        type: string
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      description:
        title: Description
        type: string
        maxLength: 1000
      spaces:
        title: Spaces
        type: string
        readOnly: true
  OptionalLinkSerializer:
    required:
    - space_id
    - doorway_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      space_id:
        title: Space id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      space_name:
        title: Space name
        type: string
        readOnly: true
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      sensor_placement:
        title: Sensor placement
        type: integer
        enum:
        - 1
        - -1
  PaginatedOptionalLinkSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalLinkSerializer'
  LinkSerializerV1:
    required:
    - space_id
    - doorway_id
    - sensor_placement
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      space_id:
        title: Space id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      space_name:
        title: Space name
        type: string
        readOnly: true
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      sensor_placement:
        title: Sensor placement
        type: integer
        enum:
        - 1
        - -1
  OptionalNotificationSerializer:
    required:
    - trigger_type
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      enabled:
        title: Enabled
        type: boolean
        x-nullable: true
      trigger_value:
        title: Trigger value
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      space_id:
        title: Space id
        type: integer
      is_one_shot:
        title: Is one shot
        type: boolean
        x-nullable: true
      cooldown:
        title: Cooldown
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      notification_type:
        title: Notification type
        type: string
        enum:
        - sms
        - slack
        - push_notification
      trigger_type:
        title: Trigger type
        type: string
        minLength: 1
      meta:
        title: Meta
        type: object
  PaginatedOptionalNotificationSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalNotificationSerializer'
  NotificationSerializerV1:
    required:
    - trigger_type
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      enabled:
        title: Enabled
        type: boolean
        x-nullable: true
      trigger_value:
        title: Trigger value
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      space_id:
        title: Space id
        type: integer
      is_one_shot:
        title: Is one shot
        type: boolean
        x-nullable: true
      cooldown:
        title: Cooldown
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      notification_type:
        title: Notification type
        type: string
        enum:
        - sms
        - slack
        - push_notification
      trigger_type:
        title: Trigger type
        type: string
        minLength: 1
      meta:
        title: Meta
        type: object
  OrganizationCreateAccount:
    required:
    - email
    - organization_name
    - password
    type: object
    properties:
      email:
        title: Email
        type: string
        format: email
        minLength: 1
      organization_name:
        title: Organization name
        type: string
        maxLength: 255
        minLength: 1
      password:
        title: Password
        type: string
        minLength: 1
      full_name:
        title: Full name
        type: string
        maxLength: 100
  OrganizationDisposition:
    required:
    - disposition
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      disposition:
        title: Disposition
        type: string
        enum:
        - internal
        - inactive
        - scoping
        x-nullable: true
  PlanFloorSerializerV1:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      parent_id:
        title: Parent id
        type: integer
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - planning
        - live
  OptionalPlanListSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV1'
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      image_url:
        title: Image url
        type: string
        readOnly: true
      source_pdf_url:
        title: Source pdf url
        type: string
        readOnly: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
  PaginatedOptionalPlanListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalPlanListSerializer'
  AreaSerializerV1:
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        x-nullable: true
      shape:
        title: Shape
        type: string
        enum:
        - polygon
        - circle
      locked:
        title: Locked
        type: boolean
      polygon_verticies:
        title: Polygon verticies
        type: object
        x-nullable: true
      circle_centroid_x_meters:
        title: Circle centroid x meters
        type: number
        x-nullable: true
      circle_centroid_y_meters:
        title: Circle centroid y meters
        type: number
        x-nullable: true
      circle_radius_meters:
        title: Circle radius meters
        type: number
        x-nullable: true
      space_id:
        title: Space id
        type: integer
  ReferencePoint:
    required:
    - position_x_meters
    - position_y_meters
    type: object
    properties:
      id:
        title: Id
        type: integer
      enabled:
        title: Enabled
        type: boolean
      position_x_meters:
        title: Position x meters
        type: number
      position_y_meters:
        title: Position y meters
        type: number
  ReferenceRulerSerializerV1:
    required:
    - position_a_x_meters
    - position_a_y_meters
    - position_b_x_meters
    - position_b_y_meters
    type: object
    properties:
      id:
        title: Id
        type: integer
      enabled:
        title: Enabled
        type: boolean
      position_a_x_meters:
        title: Position a x meters
        type: number
      position_a_y_meters:
        title: Position a y meters
        type: number
      position_b_x_meters:
        title: Position b x meters
        type: number
      position_b_y_meters:
        title: Position b y meters
        type: number
      position_label_x_meters:
        title: Position label x meters
        type: number
      position_label_y_meters:
        title: Position label y meters
        type: number
  ReferenceHeightSerializerV1:
    required:
    - position_x_meters
    - position_y_meters
    type: object
    properties:
      id:
        title: Id
        type: integer
      enabled:
        title: Enabled
        type: boolean
      position_x_meters:
        title: Position x meters
        type: number
      position_y_meters:
        title: Position y meters
        type: number
  PlanSensorSerializerV1:
    type: object
    properties:
      id:
        title: Id
        type: integer
      sensor_type:
        title: Sensor type
        type: string
        enum:
        - entry
        - oa
        - waffle
      locked:
        title: Locked
        type: boolean
      sensor_serial_number:
        title: Sensor serial number
        type: string
      centroid_from_origin_x_meters:
        title: Centroid from origin x meters
        type: number
        x-nullable: true
      centroid_from_origin_y_meters:
        title: Centroid from origin y meters
        type: number
        x-nullable: true
      rotation:
        title: Rotation
        type: number
        x-nullable: true
      height_meters:
        title: Height meters
        type: number
        x-nullable: true
      diagnostic_info:
        title: Diagnostic info
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        readOnly: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        readOnly: true
      notes:
        title: Notes
        type: string
      plan_sensor_index:
        title: Plan sensor index
        type: integer
        readOnly: true
      cad_id:
        title: Cad id
        type: string
        default: ''
      bounding_box_filter:
        title: Bounding box filter
        type: string
        enum:
        - none
        - cloud
        - device
      device_function:
        title: Device function
        type: string
        readOnly: true
  PlanPhoto:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      url:
        title: Url
        type: string
        format: uri
        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
  PlanPhotoGroupSerialzer:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      notes:
        title: Notes
        type: string
      photos:
        type: array
        items:
          $ref: '#/definitions/PlanPhoto'
        readOnly: true
      photo_ids:
        type: array
        items:
          type: string
          minLength: 1
      locked:
        title: Locked
        type: boolean
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  PlanDetail:
    required:
    - floor_id
    - image_width_pixels
    - image_height_pixels
    - image_pixels_per_meter
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV1'
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      image_url:
        title: Image url
        type: string
        readOnly: true
      source_pdf_url:
        title: Source pdf url
        type: string
        readOnly: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      areas:
        type: array
        items:
          $ref: '#/definitions/AreaSerializerV1'
      reference_points:
        type: array
        items:
          $ref: '#/definitions/ReferencePoint'
      reference_rulers:
        type: array
        items:
          $ref: '#/definitions/ReferenceRulerSerializerV1'
      reference_heights:
        type: array
        items:
          $ref: '#/definitions/ReferenceHeightSerializerV1'
      plan_sensors:
        type: array
        items:
          $ref: '#/definitions/PlanSensorSerializerV1'
      photo_groups:
        type: array
        items:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
        readOnly: true
      floor_id:
        title: Floor id
        type: integer
      image_key:
        title: Image key
        type: string
      source_pdf_key:
        title: Source pdf key
        type: string
        x-nullable: true
      image_width_pixels:
        title: Image width pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_height_pixels:
        title: Image height pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      floorplan_cad_origin_x:
        title: Floorplan cad origin x
        type: number
      floorplan_cad_origin_y:
        title: Floorplan cad origin y
        type: number
      floorplan_cad_rotation_degrees:
        title: Floorplan cad rotation degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
        x-nullable: true
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
        x-nullable: true
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
        x-nullable: true
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
        x-nullable: true
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
        x-nullable: true
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        x-nullable: true
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        x-nullable: true
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        x-nullable: true
      ceiling_raster_url:
        title: Ceiling raster url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        maximum: 100
        minimum: 0
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
      point_cloud_transformation_matrix:
        title: Point cloud transformation matrix
        type: object
        x-nullable: true
      point_cloud_transformation_steps:
        title: Point cloud transformation steps
        type: object
        x-nullable: true
      last_oa_sensor_index:
        title: Last oa sensor index
        type: string
        readOnly: true
      last_entry_sensor_index:
        title: Last entry sensor index
        type: string
        readOnly: true
      active_dxf_id:
        title: Active dxf id
        type: integer
        x-nullable: true
      active_dxf_full_raster_url:
        title: Active dxf full raster url
        type: string
        readOnly: true
      latest_dxf:
        title: Latest dxf
        type: string
        readOnly: true
  OptionalPlanDetailSerializer:
    required:
    - floor_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV1'
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      image_url:
        title: Image url
        type: string
        readOnly: true
      source_pdf_url:
        title: Source pdf url
        type: string
        readOnly: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      areas:
        type: array
        items:
          $ref: '#/definitions/AreaSerializerV1'
      reference_points:
        type: array
        items:
          $ref: '#/definitions/ReferencePoint'
      reference_rulers:
        type: array
        items:
          $ref: '#/definitions/ReferenceRulerSerializerV1'
      reference_heights:
        type: array
        items:
          $ref: '#/definitions/ReferenceHeightSerializerV1'
      plan_sensors:
        type: array
        items:
          $ref: '#/definitions/PlanSensorSerializerV1'
      photo_groups:
        type: array
        items:
          $ref: '#/definitions/PlanPhotoGroupSerialzer'
        readOnly: true
      floor_id:
        title: Floor id
        type: integer
      image_key:
        title: Image key
        type: string
      source_pdf_key:
        title: Source pdf key
        type: string
        x-nullable: true
      image_width_pixels:
        title: Image width pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_height_pixels:
        title: Image height pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      floorplan_cad_origin_x:
        title: Floorplan cad origin x
        type: number
      floorplan_cad_origin_y:
        title: Floorplan cad origin y
        type: number
      floorplan_cad_rotation_degrees:
        title: Floorplan cad rotation degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
        x-nullable: true
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
        x-nullable: true
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
        x-nullable: true
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
        x-nullable: true
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
        x-nullable: true
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        x-nullable: true
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        x-nullable: true
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        x-nullable: true
      ceiling_raster_url:
        title: Ceiling raster url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        maximum: 100
        minimum: 0
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
      point_cloud_transformation_matrix:
        title: Point cloud transformation matrix
        type: object
        x-nullable: true
      point_cloud_transformation_steps:
        title: Point cloud transformation steps
        type: object
        x-nullable: true
      last_oa_sensor_index:
        title: Last oa sensor index
        type: string
        readOnly: true
      last_entry_sensor_index:
        title: Last entry sensor index
        type: string
        readOnly: true
      active_dxf_id:
        title: Active dxf id
        type: integer
        x-nullable: true
      active_dxf_full_raster_url:
        title: Active dxf full raster url
        type: string
        readOnly: true
      latest_dxf:
        title: Latest dxf
        type: string
        readOnly: true
  OptionalPlanPhotoGroupSerialzer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      notes:
        title: Notes
        type: string
      photos:
        type: array
        items:
          $ref: '#/definitions/PlanPhoto'
        readOnly: true
      photo_ids:
        type: array
        items:
          type: string
          minLength: 1
      locked:
        title: Locked
        type: boolean
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  PaginatedOptionalPlanPhotoGroupSerialzer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalPlanPhotoGroupSerialzer'
  OptionalPlanPhotoSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      url:
        title: Url
        type: string
        format: uri
        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
  OptionalSensorSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      doorway_id:
        title: Doorway id
        type: integer
      sensor_type:
        title: Sensor type
        type: string
        enum:
        - ob1
        - r56t
        - r60
        - s5
        - w1
        - virtual
      status:
        title: Status
        type: string
        enum:
        - unconfigured
        - online
        - error
        - low_power
        - archived
  PaginatedOptionalSensorSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSensorSerializer'
  OptionalSpaceDetailSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      notes:
        title: Notes
        type: string
        maxLength: 1000
      iwms_id:
        title: Iwms id
        type: string
        maxLength: 255
        x-nullable: true
      timezone:
        title: Timezone
        type: string
        minLength: 1
        x-nullable: true
      daily_reset:
        title: Daily reset
        type: string
        x-nullable: true
      current_count:
        title: Current count
        type: string
        readOnly: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      target_capacity:
        title: Target capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      doorways:
        title: Doorways
        type: string
        readOnly: true
  SpaceDetail:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      notes:
        title: Notes
        type: string
        maxLength: 1000
      iwms_id:
        title: Iwms id
        type: string
        maxLength: 255
        x-nullable: true
      timezone:
        title: Timezone
        type: string
        minLength: 1
        x-nullable: true
      daily_reset:
        title: Daily reset
        type: string
        x-nullable: true
      current_count:
        title: Current count
        type: string
        readOnly: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      target_capacity:
        title: Target capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      doorways:
        title: Doorways
        type: string
        readOnly: true
  GCMDevice:
    required:
    - registration_id
    type: object
    properties:
      id:
        title: ID
        type: integer
      name:
        title: Name
        type: string
        maxLength: 255
        x-nullable: true
      registration_id:
        title: Registration ID
        type: string
        minLength: 1
      device_id:
        title: Device id
        description: 'ANDROID_ID / TelephonyManager.getDeviceId() (e.g: 0x01)'
        type: integer
        x-nullable: true
      active:
        title: Is active
        description: Inactive devices will not be sent notifications
        type: boolean
      date_created:
        title: Creation date
        type: string
        format: date-time
        readOnly: true
        x-nullable: true
      cloud_message_type:
        title: Cloud Message Type
        description: You should choose FCM, GCM is deprecated
        type: string
        enum:
        - FCM
        - GCM
      application_id:
        title: Application ID
        description: Opaque application identity, should be filled in for multiple
          key/certificate access
        type: string
        maxLength: 64
        x-nullable: true
  OptionalWebhookSerializer:
    required:
    - endpoint
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      endpoint:
        title: Endpoint
        type: string
        format: uri
        minLength: 1
  PaginatedOptionalWebhookSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalWebhookSerializer'
  WebhookSerializerV1:
    required:
    - endpoint
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      endpoint:
        title: Endpoint
        type: string
        format: uri
        minLength: 1
  OptionalAssignedTeamListSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
  PaginatedOptionalAssignedTeamListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalAssignedTeamListSerializer'
  AssignedTeamList:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
  AssignedTeamSpace:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
      current_count:
        title: Current count
        type: integer
        readOnly: true
  OptionalAssignedTeamDetailSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
      spaces:
        type: array
        items:
          $ref: '#/definitions/AssignedTeamSpace'
        readOnly: true
  AssignedTeamDetail:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
      spaces:
        type: array
        items:
          $ref: '#/definitions/AssignedTeamSpace'
        readOnly: true
  CaptureScheduleDetail:
    required:
    - time
    - organization
    - installation
    type: object
    properties:
      id:
        title: Id
        type: integer
        maximum: 9223372036854775807
        minimum: -9223372036854775808
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      time:
        title: Time
        type: string
      days_of_week:
        title: Days of week
        type: integer
        maximum: 9223372036854775807
        minimum: -9223372036854775808
      end_time:
        title: End time
        description: (optional) Date and time to stop capturing
        type: string
        format: date-time
        x-nullable: true
      enabled:
        title: Enabled
        type: boolean
      duration:
        title: Duration
        type: integer
        maximum: 2147483647
        minimum: 0
      num_event_retries:
        title: Num event retries
        type: integer
        maximum: 2147483647
        minimum: 0
      num_captures:
        title: Num captures
        type: integer
        maximum: 2147483647
        minimum: 0
      priority:
        title: Priority
        type: boolean
      use_h264:
        title: Use h264
        type: boolean
      upload_rate:
        title: Upload rate
        type: integer
        maximum: 2147483647
        minimum: 0
      mot_det_trigger_line:
        title: Mot det trigger line
        type: boolean
      capture_schedule_status:
        title: Capture schedule status
        type: string
        enum:
        - initial_capture_collection
        - periodic_capture_collection
      organization:
        title: Organization
        type: integer
      installation:
        title: Installation
        type: integer
  OptionalCaptureScheduleDetailSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        maximum: 9223372036854775807
        minimum: -9223372036854775808
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      time:
        title: Time
        type: string
      days_of_week:
        title: Days of week
        type: integer
        maximum: 9223372036854775807
        minimum: -9223372036854775808
      end_time:
        title: End time
        description: (optional) Date and time to stop capturing
        type: string
        format: date-time
        x-nullable: true
      enabled:
        title: Enabled
        type: boolean
      duration:
        title: Duration
        type: integer
        maximum: 2147483647
        minimum: 0
      num_event_retries:
        title: Num event retries
        type: integer
        maximum: 2147483647
        minimum: 0
      num_captures:
        title: Num captures
        type: integer
        maximum: 2147483647
        minimum: 0
      priority:
        title: Priority
        type: boolean
      use_h264:
        title: Use h264
        type: boolean
      upload_rate:
        title: Upload rate
        type: integer
        maximum: 2147483647
        minimum: 0
      mot_det_trigger_line:
        title: Mot det trigger line
        type: boolean
      capture_schedule_status:
        title: Capture schedule status
        type: string
        enum:
        - initial_capture_collection
        - periodic_capture_collection
      organization:
        title: Organization
        type: integer
      installation:
        title: Installation
        type: integer
  OptionalCommandSerializer:
    required:
    - name
    - value
    type: object
    properties:
      command_id:
        title: Command id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 100
        minLength: 1
      value:
        title: Value
        type: object
      return_status:
        title: Return status
        type: object
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  Command:
    required:
    - name
    - value
    type: object
    properties:
      command_id:
        title: Command id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 100
        minLength: 1
      value:
        title: Value
        type: object
      return_status:
        title: Return status
        type: object
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  DisplaySpaceSerializerV2:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      space_type:
        title: Space type
        type: string
        enum:
        - space
        - floor
        - building
        - campus
        - region
        - portfolio
      current_count:
        title: Current count
        type: string
        readOnly: true
      ancestry:
        title: Ancestry
        type: string
        readOnly: true
      time_zone:
        title: Time zone
        type: string
        minLength: 1
        x-nullable: true
      daily_reset:
        title: Daily reset
        type: string
        x-nullable: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      target_capacity:
        title: Target capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      safe_threshold_mode:
        title: Safe threshold mode
        type: string
        enum:
        - SAFE_CAPACITY
        - UTILIZATION_PERC_TARGET
        - UTILIZATION_PERC_LEGAL
        x-nullable: true
      safe_threshold_value:
        title: Safe threshold value
        type: number
        x-nullable: true
      safe_capacity:
        title: Safe capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
  DisplayV2:
    required:
    - name
    - screen_type
    - display_type
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      screen_type:
        title: Screen type
        type: string
        enum:
        - MONITOR
        - TABLET
        - TV
        - MOBILE
      display_type:
        title: Display type
        type: string
        enum:
        - DEDICATED_SPACE
        - SPACE_DIRECTORY
        - FLOORPLAN
      dedicated_space:
        $ref: '#/definitions/DisplaySpaceSerializerV2'
      dedicated_space_id:
        title: Dedicated space id
        type: integer
        x-nullable: true
      list_spaces:
        title: List spaces
        type: string
        readOnly: true
      list_space_ids:
        type: array
        items:
          type: integer
        default: []
      list_space_title:
        title: List space title
        type: string
        maxLength: 250
        x-nullable: true
      directory_mode:
        title: Directory mode
        type: string
        enum:
        - CAPACITY
        - ENTRANCES
        x-nullable: true
      analytics_time:
        title: Analytics time
        type: string
        enum:
        - TODAY
        - FIFTEEN_MINUTES
        - THIRTY_MINUTES
        - ONE_HOUR
        - THREE_HOURS
        - SIX_HOURS
        - TWELVE_HOURS
        x-nullable: true
      token:
        title: Token
        type: string
        readOnly: true
      message:
        title: Message
        type: string
      contact_email:
        title: Contact email
        type: string
      display_wait_time:
        title: Display wait time
        type: boolean
      display_count:
        title: Display count
        type: boolean
      sidebar_mode:
        title: Sidebar mode
        type: string
        minLength: 1
      linked_display_id:
        title: Linked display id
        type: integer
        x-nullable: true
      linked_display_token:
        title: Linked display token
        type: string
        readOnly: true
      display_trend:
        title: Display trend
        type: boolean
      black_and_white_mode:
        title: Black and white mode
        type: boolean
      at_or_above_threshold_text:
        title: At or above threshold text
        type: string
        maxLength: 10
        minLength: 1
      below_threshold_text:
        title: Below threshold text
        type: string
        maxLength: 10
        minLength: 1
      display_occupancy_metric:
        title: Display occupancy metric
        type: boolean
      user_id:
        title: User id
        type: integer
        x-nullable: true
      secure_mode:
        title: Secure mode
        type: boolean
  OptionalDisplayCheckinSerializer:
    required:
    - display_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      display:
        title: Display
        type: integer
      display_id:
        title: Display id
        type: integer
      visitor_id:
        title: Visitor id
        type: string
        maxLength: 20
      revision_major:
        title: Revision major
        type: integer
        maximum: 2147483647
        minimum: 0
        x-nullable: true
      revision_minor:
        title: Revision minor
        type: integer
        maximum: 2147483647
        minimum: 0
        x-nullable: true
      meta:
        title: Meta
        type: object
  PaginatedOptionalDisplayCheckinSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalDisplayCheckinSerializer'
  DisplayCheckin:
    required:
    - display
    - display_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      display:
        title: Display
        type: integer
      display_id:
        title: Display id
        type: integer
      visitor_id:
        title: Visitor id
        type: string
        maxLength: 20
      revision_major:
        title: Revision major
        type: integer
        maximum: 2147483647
        minimum: 0
        x-nullable: true
      revision_minor:
        title: Revision minor
        type: integer
        maximum: 2147483647
        minimum: 0
        x-nullable: true
      meta:
        title: Meta
        type: object
  OptionalDoorwaySerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      sensor_serial_number:
        title: Sensor serial number
        type: string
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      description:
        title: Description
        type: string
        maxLength: 1000
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      spaces:
        title: Spaces
        type: string
        readOnly: true
      multipoint:
        title: Multipoint
        type: boolean
        readOnly: true
  PaginatedOptionalDoorwaySerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalDoorwaySerializer'
  DoorwaySerializerV2:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      sensor_serial_number:
        title: Sensor serial number
        type: string
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      description:
        title: Description
        type: string
        maxLength: 1000
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      spaces:
        title: Spaces
        type: string
        readOnly: true
      multipoint:
        title: Multipoint
        type: boolean
        readOnly: true
  OptionalDoorwayInstallationSerializer:
    required:
    - installation_id
    type: object
    properties:
      installation_id:
        title: Installation id
        type: integer
        x-nullable: true
  DoorwayInstallation:
    required:
    - installation_id
    type: object
    properties:
      installation_id:
        title: Installation id
        type: integer
        x-nullable: true
  PlanFloorSerializerV2:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      parent_id:
        title: Parent id
        type: integer
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - planning
        - live
  OptionalFloorPlanListSerializer:
    required:
    - image_url
    - source_pdf_url
    - ceiling_raster_url
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV2'
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      image_url:
        title: Image url
        type: string
        format: uri
        minLength: 1
      source_pdf_url:
        title: Source pdf url
        type: string
        format: uri
        minLength: 1
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      ceiling_raster_url:
        title: Ceiling raster url
        type: string
        format: uri
        minLength: 1
      active_dxf_thumbnail_url:
        title: Active dxf thumbnail url
        type: string
        readOnly: true
  PaginatedOptionalFloorPlanListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalFloorPlanListSerializer'
  FloorPlanCreate:
    required:
    - floor_id
    - image_width_pixels
    - image_height_pixels
    - image_pixels_per_meter
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV2'
      floor_id:
        title: Floor id
        type: integer
      image_key:
        title: Image key
        type: string
      image_url:
        title: Image url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      source_pdf_key:
        title: Source pdf key
        type: string
        x-nullable: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      source_pdf_url:
        title: Source pdf url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      image_width_pixels:
        title: Image width pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_height_pixels:
        title: Image height pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      floorplan_cad_origin_x:
        title: Floorplan cad origin x
        type: number
      floorplan_cad_origin_y:
        title: Floorplan cad origin y
        type: number
      floorplan_cad_rotation_degrees:
        title: Floorplan cad rotation degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
        x-nullable: true
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
        x-nullable: true
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
        x-nullable: true
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
        x-nullable: true
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
        x-nullable: true
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        x-nullable: true
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        x-nullable: true
      last_oa_sensor_index:
        title: Last oa sensor index
        type: integer
        readOnly: true
      last_entry_sensor_index:
        title: Last entry sensor index
        type: integer
        readOnly: true
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        x-nullable: true
      ceiling_raster_url:
        title: Ceiling raster url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        maximum: 100
        minimum: 0
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
      point_cloud_transformation_matrix:
        title: Point cloud transformation matrix
        type: object
        x-nullable: true
      point_cloud_transformation_steps:
        title: Point cloud transformation steps
        type: object
        x-nullable: true
      active_dxf_id:
        title: Active dxf id
        type: integer
        x-nullable: true
      active_dxf_full_raster_url:
        title: Active dxf full raster url
        type: string
        readOnly: true
      latest_dxf:
        title: Latest dxf
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  OptionalFloorPlanCreateSerializer:
    required:
    - floor_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV2'
      floor_id:
        title: Floor id
        type: integer
      image_key:
        title: Image key
        type: string
      image_url:
        title: Image url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      source_pdf_key:
        title: Source pdf key
        type: string
        x-nullable: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      source_pdf_url:
        title: Source pdf url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      image_width_pixels:
        title: Image width pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_height_pixels:
        title: Image height pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      floorplan_cad_origin_x:
        title: Floorplan cad origin x
        type: number
      floorplan_cad_origin_y:
        title: Floorplan cad origin y
        type: number
      floorplan_cad_rotation_degrees:
        title: Floorplan cad rotation degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
        x-nullable: true
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
        x-nullable: true
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
        x-nullable: true
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
        x-nullable: true
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
        x-nullable: true
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        x-nullable: true
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        x-nullable: true
      last_oa_sensor_index:
        title: Last oa sensor index
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      last_entry_sensor_index:
        title: Last entry sensor index
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        x-nullable: true
      ceiling_raster_url:
        title: Ceiling raster url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        maximum: 100
        minimum: 0
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
      point_cloud_transformation_matrix:
        title: Point cloud transformation matrix
        type: object
        x-nullable: true
      point_cloud_transformation_steps:
        title: Point cloud transformation steps
        type: object
        x-nullable: true
      active_dxf_id:
        title: Active dxf id
        type: integer
        x-nullable: true
      active_dxf_full_raster_url:
        title: Active dxf full raster url
        type: string
        readOnly: true
      latest_dxf:
        title: Latest dxf
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  OptionalFloorPlanDetailSerializer:
    required:
    - floor_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV2'
      floor_id:
        title: Floor id
        type: integer
      image_key:
        title: Image key
        type: string
      image_url:
        title: Image url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      source_pdf_key:
        title: Source pdf key
        type: string
        x-nullable: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      source_pdf_url:
        title: Source pdf url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      image_width_pixels:
        title: Image width pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_height_pixels:
        title: Image height pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      floorplan_cad_origin_x:
        title: Floorplan cad origin x
        type: number
      floorplan_cad_origin_y:
        title: Floorplan cad origin y
        type: number
      floorplan_cad_rotation_degrees:
        title: Floorplan cad rotation degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
        x-nullable: true
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
        x-nullable: true
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
        x-nullable: true
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
        x-nullable: true
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
        x-nullable: true
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        x-nullable: true
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        x-nullable: true
      last_oa_sensor_index:
        title: Last oa sensor index
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      last_entry_sensor_index:
        title: Last entry sensor index
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        x-nullable: true
      ceiling_raster_url:
        title: Ceiling raster url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        maximum: 100
        minimum: 0
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
      point_cloud_transformation_matrix:
        title: Point cloud transformation matrix
        type: object
        x-nullable: true
      point_cloud_transformation_steps:
        title: Point cloud transformation steps
        type: object
        x-nullable: true
      active_dxf_id:
        title: Active dxf id
        type: integer
        x-nullable: true
      active_dxf_full_raster_url:
        title: Active dxf full raster url
        type: string
        readOnly: true
      latest_dxf:
        title: Latest dxf
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  FloorPlanDetail:
    required:
    - floor_id
    - image_pixels_per_meter
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      floor:
        $ref: '#/definitions/PlanFloorSerializerV2'
      floor_id:
        title: Floor id
        type: integer
      image_key:
        title: Image key
        type: string
        readOnly: true
        minLength: 1
      image_url:
        title: Image url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      source_pdf_key:
        title: Source pdf key
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        readOnly: true
        x-nullable: true
      source_pdf_url:
        title: Source pdf url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      image_width_pixels:
        title: Image width pixels
        type: integer
        readOnly: true
      image_height_pixels:
        title: Image height pixels
        type: integer
        readOnly: true
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      floorplan_cad_origin_x:
        title: Floorplan cad origin x
        type: number
      floorplan_cad_origin_y:
        title: Floorplan cad origin y
        type: number
      floorplan_cad_rotation_degrees:
        title: Floorplan cad rotation degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
        readOnly: true
        x-nullable: true
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
        readOnly: true
        x-nullable: true
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
        readOnly: true
        x-nullable: true
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
        readOnly: true
        x-nullable: true
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
        readOnly: true
        x-nullable: true
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      last_oa_sensor_index:
        title: Last oa sensor index
        type: integer
        readOnly: true
      last_entry_sensor_index:
        title: Last entry sensor index
        type: integer
        readOnly: true
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      ceiling_raster_url:
        title: Ceiling raster url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
        readOnly: true
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
        readOnly: true
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
        readOnly: true
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        readOnly: true
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
        readOnly: true
        minLength: 1
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
        readOnly: true
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
        readOnly: true
      point_cloud_transformation_matrix:
        title: Point cloud transformation matrix
        type: object
        x-nullable: true
      point_cloud_transformation_steps:
        title: Point cloud transformation steps
        type: object
        x-nullable: true
      active_dxf_id:
        title: Active dxf id
        type: integer
        x-nullable: true
      active_dxf_full_raster_url:
        title: Active dxf full raster url
        type: string
        readOnly: true
      latest_dxf:
        title: Latest dxf
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  OptionalAreaOfCoverageSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        minLength: 1
      locked:
        title: Locked
        type: boolean
      notes:
        title: Notes
        type: string
      polygon_vertices:
        title: Polygon vertices
        type: object
      minimum_exclusive_area:
        title: Minimum exclusive area
        type: number
      sensor_height:
        title: Sensor height
        type: number
      sensor_base_angle_degrees:
        title: Sensor base angle degrees
        type: number
      safety_factor_pct:
        title: Safety factor pct
        type: number
      coverage_intersection_heightmap_enabled:
        title: Coverage intersection heightmap enabled
        type: boolean
      small_room_mode:
        title: Small room mode
        type: boolean
      area_meters_squared:
        title: Area meters squared
        type: number
        x-nullable: true
  PaginatedOptionalAreaOfCoverageSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalAreaOfCoverageSerializer'
  AreaOfCoverage:
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        minLength: 1
      locked:
        title: Locked
        type: boolean
      notes:
        title: Notes
        type: string
      polygon_vertices:
        title: Polygon vertices
        type: object
      minimum_exclusive_area:
        title: Minimum exclusive area
        type: number
      sensor_height:
        title: Sensor height
        type: number
      sensor_base_angle_degrees:
        title: Sensor base angle degrees
        type: number
      safety_factor_pct:
        title: Safety factor pct
        type: number
      coverage_intersection_heightmap_enabled:
        title: Coverage intersection heightmap enabled
        type: boolean
      small_room_mode:
        title: Small room mode
        type: boolean
      area_meters_squared:
        title: Area meters squared
        type: number
        x-nullable: true
  OptionalAreaSerializer:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        minLength: 1
      shape:
        title: Shape
        type: string
        enum:
        - polygon
        - circle
      locked:
        title: Locked
        type: boolean
      polygon_verticies:
        title: Polygon verticies
        type: object
        x-nullable: true
      circle_centroid_x_meters:
        title: Circle centroid x meters
        type: number
        x-nullable: true
      circle_centroid_y_meters:
        title: Circle centroid y meters
        type: number
        x-nullable: true
      circle_radius_meters:
        title: Circle radius meters
        type: number
        x-nullable: true
      space_id:
        title: Space id
        type: integer
      counting_mode:
        title: Counting mode
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
  PaginatedOptionalAreaSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalAreaSerializer'
  AreaSerializerV2:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        minLength: 1
      shape:
        title: Shape
        type: string
        enum:
        - polygon
        - circle
      locked:
        title: Locked
        type: boolean
      polygon_verticies:
        title: Polygon verticies
        type: object
        x-nullable: true
      circle_centroid_x_meters:
        title: Circle centroid x meters
        type: number
        x-nullable: true
      circle_centroid_y_meters:
        title: Circle centroid y meters
        type: number
        x-nullable: true
      circle_radius_meters:
        title: Circle radius meters
        type: number
        x-nullable: true
      space_id:
        title: Space id
        type: integer
      counting_mode:
        title: Counting mode
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
  FloorPlanBulkUpdate:
    required:
    - updates
    type: object
    properties:
      updates:
        title: Updates
        type: object
  OptionalFloorPlanBulkUpdateSerializer:
    required:
    - updates
    type: object
    properties:
      updates:
        title: Updates
        type: object
  FloorPlanCeilingRasterPositionUpdate:
    required:
    - ceiling_raster_floorplan_origin_x
    - ceiling_raster_floorplan_origin_y
    - ceiling_raster_floorplan_angle_degrees
    type: object
    properties:
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
  OptionalFloorPlanCeilingRasterPositionUpdateSerializer:
    required:
    - ceiling_raster_floorplan_origin_x
    - ceiling_raster_floorplan_origin_y
    - ceiling_raster_floorplan_angle_degrees
    type: object
    properties:
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
  FloorPlanCeilingRasterUpdate:
    required:
    - ceiling_raster_key
    type: object
    properties:
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        minLength: 1
        x-nullable: true
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        maximum: 100
        minimum: 0
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
  OptionalFloorPlanCeilingRasterUpdateSerializer:
    required:
    - ceiling_raster_key
    type: object
    properties:
      ceiling_raster_key:
        title: Ceiling raster key
        type: string
        minLength: 1
        x-nullable: true
      ceiling_raster_floorplan_origin_x:
        title: Ceiling raster floorplan origin x
        type: number
      ceiling_raster_floorplan_origin_y:
        title: Ceiling raster floorplan origin y
        type: number
      ceiling_raster_floorplan_angle_degrees:
        title: Ceiling raster floorplan angle degrees
        type: number
      ceiling_raster_opacity_percent:
        title: Ceiling raster opacity percent
        type: integer
        maximum: 100
        minimum: 0
      ceiling_raster_notes:
        title: Ceiling raster notes
        type: string
      ceiling_raster_min_height_limit_meters:
        title: Ceiling raster min height limit meters
        type: number
      ceiling_raster_max_height_limit_meters:
        title: Ceiling raster max height limit meters
        type: number
  DoorwaySerializerPlanV2:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      plan_id:
        title: Plan id
        type: string
        readOnly: true
      plan_sensor_ids:
        title: Plan sensor ids
        type: string
        readOnly: true
      sensor_ids:
        title: Sensor ids
        type: string
        readOnly: true
      sensor_serial_numbers:
        title: Sensor serial numbers
        type: string
        readOnly: true
      spaces:
        title: Spaces
        type: object
        readOnly: true
      position_a_x_meters:
        title: Position a x meters
        type: number
        x-nullable: true
      position_a_y_meters:
        title: Position a y meters
        type: number
        x-nullable: true
      position_b_x_meters:
        title: Position b x meters
        type: number
        x-nullable: true
      position_b_y_meters:
        title: Position b y meters
        type: number
        x-nullable: true
      locked:
        title: Locked
        type: boolean
      notes:
        title: Notes
        type: string
      trigger_region:
        title: Trigger region
        type: string
        readOnly: true
      swings_into_fov:
        title: Swings into fov
        type: boolean
  PlanDXFAsset:
    required:
    - name
    - object_key
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        maxLength: 30
        minLength: 1
      content_type:
        title: Content type
        type: string
        minLength: 1
      object_key:
        title: Object key
        type: string
        minLength: 1
      object_url:
        title: Object url
        type: string
        format: uri
        readOnly: true
        minLength: 1
      layer_name:
        title: Layer name
        type: string
        x-nullable: true
      pixels_per_unit:
        title: Pixels per unit
        type: number
        x-nullable: true
  OptionalPlanDXFSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
      status:
        title: Status
        type: string
        enum:
        - complete
        - created
        - downloading
        - error
        - parsing_dxf
        - processing_dxfs
        - processing_images
        - timeout
      format:
        title: Format
        type: string
        enum:
        - autocad
        - plain
        - vectorworks
      options:
        title: Options
        type: object
      default_entry_sensor_layer:
        title: Default entry sensor layer
        type: string
      default_oa_sensor_layer:
        title: Default oa sensor layer
        type: string
      layer_names:
        title: Layer names
        type: object
      frozen_layer_names:
        title: Frozen layer names
        type: object
      length_unit:
        title: Length unit
        type: string
        enum:
        - centimeters
        - feet_and_inches
        - inches
        - meters
        - millimeters
      scale:
        title: Scale
        type: number
      extent_min_x:
        title: Extent min x
        type: number
      extent_min_y:
        title: Extent min y
        type: number
      extent_max_x:
        title: Extent max x
        type: number
      extent_max_y:
        title: Extent max y
        type: number
      dxf_version:
        title: Dxf version
        type: string
        maxLength: 255
      dxf_header:
        title: Dxf header
        type: object
      started_processing_at:
        title: Started processing at
        type: string
        format: date-time
        x-nullable: true
      completed_processing_at:
        title: Completed processing at
        type: string
        format: date-time
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      assets:
        type: array
        items:
          $ref: '#/definitions/PlanDXFAsset'
      sensor_placements:
        title: Sensor placements
        type: object
      areas_of_coverage:
        title: Areas of coverage
        type: object
      areas_of_coverage_merged:
        title: Areas of coverage merged
        type: object
      spaces:
        title: Spaces
        type: object
      data_tag_pair_method:
        title: Data tag pair method
        type: string
        enum:
        - attribs
        - position
        x-nullable: true
  PaginatedOptionalPlanDXFSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalPlanDXFSerializer'
  PlanDXFUpload:
    required:
    - uploaded_dxf_key
    type: object
    properties:
      uploaded_dxf_key:
        title: Uploaded dxf key
        type: string
        minLength: 1
      options:
        title: Options
        type: object
        default: {}
  OptionalPlanDXFUploadSerializer:
    required:
    - uploaded_dxf_key
    type: object
    properties:
      uploaded_dxf_key:
        title: Uploaded dxf key
        type: string
        minLength: 1
      options:
        title: Options
        type: object
        default: {}
  PlanDXF:
    type: object
    properties:
      id:
        title: Id
        type: integer
      status:
        title: Status
        type: string
        enum:
        - complete
        - created
        - downloading
        - error
        - parsing_dxf
        - processing_dxfs
        - processing_images
        - timeout
      format:
        title: Format
        type: string
        enum:
        - autocad
        - plain
        - vectorworks
      options:
        title: Options
        type: object
      default_entry_sensor_layer:
        title: Default entry sensor layer
        type: string
      default_oa_sensor_layer:
        title: Default oa sensor layer
        type: string
      layer_names:
        title: Layer names
        type: object
      frozen_layer_names:
        title: Frozen layer names
        type: object
      length_unit:
        title: Length unit
        type: string
        enum:
        - centimeters
        - feet_and_inches
        - inches
        - meters
        - millimeters
      scale:
        title: Scale
        type: number
      extent_min_x:
        title: Extent min x
        type: number
      extent_min_y:
        title: Extent min y
        type: number
      extent_max_x:
        title: Extent max x
        type: number
      extent_max_y:
        title: Extent max y
        type: number
      dxf_version:
        title: Dxf version
        type: string
        maxLength: 255
      dxf_header:
        title: Dxf header
        type: object
      started_processing_at:
        title: Started processing at
        type: string
        format: date-time
        x-nullable: true
      completed_processing_at:
        title: Completed processing at
        type: string
        format: date-time
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      assets:
        type: array
        items:
          $ref: '#/definitions/PlanDXFAsset'
      sensor_placements:
        title: Sensor placements
        type: object
      areas_of_coverage:
        title: Areas of coverage
        type: object
      areas_of_coverage_merged:
        title: Areas of coverage merged
        type: object
      spaces:
        title: Spaces
        type: object
      data_tag_pair_method:
        title: Data tag pair method
        type: string
        enum:
        - attribs
        - position
        x-nullable: true
  PlanDXFReprocess:
    type: object
    properties:
      options:
        title: Options
        type: object
  OptionalPlanDXFReprocessSerializer:
    type: object
    properties:
      options:
        title: Options
        type: object
  OptionalPlanEventSerializer:
    type: object
    properties:
      event_type:
        title: Event type
        type: string
        minLength: 1
      floorplan_id:
        title: Floorplan id
        type: string
        minLength: 1
      edited_entity_id:
        title: Edited entity id
        type: string
        minLength: 1
      user_email:
        title: User email
        type: string
        minLength: 1
      raw_payload:
        title: Raw payload
        type: object
  PaginatedOptionalPlanEventSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalPlanEventSerializer'
  PlanEvent:
    required:
    - event_type
    - floorplan_id
    - edited_entity_id
    - user_email
    type: object
    properties:
      event_type:
        title: Event type
        type: string
        minLength: 1
      floorplan_id:
        title: Floorplan id
        type: string
        minLength: 1
      edited_entity_id:
        title: Edited entity id
        type: string
        minLength: 1
      user_email:
        title: User email
        type: string
        minLength: 1
      raw_payload:
        title: Raw payload
        type: object
  OptionalPlanExportSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
      status:
        title: Status
        type: string
        enum:
        - complete
        - created
        - error
        - fetching
        - processing
        - timeout
        - uploading
      options:
        title: Options
        type: object
      content_type:
        title: Content type
        type: string
        minLength: 1
      started_processing_at:
        title: Started processing at
        type: string
        format: date-time
        x-nullable: true
      completed_processing_at:
        title: Completed processing at
        type: string
        format: date-time
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      exported_object_key:
        title: Exported object key
        type: string
        minLength: 1
      exported_object_url:
        title: Exported object url
        type: string
        format: uri
        readOnly: true
        minLength: 1
  PaginatedOptionalPlanExportSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalPlanExportSerializer'
  PlanExport:
    type: object
    properties:
      id:
        title: Id
        type: integer
      status:
        title: Status
        type: string
        enum:
        - complete
        - created
        - error
        - fetching
        - processing
        - timeout
        - uploading
      options:
        title: Options
        type: object
      content_type:
        title: Content type
        type: string
        minLength: 1
      started_processing_at:
        title: Started processing at
        type: string
        format: date-time
        x-nullable: true
      completed_processing_at:
        title: Completed processing at
        type: string
        format: date-time
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      exported_object_key:
        title: Exported object key
        type: string
        minLength: 1
      exported_object_url:
        title: Exported object url
        type: string
        format: uri
        readOnly: true
        minLength: 1
  FloorPlanImageUpdate:
    required:
    - image_key
    - image_width_pixels
    - image_height_pixels
    type: object
    properties:
      image_key:
        title: Image key
        type: string
        minLength: 1
      source_pdf_key:
        title: Source pdf key
        type: string
        x-nullable: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      image_width_pixels:
        title: Image width pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_height_pixels:
        title: Image height pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        minLength: 1
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        minLength: 1
  OptionalFloorPlanImageUpdateSerializer:
    required:
    - image_key
    type: object
    properties:
      image_key:
        title: Image key
        type: string
        minLength: 1
      source_pdf_key:
        title: Source pdf key
        type: string
        x-nullable: true
      source_pdf_page:
        title: Source pdf page
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      image_width_pixels:
        title: Image width pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_height_pixels:
        title: Image height pixels
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      origin_angle_degrees:
        title: Origin angle degrees
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        minLength: 1
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        minLength: 1
  Photo:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      url:
        title: Url
        type: string
        format: uri
        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
  OptionalPhotoGroupSerialzer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      notes:
        title: Notes
        type: string
      photos:
        type: array
        items:
          $ref: '#/definitions/Photo'
        readOnly: true
      photo_ids:
        type: array
        items:
          type: string
          minLength: 1
      locked:
        title: Locked
        type: boolean
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  PaginatedOptionalPhotoGroupSerialzer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalPhotoGroupSerialzer'
  PhotoGroupSerialzer:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      notes:
        title: Notes
        type: string
      photos:
        type: array
        items:
          $ref: '#/definitions/Photo'
        readOnly: true
      photo_ids:
        type: array
        items:
          type: string
          minLength: 1
      locked:
        title: Locked
        type: boolean
      origin_x_pixels:
        title: Origin x pixels
        type: number
      origin_y_pixels:
        title: Origin y pixels
        type: number
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  OptionalPhotoSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      url:
        title: Url
        type: string
        format: uri
        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
  OptionalReferenceHeightSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
      enabled:
        title: Enabled
        type: boolean
      position_x_meters:
        title: Position x meters
        type: number
      position_y_meters:
        title: Position y meters
        type: number
  PaginatedOptionalReferenceHeightSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalReferenceHeightSerializer'
  ReferenceHeightSerializerV2:
    required:
    - position_x_meters
    - position_y_meters
    type: object
    properties:
      id:
        title: Id
        type: integer
      enabled:
        title: Enabled
        type: boolean
      position_x_meters:
        title: Position x meters
        type: number
      position_y_meters:
        title: Position y meters
        type: number
  OptionalReferenceRulerSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
      enabled:
        title: Enabled
        type: boolean
      position_a_x_meters:
        title: Position a x meters
        type: number
      position_a_y_meters:
        title: Position a y meters
        type: number
      position_b_x_meters:
        title: Position b x meters
        type: number
      position_b_y_meters:
        title: Position b y meters
        type: number
      position_label_x_meters:
        title: Position label x meters
        type: number
      position_label_y_meters:
        title: Position label y meters
        type: number
  PaginatedOptionalReferenceRulerSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalReferenceRulerSerializer'
  ReferenceRulerSerializerV2:
    required:
    - position_a_x_meters
    - position_a_y_meters
    - position_b_x_meters
    - position_b_y_meters
    type: object
    properties:
      id:
        title: Id
        type: integer
      enabled:
        title: Enabled
        type: boolean
      position_a_x_meters:
        title: Position a x meters
        type: number
      position_a_y_meters:
        title: Position a y meters
        type: number
      position_b_x_meters:
        title: Position b x meters
        type: number
      position_b_y_meters:
        title: Position b y meters
        type: number
      position_label_x_meters:
        title: Position label x meters
        type: number
      position_label_y_meters:
        title: Position label y meters
        type: number
  FloorPlanScaleUpdate:
    required:
    - image_pixels_per_meter
    - measurement_point_a_x_pixels
    - measurement_point_a_y_pixels
    - measurement_point_b_x_pixels
    - measurement_point_b_y_pixels
    - measurement_computed_length_meters
    - measurement_user_entered_length_inches
    - measurement_user_entered_length_feet
    type: object
    properties:
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        minLength: 1
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        minLength: 1
  OptionalFloorPlanScaleUpdateSerializer:
    required:
    - image_pixels_per_meter
    - measurement_point_a_x_pixels
    - measurement_point_a_y_pixels
    - measurement_point_b_x_pixels
    - measurement_point_b_y_pixels
    - measurement_computed_length_meters
    - measurement_user_entered_length_inches
    - measurement_user_entered_length_feet
    type: object
    properties:
      image_pixels_per_meter:
        title: Image pixels per meter
        type: number
      measurement_point_a_x_pixels:
        title: Measurement point a x pixels
        type: number
      measurement_point_a_y_pixels:
        title: Measurement point a y pixels
        type: number
      measurement_point_b_x_pixels:
        title: Measurement point b x pixels
        type: number
      measurement_point_b_y_pixels:
        title: Measurement point b y pixels
        type: number
      measurement_computed_length_meters:
        title: Measurement computed length meters
        type: number
      measurement_user_entered_length_inches:
        title: Measurement user entered length inches
        type: string
        minLength: 1
      measurement_user_entered_length_feet:
        title: Measurement user entered length feet
        type: string
        minLength: 1
  OptionalPlanSensorSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
      sensor_type:
        title: Sensor type
        type: string
        enum:
        - entry
        - oa
        - waffle
      sensor_function:
        title: Sensor function
        type: string
        enum:
        - oalr
        - oa
        - oasr
        - oe
        - entry
        - waffle
      sensor_hardware_type:
        title: Sensor hardware type
        type: string
        enum:
        - oa1b
        - oa1
        - s5b
        - s5
        - w1
      locked:
        title: Locked
        type: boolean
      sensor_serial_number:
        title: Sensor serial number
        type: string
        x-nullable: true
      centroid_from_origin_x_meters:
        title: Centroid from origin x meters
        type: number
        x-nullable: true
      centroid_from_origin_y_meters:
        title: Centroid from origin y meters
        type: number
        x-nullable: true
      rotation:
        title: Rotation
        type: number
        x-nullable: true
      height_meters:
        title: Height meters
        type: number
        x-nullable: true
      diagnostic_info:
        title: Diagnostic info
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        readOnly: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        readOnly: true
      notes:
        title: Notes
        type: string
      plan_sensor_index:
        title: Plan sensor index
        type: integer
        readOnly: true
      cad_id:
        title: Cad id
        type: string
        default: ''
      bounding_box_filter:
        title: Bounding box filter
        type: string
        enum:
        - none
        - cloud
        - device
      doorway_id:
        title: Doorway id
        type: string
        readOnly: true
        x-nullable: true
      clipped_fov:
        title: Clipped fov
        type: string
        readOnly: true
      doorway_clipped_fov:
        title: Doorway clipped fov
        type: string
        readOnly: true
      noise_polygons:
        title: Noise polygons
        type: string
        readOnly: true
  PaginatedOptionalPlanSensorSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalPlanSensorSerializer'
  PlanSensorSerializerV2:
    type: object
    properties:
      id:
        title: Id
        type: integer
      sensor_type:
        title: Sensor type
        type: string
        enum:
        - entry
        - oa
        - waffle
      sensor_function:
        title: Sensor function
        type: string
        enum:
        - oalr
        - oa
        - oasr
        - oe
        - entry
        - waffle
      sensor_hardware_type:
        title: Sensor hardware type
        type: string
        enum:
        - oa1b
        - oa1
        - s5b
        - s5
        - w1
      locked:
        title: Locked
        type: boolean
      sensor_serial_number:
        title: Sensor serial number
        type: string
        x-nullable: true
      centroid_from_origin_x_meters:
        title: Centroid from origin x meters
        type: number
        x-nullable: true
      centroid_from_origin_y_meters:
        title: Centroid from origin y meters
        type: number
        x-nullable: true
      rotation:
        title: Rotation
        type: number
        x-nullable: true
      height_meters:
        title: Height meters
        type: number
        x-nullable: true
      diagnostic_info:
        title: Diagnostic info
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        readOnly: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        readOnly: true
      notes:
        title: Notes
        type: string
      plan_sensor_index:
        title: Plan sensor index
        type: integer
        readOnly: true
      cad_id:
        title: Cad id
        type: string
        default: ''
      bounding_box_filter:
        title: Bounding box filter
        type: string
        enum:
        - none
        - cloud
        - device
      doorway_id:
        title: Doorway id
        type: string
        readOnly: true
        x-nullable: true
      clipped_fov:
        title: Clipped fov
        type: string
        readOnly: true
      doorway_clipped_fov:
        title: Doorway clipped fov
        type: string
        readOnly: true
      noise_polygons:
        title: Noise polygons
        type: string
        readOnly: true
  SpaceLabel:
    required:
    - name
    type: object
    properties:
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      id:
        title: Id
        type: integer
        readOnly: true
  OptionalSpaceSerializer:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        minLength: 1
      meta:
        title: Meta
        type: object
        x-nullable: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      function:
        title: Function
        type: string
        enum:
        - break_room
        - cafe
        - desk
        - desk_neighborhood
        - enclosed_workspace
        - event_space
        - games_room
        - gym
        - kitchen
        - lab
        - library
        - lounge
        - meeting_room
        - open_collaboration_space
        - open_workspace
        - other
        - outdoor
        - phone_booth
        - reception
        - restroom
        - retail
        - servery
        - theater
        - utility_room
        - wellness_room
        - flex_space
        x-nullable: true
      binary_occupancy:
        title: Binary occupancy
        type: boolean
        default: false
      labels:
        type: array
        items:
          $ref: '#/definitions/SpaceLabel'
      label_ids:
        type: array
        items:
          type: integer
      locked:
        title: Locked
        type: boolean
      shape:
        title: Shape
        type: string
        enum:
        - polygon
        - circle
      polygon_verticies:
        title: Polygon verticies
        type: object
      circle_centroid_x_meters:
        title: Circle centroid x meters
        type: number
        x-nullable: true
      circle_centroid_y_meters:
        title: Circle centroid y meters
        type: number
        x-nullable: true
      circle_radius_meters:
        title: Circle radius meters
        type: number
        x-nullable: true
      area_id:
        title: Area id
        type: integer
      counting_mode:
        title: Counting mode
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      iwms_id:
        title: Iwms id
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      presence_debounce_enabled:
        title: Presence debounce enabled
        type: boolean
      presence_debounce_true_ms:
        title: Presence debounce true ms
        type: integer
        minimum: 0
        x-nullable: true
      presence_debounce_false_ms:
        title: Presence debounce false ms
        type: integer
        minimum: 0
        x-nullable: true
  PaginatedOptionalSpaceSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSpaceSerializer'
  SpaceSerializerPlansV2:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
      name:
        title: Name
        type: string
        minLength: 1
      meta:
        title: Meta
        type: object
        x-nullable: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      function:
        title: Function
        type: string
        enum:
        - break_room
        - cafe
        - desk
        - desk_neighborhood
        - enclosed_workspace
        - event_space
        - games_room
        - gym
        - kitchen
        - lab
        - library
        - lounge
        - meeting_room
        - open_collaboration_space
        - open_workspace
        - other
        - outdoor
        - phone_booth
        - reception
        - restroom
        - retail
        - servery
        - theater
        - utility_room
        - wellness_room
        - flex_space
        x-nullable: true
      binary_occupancy:
        title: Binary occupancy
        type: boolean
        default: false
      labels:
        type: array
        items:
          $ref: '#/definitions/SpaceLabel'
      label_ids:
        type: array
        items:
          type: integer
      locked:
        title: Locked
        type: boolean
      shape:
        title: Shape
        type: string
        enum:
        - polygon
        - circle
      polygon_verticies:
        title: Polygon verticies
        type: object
      circle_centroid_x_meters:
        title: Circle centroid x meters
        type: number
        x-nullable: true
      circle_centroid_y_meters:
        title: Circle centroid y meters
        type: number
        x-nullable: true
      circle_radius_meters:
        title: Circle radius meters
        type: number
        x-nullable: true
      area_id:
        title: Area id
        type: integer
      counting_mode:
        title: Counting mode
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      iwms_id:
        title: Iwms id
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      presence_debounce_enabled:
        title: Presence debounce enabled
        type: boolean
      presence_debounce_true_ms:
        title: Presence debounce true ms
        type: integer
        minimum: 0
        x-nullable: true
      presence_debounce_false_ms:
        title: Presence debounce false ms
        type: integer
        minimum: 0
        x-nullable: true
  BulkSpacePresenceDebounce:
    required:
    - presence_debounce_enabled
    type: object
    properties:
      presence_debounce_enabled:
        title: Presence debounce enabled
        type: boolean
      presence_debounce_true_ms:
        title: Presence debounce true ms
        type: integer
        minimum: 0
        x-nullable: true
      presence_debounce_false_ms:
        title: Presence debounce false ms
        type: integer
        minimum: 0
        x-nullable: true
      include_locked:
        title: Include locked
        description: When false (default), locked spaces on the floor are skipped.
        type: boolean
        default: false
  OptionalBulkSpacePresenceDebounceSerializer:
    required:
    - presence_debounce_enabled
    type: object
    properties:
      presence_debounce_enabled:
        title: Presence debounce enabled
        type: boolean
      presence_debounce_true_ms:
        title: Presence debounce true ms
        type: integer
        minimum: 0
        x-nullable: true
      presence_debounce_false_ms:
        title: Presence debounce false ms
        type: integer
        minimum: 0
        x-nullable: true
      include_locked:
        title: Include locked
        description: When false (default), locked spaces on the floor are skipped.
        type: boolean
        default: false
  TriggerRegion:
    type: object
    properties:
      doorway_id:
        title: Doorway id
        type: string
        minLength: 1
        x-nullable: true
      push_to_doorway:
        title: Push to doorway
        type: boolean
        default: false
        x-nullable: true
  OptionalTriggerRegionSerializer:
    type: object
    properties:
      doorway_id:
        title: Doorway id
        type: string
        minLength: 1
        x-nullable: true
      push_to_doorway:
        title: Push to doorway
        type: boolean
        default: false
        x-nullable: true
  OptionalWafflePlanSensorSerializer:
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        maxLength: 255
        minLength: 1
      diagnostic_info:
        title: Diagnostic info
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - unconfigured
        - online
        - error
        - low_power
        - archived
      centroid_from_origin_x_meters:
        title: Centroid from origin x meters
        type: string
        readOnly: true
      centroid_from_origin_y_meters:
        title: Centroid from origin y meters
        type: string
        readOnly: true
      space_id:
        title: Space id
        type: string
        readOnly: true
  PaginatedOptionalWafflePlanSensorSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalWafflePlanSensorSerializer'
  OptionalWallSegmentSerializer:
    required:
    - position_a_x_meters
    - position_a_y_meters
    - position_b_x_meters
    - position_b_y_meters
    type: object
    properties:
      id:
        title: Id
        type: integer
      type:
        title: Type
        type: string
        enum:
        - doorway
        - wall
        x-nullable: true
      position_a_x_meters:
        title: Position a x meters
        type: number
      position_a_y_meters:
        title: Position a y meters
        type: number
      position_b_x_meters:
        title: Position b x meters
        type: number
      position_b_y_meters:
        title: Position b y meters
        type: number
  PaginatedOptionalWallSegmentSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalWallSegmentSerializer'
  WallSegment:
    required:
    - position_a_x_meters
    - position_a_y_meters
    - position_b_x_meters
    - position_b_y_meters
    type: object
    properties:
      id:
        title: Id
        type: integer
      type:
        title: Type
        type: string
        enum:
        - doorway
        - wall
        x-nullable: true
      position_a_x_meters:
        title: Position a x meters
        type: number
      position_a_y_meters:
        title: Position a y meters
        type: number
      position_b_x_meters:
        title: Position b x meters
        type: number
      position_b_y_meters:
        title: Position b y meters
        type: number
  OptionalAccessPointSerializer:
    required:
    - service_id
    - doorway_space_link_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      doorway_mapping_id:
        title: Doorway mapping id
        type: integer
        x-nullable: true
      service_id:
        title: Service id
        type: integer
      doorway_space_link_id:
        title: Doorway space link id
        type: integer
      target_event_trajectory:
        title: Target event trajectory
        type: string
        readOnly: true
      doorway:
        title: Doorway
        type: string
        readOnly: true
      space:
        title: Space
        type: string
        readOnly: true
      service:
        title: Service
        type: string
        readOnly: true
  PaginatedOptionalAccessPointSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalAccessPointSerializer'
  AccessPoint:
    required:
    - service_id
    - doorway_space_link_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      doorway_mapping_id:
        title: Doorway mapping id
        type: integer
        x-nullable: true
      service_id:
        title: Service id
        type: integer
      doorway_space_link_id:
        title: Doorway space link id
        type: integer
      target_event_trajectory:
        title: Target event trajectory
        type: string
        readOnly: true
      doorway:
        title: Doorway
        type: string
        readOnly: true
      space:
        title: Space
        type: string
        readOnly: true
      service:
        title: Service
        type: string
        readOnly: true
  OptionalDoorwayMappingSerializer:
    required:
    - service_id
    - doorway_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      service_id:
        title: Service id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      service_doorway_id:
        title: Service doorway id
        type: string
        maxLength: 200
        minLength: 1
  PaginatedOptionalDoorwayMappingSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalDoorwayMappingSerializer'
  DoorwayMapping:
    required:
    - service_id
    - doorway_id
    - service_doorway_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      service_id:
        title: Service id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      service_doorway_id:
        title: Service doorway id
        type: string
        maxLength: 200
        minLength: 1
  OptionalServiceAuthorizationSerializer:
    required:
    - default
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      credentials:
        title: Credentials
        type: string
        readOnly: true
      last_sync:
        title: Last sync
        type: string
        format: date-time
        x-nullable: true
      default:
        title: Default
        type: boolean
      user:
        title: User
        type: string
        readOnly: true
  ServiceAuthorization:
    required:
    - default
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      credentials:
        title: Credentials
        type: string
        readOnly: true
      last_sync:
        title: Last sync
        type: string
        format: date-time
        x-nullable: true
      default:
        title: Default
        type: boolean
      user:
        title: User
        type: string
        readOnly: true
  OptionalSpaceMappingSerializer:
    required:
    - service_id
    - space_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      service_id:
        title: Service id
        type: integer
      space_id:
        title: Space id
        type: integer
      service_space_id:
        title: Service space id
        type: string
        maxLength: 200
        minLength: 1
      service_space_name:
        title: Service space name
        type: string
        readOnly: true
      meta:
        title: Meta
        type: object
  PaginatedOptionalSpaceMappingSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSpaceMappingSerializer'
  SpaceMapping:
    required:
    - service_id
    - space_id
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      service_id:
        title: Service id
        type: integer
      space_id:
        title: Space id
        type: integer
      service_space_id:
        title: Service space id
        type: string
        maxLength: 200
        minLength: 1
      service_space_name:
        title: Service space name
        type: string
        readOnly: true
      meta:
        title: Meta
        type: object
  LabelSpace:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
  OptionalLabelListSerializer:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        minLength: 1
      group:
        title: Group
        type: string
        readOnly: true
      spaces:
        type: array
        items:
          $ref: '#/definitions/LabelSpace'
        readOnly: true
  PaginatedOptionalLabelListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalLabelListSerializer'
  LabelList:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        minLength: 1
      group:
        title: Group
        type: string
        readOnly: true
      spaces:
        type: array
        items:
          $ref: '#/definitions/LabelSpace'
        readOnly: true
  OptionalLabelGroupListSerializer:
    required:
    - name
    type: object
    properties:
      name:
        title: Name
        type: string
        minLength: 1
      id:
        title: Id
        type: integer
        readOnly: true
      labels:
        title: Labels
        type: string
        readOnly: true
  PaginatedOptionalLabelGroupListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalLabelGroupListSerializer'
  LabelGroupList:
    required:
    - name
    type: object
    properties:
      name:
        title: Name
        type: string
        minLength: 1
      id:
        title: Id
        type: integer
        readOnly: true
      labels:
        title: Labels
        type: string
        readOnly: true
  OptionalLabelGroupDetailSerializer:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        minLength: 1
      labels:
        title: Labels
        type: string
        readOnly: true
  LabelGroupDetail:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        minLength: 1
      labels:
        title: Labels
        type: string
        readOnly: true
  OptionalLabelDetailSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      group:
        title: Group
        type: string
        readOnly: true
      spaces:
        type: array
        items:
          $ref: '#/definitions/LabelSpace'
        readOnly: true
  LabelDetail:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      group:
        title: Group
        type: string
        readOnly: true
      spaces:
        type: array
        items:
          $ref: '#/definitions/LabelSpace'
        readOnly: true
  LinkSerializerV2:
    required:
    - space_id
    - doorway_id
    - sensor_placement
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      space_id:
        title: Space id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      space_name:
        title: Space name
        type: string
        readOnly: true
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      sensor_placement:
        title: Sensor placement
        type: integer
        enum:
        - 1
        - -1
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      update_historical:
        title: Update historical
        type: boolean
        default: false
  NotificationUser:
    type: object
    properties:
      id:
        title: Id
        type: integer
  NotificationRecipient:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      notification_id:
        title: Notification id
        type: integer
      user:
        $ref: '#/definitions/NotificationUser'
      sms_enabled:
        title: Sms enabled
        type: boolean
      email_enabled:
        title: Email enabled
        type: boolean
      push_notification_enabled:
        title: Push notification enabled
        type: boolean
      sms_to_num:
        title: Sms to num
        type: string
        maxLength: 128
        x-nullable: true
      email_address:
        title: Email address
        type: string
        format: email
        maxLength: 254
        x-nullable: true
      email_unsubscribed:
        title: Email unsubscribed
        type: boolean
      sms_unsubscribed:
        title: Sms unsubscribed
        type: boolean
      email_unsubscribed_all:
        title: Email unsubscribed all
        type: string
        readOnly: true
      sms_unsubscribed_all:
        title: Sms unsubscribed all
        type: string
        readOnly: true
  NotificationSerializerV2:
    required:
    - notification_recipients
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      enabled:
        title: Enabled
        type: boolean
        x-nullable: true
      trigger_value:
        title: Trigger value
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      space_id:
        title: Space id
        type: integer
      space_name:
        title: Space name
        type: string
        readOnly: true
      is_one_shot:
        title: Is one shot
        type: boolean
        x-nullable: true
      cooldown:
        title: Cooldown
        type: integer
        maximum: 2147483647
        minimum: -2147483648
      trigger_type:
        title: Trigger type
        type: string
        enum:
        - greater_than
        - less_than
        - equal_to
      notification_recipients:
        type: array
        items:
          $ref: '#/definitions/NotificationRecipient'
      trigger_metric:
        title: Trigger metric
        type: string
        enum:
        - occupancy
        - utilization
        - events
        - rate_of_entry
      trigger_comparison:
        title: Trigger comparison
        type: string
        enum:
        - greater_than
        - less_than
        - equal_to
      trigger_space_capacity_type:
        title: Trigger space capacity type
        type: string
        enum:
        - target
        - legal
        - safe
        x-nullable: true
      trigger_duration_minutes:
        title: Trigger duration minutes
        type: integer
        maximum: 32767
        minimum: 0
        x-nullable: true
      trigger_event_direction:
        title: Trigger event direction
        type: integer
        maximum: 32767
        minimum: -32768
        x-nullable: true
      restart_count_at_daily_reset:
        title: Restart count at daily reset
        type: boolean
        x-nullable: true
      escalation_threshold:
        title: Escalation threshold
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      message_template:
        title: Message template
        type: string
        readOnly: true
        minLength: 1
  OptionalNotificationRecipientSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      notification_id:
        title: Notification id
        type: integer
      user:
        $ref: '#/definitions/NotificationUser'
      sms_enabled:
        title: Sms enabled
        type: boolean
      email_enabled:
        title: Email enabled
        type: boolean
      push_notification_enabled:
        title: Push notification enabled
        type: boolean
      sms_to_num:
        title: Sms to num
        type: string
        maxLength: 128
        x-nullable: true
      email_address:
        title: Email address
        type: string
        format: email
        maxLength: 254
        x-nullable: true
      email_unsubscribed:
        title: Email unsubscribed
        type: boolean
      sms_unsubscribed:
        title: Sms unsubscribed
        type: boolean
      email_unsubscribed_all:
        title: Email unsubscribed all
        type: string
        readOnly: true
      sms_unsubscribed_all:
        title: Sms unsubscribed all
        type: string
        readOnly: true
  OptionalOAPlanSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      data:
        title: Data
        type: object
      migrated:
        title: Migrated
        type: boolean
        x-nullable: true
      migrated_to_space_id:
        title: Migrated to space id
        type: integer
  PaginatedOptionalOAPlanSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalOAPlanSerializer'
  OAPlan:
    required:
    - data
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      data:
        title: Data
        type: object
      migrated:
        title: Migrated
        type: boolean
        x-nullable: true
      migrated_to_space_id:
        title: Migrated to space id
        type: integer
  SpaceIDOnly:
    type: object
    properties: {}
  OptionalSensorAlertPreferenceSerializer:
    type: object
    properties:
      alert_type:
        title: Alert type
        type: string
        enum:
        - offline_sensor
        - waffle_fallen
      frequency:
        title: Frequency
        type: string
        enum:
        - once
        - daily
        - weekly
      spaces:
        type: array
        items:
          $ref: '#/definitions/SpaceIDOnly'
      is_enabled:
        title: Is enabled
        type: boolean
      last_alerted_at:
        title: Last alerted at
        description: When the last digest email was sent (used for daily/weekly throttling).
        type: string
        format: date-time
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  SensorAlertPreference:
    required:
    - alert_type
    type: object
    properties:
      alert_type:
        title: Alert type
        type: string
        enum:
        - offline_sensor
        - waffle_fallen
      frequency:
        title: Frequency
        type: string
        enum:
        - once
        - daily
        - weekly
      spaces:
        type: array
        items:
          $ref: '#/definitions/SpaceIDOnly'
      is_enabled:
        title: Is enabled
        type: boolean
      last_alerted_at:
        title: Last alerted at
        description: When the last digest email was sent (used for daily/weekly throttling).
        type: string
        format: date-time
        readOnly: true
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  OptionalSensorListSerializer:
    required:
    - serial_number
    - organization_id
    - sensor_type
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        minLength: 1
      uuid:
        title: UUID
        type: string
        maxLength: 40
        x-nullable: true
      organization_id:
        title: Organization id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      sensor_type:
        title: Sensor type
        type: string
        pattern: \A[a-zA-Z0-9_-]{1,12}$
        minLength: 1
      device_function:
        title: Device function
        type: string
        readOnly: true
      kind:
        title: Kind
        type: string
        readOnly: true
      hardware_model:
        title: Hardware model
        type: string
        readOnly: true
      is_virtual:
        title: Is virtual
        type: string
        readOnly: true
      is_simulated:
        title: Is simulated
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - unconfigured
        - online
        - error
        - low_power
        - archived
      last_heartbeat:
        title: Last heartbeat
        type: string
        format: date-time
      current_disposition:
        title: Current disposition
        type: string
        readOnly: true
      network_addresses:
        title: Network addresses
        type: string
        readOnly: true
      firmware_version:
        title: Firmware version
        type: string
        readOnly: true
      latest_config_change:
        title: Latest config change
        type: string
        readOnly: true
      operating_system:
        title: Operating system
        type: string
        readOnly: true
      plan_sensor_id:
        title: Plan sensor id
        type: string
        readOnly: true
      plan_sensor_plan_id:
        title: Plan sensor plan id
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      space_ids:
        title: Space ids
        type: string
        readOnly: true
  PaginatedOptionalSensorListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSensorListSerializer'
  SensorList:
    required:
    - serial_number
    - organization_id
    - sensor_type
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        minLength: 1
      uuid:
        title: UUID
        type: string
        maxLength: 40
        x-nullable: true
      organization_id:
        title: Organization id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      sensor_type:
        title: Sensor type
        type: string
        pattern: \A[a-zA-Z0-9_-]{1,12}$
        minLength: 1
      device_function:
        title: Device function
        type: string
        readOnly: true
      kind:
        title: Kind
        type: string
        readOnly: true
      hardware_model:
        title: Hardware model
        type: string
        readOnly: true
      is_virtual:
        title: Is virtual
        type: string
        readOnly: true
      is_simulated:
        title: Is simulated
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - unconfigured
        - online
        - error
        - low_power
        - archived
        readOnly: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        format: date-time
      current_disposition:
        title: Current disposition
        type: string
        readOnly: true
      network_addresses:
        title: Network addresses
        type: string
        readOnly: true
      firmware_version:
        title: Firmware version
        type: string
        readOnly: true
      latest_config_change:
        title: Latest config change
        type: string
        readOnly: true
      operating_system:
        title: Operating system
        type: string
        readOnly: true
      plan_sensor_id:
        title: Plan sensor id
        type: string
        readOnly: true
      plan_sensor_plan_id:
        title: Plan sensor plan id
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      space_ids:
        title: Space ids
        type: string
        readOnly: true
  OptionalBatchSensorConfigSerializer:
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        maxLength: 255
        minLength: 1
      organization_id:
        title: Organization id
        type: string
        readOnly: true
      organization_name:
        title: Organization name
        type: string
        readOnly: true
      reported_config:
        title: Reported config
        type: string
        readOnly: true
      assigned_config:
        title: Assigned config
        type: string
        readOnly: true
  PaginatedOptionalBatchSensorConfigSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalBatchSensorConfigSerializer'
  BatchSensorConfig:
    required:
    - serial_number
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        maxLength: 255
        minLength: 1
      organization_id:
        title: Organization id
        type: string
        readOnly: true
      organization_name:
        title: Organization name
        type: string
        readOnly: true
      reported_config:
        title: Reported config
        type: string
        readOnly: true
      assigned_config:
        title: Assigned config
        type: string
        readOnly: true
  OptionalSensorStatusHistorySerializer:
    required:
    - sensor_serial_number
    type: object
    properties:
      timestamp:
        title: Timestamp
        type: string
        format: date-time
      online:
        title: Online
        type: boolean
      low_power:
        title: Low power
        type: boolean
      sensor_id:
        title: Sensor id
        type: string
        readOnly: true
      sensor_serial_number:
        title: Sensor serial number
        type: string
        minLength: 1
  PaginatedOptionalSensorStatusHistorySerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSensorStatusHistorySerializer'
  SensorStatusHistory:
    required:
    - online
    - sensor_serial_number
    type: object
    properties:
      timestamp:
        title: Timestamp
        type: string
        format: date-time
      online:
        title: Online
        type: boolean
      low_power:
        title: Low power
        type: boolean
      sensor_id:
        title: Sensor id
        type: string
        readOnly: true
      sensor_serial_number:
        title: Sensor serial number
        type: string
        minLength: 1
  OptionalSensorDetailSerializer:
    required:
    - serial_number
    - organization_id
    - sensor_type
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        minLength: 1
      uuid:
        title: UUID
        type: string
        maxLength: 40
        x-nullable: true
      organization_id:
        title: Organization id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      sensor_type:
        title: Sensor type
        type: string
        pattern: \A[a-zA-Z0-9_-]{1,12}$
        minLength: 1
      device_function:
        title: Device function
        type: string
        readOnly: true
      kind:
        title: Kind
        type: string
        readOnly: true
      hardware_model:
        title: Hardware model
        type: string
        readOnly: true
      is_virtual:
        title: Is virtual
        type: string
        readOnly: true
      is_simulated:
        title: Is simulated
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - unconfigured
        - online
        - error
        - low_power
        - archived
      last_heartbeat:
        title: Last heartbeat
        type: string
        format: date-time
      current_disposition:
        title: Current disposition
        type: string
        readOnly: true
      network_addresses:
        title: Network addresses
        type: string
        readOnly: true
      firmware_version:
        title: Firmware version
        type: string
        readOnly: true
      latest_config_change:
        title: Latest config change
        type: string
        readOnly: true
      operating_system:
        title: Operating system
        type: string
        readOnly: true
      plan_sensor_id:
        title: Plan sensor id
        type: string
        readOnly: true
      plan_sensor_plan_id:
        title: Plan sensor plan id
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      space_ids:
        title: Space ids
        type: string
        readOnly: true
      use_legacy_status:
        title: Use legacy status
        description: 'Use Legacy Status: Enable this if the sensor should use the
          legacy status mechanism via heartbeats/check-ins.'
        type: boolean
  SensorDetail:
    required:
    - serial_number
    - organization_id
    - sensor_type
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        minLength: 1
      uuid:
        title: UUID
        type: string
        maxLength: 40
        x-nullable: true
      organization_id:
        title: Organization id
        type: integer
      doorway_id:
        title: Doorway id
        type: integer
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      sensor_type:
        title: Sensor type
        type: string
        pattern: \A[a-zA-Z0-9_-]{1,12}$
        minLength: 1
      device_function:
        title: Device function
        type: string
        readOnly: true
      kind:
        title: Kind
        type: string
        readOnly: true
      hardware_model:
        title: Hardware model
        type: string
        readOnly: true
      is_virtual:
        title: Is virtual
        type: string
        readOnly: true
      is_simulated:
        title: Is simulated
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        enum:
        - unconfigured
        - online
        - error
        - low_power
        - archived
        readOnly: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        format: date-time
      current_disposition:
        title: Current disposition
        type: string
        readOnly: true
      network_addresses:
        title: Network addresses
        type: string
        readOnly: true
      firmware_version:
        title: Firmware version
        type: string
        readOnly: true
      latest_config_change:
        title: Latest config change
        type: string
        readOnly: true
      operating_system:
        title: Operating system
        type: string
        readOnly: true
      plan_sensor_id:
        title: Plan sensor id
        type: string
        readOnly: true
      plan_sensor_plan_id:
        title: Plan sensor plan id
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      space_ids:
        title: Space ids
        type: string
        readOnly: true
      use_legacy_status:
        title: Use legacy status
        description: 'Use Legacy Status: Enable this if the sensor should use the
          legacy status mechanism via heartbeats/check-ins.'
        type: boolean
  PaginatedOptionalCommandSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalCommandSerializer'
  SensorAlgoConfig:
    required:
    - algo_config
    type: object
    properties:
      installation_id:
        title: Installation id
        type: integer
        minimum: 1
      algo_config:
        title: Algo config
        type: object
  OptionalSensorAlgoConfigSerializer:
    required:
    - algo_config
    type: object
    properties:
      installation_id:
        title: Installation id
        type: integer
        minimum: 1
      algo_config:
        title: Algo config
        type: object
  OptionalSensorDiagnosticsSerializer:
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        readOnly: true
        minLength: 1
      organization_id:
        title: Organization id
        type: integer
        readOnly: true
      organization_name:
        title: Organization name
        type: string
        readOnly: true
      doorway_id:
        title: Doorway id
        type: integer
        readOnly: true
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      last_counted:
        title: Last counted
        type: string
        readOnly: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        readOnly: true
      current_status:
        title: Current status
        type: string
        readOnly: true
      current_disposition:
        title: Current disposition
        type: string
        readOnly: true
      reported_config:
        title: Reported config
        type: string
        readOnly: true
      assigned_config:
        title: Assigned config
        type: string
        readOnly: true
      network_addresses:
        title: Network addresses
        type: string
        readOnly: true
      capture_status:
        title: Capture status
        type: string
        readOnly: true
      config_version:
        title: Config version
        type: string
        readOnly: true
      dev_function:
        title: Dev function
        type: string
        readOnly: true
      fan_on:
        title: Fan on
        type: string
        readOnly: true
      hw_type:
        title: Hw type
        type: string
        readOnly: true
      low_power_mode:
        title: Low power mode
        type: string
        readOnly: true
      noise_score:
        title: Noise score
        type: string
        readOnly: true
      os:
        title: Os
        type: string
        readOnly: true
      zone:
        title: Zone
        type: string
        readOnly: true
      orientation:
        title: Orientation
        type: string
        readOnly: true
      brightness:
        title: Brightness
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  SensorDiagnostics:
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        readOnly: true
        minLength: 1
      organization_id:
        title: Organization id
        type: integer
        readOnly: true
      organization_name:
        title: Organization name
        type: string
        readOnly: true
      doorway_id:
        title: Doorway id
        type: integer
        readOnly: true
      doorway_name:
        title: Doorway name
        type: string
        readOnly: true
      last_counted:
        title: Last counted
        type: string
        readOnly: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        readOnly: true
      current_status:
        title: Current status
        type: string
        readOnly: true
      current_disposition:
        title: Current disposition
        type: string
        readOnly: true
      reported_config:
        title: Reported config
        type: string
        readOnly: true
      assigned_config:
        title: Assigned config
        type: string
        readOnly: true
      network_addresses:
        title: Network addresses
        type: string
        readOnly: true
      capture_status:
        title: Capture status
        type: string
        readOnly: true
      config_version:
        title: Config version
        type: string
        readOnly: true
      dev_function:
        title: Dev function
        type: string
        readOnly: true
      fan_on:
        title: Fan on
        type: string
        readOnly: true
      hw_type:
        title: Hw type
        type: string
        readOnly: true
      low_power_mode:
        title: Low power mode
        type: string
        readOnly: true
      noise_score:
        title: Noise score
        type: string
        readOnly: true
      os:
        title: Os
        type: string
        readOnly: true
      zone:
        title: Zone
        type: string
        readOnly: true
      orientation:
        title: Orientation
        type: string
        readOnly: true
      brightness:
        title: Brightness
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  OptionalDispositionSerializer:
    type: object
    properties:
      disposition:
        title: Disposition
        type: string
        enum:
        - ALLOCATED
        - INITIALIZED
        - SHIPPED
        - DELIVERED
        - INSTALLED
        - PROVISIONING
        - LIVE
        - RMA_REQUESTED
        - RMA_SCHEDULED
        - RMA_SHIPPED
        - RMA_RECEIVED
        - DEFECTIVE
        - DECOMMISSIONED
        - DEVELOPMENT
        - TESTING
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
  PaginatedOptionalDispositionSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalDispositionSerializer'
  Disposition:
    required:
    - disposition
    type: object
    properties:
      disposition:
        title: Disposition
        type: string
        enum:
        - ALLOCATED
        - INITIALIZED
        - SHIPPED
        - DELIVERED
        - INSTALLED
        - PROVISIONING
        - LIVE
        - RMA_REQUESTED
        - RMA_SCHEDULED
        - RMA_SHIPPED
        - RMA_RECEIVED
        - DEFECTIVE
        - DECOMMISSIONED
        - DEVELOPMENT
        - TESTING
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
  OptionalSensorFunctionSerializer:
    type: object
    properties:
      device_function:
        title: Device function
        type: string
        readOnly: true
  SensorFunction:
    type: object
    properties:
      device_function:
        title: Device function
        type: string
        readOnly: true
  SensorProvision:
    type: object
    properties:
      doorway_id:
        title: Doorway id
        type: integer
      sensor_height:
        title: Sensor height
        type: number
        format: decimal
        minimum: 0
  OptionalSensorProvisionSerializer:
    type: object
    properties:
      doorway_id:
        title: Doorway id
        type: integer
      sensor_height:
        title: Sensor height
        type: number
        format: decimal
        minimum: 0
  OptionalSensorSalesforceDetailSerializer:
    required:
    - organization_id
    - sensor_type
    type: object
    properties:
      uuid:
        title: UUID
        type: string
        maxLength: 40
        x-nullable: true
      organization_id:
        title: Organization id
        type: integer
      organization_name:
        title: Organization name
        type: string
        readOnly: true
      doorway_id:
        title: Doorway id
        type: integer
      sensor_type:
        title: Sensor type
        type: string
        pattern: \A[a-zA-Z0-9_-]{1,12}$
        minLength: 1
      hardware_model:
        title: Hardware model
        type: string
        readOnly: true
      salesforce_opp_id:
        title: Salesforce opp id
        type: string
        maxLength: 255
        x-nullable: true
      salesforce_opp_processing_type:
        title: Salesforce Opportunity Processing Type
        type: string
        enum:
        - invoice
        - self_serve
        x-nullable: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        format: date-time
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  SensorSalesforceDetail:
    required:
    - organization_id
    - sensor_type
    type: object
    properties:
      uuid:
        title: UUID
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      organization_id:
        title: Organization id
        type: integer
      organization_name:
        title: Organization name
        type: string
        readOnly: true
      doorway_id:
        title: Doorway id
        type: integer
      sensor_type:
        title: Sensor type
        type: string
        pattern: \A[a-zA-Z0-9_-]{1,12}$
        minLength: 1
      hardware_model:
        title: Hardware model
        type: string
        readOnly: true
      salesforce_opp_id:
        title: Salesforce opp id
        type: string
        maxLength: 255
        x-nullable: true
      salesforce_opp_processing_type:
        title: Salesforce Opportunity Processing Type
        type: string
        enum:
        - invoice
        - self_serve
        x-nullable: true
      last_heartbeat:
        title: Last heartbeat
        type: string
        format: date-time
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  SpaceSerializerV2:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      notes:
        title: Notes
        type: string
        maxLength: 1000
      iwms_id:
        title: Iwms id
        type: string
        maxLength: 255
        x-nullable: true
      meta:
        title: Meta
        type: object
        x-nullable: true
      space_type:
        title: Space type
        type: string
        enum:
        - space
        - floor
        - building
        - campus
        - region
        - portfolio
      function:
        title: Function
        type: string
        enum:
        - break_room
        - cafe
        - desk
        - desk_neighborhood
        - enclosed_workspace
        - event_space
        - games_room
        - gym
        - kitchen
        - lab
        - library
        - lounge
        - meeting_room
        - open_collaboration_space
        - open_workspace
        - other
        - outdoor
        - phone_booth
        - reception
        - restroom
        - retail
        - servery
        - theater
        - utility_room
        - wellness_room
        - flex_space
        x-nullable: true
      time_zone:
        title: Time zone
        type: string
        minLength: 1
        x-nullable: true
      daily_reset:
        title: Daily reset
        type: string
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - planning
        - live
      go_live_date_utc:
        title: Go live date utc
        type: string
        format: date-time
        x-nullable: true
      current_count:
        title: Current count
        type: string
        readOnly: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      target_capacity:
        title: Target capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      safe_capacity:
        title: Safe capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      safe_threshold_mode:
        title: Safe threshold mode
        type: string
        enum:
        - SAFE_CAPACITY
        - UTILIZATION_PERC_TARGET
        - UTILIZATION_PERC_LEGAL
        x-nullable: true
      safe_threshold_value:
        title: Safe threshold value
        type: number
        x-nullable: true
      max_dwell_minutes:
        title: Max dwell minutes
        type: integer
        minimum: 0
        x-nullable: true
      parent_id:
        title: Parent id
        type: integer
        x-nullable: true
      ancestry:
        title: Ancestry
        type: string
        readOnly: true
      address:
        title: Address
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      latitude:
        title: Latitude
        type: number
        x-nullable: true
      longitude:
        title: Longitude
        type: number
        x-nullable: true
      counting_mode:
        title: Counting mode
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      binary_occupancy:
        title: Binary occupancy
        type: boolean
        x-nullable: true
      floor_level:
        title: Floor level
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      cost_per_sqft:
        title: Cost per sqft
        type: number
        format: decimal
        x-nullable: true
      space_mappings:
        title: Space mappings
        type: string
        readOnly: true
      doorways:
        title: Doorways
        type: string
        readOnly: true
      time_segments:
        title: Time segments
        type: string
        readOnly: true
      time_segment_groups:
        title: Time segment groups
        type: string
        readOnly: true
      size_area:
        title: Size area
        type: number
        x-nullable: true
      size_area_unit:
        title: Size area unit
        type: string
        enum:
        - square_feet
        - square_meters
        x-nullable: true
      annual_rent:
        title: Annual rent
        type: number
        format: decimal
        x-nullable: true
      annual_rent_currency:
        title: Annual rent currency
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      cost_per_sqft_currency:
        title: Cost per sqft currency
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      assigned_teams:
        title: Assigned teams
        type: string
        readOnly: true
      sensors_total:
        title: Sensors total
        type: string
        readOnly: true
      image_url:
        title: Image url
        type: string
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      description:
        title: Description
        type: string
        readOnly: true
      inherits_time_segments:
        title: Inherits time segments
        type: boolean
        default: true
      labels:
        title: Labels
        type: string
        readOnly: true
      device_type:
        title: Device type
        type: object
        readOnly: true
      label_ids:
        type: array
        items:
          type: integer
      presence_debounce_true_ms:
        title: Presence debounce true ms
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      presence_debounce_false_ms:
        title: Presence debounce false ms
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      presence_debounce_enabled:
        title: Presence debounce enabled
        type: boolean
  SpaceAssignedTeamList:
    required:
    - team_name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      team_name:
        title: Team name
        type: string
        minLength: 1
  OptionalSpaceAssignedTeamListSerializer:
    required:
    - team_name
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      team_name:
        title: Team name
        type: string
        minLength: 1
  SpaceLabelList:
    required:
    - name
    type: object
    properties:
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      id:
        title: Id
        type: integer
        readOnly: true
      group:
        title: Group
        type: string
        readOnly: true
  OptionalSpaceLabelListSerializer:
    required:
    - name
    type: object
    properties:
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      id:
        title: Id
        type: integer
        readOnly: true
      group:
        title: Group
        type: string
        readOnly: true
  OptionalSpaceSensorSerializer:
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        maxLength: 255
        minLength: 1
      device_function:
        title: Device function
        type: string
        enum:
        - entry
        - oa
        - oalr
        - oasr
        - oe
        - waffle
        x-nullable: true
      sensor_type:
        title: Sensor type
        type: string
        enum:
        - ob1
        - r56t
        - r60
        - s5
        - w1
        - virtual
  SpaceSensor:
    required:
    - serial_number
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        maxLength: 255
        minLength: 1
      device_function:
        title: Device function
        type: string
        enum:
        - entry
        - oa
        - oalr
        - oasr
        - oe
        - waffle
        x-nullable: true
      sensor_type:
        title: Sensor type
        type: string
        enum:
        - ob1
        - r56t
        - r60
        - s5
        - w1
        - virtual
  SensorSubscriptionItem:
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        readOnly: true
        minLength: 1
      cancelation_date:
        title: Cancelation date
        type: string
        format: date-time
        readOnly: true
      stripe_synced:
        title: Stripe synced
        type: boolean
        readOnly: true
  OptionalSubscriptionSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      sensors:
        type: array
        items:
          $ref: '#/definitions/SensorSubscriptionItem'
        readOnly: true
      type:
        title: Type
        type: string
        enum:
        - MONTHLY
        - YEARLY
        - ENTREPRISE
      quantity:
        title: Quantity
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        readOnly: true
      next_billing_cycle_date:
        title: Next billing cycle date
        type: string
        readOnly: true
  PaginatedOptionalSubscriptionSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSubscriptionSerializer'
  Subscription:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      sensors:
        type: array
        items:
          $ref: '#/definitions/SensorSubscriptionItem'
        readOnly: true
      type:
        title: Type
        type: string
        enum:
        - MONTHLY
        - YEARLY
        - ENTREPRISE
      quantity:
        title: Quantity
        type: string
        readOnly: true
      status:
        title: Status
        type: string
        readOnly: true
      next_billing_cycle_date:
        title: Next billing cycle date
        type: string
        readOnly: true
  FilteredTimeSegmentID:
    required:
    - label
    type: object
    properties:
      id:
        title: Id
        type: integer
        maximum: 9223372036854775807
        minimum: -9223372036854775808
      label:
        title: Label
        type: string
        maxLength: 255
        minLength: 1
  OptionalTimeSegmentGroupListSerializer:
    required:
    - name
    - time_segments
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      time_segments:
        type: array
        items:
          $ref: '#/definitions/FilteredTimeSegmentID'
  PaginatedOptionalTimeSegmentGroupListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalTimeSegmentGroupListSerializer'
  TimeSegmentGroupList:
    required:
    - name
    - time_segments
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      time_segments:
        type: array
        items:
          $ref: '#/definitions/FilteredTimeSegmentID'
  OptionalTimeSegmentGroupDetailSerializer:
    required:
    - name
    - time_segments
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      time_segments:
        type: array
        items:
          $ref: '#/definitions/FilteredTimeSegmentID'
  TimeSegmentGroupDetail:
    required:
    - name
    - time_segments
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      time_segments:
        type: array
        items:
          $ref: '#/definitions/FilteredTimeSegmentID'
  FilteredSpaceID:
    required:
    - name
    type: object
    properties:
      id:
        title: Id
        type: integer
        maximum: 9223372036854775807
        minimum: -9223372036854775808
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
  OptionalTimeSegmentListSerializer:
    required:
    - spaces
    - days
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      label:
        title: Label
        type: string
        maxLength: 255
        minLength: 1
      start:
        title: Start
        type: string
      end:
        title: End
        type: string
      spaces:
        type: array
        items:
          $ref: '#/definitions/FilteredSpaceID'
      days:
        title: Days
        type: string
  PaginatedOptionalTimeSegmentListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalTimeSegmentListSerializer'
  TimeSegmentList:
    required:
    - label
    - start
    - end
    - spaces
    - days
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      label:
        title: Label
        type: string
        maxLength: 255
        minLength: 1
      start:
        title: Start
        type: string
      end:
        title: End
        type: string
      spaces:
        type: array
        items:
          $ref: '#/definitions/FilteredSpaceID'
      days:
        title: Days
        type: string
  OptionalTimeSegmentLabelListSerializer:
    type: object
    properties:
      label:
        title: Label
        type: string
        maxLength: 255
        minLength: 1
  PaginatedOptionalTimeSegmentLabelListSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalTimeSegmentLabelListSerializer'
  TimeSegmentLabelList:
    required:
    - label
    type: object
    properties:
      label:
        title: Label
        type: string
        maxLength: 255
        minLength: 1
  OptionalTimeSegmentDetailSerializer:
    required:
    - label
    - start
    - end
    - days
    - spaces
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      label:
        title: Label
        type: string
        maxLength: 255
        minLength: 1
      start:
        title: Start
        type: string
      end:
        title: End
        type: string
      days:
        title: Days
        type: string
      spaces:
        type: array
        items:
          $ref: '#/definitions/FilteredSpaceID'
  TimeSegmentDetail:
    required:
    - label
    - start
    - end
    - days
    - spaces
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      label:
        title: Label
        type: string
        maxLength: 255
        minLength: 1
      start:
        title: Start
        type: string
      end:
        title: End
        type: string
      days:
        title: Days
        type: string
      spaces:
        type: array
        items:
          $ref: '#/definitions/FilteredSpaceID'
  Media:
    required:
    - id
    type: object
    properties:
      id:
        title: Id
        type: integer
      signed_url:
        title: Signed url
        type: string
        readOnly: true
  OptionalUploadSerializer:
    required:
    - id
    - media
    type: object
    properties:
      id:
        title: Id
        type: integer
      media:
        type: array
        items:
          $ref: '#/definitions/Media'
      signed_url:
        title: Signed url
        type: string
        readOnly: true
  Upload:
    required:
    - id
    - media
    type: object
    properties:
      id:
        title: Id
        type: integer
      media:
        type: array
        items:
          $ref: '#/definitions/Media'
      signed_url:
        title: Signed url
        type: string
        readOnly: true
  OptionalFreeSubscriptionSensorSerializer:
    required:
    - organization_id
    - organization_name
    - serial_number
    type: object
    properties:
      organization_id:
        title: Organization id
        type: integer
      organization_name:
        title: Organization name
        type: string
        minLength: 1
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        minLength: 1
  PaginatedOptionalFreeSubscriptionSensorSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalFreeSubscriptionSensorSerializer'
  FreeSubscriptionSensor:
    required:
    - organization_id
    - organization_name
    - serial_number
    type: object
    properties:
      organization_id:
        title: Organization id
        type: integer
      organization_name:
        title: Organization name
        type: string
        minLength: 1
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        minLength: 1
  OptionalWaffleFulfillmentInfoSerializer:
    required:
    - serial_number
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
      stripe_payment_intent_id:
        title: Stripe payment intent id
        type: string
        maxLength: 1024
        minLength: 1
  PaginatedOptionalWaffleFulfillmentInfoSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalWaffleFulfillmentInfoSerializer'
  WaffleFulfillmentInfo:
    required:
    - serial_number
    - stripe_payment_intent_id
    type: object
    properties:
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
      stripe_payment_intent_id:
        title: Stripe payment intent id
        type: string
        maxLength: 1024
        minLength: 1
  WebhookSerializerV2:
    required:
    - endpoint
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        x-nullable: true
      description:
        title: Description
        type: string
        maxLength: 1000
        x-nullable: true
      endpoint:
        title: Endpoint
        type: string
        format: uri
        minLength: 1
      version:
        title: Version
        type: string
        enum:
        - v1
        - v2
        x-nullable: true
      headers:
        title: Headers
        type: object
      enabled:
        title: Enabled
        type: boolean
      type:
        title: Type
        type: string
        enum:
        - counts
  OptionalNetworkTemplateSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        description: Name of the network template
        type: string
        maxLength: 255
        minLength: 1
      network_type:
        title: Network type
        description: 'Type of network: wifi or ethernet'
        type: string
        enum:
        - wifi
        - ethernet
      ssid:
        title: Ssid
        description: WiFi SSID (required for WiFi networks)
        type: string
        maxLength: 255
        x-nullable: true
      password:
        title: Password
        description: WiFi password (required for WiFi networks)
        type: string
        x-nullable: true
      configuration:
        title: Configuration
        description: 'Network configuration: manual or dhcp'
        type: string
        enum:
        - manual
        - dhcp
      subnet_mask:
        title: Subnet mask
        description: Subnet mask (required for manual configuration)
        type: string
        minLength: 1
        x-nullable: true
      gateway:
        title: Gateway
        description: Gateway IP address (required for manual configuration)
        type: string
        minLength: 1
        x-nullable: true
      dns_servers:
        title: Dns servers
        description: List of DNS server IP addresses or hostnames
        type: object
      time_servers:
        title: Time servers
        description: List of time server IP addresses or hostnames
        type: object
      proxy_servers:
        title: Proxy servers
        description: List of proxy server IP addresses or hostnames
        type: object
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  PaginatedOptionalNetworkTemplateSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalNetworkTemplateSerializer'
  NetworkTemplate:
    required:
    - name
    - network_type
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        description: Name of the network template
        type: string
        maxLength: 255
        minLength: 1
      network_type:
        title: Network type
        description: 'Type of network: wifi or ethernet'
        type: string
        enum:
        - wifi
        - ethernet
      ssid:
        title: Ssid
        description: WiFi SSID (required for WiFi networks)
        type: string
        maxLength: 255
        x-nullable: true
      password:
        title: Password
        description: WiFi password (required for WiFi networks)
        type: string
        x-nullable: true
      configuration:
        title: Configuration
        description: 'Network configuration: manual or dhcp'
        type: string
        enum:
        - manual
        - dhcp
      subnet_mask:
        title: Subnet mask
        description: Subnet mask (required for manual configuration)
        type: string
        minLength: 1
        x-nullable: true
      gateway:
        title: Gateway
        description: Gateway IP address (required for manual configuration)
        type: string
        minLength: 1
        x-nullable: true
      dns_servers:
        title: Dns servers
        description: List of DNS server IP addresses or hostnames
        type: object
      time_servers:
        title: Time servers
        description: List of time server IP addresses or hostnames
        type: object
      proxy_servers:
        title: Proxy servers
        description: List of proxy server IP addresses or hostnames
        type: object
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  OptionalBaseInstallationHistorySerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        readOnly: true
        minLength: 1
      doorway_id:
        title: Doorway id
        type: integer
        readOnly: true
      orientation_switch:
        title: Orientation switch
        type: integer
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      deleted_at:
        title: Deleted at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  PaginatedOptionalBaseInstallationHistorySerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalBaseInstallationHistorySerializer'
  BaseInstallationHistory:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        readOnly: true
        minLength: 1
      doorway_id:
        title: Doorway id
        type: integer
        readOnly: true
      orientation_switch:
        title: Orientation switch
        type: integer
        readOnly: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      deleted_at:
        title: Deleted at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
  BaseDensity:
    type: object
    properties: {}
  OptionalBaseDensitySerializer:
    type: object
    properties: {}
  OptionalSensorDoorwayDetailSerializer:
    required:
    - serial_number
    type: object
    properties:
      id:
        title: Id
        type: integer
      serial_number:
        title: Serial number
        type: string
        pattern: \A[A-Z][A-Z0-9]{1,20}$
        minLength: 1
      doorway_to_space_links:
        title: Doorway to space links
        type: object
        readOnly: true
      mpi_id:
        title: Mpi id
        type: string
        readOnly: true
      noise_filter:
        title: Noise filter
        type: object
  OptionalSpaceGeometrySerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      size_area:
        title: Size area
        type: number
        x-nullable: true
      size_area_unit:
        title: Size area unit
        type: string
        enum:
        - square_feet
        - square_meters
        x-nullable: true
      latitude:
        title: Latitude
        type: number
        x-nullable: true
      longitude:
        title: Longitude
        type: number
        x-nullable: true
      shape:
        title: Shape
        type: string
        enum:
        - polygon
        - circle
        x-nullable: true
      polygon_verticies:
        title: Polygon verticies
        type: object
        x-nullable: true
      circle_centroid_x_meters:
        title: Circle centroid x meters
        type: number
        x-nullable: true
      circle_centroid_y_meters:
        title: Circle centroid y meters
        type: number
        x-nullable: true
      circle_radius_meters:
        title: Circle radius meters
        type: number
        x-nullable: true
  PaginatedOptionalSpaceGeometrySerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSpaceGeometrySerializer'
  SpaceGeometry:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
      size_area:
        title: Size area
        type: number
        readOnly: true
        x-nullable: true
      size_area_unit:
        title: Size area unit
        type: string
        enum:
        - square_feet
        - square_meters
        x-nullable: true
      latitude:
        title: Latitude
        type: number
        readOnly: true
        x-nullable: true
      longitude:
        title: Longitude
        type: number
        readOnly: true
        x-nullable: true
      shape:
        title: Shape
        type: string
        enum:
        - polygon
        - circle
        x-nullable: true
      polygon_verticies:
        title: Polygon verticies
        type: object
        readOnly: true
        x-nullable: true
      circle_centroid_x_meters:
        title: Circle centroid x meters
        type: number
        readOnly: true
        x-nullable: true
      circle_centroid_y_meters:
        title: Circle centroid y meters
        type: number
        readOnly: true
        x-nullable: true
      circle_radius_meters:
        title: Circle radius meters
        type: number
        readOnly: true
        x-nullable: true
  OptionalSpaceExtendedSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      space_type:
        title: Space type
        type: string
        enum:
        - space
        - floor
        - building
        - campus
        - region
        - portfolio
      function:
        title: Function
        type: string
        enum:
        - break_room
        - cafe
        - desk
        - desk_neighborhood
        - enclosed_workspace
        - event_space
        - games_room
        - gym
        - kitchen
        - lab
        - library
        - lounge
        - meeting_room
        - open_collaboration_space
        - open_workspace
        - other
        - outdoor
        - phone_booth
        - reception
        - restroom
        - retail
        - servery
        - theater
        - utility_room
        - wellness_room
        - flex_space
        x-nullable: true
      time_zone:
        title: Time zone
        type: string
        minLength: 1
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - planning
        - live
      go_live_date_utc:
        title: Go live date utc
        type: string
        format: date-time
        x-nullable: true
      capacity:
        title: Capacity
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      parent_id:
        title: Parent id
        type: integer
        x-nullable: true
      address:
        title: Address
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      floor_level:
        title: Floor level
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      cost_per_sqft:
        title: Cost per sqft
        type: number
        format: decimal
        x-nullable: true
      size_area:
        title: Size area
        type: number
        x-nullable: true
      size_area_unit:
        title: Size area unit
        type: string
        enum:
        - square_feet
        - square_meters
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      description:
        title: Description
        type: string
        readOnly: true
      inherits_time_segments:
        title: Inherits time segments
        type: boolean
      latitude:
        title: Latitude
        type: number
        x-nullable: true
      longitude:
        title: Longitude
        type: number
        x-nullable: true
      iwms_id:
        title: Iwms id
        type: string
        maxLength: 255
        x-nullable: true
      annual_rent:
        title: Annual rent
        type: number
        format: decimal
        x-nullable: true
      annual_rent_currency:
        title: Annual rent currency
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      cost_per_sqft_currency:
        title: Cost per sqft currency
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      daily_reset:
        title: Daily reset
        type: string
        x-nullable: true
      max_dwell_resets_enabled:
        title: Max dwell resets enabled
        type: boolean
      max_dwell_minutes:
        title: Max dwell minutes
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      counting_mode:
        title: Counting mode
        type: string
        enum:
        - oa
        - entry
        - waffle
        x-nullable: true
      binary_occupancy:
        title: Binary occupancy
        type: boolean
      presence_debounce_true_ms:
        title: Presence debounce true ms
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      presence_debounce_false_ms:
        title: Presence debounce false ms
        type: integer
        maximum: 2147483647
        minimum: -2147483648
        x-nullable: true
      presence_debounce_enabled:
        title: Presence debounce enabled
        type: boolean
      labels:
        title: Labels
        type: object
        readOnly: true
      time_segments:
        title: Time segments
        type: object
        readOnly: true
      doorways:
        title: Doorways
        type: object
        readOnly: true
  PaginatedOptionalSpaceExtendedSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalSpaceExtendedSerializer'
  SpaceSerializerV3:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
      space_type:
        title: Space type
        type: string
        enum:
        - space
        - floor
        - building
        - campus
        - region
        - portfolio
      function:
        title: Function
        type: string
        enum:
        - break_room
        - cafe
        - desk
        - desk_neighborhood
        - enclosed_workspace
        - event_space
        - games_room
        - gym
        - kitchen
        - lab
        - library
        - lounge
        - meeting_room
        - open_collaboration_space
        - open_workspace
        - other
        - outdoor
        - phone_booth
        - reception
        - restroom
        - retail
        - servery
        - theater
        - utility_room
        - wellness_room
        - flex_space
        readOnly: true
        x-nullable: true
      time_zone:
        title: Time zone
        type: string
        minLength: 1
        x-nullable: true
      status:
        title: Status
        type: string
        enum:
        - planning
        - live
      go_live_date_utc:
        title: Go live date utc
        type: string
        format: date-time
        x-nullable: true
      capacity:
        title: Capacity
        type: integer
        readOnly: true
        x-nullable: true
      parent_id:
        title: Parent id
        type: integer
        x-nullable: true
      address:
        title: Address
        type: string
        maxLength: 255
        minLength: 1
        x-nullable: true
      floor_level:
        title: Floor level
        type: integer
        readOnly: true
        x-nullable: true
      cost_per_sqft:
        title: Cost per sqft
        type: number
        format: decimal
        readOnly: true
        x-nullable: true
      size_area:
        title: Size area
        type: number
        readOnly: true
        x-nullable: true
      size_area_unit:
        title: Size area unit
        type: string
        enum:
        - square_feet
        - square_meters
        readOnly: true
        x-nullable: true
      created_at:
        title: Created at
        type: string
        format: date-time
        readOnly: true
      updated_at:
        title: Updated at
        type: string
        format: date-time
        readOnly: true
      description:
        title: Description
        type: string
        readOnly: true
      inherits_time_segments:
        title: Inherits time segments
        type: boolean
        readOnly: true
      latitude:
        title: Latitude
        type: number
        readOnly: true
        x-nullable: true
      longitude:
        title: Longitude
        type: number
        readOnly: true
        x-nullable: true
      iwms_id:
        title: Iwms id
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      annual_rent:
        title: Annual rent
        type: number
        format: decimal
        readOnly: true
        x-nullable: true
      annual_rent_currency:
        title: Annual rent currency
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      cost_per_sqft_currency:
        title: Cost per sqft currency
        type: string
        readOnly: true
        minLength: 1
        x-nullable: true
      daily_reset:
        title: Daily reset
        type: string
        x-nullable: true
      max_dwell_resets_enabled:
        title: Max dwell resets enabled
        type: boolean
        readOnly: true
      max_dwell_minutes:
        title: Max dwell minutes
        type: integer
        readOnly: true
        x-nullable: true
      counting_mode:
        title: Counting mode
        type: string
        enum:
        - oa
        - entry
        - waffle
        readOnly: true
        x-nullable: true
      binary_occupancy:
        title: Binary occupancy
        type: boolean
        readOnly: true
      presence_debounce_true_ms:
        title: Presence debounce true ms
        type: integer
        readOnly: true
        x-nullable: true
      presence_debounce_false_ms:
        title: Presence debounce false ms
        type: integer
        readOnly: true
        x-nullable: true
      presence_debounce_enabled:
        title: Presence debounce enabled
        type: boolean
        readOnly: true
      labels:
        title: Labels
        type: object
        readOnly: true
      time_segments:
        title: Time segments
        type: object
        readOnly: true
      doorways:
        title: Doorways
        type: object
        readOnly: true
  OptionalSpaceDoorwaySerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
      space_type:
        title: Space type
        type: string
        enum:
        - space
        - floor
        - building
        - campus
        - region
        - portfolio
      doorway_links:
        title: Doorway links
        type: object
        readOnly: true
  SpaceDoorway:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
      space_type:
        title: Space type
        type: string
        enum:
        - space
        - floor
        - building
        - campus
        - region
        - portfolio
      doorway_links:
        title: Doorway links
        type: object
        readOnly: true
  OptionalBaseSpaceSerializer:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        maxLength: 255
        minLength: 1
  PaginatedOptionalBaseSpaceSerializer:
    type: object
    properties:
      total:
        title: Total
        type: integer
      next:
        title: Next
        type: string
        minLength: 1
        x-nullable: true
      previous:
        title: Previous
        type: string
        minLength: 1
        x-nullable: true
      results:
        type: array
        items:
          $ref: '#/definitions/OptionalBaseSpaceSerializer'
  BaseSpace:
    type: object
    properties:
      id:
        title: Id
        type: integer
        readOnly: true
      name:
        title: Name
        type: string
        readOnly: true
        minLength: 1
