openapi: 3.0.3
tags:
  - name: Organizations & People
    description: >-
      Data on People and Organizations (includes both staff and contacts, so
      these do not need to be looked up separately and combined).
  - name: Projects
    description: The list of Projects.
  - name: Notes
    description: Operations relating to the Notes that can be attached to various items.
  - name: Zones
    description: Zones are physical data centers where information can be stored.
  - name: Disciplines & Certification Definitions
    description: >-
      Disciplines & Certification Definitions recognize areas of professional
      expertise.
  - name: Correspondence
    description: Managing Correspondence Data
  - name: Filesets
    description: >-
      APIs to the Fileset module for accessing all files attached to objects in
      TonicDM.
  - name: Manual Uploading
    description: APIs to the Fileset module for uploading files to the TonicDM cloud.
  - name: Cloud File Systems
    description: Managing cloud file systems that TonicDM can connect to.
  - name: File Transfers
    description: APIs to the File Transfers Workflow module.
  - name: RFIs
    description: APIs to the RFIs Workflow module.
  - name: Submittals
    description: APIs to the Submittals Workflow module.
  - name: PCOs
    description: APIs to the PCOs Workflow module.
  - name: COs
    description: APIs to the COs Workflow module.
  - name: Tasks
    description: APIs to the Tasks Workflow module.
x-tagGroups:
  - name: CORE
    tags:
      - Organizations & People
      - Projects & Teams
      - Notes
      - Disciplines & Certification Definitions
  - name: FILES
    tags:
      - Filesets
      - Manual Uploading
      - Cloud File Systems
  - name: CORRESPONDENCE
    tags:
      - Correspondence
  - name: WORKFLOW
    tags:
      - File Transfers
      - RFIs
      - Submittals
      - PCOs
      - COs
      - Tasks
info:
  title: TonicDM Product API
  version: 0.0.5
  description: Main Product API
  contact:
    name: Reg Prentice
    url: https://developers-internal.tonicdm.com
    email: apisupport@tonicdm.com
  termsOfService: http://www.tonicdm.com/terms
  license:
    name: Proprietary
    url: https://www.tonicdm.com/license-api
servers:
  - url: https://us-api.tonicdm.com
    description: Server located in the USA
  - url: https://de-api.tonicdm.com
    description: Server located in Germany
  - url: https://ie-api.tonicdm.com
    description: Server located in Ireland
security:
  - OAuth2:
      - read
      - write
  - apiKeyAuth: []
paths:
  /core/organizations:
    description: |
      **Organizations**.
    get:
      operationId: get-organizations
      summary: Get Organizations
      tags:
        - Organizations & People
      description: >
        **Organizations** are a feature of the AdvancedContacts TonicDM license.
        Without that licence, the API user should work one level down with
        **Brands**.


        Every **Person** in TonicDM belongs to an Organization: either a Contact
        Organization or the User\'s own organization. 
                 
        There is no POST operation for Organizations because they can only be
        created as part of the creation of a Person.


        If called with no parameters (ie. `/organizations`) it will return paged
        data for the Brands in the User\'s Tenant and all Contact Organizations,
        in no specific order.


        A specific set of organizations\' data can be returned by providing the
        `filterIds` parameter with an array of Organization `id` 

        (ie. `/organizations` with
        `filterIds={organizationId},{organizationId}`).

        If caching the organization data on the client side, the
        `data_quantity=id_only` option can be chosen to get the list of GUIDs
        that match the filtering/sorting/paging requirements 

        with the organization data coming from your client side cache, having
        been retrieved by providing the `filterIds` parameter with an array of
        `id`. 


        You can also get the list of Offices (physical locations) or Brands for
        an Organization by 

        calling `/offices` with `filterOrganizationIds={organizationId}` or
        `/brands` with `filterOrganizationIds={organizationId}`. 

        Offices and Brands for Organizations other than your own are a feature
        of the AdvancedContacts TonicDM license.
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/filterDisciplines'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByOrganization'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganizationWithId'
              examples:
                OrganizationResponseArray:
                  $ref: '#/components/examples/OrganizationResponseArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.filterDisciplines: method.request.header.filterDisciplines
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByOrganization: method.request.header.sortByOrganization
          integration.request.header.sortDirection: method.request.header.sortDirection
  /core/brands:
    description: >-
      Work with Brand records, both in the User\'s own Organization and Contact
      Organizations.
    get:
      operationId: get-brands
      summary: Get Brands
      tags:
        - Organizations & People
      description: >
        Gets data on the User\'s Organization\'s own Brands and their Contact
        Organization\'s Brands. 
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/filterDisciplines'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByOrganization'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganizationBrandWithId'
              examples:
                BrandResponseArray:
                  $ref: '#/components/examples/BrandResponseArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.dataQuantity: method.request.header.dataQuantity
        responses:
          default:
            statusCode: '200'
            responseTemplates:
              application/json: |
                #if ($input.params('status') == 'inactive')
                [
                  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:04"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:04"",
                    ""status"": ""active"",
                    ""domains"": [""vortex-pm.com""],
                    ""nameLong"": ""Vortex Project Management"",
                    ""nameShort"": ""Vortex"",
                    ""nameInitials"": ""V"",
                    ""brandColor"": ""EE5500"",
                    ""organizationId"": ""94d815397d644a4d932aa6fb4fb55425"",
                    ""customerDataWarehouseId"": ""FB87CB9963AF44DA8B8243AACAE02E1A"",
                    ""customerErpId"": ""226380ca-b704-4b00-a239-319e5a0e14ff"",
                    ""customerCrmId"": ""7f13e2a1-ac36-4211-82af-c1005397492d""
                  }
                ]
                #else
                [
                  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:00"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:00"",
                    ""status"": ""active"",
                    ""domains"": [""pacific-architects.com"", ""pacific-arch.com""],
                    ""nameLong"": ""Pacific Architects and Engineers Inc."",
                    ""nameShort"": ""Pacific"",
                    ""nameInitials"": ""PAE"",
                    ""brandColor"": ""0F6CBD"",
                    ""organizationId"": ""f3efcad7082d4e85ae2741a57629b323"",
                    ""isPrime"": ""TRUE"",
                    ""customerDataWarehouseId"": ""3E074B64ED69414293F943236EE2B3E1"",
                    ""customerErpId"": ""8b37e6b2-786e-4546-93e8-d6760e71bed4"",
                    ""customerCrmId"": ""8a12f0af-249d-435b-b997-2034fd472ff8""
                  },  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:05"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:05"",
                    ""status"": ""active"",
                    ""domains"": [""steven.novosel@gmail.com""],
                    ""nameLong"": ""Steve Novosel"",
                    ""nameInitials"": ""SN"",
                    ""organizationId"": ""6c09ed8ddce440fab1319530ce22fd67"",
                    ""customerDataWarehouseId"": ""BB000093D6FA436F8CCA0BB06034CBDD"",
                    ""customerErpId"": ""ae656d88-c979-4e11-ba0b-695b61fa7f5d"",
                    ""customerCrmId"": ""9a6d37ef-fc9d-43ee-ac78-678c273cc1e8""
                  },  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:02"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:02"",
                    ""status"": ""active"",
                    ""domains"": [""atlas-gc.com""],
                    ""nameLong"": ""Atlas General Contracting"",
                    ""nameShort"": ""Atlas"",
                    ""nameInitials"": ""A-GC"",
                    ""brandColor"": ""712D09"",
                    ""organizationId"": ""5edfba3a47414892b4e195808ba4d31e"",
                    ""customerDataWarehouseId"": ""A6CD194437BC4486AFE9EF8833BBAACF"",
                    ""customerErpId"": ""fd4fa185-7179-49d8-8fc1-d38cc9d55562"",
                    ""customerCrmId"": ""3279d48a-2179-4aba-996a-af019ec801e3""
                  },  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:03"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:03"",
                    ""status"": ""active"",
                    ""domains"": [""resonance-re.com""],
                    ""nameLong"": ""Resonance Real Estate Development Corporation"",
                    ""nameShort"": ""Resonance RE"",
                    ""nameInitials"": ""R-RE"",
                    ""brandColor"": ""0E700E"",
                    ""organizationId"": ""f33124d4e51e4ebfba5f8e1f497507bf"",
                    ""customerDataWarehouseId"": ""F5905014C2F1499B98919A94AA60081B"",
                    ""customerErpId"": ""cbcc9b76-4398-4415-a88d-9f9cdc1a526b"",
                    ""customerCrmId"": ""43d26d8a-71f3-4a8a-907b-201deb35a2c2""
                  },  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:04"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:04"",
                    ""status"": ""active"",
                    ""domains"": [""vortex-pm.com""],
                    ""nameLong"": ""Vortex Project Management"",
                    ""nameShort"": ""Vortex"",
                    ""nameInitials"": ""V"",
                    ""brandColor"": ""EE5500"",
                    ""organizationId"": ""94d815397d644a4d932aa6fb4fb55425"",
                    ""customerDataWarehouseId"": ""FB87CB9963AF44DA8B8243AACAE02E1A"",
                    ""customerErpId"": ""226380ca-b704-4b00-a239-319e5a0e14ff"",
                    ""customerCrmId"": ""7f13e2a1-ac36-4211-82af-c1005397492d""
                  },  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:01"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:01"",
                    ""status"": ""inactive"",
                    ""domains"": [""argo-structural.com""],
                    ""nameLong"": ""Argo Structural Inc"",
                    ""nameInitials"": ""AS"",
                    ""brandColor"": ""13A10E"",
                    ""organizationId"": ""a1965be14bfd405dabddeceb1cfbd2f7"",
                    ""customerDataWarehouseId"": ""53BECBFD3CFC4E2C914281DBAD48BFFD"",
                    ""customerErpId"": ""3a11a34f-4126-476c-9a0a-4cd0222c3ea9"",
                    ""customerCrmId"": ""e1596439-4135-4b54-bb93-8215d9ae58c5""
                  },  {
                    ""datetimeCreated"": ""2021-11-03T16:21:02+00:02"",
                    ""datetimeUpdated"": ""2024-04-20T16:21:02+00:02"",
                    ""status"": ""active"",
                    ""domains"": [""pacific-engineers.com"", ""pacific-eng.com""],
                    ""nameLong"": ""Pacific Engineers Inc."",
                    ""nameInitials"": ""PE"",
                    ""brandColor"": ""0F6CBD"",
                    ""organizationId"": ""f3efcad7082d4e85ae2741a57629b323"",
                    ""customerDataWarehouseId"": ""CAFEEF91758949409696F81B2CA939E9"",
                    ""customerErpId"": ""33ee4892-182a-4b98-a291-9a888c91dc6f"",
                    ""customerCrmId"": ""bf009d84-18fd-4c86-8b3d-0e4b0ba13e98""
                  }
                ]
                #end     
        type: mock
    patch:
      summary: Edit a Brand
      operationId: patch-brand
      description: >
        Change a Brand. 


        If the Brand is at the User\'s own Organization, the User must be a
        Tenant Administrator in order to make changes to it.
      tags:
        - Organizations & People
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrganizationBrandWithId'
      responses:
        '200':
          description: Successfully updated the resource you requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationBrandWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /core/offices:
    description: >-
      Every Person in TonicDM belongs to an Organization. Organizations can have
      Offices (locations), and a Person in that Organization can be assigned to
      one of that Organization\'s Offices.
    get:
      summary: Get Offices
      operationId: get-offices
      description: >
        Supply one or more office GUIDs to get the data for specific offices
        (organization locations).


        This endpoint is typically called with the `filterOrganizationIds`
        parameter passing a single Organization GUID.
      tags:
        - Organizations & People
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterOrganizationIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByOffice'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OfficeWithId'
              examples:
                officesArray:
                  $ref: '#/components/examples/OfficesWithIdArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        type: mock
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterOrganizationIds: method.request.header.filterOrganizationIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByOffice: method.request.header.sortBy
          integration.request.header.sortDirection: method.request.header.sortDirection
        responses:
          default:
            statusCode: '200'
            responseTemplates:
              application/json: |
                #if ($input.params('status') == 'inactive')
                [
                  {
                    'id': 'fe03dcd951054ef782c43fcdf0289264',
                    'datetimeCreated': '2021-11-03T16:21:02+00:09',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:09',
                    'status': 'inactive',
                    'organization_id': '2752faa8bf234a57899b1303c78702ae',
                    'name': 'Albany',
                    'address': '72 Stirling Terrace\nAlbany',
                    'phone': {'countryCode':'1', 'phoneNumber':'8024246531'}
                  }
                ]
                #else
                [
                  {
                    'id': '6ce635890a6349678196d2e59a3be302',
                    'datetimeCreated': '2021-11-03T16:21:02+00:00',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:00',
                    'status': 'active',
                    'organization_id': '810e48a87ec44cf0bfbf43c6d0af2ee6',
                    'name': 'Cambridge',
                    'address': '233 Kirkland Street\nCambridge',
                    'phone': {'countryCode':'1', 'phoneNumber':'7326281832'}
                  },  {
                    'id': 'eec6b047435d492e9540a3496b5e5fe9',
                    'datetimeCreated': '2021-11-03T16:21:02+00:01',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:01',
                    'status': 'active',
                    'organization_id': '810e48a87ec44cf0bfbf43c6d0af2ee6',
                    'name': 'London',
                    'address': '123 Dundas Street\nLondon',
                    'phone': {'countryCode':'1', 'phoneNumber':'5713241494'}
                  },  {
                    'id': 'df0e5f05e8cd4a3b815eaf63d991572e',
                    'datetimeCreated': '2021-11-03T16:21:02+00:02',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:02',
                    'status': 'active',
                    'organization_id': '810e48a87ec44cf0bfbf43c6d0af2ee6',
                    'name': 'Dublin',
                    'address': '50 Merrion Square South\nDublin',
                    'phone': {'countryCode':'1', 'phoneNumber':'4789699191'}
                  },  {
                    'id': 'e5382d4c607b4e9dbff611ec11da22d2',
                    'datetimeCreated': '2021-11-03T16:21:02+00:03',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:03',
                    'status': 'active',
                    'organization_id': '4b672c4f36b14971ac873c4763484fa8',
                    'name': 'Birmingham',
                    'address': '45 High Street\nBirmingham',
                    'phone': {'countryCode':'1', 'phoneNumber':'3029932904'}
                  },  {
                    'id': 'c56dbfc7464d474fbec7f2da0988c87b',
                    'datetimeCreated': '2021-11-03T16:21:02+00:04',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:04',
                    'status': 'active',
                    'organization_id': '4b672c4f36b14971ac873c4763484fa8',
                    'name': 'Paris',
                    'address': '23 Rue Bréa\nParis',
                    'phone': {'countryCode':'1', 'phoneNumber':'6095639286'}
                  },  {
                    'id': '5b7f1c91114e4915927c1eff0fa1fb9e',
                    'datetimeCreated': '2021-11-03T16:21:02+00:05',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:05',
                    'status': 'active',
                    'organization_id': 'e9c5e0158ea146f4af763026555d73ea',
                    'name': 'Naples',
                    'address': 'Via Enrico Alvino, 134 B\nNaples',
                    'phone': {'countryCode':'1', 'phoneNumber':'6315906966'}
                  },  {
                    'id': '7b7d4d0a9d354ed8855aba701b6010bf',
                    'datetimeCreated': '2021-11-03T16:21:02+00:06',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:06',
                    'status': 'active',
                    'organization_id': 'a770234e0e3e4dcb916e03fc6374d8f8',
                    'name': 'Athens',
                    'address': 'Astiggos 12\nAthens',
                    'phone': {'countryCode':'1', 'phoneNumber':'6507033367'}
                  },  {
                    'id': '4a4c5646d76441b892c5917d4882dfd2',
                    'datetimeCreated': '2021-11-03T16:21:02+00:07',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:07',
                    'status': 'active',
                    'organization_id': 'c3dea04054d143118514bb8b5170e5b4',
                    'name': 'Newcastle',
                    'address': '7 Akenside Hill\nNewcastle',
                    'phone': {'countryCode':'1', 'phoneNumber':'3618105014'}
                  },  {
                    'id': '8760caa746044ef68aa8ea5b0f421781',
                    'datetimeCreated': '2021-11-03T16:21:02+00:08',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:08',
                    'status': 'active',
                    'organization_id': 'c3dea04054d143118514bb8b5170e5b4',
                    'name': 'Richmond',
                    'address': '12B Yaris Row\nRichmond',
                    'phone': {'countryCode':'1', 'phoneNumber':'4243235930'}
                  },  {
                    'id': 'fe03dcd951054ef782c43fcdf0289264',
                    'datetimeCreated': '2021-11-03T16:21:02+00:09',
                    'datetimeUpdated': '2024-04-20T16:21:02+00:09',
                    'status': 'inactive',
                    'organization_id': '2752faa8bf234a57899b1303c78702ae',
                    'name': 'Albany',
                    'address': '72 Stirling Terrace\nAlbany',
                    'phone': {'countryCode':'1', 'phoneNumber':'8024246531'}
                  }
                ]
                #end   
            contentHandling: CONVERT_TO_TEXT
            passthroughBehavior: WHEN_NO_MATCH
    post:
      summary: New Office
      operationId: post-office
      description: Add an Office to an Organization.
      tags:
        - Organizations & People
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/Office'
                - required:
                    - organizationId
                    - name
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfficeWithId'
              examples:
                Office:
                  $ref: '#/components/examples/OfficeWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        type: mock
        responses:
          default:
            statusCode: '201'
            responseTemplates:
              application/json: |
                {
                  'id': '8760caa746044ef68aa8ea5b0f421781',
                  'datetimeCreated': '2021-11-03T16:21:02+00:08',
                  'datetimeUpdated': '2024-04-20T16:21:02+00:08',
                  'status': 'active',
                  'organization_id': 'c3dea04054d143118514bb8b5170e5b4',
                  'name': 'Richmond',
                  'address': '12B Yaris Row\nRichmond',
                  'phone': {'countryCode':'1', 'phoneNumber':'4243235930'}
                }
            contentHandling: CONVERT_TO_TEXT
            passthroughBehavior: WHEN_NO_MATCH
    patch:
      summary: Edit Office
      operationId: patch-office
      description: Modify the information for an Office.
      tags:
        - Organizations & People
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/OfficeWithId'
                - properties:
                    organizationId:
                      readOnly: true
                - required:
                    - id
      responses:
        '200':
          description: Successfully updated the resource you requested.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfficeWithId'
              examples:
                Office:
                  $ref: '#/components/examples/OfficeWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        type: mock
        responses:
          default:
            statusCode: '200'
            responseTemplates:
              application/json: |
                {
                  'id': 'fe03dcd951054ef782c43fcdf0289264',
                  'datetimeCreated': '2021-11-03T16:21:02+00:09',
                  'datetimeUpdated': '2024-04-20T16:21:02+00:09',
                  'status': 'inactive',
                  'organization_id': '2752faa8bf234a57899b1303c78702ae',
                  'name': 'Albany',
                  'address': '72 Stirling Terrace\nAlbany',
                  'phone': {'countryCode':'1', 'phoneNumber':'8024246531'}
                }
            contentHandling: CONVERT_TO_TEXT
            passthroughBehavior: WHEN_NO_MATCH
  /core/emailaddresses:
    description: The addresses of filed emails do not need to have EmailAddress records.
    get:
      summary: Get EmailAddresses
      operationId: get-persons-emailaddresses
      description: >
        Gets data on one or more EmailAddresses.
                
        If called with no parameters (ie. `/emailaddresses`) it will return data
        for all EmailAddresses in no specific order.


        If called with just the `data_quantity=id_only` parameter (ie.
        `/emailaddresses/me` with `data_quantity=id_only`), it will return just
        the `emailAddressId`\'s' of  the User.


        A specific set of EmailAddresses\' data can be returned by providing the
        `filterIds` parameter with an array of EmailAddress `id` (ie.
        `/emailaddresses` with `filterIds={emailAddressId},{emailAddressId}`).


        If caching the Person data on the client side, the
        `data_quantity=id_only` option can be chosen to get the list of GUIDs
        that match the filtering/sorting/paging requirements, with the Person
        data coming from your client side cache, having been retrieved by
        providing the `filterIds` parameter with an array of `id`. 
      tags:
        - Organizations & People
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterOrganizationIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/filterDisciplines'
        - $ref: '#/components/parameters/filterOfficeIds'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByPersons'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PersonEmailAddressWithId'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterOrganizationIds: method.request.header.filterOrganizationIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.filterDisciplines: method.request.header.filterDisciplines
          integration.request.header.filterOfficeIds: method.request.header.filterOfficeIds
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByPersons: method.request.header.sortByPersons
          integration.request.header.sortDirection: method.request.header.sortDirection
    post:
      summary: New EmailAddress
      operationId: post-person-emailaddress
      description: >
        Note that the Organization/Brand the Person will belong to is determined
        automatically by TonicDM.


        Some automated processes use this endpoint to check if a contact should
        be created or not. This is done by passing `SelectiveNonCreation` as
        `TRUE`. This will create the contact if they're a business email address
        only, and not create the contact if they have a system or personal email
        address, for example `person@company.com` would be created but
        `person@gmail.com` or `no-reply@dropbox.com` would not. This allows you
        to request a contact to be created without filtering the quality of the
        email address first. If `SelectiveNonCreation` is `FALSE`a contact will
        be created.


        If you want to pass in the Organization information, do that as a second
        step using PATCH to the `organizations` endpoint submitting the
        `organizationId` returned in the response body.

        Similarly, adding an Office to the Person needs to be done using PATCH
        to the `/persons` endpoint submitting and `officeId` that would have
        been looked up using GET to the `/offices` endpoint submitting the
        `organizationId` returned in the response body.
      tags:
        - Organizations & People
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PersonEmailAddress'
                - required:
                    - emailAddress
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonEmailAddressWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Edit EmailAddress
      operationId: patch-person-emailaddress
      description: >
        Note that you cannot change the Organization that a person belongs to as
        this is determined automatically by TonicDM.

        To delete an EmailAddress, PATCH its status to `inactive` or `deleted`
        (soft deleted).
      tags:
        - Organizations & People
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonEmailAddressWithId'
      responses:
        '200':
          description: Successfully updated the resource you requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonEmailAddressWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /core/persons:
    description: >-
      Each Person that will be used on the TonicDM application needs a Person
      record.  Note that the addresses of filed emails do not need to have
      Person records.
    get:
      summary: Get Persons
      operationId: get-persons
      description: >
        Gets data on one or more Persons\: the User themselves, Mailboxes in
        their Tenant and/or Contacts in their Contact Organizations.
                
        If called with no parameters (ie. `/persons`) it will return data for
        all Persons in no specific order.


        If called with just the `data_quantity=id_only` parameter (ie.
        `/persons/me` with `data_quantity=id_only`), it will return just the
        `personId` of  the user.


        A specific set of persons\' data can be returned by providing the
        `filterIds` parameter with an array of Person `id` (ie. `/persons` with
        `filterIds={personId},{personId}`).


        If caching the Person data on the client side, the
        `data_quantity=id_only` option can be chosen to get the list of GUIDs
        that match the filtering/sorting/paging requirements, with the Person
        data coming from your client side cache, having been retrieved by
        providing the `filterIds` parameter with an array of `id`. 


        Note that staff in the user\'s own Organization are Persons just like
        their Contacts.   
      tags:
        - Organizations & People
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterOrganizationIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/filterDisciplines'
        - $ref: '#/components/parameters/filterOfficeIds'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByPersons'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PersonWithId'
              examples:
                PersonResponseArray:
                  $ref: '#/components/examples/PersonResponseArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterOrganizationIds: method.request.header.filterOrganizationIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.filterDisciplines: method.request.header.filterDisciplines
          integration.request.header.filterOfficeIds: method.request.header.filterOfficeIds
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByPersons: method.request.header.sortByPersons
          integration.request.header.sortDirection: method.request.header.sortDirection
    post:
      summary: New Person
      operationId: post-person
      description: >
        Note that the Organization the Person will belong to is determined
        automatically by TonicDM.


        Some automated processes use this endpoint to check if a contact should
        be created or not. This is done by passing `SelectiveNonCreation` as
        `TRUE`. This will create the contact if they're a business email address
        only, and not create the contact if they have a system or personal email
        address, for example `person@company.com` would be created but
        `person@gmail.com` or `no-reply@dropbox.com` would not. This allows you
        to request a contact to be created without filtering the quality of the
        email address first. If `SelectiveNonCreation` is `FALSE`a contact will
        be created.


        If you want to pass in the Organization information, do that as a second
        step using PATCH to the `organizations` endpoint submitting the
        `organizationId` returned in the response body.

        Similarly, adding an Office to the Person needs to be done using PATCH
        to the `/persons` endpoint submitting and `officeId` that would have
        been looked up using GET to the `/offices` endpoint submitting the
        `organizationId` returned in the response body.
      tags:
        - Organizations & People
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/Person'
                - required:
                    - name
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonWithId'
              examples:
                SteveResponse:
                  $ref: '#/components/examples/SteveResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Edit Person
      operationId: patch-person
      description: >
        Note that you cannot change the Organization that a person belongs to as
        this is determined automatically by TonicDM.

        To delete a Person, PATCH their status to `inactive` or `deleted` (soft
        deleted).
      tags:
        - Organizations & People
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonWithId'
      responses:
        '200':
          description: Successfully updated the resource you requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonWithId'
              examples:
                StuartResponse:
                  $ref: '#/components/examples/StuartResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /core/staff:
    description: >-
      Returns a list of emailAddresses in the User's own Organization with an
      email address of Type `business`.
    get:
      summary: Get Staff
      operationId: get-staff
      description: >
        Gets data on one or more Staff\: emailAddresses in the User\'s own
        Organization with an email address of Type `business`.

        This endpoint does **not** retrun Person objects. It returns
        emailAddress objects.
                
        If called with no parameters (ie. `/staff`) it will return data for all
        Staff emailAddress records in no specific order.


        Since emailAddress records contain full contact data, a specific set of
        staff\' contact data can be returned by providing the `filterIds` 

        parameter with an array of emailAddress `id`\'s (ie. `/core/staff` with
        `filterIds={emailAddressId},{emailAddressId}`).


        If caching the emailAddress data on the client side, the
        `data_quantity=id_only` option can be chosen to get the list of GUIDs
        that match the filtering/sorting/paging requirements, with the
        emailAddress data coming from your client side cache, having been
        retrieved by providing the `filterIds` parameter. 
      tags:
        - Organizations & People
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterOrganizationIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/filterDisciplines'
        - $ref: '#/components/parameters/filterOfficeIds'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByPersons'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PersonEmailAddressWithId'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterOrganizationIds: method.request.header.filterOrganizationIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.filterDisciplines: method.request.header.filterDisciplines
          integration.request.header.filterOfficeIds: method.request.header.filterOfficeIds
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByStaff: method.request.header.sortByStaff
          integration.request.header.sortDirection: method.request.header.sortDirection
  /core/projects:
    description: >-
      Pagable list of all Projects in the current User's organization. If a
      project is Locked and the user doesn\'t have access, minimal data will be
      returned for that project.
    get:
      operationId: get-projects
      summary: Get Projects
      tags:
        - Projects & Teams
      description: |
        Get the data for Projects in the current User\'s organization.
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterOrganizationIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByProjects'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: A paged array of projects
          headers:
            x-next:
              description: A link to the next page of responses
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
              examples:
                ProjectResponseArray:
                  $ref: '#/components/examples/ProjectResponseArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterOrganizationIds: method.request.header.filterOrganizationIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByProjects: method.request.header.sortByProjects
          integration.request.header.sortDirection: method.request.header.sortDirection
    post:
      summary: New Project
      operationId: post-project
      description: Create a new Project for the User's Organization.
      tags:
        - Projects & Teams
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
            examples:
              RugbyRequest:
                $ref: '#/components/examples/RugbyRequest'
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
              examples:
                RugbyResponse:
                  $ref: '#/components/examples/RugbyResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Edit Project
      operationId: patch-project
      description: Make changes to the Project record.
      tags:
        - Projects & Teams
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Project'
            examples:
              CafeRequestWithId:
                $ref: '#/components/examples/CafeRequestWithId'
      responses:
        '200':
          description: Successfully updated the resource you requested
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
              examples:
                CafeResponse:
                  $ref: '#/components/examples/CafeResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /core/projects/me:
    description: >-
      Get the data for the authenticated User\'s Projects. The list will not
      include any locked projects for which the user doesn\'t have access.
    get:
      summary: Get My Projects
      operationId: get-projects-me
      description: >
        Get the data for the Projects where the authenticated User has
        involvement as a Team Member or Suggested Team Member.

        The list will not include any locked projects for which the User
        doesn\'t have access.
      tags:
        - Projects & Teams
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByProjects'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: A paged array of projects
          headers:
            x-next:
              description: A link to the next page of responses
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByProjects: method.request.header.sortByProjects
          integration.request.header.sortDirection: method.request.header.sortDirection
  /core/team:
    description: This is the Project Team.
    get:
      operationId: get-project-team
      summary: Get Team
      tags:
        - Projects & Teams
      description: >
        Returns the Brands and EmailAddresses that are Members of this project. 

        Only Members with Status 1 and 0 are returned. Other Member Statuses are
        administrative only.
      parameters:
        - name: projectId
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/filterDisciplines'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByPersons'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.filterDisciplines: method.request.header.filterDisciplines
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByPersons: method.request.header.sortByPersons
          integration.request.header.sortDirection: method.request.header.sortDirection
    post:
      summary: Add to Team
      operationId: post-project-team
      description: >
        Submit an array of `ProjectMember` objects to add EmailAddresses to the
        project.

        You cannot add Organizations or Offices to the project directly. 

        The Office that will display is a property of the EmailAddress added.

        The Brand can be specified, but typically will be ommitted and default
        based on the EmailAddress.
      tags:
        - Projects & Teams
      parameters:
        - name: projectId
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/CompactUUID'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectMember'
      responses:
        '201':
          description: Successfully created the resource you sent
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /core/notes:
    description: HTML text that can be associated with items
    get:
      operationId: get-notes
      summary: Get Notes
      tags:
        - Notes
      description: Retreive the notes associated with an item
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByNotes'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/NoteWithId'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByNotes: method.request.header.sortByNotes
          integration.request.header.sortDirection: method.request.header.sortDirection
    post:
      summary: New Note
      operationId: post-notes
      description: placeholder value for description
      tags:
        - Notes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Note'
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoteWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Edit Note
      operationId: patch-note
      description: Make changes to an existing Note.
      tags:
        - Notes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NoteWithId'
      responses:
        '200':
          description: Successfully updated the resource you sent
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete Notes
      operationId: delete-notes
      description: placeholder value for description
      tags:
        - Notes
      parameters:
        - in: query
          name: id
          schema:
            $ref: '#/components/schemas/CompactUUID'
          required: true
          description: ID of the resource to delete
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /core/disciplines:
    description: Disciplines are standardized across the TonicDM system.
    get:
      operationId: get-disciplines
      summary: Get Disciplines
      tags:
        - Disciplines & Certification Definitions
      description: Get information on one or more disciplines
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DisciplineWithId'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /core/certification-definitions:
    description: >-
      Defines Certification Definitions that control Certifications which can
      then be associated with Organizations, Projects, or People.
    get:
      operationId: get-certification-definitions
      summary: Get Certification Definitions
      tags:
        - Disciplines & Certification Definitions
      description: Retreive the configured certification-definitions
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterStatuses'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortByCertificationDefinition'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CertificationDefinitionWithId'
              examples:
                CertificationDefinitionResponseArray:
                  $ref: '#/components/examples/CertificationDefinitionResponseArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterStatuses: method.request.header.filterStatuses
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortByCertificationDefinitions: method.request.header.sortByCertificationDefinition
          integration.request.header.sortDirection: method.request.header.sortDirection
    post:
      summary: New Certification Definition
      operationId: post-certification-definition
      description: placeholder value for description
      tags:
        - Disciplines & Certification Definitions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CertificationDefinition'
            examples:
              LEED:
                $ref: '#/components/examples/LeedRequest'
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CertificationDefinitionWithId'
              examples:
                LEED:
                  $ref: '#/components/examples/LeedResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Edit Certification Definition
      operationId: patch-certification-definition
      description: Make changes to an existing Certification Definition.
      tags:
        - Disciplines & Certification Definitions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CertificationDefinitionWithId'
            examples:
              LEED:
                $ref: '#/components/examples/LeedRequestWithId'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CertificationDefinitionWithId'
              examples:
                LEED:
                  $ref: '#/components/examples/LeedResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete Certification Definitions
      operationId: delete-certification-definitions
      description: placeholder value for description
      tags:
        - Disciplines & Certification Definitions
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /fileset/filesets:
    description: Filesets in the TonicDM system.
    get:
      summary: Get Filesets
      operationId: get-filesets
      description: >
        This endpoint is used to check the status of a Fileset, eg. whether it
        is in a temporary or finalized state, and whether more files can be
        added to it. 

        If files in a Fileset have been deleted or replaced, the previous
        versions will be shown in the Response.


        More than one ID can be passed in the filterIds parameter to reduce the
        number of calls required if the caller needs to check the status of
        multiple Filesets

        and to assist with client-side caching.


        filterIds accepts one or more FileSet IDs. At least one must be
        supplied.
      tags:
        - Filesets
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Fileset'
              examples:
                FilesetsArray:
                  $ref: '#/components/examples/FilesetsArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
  /fileset/files:
    description: Files in the TonicDM system.
    get:
      summary: Get Files
      operationId: get-files
      description: >
        Get Files stored in the Fileset module.


        `filterIds` accepts one or more File IDs. `filterFilesetIds` accepts one
        or more FileSet IDs. At least one must be supplied.
      tags:
        - Filesets
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterFilesetIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/File'
              examples:
                FilesArray:
                  $ref: '#/components/examples/FilesArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
  /fileset/thumbnails:
    description: Returns thumbnails for files stored in the Fileset module.
    get:
      summary: Get Fileset Thumbnails
      x-internal: true
      operationId: get-fileset-thumbnails
      description: |
        Get thumbnails for files stored in the Fileset module.
      tags:
        - Filesets
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterThumbnailSize'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ThumbnailSet'
              examples:
                thumbnailSetArray:
                  $ref: '#/components/examples/ThumbnailSetArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
  /fileset/expiry-url:
    description: An Expiry URL can be used to download a Fileset for a limited time.
    get:
      summary: Get an Expiry URL
      operationId: get-expiry-url
      description: >
        Expiry URLs are used when sending download links in notifications or
        emails. 

        An Expiry URL can be used to download a Fileset for a limited time (eg.
        30 days). 

        The owner of the Fileset can change the expiry date of the Expiry URL
        after the fact to reduce or extend the time the Fileset can be
        downloaded. 


        If the TonicDM back end is sending the notifications or emails, you do
        not need to use this endpoint. 

        The TonicDM back end will automatically generate the Expiry URL and
        include it in the notification or email.


        If you want to send a notification or email from your own system, you
        can use this endpoint to generate an Expiry URL for the Fileset.


        There are no Request parameters for this endpoint. To associate the
        Expiry URL with a Fileset, you must include the Expiry ID in the request
        that creates the Workflow Item for which the Fileset is attached.
      tags:
        - Filesets
      responses:
        '200':
          description: Successfully returned an Expiry URL
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpiryUrl'
              examples:
                ExpiryUrl:
                  $ref: '#/components/examples/ExpiryUrl'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /fileset/multi-part-initialize:
    description: The information needed to upload a file to AWS S3.
    get:
      summary: Initialize multi-part upload
      operationId: get-initialize-multi-part-upload
      description: >
        For large files (over 100Mb), initiate a multi-part upload with this
        endpoint, then call `...` to get the URL to upload each chunk, then when
        all the chunks are uploaded call `...` to finalize the upload.


        This endpoint returns the AWS UploadId as a string that must be used in
        subsequent calls. 
      tags:
        - Manual Uploading
      parameters:
        - $ref: '#/components/parameters/filesetId'
        - in: query
          name: contentType
          description: HTTP Media Content Type
          schema:
            type: string
        - in: query
          name: filePathNameExt
          description: >-
            Filename including optional relative path, name and file extension.
            No leading slash eg. `path1/path2/name.ext`
          schema:
            type: string
      responses:
        '200':
          description: >-
            Successfully returned a presigned URL for uploading a file to AWS
            S3.
          content:
            application/json:
              schema:
                allOf:
                  - type: object
                    properties:
                      awsUploadId:
                        type: string
                  - $ref: '#/components/schemas/PresignedUrl'
              examples:
                PresignedUrl:
                  $ref: '#/components/examples/PresignedUrl'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /fileset/presigned-url:
    description: The information needed to upload a file to AWS S3.
    get:
      summary: Get a Presigned URL for Uploading
      operationId: get-presigned-url
      description: >
        Presigned URLs are used to upload a file into the Fileset specified by
        the Fileset ID in the request.

        - For small files (under 100Mb), call this endpoint and upload the file
        to it.

        - For large files (over 100Mb), Initiate a multi-part upload with `..`
        then call this endpoint to get the URL to upload each chunk, then when
        all the chunks are uploaded call `...` to finalize the upload.


        When the Presigned URL is used, the Response will include an *etag*
        which must be saved and submitted with the Finalize call.
      tags:
        - Manual Uploading
      parameters:
        - $ref: '#/components/parameters/filesetId'
      responses:
        '200':
          description: >-
            Successfully returned a presigned URL for uploading a file to AWS
            S3.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PresignedUrl'
              examples:
                PresignedUrl:
                  $ref: '#/components/examples/PresignedUrl'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /fileset/multi-part-finalize:
    description: The information needed to upload a file to AWS S3.
    get:
      summary: Finalize multi-part upload
      operationId: get-finalize-multi-part-upload
      description: >
        For large files (over 100Mb), initiate a multi-part upload with  `..` ,
        then call `...` to get the URL to upload each chunk, then when all the
        chunks are uploaded call this endpoint to finalize the upload.
      tags:
        - Manual Uploading
      parameters:
        - $ref: '#/components/parameters/filesetId'
      responses:
        '200':
          description: >-
            Successfully returned a presigned URL for uploading a file to AWS
            S3.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PresignedUrl'
              examples:
                PresignedUrl:
                  $ref: '#/components/examples/PresignedUrl'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /fileset/cloudfilesystem-children:
    description: >-
      Managing child elements in a cloud folder structure (eg. Egnyte,
      Sharepoint, etc.).
    get:
      operationId: get-cloudfilesystem-children
      summary: Get Cloud Folder Children
      tags:
        - Cloud File Systems
      description: >
        Retreive the children associated with a cloud file system path. This
        endpoint is used sucessively to navigate the file system. 


        This endpoint can accept:


        - just a platform, in which case the children of the root of the file
        system will be listed.

        - an ID of the folder to list

        - a Project ID, and if that project in TonicDM is configured with a root
        folder for the given platform, that folder will be listed. If no
        project-specific root folder is configured, the root for the platform
        will be listed.

        - a Project ID and Workflow name, and if that workflow in TonicDM is
        configured with a root folder for the given platform and project, that
        folder will be listed. If no workflow-specific root folder is
        configured, the root for the project will be used. And if no
        project-specific root folder is configured, the root for the platform
        will be listed.
      parameters:
        - $ref: '#/components/parameters/platform'
        - in: query
          name: folderId
          description: The ID of the parent folder in the cloud file system (not its path).
          schema:
            type: string
        - in: query
          name: projectId
          description: The ID of the parent folder in the cloud file system (not its path).
          schema:
            type: string
        - in: query
          name: workflow
          description: >-
            The name of the relevant Workflow. If no parentId is provided, and a
            projectId is provided, and a path to that project\'s folder for this
            workflow can be determined, then its children will be returned.
          schema:
            type: string
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                allOf:
                  - type: array
                    items:
                      $ref: '#/components/schemas/Child'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.sortDirection: method.request.header.sortDirection
    post:
      summary: New Cloud Folder Child
      operationId: post-cloudfilesystem-child
      description: >-
        Creates a new child *folder* in the parent folder. This cannot be used
        to add a file to a folder.
      tags:
        - Cloud File Systems
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Child'
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Child'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Edit Cloud Folder Child
      operationId: patch-cloudfilesystem-child
      description: Change the name of an existing file or folder.
      tags:
        - Cloud File Systems
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Child'
      responses:
        '200':
          description: Successfully updated the resource you sent
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete Cloud Folder Child
      operationId: delete-cloudfilesystem-child
      description: Delete a file or folder from the parent folder.
      tags:
        - Cloud File Systems
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /fileset/cloud-file:
    description: >-
      Upload one or more files from a cloud file system to a TonicDM fileset in
      AWS S3.
    put:
      summary: Upload cloud-hosted files
      operationId: put-cloud-files
      description: >
        Based on the IDs of files in a cloud file system, add those files to a
        TonicDM fileset.

        If the files are in different folders, the TonicDM system will determine
        the appropriate relative path (the common root). 


        The TonicDM user\'s token for the cloud platform must have access to the
        files in the cloud file system.


        It should return success or failure for each file as it happens.
        Implementing a progress bar ???
      tags:
        - Cloud File Systems
      parameters:
        - $ref: '#/components/parameters/platform'
        - $ref: '#/components/parameters/cloudFileIds'
        - $ref: '#/components/parameters/filesetId'
      responses:
        '200':
          description: >-
            Successfully retreived the files from the cloud file system and
            added them to the Fileset.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/File'
              examples:
                FilesArray:
                  $ref: '#/components/examples/FilesArray'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /correspondence/conversations:
    description: Conversations in the TonicDM system.
    get:
      summary: Get Conversations
      operationId: get-conversations
      description: |
        Get Conversations stored in the Correspondence module.
      tags:
        - Correspondence
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Conversation'
              examples:
                CosArray:
                  $ref: '#/components/examples/ConversationsArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
  /correspondence/messages:
    description: Messages in the TonicDM system.
    get:
      summary: Get Messages
      operationId: get-messages
      description: |
        Get Messages stored in the Correspondence module.
      tags:
        - Correspondence
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Message'
              examples:
                CosArray:
                  $ref: '#/components/examples/MessagesArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
  /workflow/filetransfers:
    description: FileTransfers in the TonicDM system.
    get:
      summary: Get FileTransfers
      operationId: get-workflow-filetransfers
      description: |
        Get FileTransfers stored in the Workflow module.
      tags:
        - File Transfers
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FileTransferItemWithId'
              examples:
                FileTransfersArray:
                  $ref: '#/components/examples/FileTransfersArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
  /workflow/filetransfer-parts:
    description: FileTransfer Parts in the TonicDM system.
    get:
      summary: Get FileTransfer Parts
      operationId: get-workflow-filetransfer-parts
      description: |
        Get the details of Parts of FileTransfers stored in the Workflow module.
      tags:
        - File Transfers
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterPartIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FileTransferPartWithId'
              examples:
                FileTransferPartsArray:
                  $ref: '#/components/examples/FileTransferPartsArray'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterPartIds: method.request.header.filterPartIds
  /workflow/rfis:
    description: RFIs in the TonicDM system.
    get:
      summary: Get RFIs
      operationId: get-workflow-rfis
      description: |
        Get RFIs stored in the Workflow module.
      tags:
        - RFIs
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterWorkflows'
        - $ref: '#/components/parameters/filterStages'
        - $ref: '#/components/parameters/filterFrom'
        - $ref: '#/components/parameters/filterTo'
        - $ref: '#/components/parameters/filterCc'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RfiItemWithId'
              examples:
                RfisArray:
                  $ref: '#/components/examples/RfisArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
    post:
      summary: Create RFI
      operationId: post-workflow-rfi
      description: |
        Create an RFI in the Workflow module of a particular Project. 
      tags:
        - RFIs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/RfiItem'
                - required:
                    - project_id
                    - our_number
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RfiItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Change an RFI
      operationId: patch-workflow-rfi
      description: |
        Change an RFI. 
      tags:
        - RFIs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/RfiItemWithId'
                - required:
                    - id
      responses:
        '200':
          description: Successfully changed the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RfiItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete RFI
      operationId: delete-rfi
      description: >-
        Note that deleting an RFI will fail if it has been forwarded or
        returned.
      tags:
        - RFIs
      parameters:
        - in: query
          name: id
          schema:
            $ref: '#/components/schemas/CompactUUID'
          required: true
          description: ID of the resource to delete.
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /workflow/rfi-parts:
    description: RFI Parts in the TonicDM system.
    get:
      summary: Get RFI Parts
      operationId: get-workflow-rfi-parts
      description: >
        Get the details of Parts of RFIs stored in the Workflow module, either
        by specifying one or more RFI Items to get all the Parts for those RFIs,
        or by specifying the GUIDs of the Parts themselves.

        Parts are the actions that have occured for an Item, eg. when the Item
        was received, when it was forwarded etc.
      tags:
        - RFIs
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterPartIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RfiPartWithId'
              examples:
                RfiPartsArray:
                  $ref: '#/components/examples/RfiPartsArray'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterPartIds: method.request.header.filterPartIds
  /workflow/rfi-integrations-list:
    description: |
      Working with RFIs in a 3rd party system (e.g. Procore).
    get:
      summary: Pull an RFI List from a 3rd party system.
      tags:
        - RFIs
      operationId: pull-rfi-list
      description: >-
        Returns basic information for the list of RFIs available in a 3rd party
        system (e.g. Procore).

        The TonicDM user\'s token for the cloud platform must be set up and have
        access to the resources in the 3rd party system.
      parameters:
        - $ref: '#/components/parameters/platform'
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array. 

            The TonicDM user\'s token for the cloud platform must be set up and
            have access to the resources in the 3rd party system.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Rfi3rdpartyList'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortDirection: method.request.header.sortDirection
        type: mock
  /workflow/rfi-integrations:
    description: |
      Working with RFIs in a 3rd party system (e.g. Procore).
    get:
      summary: Pull one RFI from a 3rd party system.
      tags:
        - RFIs
      operationId: pull-rfi-detail
      description: >-
        Returns detailed information for one RFI available in a 3rd party system
        (e.g. Procore).

        The TonicDM user\'s token for the cloud platform must be set up and have
        access to the resources in the 3rd party system.
      parameters:
        - $ref: '#/components/parameters/platform'
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. 

            The TonicDM user\'s token for the cloud platform must be set up and
            have access to the resources in the 3rd party system.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Rfi3rdpartyDetail'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortDirection: method.request.header.sortDirection
        type: mock
    post:
      summary: Put RFI Response into a 3rd Party System (e.g. Procore).
      tags:
        - RFIs
      operationId: put-rfi-response
      description: >-
        Put RFI Response into a 3rd Party system (e.g. Procore). 

        For this to work, the specified 3rd Party system user account must have
        an active API connection and permissions in the 3rd Party system.  
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RfiReasonCode'
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RfiReasonCodeWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /workflow/rfi-reason-codes:
    description: |
      Working with RFI reason codes.
    get:
      summary: Get Reason Codes
      tags:
        - RFIs
      operationId: get-rfi-reason-codes
      description: Returns a list of all Reason Codes for the user\'s Brand.
      parameters:
        - $ref: '#/components/parameters/searchQuery'
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/dataQuantity'
        - $ref: '#/components/parameters/pageSize'
        - $ref: '#/components/parameters/pageNumber'
        - $ref: '#/components/parameters/sortDirection'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RfiReasonCodeWithId'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.searchQuery: method.request.header.searchQuery
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.dataQuantity: method.request.header.dataQuantity
          integration.request.header.pageSize: method.request.header.pageSize
          integration.request.header.pageNumber: method.request.header.pageNumber
          integration.request.header.sortDirection: method.request.header.sortDirection
        type: mock
    post:
      summary: Create a Reason Code
      tags:
        - RFIs
      operationId: post-rfi-reason-code
      description: Creates a new RFI Reason Code for the Brand.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RfiReasonCode'
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RfiReasonCodeWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Edit a Reason Code
      tags:
        - RFIs
      operationId: patch-rfi-reason-code
      description: Edit an RFI Reason Code in the Brand.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RfiReasonCodeWithId'
      responses:
        '200':
          description: Successfully updated the resource you requested.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RfiReasonCodeWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /workflow/submittals:
    description: Submittals in the TonicDM system.
    get:
      summary: Get Submittals
      operationId: get-workflow-submittals
      description: |
        Get Submittals stored in the Workflow module.
      tags:
        - Submittals
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SubmittalItemWithId'
              examples:
                SubmittalsArray:
                  $ref: '#/components/examples/SubmittalsArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
    post:
      summary: Create Submittal
      operationId: post-workflow-submittal
      description: |
        Create an Submittal in the Workflow module of a particular Project. 
      tags:
        - Submittals
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/SubmittalItem'
                - required:
                    - project_id
                    - our_number
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmittalItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Change an Submittal
      operationId: patch-workflow-submittal
      description: |
        Change an Submittal. 
      tags:
        - Submittals
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/SubmittalItemWithId'
                - required:
                    - id
      responses:
        '200':
          description: Successfully changed the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmittalItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete Submittal
      operationId: delete-submittal
      description: >-
        Note that deleting an Submittal will fail if it has been forwarded or
        returned.
      tags:
        - Submittals
      parameters:
        - in: query
          name: id
          schema:
            $ref: '#/components/schemas/CompactUUID'
          required: true
          description: ID of the resource to delete.
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /workflow/submittal-parts:
    description: Submittal Parts in the TonicDM system.
    get:
      summary: Get Submittal Parts
      operationId: get-workflow-submittal-parts
      description: |
        Get the details of Parts of Submittals stored in the Workflow module.
      tags:
        - Submittals
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterPartIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SubmittalPartWithId'
              examples:
                SubmittalPartsArray:
                  $ref: '#/components/examples/SubmittalPartsArray'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterPartIds: method.request.header.filterPartIds
  /workflow/pcos:
    description: PCOs in the TonicDM system.
    get:
      summary: Get PCOs
      operationId: get-workflow-pcos
      description: |
        Get PCOs stored in the Workflow module.
      tags:
        - PCOs
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PcoItemWithId'
              examples:
                PcosArray:
                  $ref: '#/components/examples/PcosArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
    post:
      summary: Create PCO
      operationId: post-workflow-pco
      description: |
        Create an PCO in the Workflow module of a particular Project. 
      tags:
        - PCOs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PcoItem'
                - required:
                    - project_id
                    - our_number
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PcoItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Change an PCO
      operationId: patch-workflow-pco
      description: |
        Change an PCO. 
      tags:
        - PCOs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/PcoItemWithId'
                - required:
                    - id
      responses:
        '200':
          description: Successfully changed the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PcoItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete PCO
      operationId: delete-pco
      description: >-
        Note that deleting an PCO will fail if it has been forwarded or
        returned.
      tags:
        - PCOs
      parameters:
        - in: query
          name: id
          schema:
            $ref: '#/components/schemas/CompactUUID'
          required: true
          description: ID of the resource to delete.
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /workflow/pco-parts:
    description: PCO Parts in the TonicDM system.
    get:
      summary: Get PCO Parts
      operationId: get-workflow-pco-parts
      description: |
        Get the details of Parts of PCOs stored in the Workflow module.
      tags:
        - PCOs
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterPartIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PcoPartWithId'
              examples:
                PcoPartsArray:
                  $ref: '#/components/examples/PcoPartsArray'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterPartIds: method.request.header.filterPartIds
  /workflow/cos:
    description: COs in the TonicDM system.
    get:
      summary: Get COs
      operationId: get-workflow-cos
      description: |
        Get COs stored in the Workflow module.
      tags:
        - COs
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CoItemWithId'
              examples:
                CosArray:
                  $ref: '#/components/examples/CosArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
    post:
      summary: Create CO
      operationId: post-workflow-co
      description: |
        Create an CO in the Workflow module of a particular Project. 
      tags:
        - COs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CoItem'
                - required:
                    - project_id
                    - our_number
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Change an CO
      operationId: patch-workflow-co
      description: |
        Change an CO. 
      tags:
        - COs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/CoItemWithId'
                - required:
                    - id
      responses:
        '200':
          description: Successfully changed the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CoItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete CO
      operationId: delete-co
      description: Note that deleting an CO will fail if it has been forwarded or returned.
      tags:
        - COs
      parameters:
        - in: query
          name: id
          schema:
            $ref: '#/components/schemas/CompactUUID'
          required: true
          description: ID of the resource to delete.
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /workflow/co-parts:
    description: CO Parts in the TonicDM system.
    get:
      summary: Get CO Parts
      operationId: get-workflow-co-parts
      description: |
        Get the details of Parts of COs stored in the Workflow module.
      tags:
        - COs
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterPartIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CoPartWithId'
              examples:
                CoPartsArray:
                  $ref: '#/components/examples/CoPartsArray'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterPartIds: method.request.header.filterPartIds
  /workflow/tasks:
    description: Tasks in the TonicDM system.
    get:
      summary: Get Tasks
      operationId: get-workflow-tasks
      description: |
        Get Tasks stored in the Workflow module.
      tags:
        - Tasks
      parameters:
        - $ref: '#/components/parameters/filterIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TaskItemWithId'
              examples:
                TasksArray:
                  $ref: '#/components/examples/TasksArray'
        '204':
          $ref: '#/components/responses/NoContentSuccess'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
    post:
      summary: Create Task
      operationId: post-workflow-task
      description: |
        Create an Task in the Workflow module of a particular Project. 
      tags:
        - Tasks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/TaskItem'
                - required:
                    - project_id
                    - our_number
      responses:
        '201':
          description: Successfully created the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    patch:
      summary: Change an Task
      operationId: patch-workflow-task
      description: |
        Change an Task. 
      tags:
        - Tasks
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/TaskItemWithId'
                - required:
                    - id
      responses:
        '200':
          description: Successfully changed the resource you sent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskItemWithId'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    delete:
      summary: Delete Task
      operationId: delete-task
      description: >-
        Note that deleting an Task will fail if it has been forwarded or
        returned.
      tags:
        - Tasks
      parameters:
        - in: query
          name: id
          schema:
            $ref: '#/components/schemas/CompactUUID'
          required: true
          description: ID of the resource to delete.
      responses:
        '200':
          description: Successfully deleted the resource you requested
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/RateLimitExceededError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /workflow/task-parts:
    description: Task Parts in the TonicDM system.
    get:
      summary: Get Task Parts
      operationId: get-workflow-task-parts
      description: |
        Get the details of Parts of Tasks stored in the Workflow module.
      tags:
        - Tasks
      parameters:
        - $ref: '#/components/parameters/filterIds'
        - $ref: '#/components/parameters/filterPartIds'
      responses:
        '200':
          description: >-
            Successfully read the resource you requested. One or more records
            are returned in the form of an array.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TaskPartWithId'
              examples:
                TaskPartsArray:
                  $ref: '#/components/examples/TaskPartsArray'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/NoAccessError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
      x-amazon-apigateway-integration:
        requestParameters:
          integration.request.header.filterIds: method.request.header.filterIds
          integration.request.header.filterPartIds: method.request.header.filterPartIds
components:
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://example.com/oauth/authorize
          tokenUrl: https://example.com/oauth/token
          scopes:
            read: Read access to protected resources
            write: Write access to protected resources
    apiKeyAuth:
      type: apiKey
      in: query
      name: X-API-KEY
  parameters:
    searchQuery:
      name: searchQuery
      in: query
      description: A JSON-encoded string containing the query options.
      schema:
        type: string
        format: JSON
      example: '{"example"}'
    filterIds:
      name: filterIds
      in: query
      description: Returns data for the specified GUIDs
      style: form
      explode: false
      schema:
        type: array
        items:
          $ref: '#/components/schemas/CompactUUID'
      example: '{id},{id},{id}'
    filterStatuses:
      name: filterStatuses
      description: >
        Provide the values of one or more statuses separated by comma (no
        spaces).  If no value is supplied, `active` is assumed.
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          $ref: '#/components/schemas/Status'
      example: active,inactive
    filterDisciplines:
      name: filterDisciplines
      description: >-
        provide the GUIDs of one or more disciplines separated by comma (no
        spaces)
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          $ref: '#/components/schemas/CompactUUID'
      example: '{id},{id},{id}'
    dataQuantity:
      name: dataQuantity
      in: query
      description: >-
        If caching data on the client side, the
        `data_quantity=id_only|basic|complete` option can be passed to manage
        the completeness of the data received and therefore rate limiting.
      schema:
        type: boolean
        default: false
      example: 'true'
    pageSize:
      name: pageSize
      in: query
      description: The number of results to return per page
      schema:
        type: integer
        minimum: 1
        maximum: 1000
        default: 50
      example: '100'
    pageNumber:
      name: pageNumber
      in: query
      schema:
        type: integer
      description: Which page of the results to return
      example: '1'
    sortByOrganization:
      description: The **field** by which to sort the results
      name: sortBy
      in: query
      schema:
        type: string
        enum:
          - nameLong
          - nameShort
          - nameInitials
    sortDirection:
      name: sortDirection
      in: query
      schema:
        type: string
        enum:
          - asc
          - desc
      description: The sort direction for the results
    filterOrganizationIds:
      name: filterOrganizationIds
      in: query
      description: Returns data for the specified Organization GUIDs
      style: form
      explode: false
      schema:
        type: array
        items:
          $ref: '#/components/schemas/CompactUUID'
      example: '{OrganizationId},{OrganizationId},{OrganizationId}'
    sortByOffice:
      description: The **field** by which to sort the results
      name: sortBy
      in: query
      schema:
        type: string
        enum:
          - name
    filterOfficeIds:
      name: filterOfficeIds
      description: Provide the GUIDs of one or more offices separated by comma (no spaces).
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          $ref: '#/components/schemas/CompactUUID'
      example: '{id},{id},{id}'
    sortByPersons:
      description: The **field** by which to sort the results
      name: sortBy
      in: query
      schema:
        type: string
        enum:
          - name
          - email
          - title
          - office
    sortByProjects:
      description: The **field** by which to sort the results
      name: sortBy
      in: query
      schema:
        type: string
        enum:
          - projectNumber
          - nameLong
          - nameShort
    sortByNotes:
      description: The **field** by which to sort the results
      name: sortBy
      in: query
      schema:
        type: string
        enum:
          - personName
          - actionDateTime
    sortByCertificationDefinition:
      description: The **field** by which to sort the results
      name: sortBy
      in: query
      schema:
        type: string
        enum:
          - name
          - jurisdiction
    filterFilesetIds:
      name: filterFilesetIds
      in: query
      description: Returns data for the specified Fileset GUIDs
      style: form
      explode: false
      schema:
        type: array
        items:
          $ref: '#/components/schemas/CompactUUID'
      example: '{id},{id},{id}'
    filterThumbnailSize:
      name: filterThumbnailSize
      in: query
      schema:
        type: string
        enum:
          - small
          - medium
          - large
      description: >-
        Returns thumbnail images of all pages of a document at the specified
        size
      example: small
    filesetId:
      name: filesetId
      in: query
      description: Specifies the GUID of a Fileset
      schema:
        type: string
      example: 8e8aa42241794371ae9d0ed7b67a8c86
    platform:
      name: platform
      in: query
      schema:
        type: string
        enum:
          - egnyte
          - sharepoint
          - msgraph
          - procore
          - acc
      description: Defines the cloud platform to use.
      required: true
      example: egnyte
    cloudFileIds:
      name: cloudFileIds
      in: query
      description: Specifies a list of GUIDs of files in a cloud file system
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
      example: '{id},{id},{id}'
    filterPartIds:
      name: filterPartIds
      in: query
      description: Returns data for the specified Parts of Workflow Items
      style: form
      explode: false
      schema:
        type: array
        items:
          $ref: '#/components/schemas/CompactUUID'
      example: '{PartId},{PartId},{PartId}'
    filterWorkflows:
      name: filterWorkflows
      description: >-
        Provide the names of one or more workflows separated by comma (no
        spaces).
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
      example: rfi,submittal,pco
    filterStages:
      name: filterStages
      description: Provide the GUIDs of one or more offices separated by comma (no spaces).
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          format: uuid
      example: open,forwarded,void
    filterFrom:
      name: filterFrom
      description: >-
        Provide one or more email addresses that any of the Parts of the Item
        are From, separated by comma (no spaces). This includes Receive,
        Forward, ReturnOfForward and Response parts.
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          format: email
      example: eddie@atlas-gc.com
    filterTo:
      name: filterTo
      description: >-
        Provide one or more email addresses that any of the Parts of the Item
        are To, separated by comma (no spaces). This includes Receive, Forward,
        ReturnOfForward and Response parts.
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          format: email
      example: patti@argo-structural.com,mel@pacific-architects.com
    filterCc:
      name: filterCc
      description: >-
        Provide one or more email addresses that any of the Parts of the Item
        are CC, separated by comma (no spaces). This includes Receive, Forward,
        ReturnOfForward and Response parts.
      in: query
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          format: email
      example: rita@argo-structural.com,stuart@pacific-architects.com
  schemas:
    CompactUUID:
      type: string
      pattern: ^[0-9a-fA-F]{32}$
      x-format: uuid-no-hyphens
      description: UUID without hyphens (32 characters)
      example: 8e8aa42241794371ae9d0ed7b67a8c86
    Status:
      title: Status
      description: >-
        Whether the item is active or inactive in TonicDM. Potentially the item
        could be (soft) deleted.
      type: string
      enum:
        - active
        - inactive
        - deleted
      default: active
    Discipline:
      title: Discipline
      type: object
      description: >-
        Defines the list of disciplines in TonicDM, and also defines whether
        that discipline initiates and/or receives each workflow type.
      properties:
        nameInitials:
          description: 1-2 letter abbreviation
          type: string
          readOnly: true
        nameShort:
          description: 4 letter abbreviation
          type: string
          readOnly: true
        nameLong:
          description: Unabbreviated name
          type: string
          readOnly: true
    OrganizationBrand:
      title: Brand
      type: object
      description: >-
        Data for one Brand of an Organization. All TonicDM Organizations have
        one or more Brands.
      properties:
        datetimeCreated:
          description: The date and time this Brand was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Brand was last updated.
          type: string
          format: date-time
          readOnly: true
        status:
          $ref: '#/components/schemas/Status'
        domains:
          description: >
            Zero or more domains that belong to this organization and represent
            the Brand, eg. `firm.com`, `firm.co.us`. 


            In the case of a shared domain contact, the "domain" of their Brand
            is their full email address, eg. `steven.novosel@gmail.com`.
          type: array
          items:
            type: string
        nameLong:
          description: The full official name of the Brand (used on transmittals).
          type: string
          maxLength: 128
        nameShort:
          description: The friendly name of the Brand (used within the TonicDM app).
          type: string
          maxLength: 128
        nameInitials:
          description: The initials of the Brand (used in very small spaces)
          type: string
          maxLength: 4
        brandColor:
          description: >-
            Brand color for the Brand. This is set centrally by TonicDM and can
            not be changed directly via this API.
          type: string
          format: hex
          pattern: ^(?:[0-9a-fA-F]{6}|)$
          readOnly: true
        disciplines:
          description: >-
            limits the disciplines that can be chosen for any person in this
            Brand to help consistency.
          type: array
          items:
            $ref: '#/components/schemas/Discipline'
        organizationId:
          description: >
            A GUID used to link multiple Brand records together into an
            organization.

            There are no extra fields associated with this GUID. It serves only
            as a linking mechanism.

            Use of this feature requires the TonicDM AdvancedContacts license. 
          type: string
          format: guid
          pattern: ^[0-9a-fA-F]{32}$
        isPrime:
          description: >
            Indicates that this Brand is the primary Brand for this
            organization. 

            When displaying an organization, the Prime Brand info will be used
            for their Name, etc.

            Use of this feature requires the TonicDM AdvancedContacts license. 
          type: boolean
        customerDataWarehouseId:
          description: >-
            The ID of the Brand in the Customer\'s Data Warehouse. Use of this
            feature requires the TonicDM AdvancedMetrics license.
          type: string
        customerErpId:
          description: >-
            The ID of the Brand in the Customer\'s ERP system (eg. Deltek
            Vantagepoint). Use of this feature requires the TonicDM
            AdvancedMetrics license.
          type: string
        customerCrmId:
          description: >-
            The ID of the Brand in the Customer\'s CRM system (eg. Deltek
            Salesforce). Use of this feature requires the TonicDM
            AdvancedMetrics license.
          type: string
    OrganizationBrandWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Brand record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/OrganizationBrand'
    Phone:
      title: Phone
      type: object
      description: >-
        A phone number in 3 parts. Country code and phone number are always
        required.
      required:
        - countryCode
        - phoneNumber
      properties:
        countryCode:
          description: Numbers only, no spaces or +
          type: number
        phoneNumber:
          description: Numbers only, no spaces or formatting
          type: number
        extension:
          description: Numbers only, no text or formatting
          type: number
    Office:
      title: Office
      type: object
      description: >
        The physical location that is assigned to a Project or Person. 

        This allows for filtering by Office, and the calcuation of metrics by
        Office.

        Use of this feature for Contact Organizations requires the TonicDM
        AdvancedContacts license. 
      properties:
        datetimeCreated:
          description: The date and time this Office was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Office was last updated.
          type: string
          format: date-time
          readOnly: true
        status:
          $ref: '#/components/schemas/Status'
        name:
          description: >-
            The name given to this Office. It is used in the TonicDM app only
            (not put onto anything externally facing).
          type: string
          minLength: 1
          maxLength: 64
        address:
          description: >-
            The address of the office. Use `\n` for new lines when submitting
            (they will be returned as `<br>`).
          type: string
          minLength: 1
          maxLength: 256
        phone:
          $ref: '#/components/schemas/Phone'
    OfficeWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Project record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/Office'
    Organization:
      title: Organization
      type: object
      description: >
        Basic info for an Organization. An Organization is just a collection of
        Brands, Offices, People and Projects. 

        There are no fields associated with an Organization.

        Only Brands and Offices are included here because the numbers of results
        are limited. People and Projects are in their own API endpoints because
        they often require paging.
      properties:
        brands:
          description: >-
            One or more Brands that belong to this Organization. All
            Organizations are have at least one Brand.
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/OrganizationBrandWithId'
        offices:
          description: Zero or more Offices that belong to this Organization.
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/OfficeWithId'
    OrganizationWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Project record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/Organization'
    Errors:
      title: Errors
      type: object
      required:
        - errors
      properties:
        errors:
          description: x
          type: array
          minItems: 1
          items:
            required:
              - code
              - message
            properties:
              code:
                description: x
                type: string
              message:
                description: x
                type: string
              source:
                description: x
                title: ErrorSource
                required:
                  - location
                  - name
                properties:
                  location:
                    description: x
                    type: string
                    enum:
                      - path
                      - query
                      - body
                      - header
                  name:
                    type: string
                    description: The name of the property or parameter causing the error
                  path:
                    type: string
                    description: >-
                      JSON path targeting the source of error (only used when
                      location is `body`)
    DisciplineWithId:
      allOf:
        - type: object
          properties:
            id:
              description: 32 char GUID
              type: string
        - $ref: '#/components/schemas/Discipline'
    Certification:
      title: Certification
      type: object
      description: >
        Certifications can be applied to records to indicate that the
        Organization, Project or Person holds the certification.
      required:
        - certificationDefinitionId
      properties:
        datetimeCreated:
          description: The date and time this Certification record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Certification record was last updated.
          type: string
          format: date-time
          readOnly: true
        certificationDefinitionId:
          description: The GUID of the Certification Definition record.
          type: string
          format: guid
          pattern: ^[0-9a-fA-F]{32}$
        dateExpires:
          description: The date this certification expires.
          type: string
          format: date
    CertificationWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Certification record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/Certification'
    PersonEmailAddress:
      title: PersonEmailAddress
      type: object
      description: >
        EmailAddress is effectively a Contact record because it stores full
        contact details. Giving full contact details to each email address

        allows for the same staff member to have multiple email addresses where
        their title, address and phone are also different. When operating

        multiple Brands, this is a common requirement. 


        Without the AdvancedContacts license, each email address is completely
        indepentant, even if more than one email address refers to the same
        physical person.

        This simplification makes contact management much easier and potentially
        fully automated.


        The AdvancedContacts license activates the PersonID field which allows
        multiple email addresses to be linked, ie. to track a person who has
        multiple

        email addresses, and to track the history of email addresses for a
        person, even as they move between companies.
      properties:
        datetimeCreated:
          description: The date and time this email address record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this email address record was last updated.
          type: string
          format: date-time
          readOnly: true
        status:
          $ref: '#/components/schemas/Status'
        emailAddress:
          type: string
          format: email
        name:
          description: The person\'s full name.
          type: string
          minLength: 1
          maxLength: 64
        title:
          description: The person\'s business title.
          type: string
          minLength: 1
          maxLength: 64
        deskPhone:
          $ref: '#/components/schemas/Phone'
        mobilePhone:
          $ref: '#/components/schemas/Phone'
        office:
          $ref: '#/components/schemas/Office'
        disciplines:
          description: The Disciplines this Person is typically involved in.
          type: array
          items:
            $ref: '#/components/schemas/DisciplineWithId'
        certifications:
          description: >-
            Zero or more certifications that this Person has obtained, or
            previously obtained. Use of this feature requires the TonicDM
            AdvancedContacts license.
          type: array
          items:
            - $ref: '#/components/schemas/CertificationWithId'
        emailDeliveryStatus:
          description: >-
            The status of the last email sent to this address. This is updated
            by the system.
          type: string
          enum:
            - unknown
            - delivered
            - bounced
          default: unknown
          readOnly: true
        emailType:
          description: The type of email address. This is set by the system.
          type: string
          enum:
            - business
            - personal
            - system
            - misspelled
          readOnly: true
        personId:
          description: >
            A GUID used to link multiple EmailAddress records together,
            presumably because they belong to the same physical person.

            There are no extra fields associated with this GUID. It serves only
            as a linking mechanism.

            Use of this feature requires the TonicDM AdvancedContacts license. 
          type: string
          format: guid
          pattern: ^[0-9a-fA-F]{32}$
        dateActive:
          description: >
            The date this email address became active. This is used to track the
            history of email addresses for a person. 

            Use of this feature requires the TonicDM AdvancedContacts license. 
          type: string
          format: date
        dateInactive:
          description: >
            The date this email address became inactive. This is used to track
            the history of email addresses for a person. 

            Use of this feature requires the TonicDM AdvancedContacts license. 
          type: string
          format: date
        isPrime:
          description: >
            Indicates that this email address is the primary email address for
            this person. 

            When displaying a Person, the Prime email address info will be used
            for their Name, etc.

            Use of this feature requires the TonicDM AdvancedContacts license. 
          type: boolean
        customerDataWarehouseId:
          description: >-
            The ID of the Person in the Customer\'s Data Warehouse. Use of this
            feature requires the TonicDM AdvancedMetrics license.
          type: string
        customerErpId:
          description: >-
            The ID of the Person in the Customer\'s ERP system (eg. Deltek
            Vantagepoint). Use of this feature requires the TonicDM
            AdvancedMetrics license.
          type: string
        customerCrmId:
          description: >-
            The ID of the Person in the Customer\'s CRM system (eg. Deltek
            Salesforce). Use of this feature requires the TonicDM
            AdvancedMetrics license.
          type: string
    PersonEmailAddressWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Project record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/PersonEmailAddress'
    Person:
      title: Person
      type: object
      description: >
        The Person record in TonicDM is used for both **Contacts** and
        **Staff**.
      properties:
        emailAddresses:
          description: >-
            Zero or more email addresses that person currently uses, or
            previously used.
          type: array
          items:
            $ref: '#/components/schemas/PersonEmailAddress'
    PersonWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The ID GUID of the Person record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/Person'
    Division:
      title: Division
      type: object
      description: >
        The division of the Organization that is assigned to the Project or
        Person. 

        This allows filters/metrics by things like Market Sector or Studio.


        Use of this feature requires the TonicDM AdvancedMetrics license.
      properties:
        status:
          $ref: '#/components/schemas/Status'
        name:
          description: >-
            The name given to this Division. Divisions are for metrics only and
            are not used on externally facing messages like Notifications and
            Transmittals.
          type: string
          minLength: 1
          maxLength: 16
    Project:
      title: Project
      type: object
      description: >-
        Defines a TonicDM Project. If the Person does not have access to a
        Locked project, minimal data will be included.
      required:
        - projectNameLong
      properties:
        datetimeCreated:
          description: The date and time this Project was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Project was last updated.
          type: string
          format: date-time
          readOnly: true
        systemAccess:
          description: >
            Puts the project into a status of `readOnly` (data can be read but
            not written) or `noAccess` (data cannot be read or written).

            These states can only be set by the system and are used when project
            data is being migrated between Zones (data centers)

            or for other administrative purposes.  
          type: string
          enum:
            - readWrite
            - readOnly
            - noAccess
          default: readWrite
        status:
          $ref: '#/components/schemas/Status'
        zone:
          description: The name of the Zone (data center) the Project data is stored in.
          type: string
        purpose:
          description: |
            Projects are used for different purposes in the TonicDM system.  
          type: string
          enum:
            - readWrite
            - readOnly
            - noAccess
          default: readWrite
        isLocked:
          description: |
            Restricts access to the project to active team members.
            This field can only be set by one of the Tenant Adminstrators.
          type: boolean
          default: false
        projectNumber:
          type: string
          description: Project Reference Number
        projectNameLong:
          description: The full official name of the Project (used on Transmittals).
          type: string
          minLength: 1
          maxLength: 128
        projectNameShort:
          description: A friendly name for the Project (used in the TonicDM app)
          type: string
          minLength: 0
          maxLength: 16
        projectSearchWords:
          description: >-
            Text to assist staff when searching for the project (typically
            previously used project numbers or names)
          type: string
          minLength: 0
          maxLength: 256
        projectManager:
          allOf:
            - description: >-
                Use of this feature requires the TonicDM AdvancedMetrics
                license.
            - $ref: '#/components/schemas/Person'
        projectPrincipal:
          allOf:
            - description: >-
                Use of this feature requires the TonicDM AdvancedMetrics
                license.
            - $ref: '#/components/schemas/Person'
        brand:
          $ref: '#/components/schemas/OrganizationBrand'
        office:
          $ref: '#/components/schemas/Office'
        division1:
          $ref: '#/components/schemas/Division'
        division2:
          $ref: '#/components/schemas/Division'
        division3:
          $ref: '#/components/schemas/Division'
        division4:
          $ref: '#/components/schemas/Division'
        certifications:
          description: >-
            Zero or more certifications that this Person has obtained, or
            previously obtained. Use of this feature requires the TonicDM
            AdvancedContacts license.
          type: array
          items:
            - $ref: '#/components/schemas/Certification'
        caUseSequenceNumbersRfi:
          description: >-
            Whether the RFIs should default to the senders number or use a
            unique sequential number. This is done as an `enum` in case there
            are other options added in the future, such as `pattern`.
          type: string
          enum:
            - sender
            - sequential
          default: sender
        caOurRfiDays:
          type: integer
          description: >-
            The default number of days we have to return RFIs back to the
            organization we received them from
        caOurSubmittalDays:
          type: integer
          description: >-
            The default number of days we have to return Submittals back to the
            organization we received them from
        caTheirRfiDays:
          type: integer
          description: >-
            The default number of days our consultants have to return RFIs back
            to us
        caTheirSubmittalDays:
          type: integer
          description: >-
            The default number of days our consultants have to return Submittals
            back us.
        clientOrganizationsId:
          type: string
          format: guid
          pattern: ^[0-9a-fA-F]{32}$
          description: >-
            The OrganizationId of the project\'s client (so their name can
            appear on the Transmittal).
        clientProjectNumber:
          type: string
          description: >-
            The project reference number of the project\'s client (for use on
            the Transmittal).
          minLength: 0
          maxLength: 32
    ProjectMemberStatus:
      title: ProjectMemberStatus
      type: string
      description: The status of a Person relative to a Project.
      enum:
        - active
        - inactive
        - deleted
        - nonmember
      default: nonmember
    ProjectMember:
      title: ProjectMember
      description: >-
        The `isExecutive` parameter can only be set by a user who is a Tenant
        Admin.
      type: object
      properties:
        datetimeCreated:
          description: The date and time this ProjectMember was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this ProjectMember was last updated.
          type: string
          format: date-time
          readOnly: true
        emailAddressId:
          description: >-
            The GUID associated with the email address of the team member. This
            is NOT a PersonID.
          type: string
          format: uuid
        brandId:
          description: |
            The GUID of the Brand associated with the EmailAddress. 
            This allows easier look up of the Brands involved in a project.
          type: string
          format: uuid
        projectId:
          description: The GUID associated with the Project.
          type: string
          format: uuid
        ProjectMemberStatus:
          $ref: '#/components/schemas/ProjectMemberStatus'
        isExecutive:
          description: >-
            Determines whether this Person has the rights of a project Executive
            on this Project. This parameter can only be set by a user who is an
            Organization Admin.
          type: boolean
        usedAt:
          description: A timestamp for when this person last interacted with this project.
          type: string
          format: date-time
          readOnly: true
        contactCount:
          description: A value indicating the ?
          type: integer
          readOnly: true
        activityCount:
          description: >-
            A value indicating how active this Person is on this project
            relative to the other people on the Project. Used only for sorting.
          type: integer
          readOnly: true
    Note:
      title: Note
      type: object
      description: >-
        A note is an HTML text block that can be attached to any item by
        referencing its GUID. There is a one-to-many relationship between items
        and notes (one item can have many notes, but a note can only be attached
        to one item).

        Images can be embedded in the HTML using @cid method. Attachments can be
        linked to the note via a `file_set` that references this note\'s GUID.

        We don't include fields for created_by etc. because this information is
        in the audit trail.
      properties:
        datetimeCreated:
          description: The date and time this Note was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Note was last updated.
          type: string
          format: date-time
          readOnly: true
        status:
          $ref: '#/components/schemas/Status'
        content:
          description: The HTML content of the Note.
          type: string
          format: html
        attachedToId:
          description: The ID of the TonicDM item the note is attached to.
          type: string
          format: uuid
        personId:
          description: The GUID of the Person who created the Note.
          type: string
          format: uuid
        isPrinted:
          type: boolean
          default: false
      required:
        - attachedToId
        - personId
    NoteWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Project record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/Note'
    CertificationDefinition:
      title: CertificationDefinition
      type: object
      description: >
        This object represents a CertificationDefinition in concept. For
        example, `LEED BD+C` as a certification which can be applied to a
        Person, or `LEED Platinum` which can be applied to a Project.

        CertificationDefinitions are created by the system administrator and are
        used to create Certification records.
      required:
        - name
        - jurisdiction
      properties:
        datetimeCreated:
          description: The date and time this Certification definition was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Certification definition was last updated.
          type: string
          format: date-time
          readOnly: true
        appliesTo:
          description: The type of record this Certification definition applies to.
          type: string
          enum:
            - organization
            - project
            - person
        status:
          $ref: '#/components/schemas/Status'
        name:
          description: The name of the certification definition.
          type: string
          minLength: 1
          maxLength: 40
        jurisdiction:
          description: The geographic region in which the certification definition applies.
          type: string
          minLength: 0
          maxLength: 20
    CertificationDefinitionWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Certification Definition definition record.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/CertificationDefinition'
    Fileset:
      title: Fileset
      x-internal: false
      description: Filesets in TonicDM.
      properties:
        id:
          description: the GUID of the Fileset in TonicDM.
          type: string
          format: uuid
          readOnly: true
        datetimeCreated:
          description: The date and time this Fileset record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Fileset record was last updated.
          type: string
          format: date-time
          readOnly: true
        temporary:
          description: Temporary FileSets are in process of being uploaded.
          type: boolean
          readOnly: true
        countFiles:
          description: The number of Files in the FileSet.
          type: integer
          readOnly: true
        countTreeDepth:
          description: The maximum depth of sub-folders.
          type: integer
          readOnly: true
        size:
          description: Total files size of all the Files.
          type: integer
          readOnly: true
    FileCategory:
      title: fileCategory
      description: A list of functional categories for grouping files.
      type: string
      enum:
        - 3d
        - audio-video
        - cad
        - calendar
        - contact
        - email
        - gis
        - image
        - pdf
        - presentations
        - spreadsheets
        - system-files
        - word-publishing-text-etc
        - zip-files-etc
        - other
      default: none
    File:
      title: File
      x-internal: false
      description: Files in TonicDM.
      properties:
        id:
          description: the GUID of the File in TonicDM.
          type: string
          format: uuid
          readOnly: true
        datetimeCreated:
          description: The date and time this File record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this File record was last updated.
          type: string
          format: date-time
          readOnly: true
        status:
          description: >-
            The status of the File, with `Inactive` meaning it has been
            superceded (ie. another file with the same name was subsequently
            uploaded to the Fileset) removed from the Fileset.
          type: string
          enum:
            - Active
            - Inactive
          readOnly: true
        path:
          description: The relative path to the file (from the root of the Fileset).
          type: string
          readOnly: true
        filename:
          description: The name of the file (with extension).
          type: string
          readOnly: true
        size:
          description: The size of the file in bytes.
          type: integer
          readOnly: true
        fileCategory:
          $ref: '#/components/schemas/FileCategory'
    Thumbnail:
      title: Thumbnail
      x-internal: false
      description: Thumbnail in TonicDM.
      properties:
        page:
          description: the page number represented by this thumbnail
          type: integer
        size:
          description: the thumbnail size
          enum:
            - small
            - medium
            - large
          default: active
        imageData:
          description: the thumbnail as a base64 encoded image/png
          type: string
          format: byte
      required:
        - page
        - size
        - imageData
    ThumbnailSet:
      title: ThumbnailSet
      x-internal: false
      type: object
      description: >
        Each document in the Fileset module has a GUID, and this endpoint uses
        that GUID to return thumbnail images in small, medium or large size
      properties:
        fileId:
          description: The GUID of the file these thumbnails belong to.
          type: string
        thumbnailArray:
          description: an array of thumbnails for this file
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/Thumbnail'
      required:
        - fileId
        - thumbnailArray
    ExpiryUrl:
      title: ExpiryUrl
      x-internal: false
      description: Generates a URL for a Fileset download that expires
      properties:
        expiryId:
          description: The GUID of the expiry link.
          type: string
          format: uuid
          readOnly: true
        expiryUrl:
          description: The full URL for the download, including the HTTP server.
          type: string
          format: uri
          readOnly: true
    PresignedUrl:
      title: PresignedUrl
      x-internal: false
      description: A URL for uploading a file to AWS S3
      properties:
        X-Amz-Algorithm:
          description: The encryption algorithm.
          type: string
          readOnly: true
        X-Amz-Date:
          description: >-
            Timestamp of the URL generation. Combine with X-Amz-Expires to
            determine the expiry time.
          type: string
          readOnly: true
        X-Amz-SignedHeaders:
          description: X
          type: string
          readOnly: true
        X-Amz-Credential:
          description: X
          type: string
          readOnly: true
        X-Amz-Expires:
          description: >-
            The number of seconds the URL will be valid. Combine with X-Amz-Date
            to determine the expiry time. The upload needs to be startedd before
            this time, but can run as long as needed to deliver the data.
          type: integer
          readOnly: true
        X-Amz-Signature:
          description: X
          type: string
          readOnly: true
    Child:
      title: Child
      x-internal: false
      description: >-
        A file or folder that exists in a cloud file system. Some parameters wil
        only be returned for files, and some only for folders.
      properties:
        id:
          description: >-
            the Id of the file or folder as defined in its host cloud file
            system.
          type: string
          readOnly: true
        datetimeCreated:
          description: The date and time this File record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this File record was last updated.
          type: string
          format: date-time
          readOnly: true
        status:
          description: >-
            The status of the File, with `Inactive` meaning it has been
            superceded (ie. another file with the same name was subsequently
            uploaded to the Fileset) removed from the Fileset.
          type: string
          enum:
            - Active
            - Inactive
          readOnly: true
        isFolder:
          description: True if this is a folder, false if it is a file.
          type: boolean
          readOnly: true
        path:
          description: >-
            The relative path to the file (from the root of the cloud file
            system).
          type: string
          readOnly: true
        name:
          description: The name of the folder or the file (with extension).
          type: string
          readOnly: true
        size:
          description: The size of the file in bytes.
          type: integer
          readOnly: true
        fileCategory:
          $ref: '#/components/schemas/FileCategory'
      required:
        - id
        - path
        - name
    Conversation:
      title: Conversation
      x-internal: false
      description: Conversations in TonicDM.
      properties:
        id:
          description: the GUID of the Conversation in TonicDM.
          type: string
          format: uuid
          readOnly: true
        datetimeCreated:
          description: The date and time this Conversation record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Conversation record was last updated.
          type: string
          format: date-time
          readOnly: true
    Message:
      title: Message
      x-internal: false
      description: Messages in TonicDM.
      properties:
        id:
          description: the GUID of the Message in TonicDM.
          type: string
          format: uuid
          readOnly: true
        datetimeCreated:
          description: The date and time this Message record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Message record was last updated.
          type: string
          format: date-time
          readOnly: true
        sender:
          description: The person who sent the message.
          type: string
          format: email
        recipients:
          description: The people who received the message.
          type: array
          items:
            type: string
            format: email
        subject:
          description: The subject of the message.
          type: string
        body:
          description: The body of the message.
          type: string
        attachments:
          description: The attachments of the message.
          type: array
          items:
            type: string
            format: uuid
        read:
          description: The read status of the message.
          type: boolean
        starred:
          description: The starred status of the message.
          type: boolean
        trashed:
          description: The trashed status of the message.
          type: boolean
        archived:
          description: The archived status of the message.
          type: boolean
        datetimeSent:
          description: The date and time the message was sent.
          type: string
          format: date-time
        datetimeReceived:
          description: The date and time the message was received.
          type: string
          format: date-time
        datetimeRead:
          description: The date and time the message was read.
          type: string
          format: date-time
        datetimeStarred:
          description: The date and time the message was starred.
          type: string
          format: date-time
        datetimeTrashed:
          description: The date and time the message was trashed.
          type: string
          format: date-time
        datetimeArchived:
          description: The date and time the message was archived.
          type: string
          format: date-time
        datetimeDeleted:
          description: The date and time the message was deleted.
          type: string
          format: date-time
        datetimeUnread:
          description: The date and time the message was marked as unread.
          type: string
          format: date-time
        datetimeUnstarred:
          description: The date and time the message was unstarred.
          type: string
          format: date-time
        datetimeUntrashed:
          description: The date and time the message was untrashed.
          type: string
          format: date-time
        datetimeUnarchived:
          description: The date and time the message was unarchived.
    Addressee:
      title: Addressee
      type: object
      description: Addressees for the Workflow module in TonicDM.
      properties:
        id:
          description: The unique identifier for this addressee record, not a Person ID.
          type: string
        item_part_id:
          description: All Addressee records are associated with a specific Part.
          type: string
        item_part_transmittal_id:
          description: Note that one Part can have multiple Transmittals.
          type: string
        address_part:
          type: string
          enum:
            - to
            - cc
            - from
        emailAddress:
          $ref: '#/components/schemas/PersonEmailAddressWithId'
        brandId:
          description: >-
            The Brand ID of the emailAddress. Note that one Organization can
            have multiple Brands, and the same emailAddress record could be
            associated with different Brands of their Organization at difference
            times.
          type: string
    Transmittal:
      title: Transmittal
      type: object
      x-internal: false
      description: >-
        Universal Transmittal spec for the Workflow module in TonicDM. It
        defines a transaction of information between parties and cannot be
        changed after the fact.
      properties:
        id:
          type: string
          readOnly: true
        datetimeCreated:
          description: The date and time this Part was created.
          type: string
          format: date-time
          readOnly: true
        type:
          type: string
          readOnly: true
        source:
          type: string
          readOnly: true
        status:
          $ref: '#/components/schemas/Status'
        notifications:
          description: >-
            Shows whether notifications have been sent for this Transmittal. If
            not, the Transmittal is not considered to be "sent" and can be
            edited.
          type: boolean
          readOnly: true
        confidential:
          type: boolean
          readOnly: true
        addressees:
          type: array
          items:
            $ref: '#/components/schemas/Addressee'
        item_part_id:
          type: string
          readOnly: true
        transferred_at:
          type: string
          format: date-time
          readOnly: true
        from_organization_id:
          type: string
          readOnly: true
        from_discipline:
          $ref: '#/components/schemas/Discipline'
        response_required:
          type: boolean
          readOnly: true
        response_required_date:
          type: string
          format: date
          readOnly: true
        fileset_zone:
          type: string
          readOnly: true
        fileset_id:
          type: string
          readOnly: true
        transmittal_filename:
          type: string
          readOnly: true
    FileTransferPart:
      title: FileTransferPart
      description: The fields for a Part attached to a File Transfer Item.
      properties:
        part:
          description: >
            The type of Part. 

            - `forward`: A FileTransfer that was sent out unsolicited (not in
            response to an incoming request) / Part `"status": "active"`;
                       or a FileTransfer Request that was sent out / Part `"status": "request"`
            - `receive`: An incoming FileTransfer that was received by us from
            another party / Part `"status": "active"`;
                       or an incoming FileTransfer Request that was received by us / Part `"status": "request"`
            - `response`: A FileTransfer sent out by us in response to a
            FileTransfer Request we had received from another party / Part
            `"status": "active"`

            - `return_of_forward`: An incoming FileTransfer that was received by
            us in response to an outgoing request / Part `"status": "active"`;
          type: string
          enum:
            - forward
            - receive
            - response
            - return_of_forward
        source:
          description: >-
            shows whether the Part was created by a user or the system
            (delivering a FileTransfer sent to you).
          type: string
          enum:
            - system
            - user
        status:
          $ref: '#/components/schemas/Status'
        confidential:
          type: boolean
        title:
          type: string
        message:
          type: string
        transmittals:
          type: array
          items:
            $ref: '#/components/schemas/Transmittal'
        addressees:
          type: array
          items:
            $ref: '#/components/schemas/Addressee'
        item_id:
          description: >-
            Change this to move the Part to a different Item. This could be used
            in the File Transfer to merge a request and a response into the same
            Item.
          type: string
        action_datetime:
          type: string
          format: date-time
        disciplines:
          type: array
          items:
            $ref: '#/components/schemas/Discipline'
        response_required:
          type: boolean
        response_required_date:
          type: string
          format: date
        fileset_zone:
          description: The data center the Fileset is stored in.
          type: string
        fileset_id:
          description: The GUID of the Fileset in TonicDM.
          type: string
    FileTransferPartWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the FileTransfer Part.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/FileTransferPart'
    FileTransferItem:
      title: FileTransferItem
      x-internal: false
      description: FileTransfers in TonicDM.
      properties:
        datetimeCreated:
          description: The date and time this Item was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: >-
            \[not implemented yet\] The date and time this Item was last
            updated.
          type: string
          format: date-time
          readOnly: true
        project_id:
          type: string
          pattern: ^[0-9a-fA-F]{32}$
        confidential:
          type: boolean
        status:
          $ref: '#/components/schemas/Status'
        stage:
          type: string
          enum:
            - sent
            - expected_from_others
            - received
            - requested_from_us
        manual_received_datetime:
          description: For File Transfers, this is ??
          type: string
          format: date-time
        manual_response_datetime:
          description: For File Transfers, this is ??
          type: string
          format: date-time
        our_response_required:
          description: >-
            This is true if this is an incoming request for us to send a
            FileTransfer to another party.
          type: boolean
        our_response_required_date:
          description: >-
            The date by which we need to respond an incoming request for us to
            send a FileTransfer to another party.
          type: string
          format: date
        our_title:
          type: string
        is_internal_forward:
          description: >-
            \[not implemented yet\] True if all the addressees in the
            FileTransfer are internal to the organization.
          type: boolean
        parts:
          type: array
          items:
            $ref: '#/components/schemas/FileTransferPartWithId'
    FileTransferItemWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the FileTransfer Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/FileTransferItem'
    Rfi_ItemBase:
      title: RfiItem
      description: RFIs in TonicDM.
    _ItemBase:
      title: ItemBase
      description: >-
        The base fields in an Item which are common to all Item types. Use as
        the base for all Item types.
      properties:
        datetimeCreated:
          description: The date and time this Item was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Item was last updated.
          type: string
          format: date-time
          readOnly: true
        status:
          $ref: '#/components/schemas/Status'
        project_id:
          $ref: '#/components/schemas/CompactUUID'
        item_discipline:
          $ref: '#/components/schemas/DisciplineWithId'
        workflow_number:
          type: integer
          readOnly: true
        is_internal_forward:
          type: boolean
          readOnly: true
        stage:
          type: string
        manual_stage:
          type: boolean
          default: false
        manual_received_datetime:
          type: string
          format: date-time
        manual_response_datetime:
          type: string
          format: date-time
        our_response_required_date:
          type: string
          format: date
        our_number:
          type: string
        our_revision:
          type: string
        our_title:
          description: >-
            The overall title given to this Item, in the manner of the subject
            of an email. This will typically match the `title` of the `received`
            Part, but not always.
          type: string
        responsible_person_id:
          $ref: '#/components/schemas/CompactUUID'
    RfiReasonCode:
      title: RFI Reason Code
      type: object
      description: An RFI Reason Code
      properties:
        datetimeCreated:
          description: The date and time this record was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this record was last updated.
          type: string
          format: date-time
          readOnly: true
        brandId:
          description: >-
            The ID of the Brand of the Organization that the RFI Reason Code
            belongs to.
          $ref: '#/components/schemas/CompactUUID'
        name:
          description: The name given to this Reason Code.
          type: string
          minLength: 1
          maxLength: 64
    RfiReasonCodeWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the RFI Reason Code.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/RfiReasonCode'
    _PartBase:
      title: PartBase
      description: The base fields in a Part which are common to all Part types.
      properties:
        datetimeCreated:
          description: The date and time this Part was created.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: The date and time this Part was last updated.
          type: string
          format: date-time
          readOnly: true
        part_type:
          description: >-
            An Item Part represents a transaction, which can be one of four
            functional types.
          type: string
          enum:
            - receive
            - forward
            - return_of_forward
            - response
        source:
          description: >-
            Indicates whether this Part was created with user-supplied
            information or whether it was created automatically by TonicDM (as
            the delivery of an item sent through TonicDM). Only `user` Parts can
            be edited.
          type: string
          enum:
            - user
            - system
          readOnly: true
        status:
          type: string
        number:
          description: >-
            The \'identifying code\' given to this transaction, typically a
            number.
          type: string
        revision:
          description: >-
            The revision number of the \'identifying code\' given to this
            transaction,
          type: string
        title:
          description: >-
            The title given to this transaction, in the manner of the subject of
            an email.
          type: string
        message:
          description: >-
            The message accompanying this transaction, in the manner of the body
            of an email.
          type: string
        item_id:
          description: The ID of the Item that this Part belongs to.
          $ref: '#/components/schemas/CompactUUID'
        workflow_number:
          description: >-
            The Workflow that this Part belongs to. Note that this is redundant
            with the Workflow assigned at the Item level.
          type: integer
          readOnly: true
        action_datetime:
          description: >-
            The recorded datetime that the transaction represented by this Part
            took place. It may be different from the `datetimeCreated` when the
            transaction is manually entered.
          type: string
          format: date-time
        from_organization_id:
          description: The ID of the Organization that is the sender in this transaction.
          $ref: '#/components/schemas/CompactUUID'
        response_required_date:
          description: The date when a response to this transaction is required by.
          type: string
          format: date
        fileset_zone:
          description: The TonicDM zone where the files are stored.
          type: string
        fileset_id:
          description: >-
            The ID of the file package containing the attachments to this
            transaction.
          $ref: '#/components/schemas/CompactUUID'
    RfiPart:
      allOf:
        - $ref: '#/components/schemas/_PartBase'
    RfiItem:
      allOf:
        - $ref: '#/components/schemas/Rfi_ItemBase'
        - $ref: '#/components/schemas/_ItemBase'
        - type: object
          properties:
            reasonCode:
              $ref: '#/components/schemas/RfiReasonCodeWithId'
            parts:
              type: array
              items:
                $ref: '#/components/schemas/RfiPart'
    RfiItemWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the RFI Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/RfiItem'
    RfiPartWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the RFI Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/RfiPart'
    Rfi3rdpartyList:
      title: RFI 3rd Party Basic
      type: object
      description: Basic Information on an RFI in a 3rd Party System
      properties:
        3rdPartyId:
          description: The ID of the record in the 3rd party system.
          type: string
          minLength: 1
          maxLength: 128
          readOnly: true
        recievedDatetime:
          description: >-
            The date and time this record was sent to the User\'s organization. 

            This value might be explicitly passed by the 3rd party system, or a
            substitute value might be determined by Tonic if the Sent datetime
            cannot be found.

            If this is an empty string, the datetime that it was sent to
            (recieved by) the User\'s organization could be determined.
          type: string
          format: date-time
          readOnly: true
        status:
          type: string
          readOnly: true
        number:
          type: string
          readOnly: true
        revision:
          type: string
          readOnly: true
        title:
          description: The title or subject of the record in the 3rd party system.
          type: string
          minLength: 1
          maxLength: 64
          readOnly: true
    Rfi3rdpartyDetail:
      title: RFI 3rd Party Detail
      type: object
      description: Detailed Information on an RFI in a 3rd Party System.
      properties:
        datetimeCreated:
          description: The date and time this record was created in the 3rd Party System.
          type: string
          format: date-time
          readOnly: true
        datetimeUpdated:
          description: >-
            The date and time this record was last updated in the 3rd Party
            System.
          type: string
          format: date-time
          readOnly: true
        3rdPartyId:
          description: The ID of the record in the 3rd party system.
          type: string
          minLength: 1
          maxLength: 128
          readOnly: true
        recievedDatetime:
          description: >-
            The date and time this record was sent to the User\'s organization
            from the 3rd Party System. 

            This value might be explicitly passed by the 3rd party system, or a
            substitute value might be determined by Tonic if the Sent datetime
            cannot be found.

            If this is an empty string, the datetime that it was sent to
            (recieved by) the User\'s organization could be determined.
          type: string
          format: date-time
          readOnly: true
        status:
          type: string
          readOnly: true
        number:
          type: string
          readOnly: true
        revision:
          type: string
          readOnly: true
        title:
          description: The title or subject of the record in the 3rd party system.
          type: string
          minLength: 1
          maxLength: 64
          readOnly: true
        message:
          description: >-
            The message accompanying this transaction, in the manner of the body
            of an email.
          type: string
          readOnly: true
        addressees:
          type: array
          items:
            type: object
            properties:
              addressPart:
                type: string
                description: The address part.
                enum:
                  - from
                  - to
                  - cc
              emailAddress:
                type: string
                format: email
                description: The user's email address.
              userName:
                type: string
                description: The user's name.
              userId:
                type: string
                description: The unique identifier for the user.
          readOnly: true
    Submittal_ItemBase:
      title: SubmittalItem
      x-internal: false
      description: Submittals in TonicDM.
      properties:
        our_response_required:
          type: boolean
          default: true
        our_specsection:
          type: string
    Submittal_PartBase:
      title: SubmittalPart
      x-internal: false
      description: The Parts (transactions) of a Submittal Item.
      properties:
        response_required:
          type: boolean
        specsection:
          description: >-
            A code representing the section of the project specification related
            to this submittal.
          type: string
        submittalStamp:
          description: >-
            The text of the selection chosen on the stamp applied to this
            submittal.
          type: string
    SubmittalPart:
      allOf:
        - $ref: '#/components/schemas/_PartBase'
        - $ref: '#/components/schemas/Submittal_PartBase'
    SubmittalItem:
      allOf:
        - $ref: '#/components/schemas/Submittal_ItemBase'
        - $ref: '#/components/schemas/_ItemBase'
        - type: object
          properties:
            parts:
              type: array
              items:
                $ref: '#/components/schemas/SubmittalPart'
    SubmittalItemWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Submittal Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/SubmittalItem'
    SubmittalPartWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Submittal Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/SubmittalPart'
    Pco_ItemBase:
      title: PcoItem
      x-internal: false
      description: PCOs in TonicDM.
    Pco_PartBase:
      title: PcoPart
      x-internal: false
      description: The Parts (transactions) of an PCO Item.
      properties:
        cost:
          type: string
        time:
          type: string
    PcoPart:
      allOf:
        - $ref: '#/components/schemas/_PartBase'
        - $ref: '#/components/schemas/Pco_PartBase'
    PcoItem:
      allOf:
        - $ref: '#/components/schemas/Pco_ItemBase'
        - $ref: '#/components/schemas/_ItemBase'
        - type: object
          properties:
            cost:
              type: string
            time:
              type: string
            parts:
              type: array
              items:
                $ref: '#/components/schemas/PcoPart'
    PcoItemWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the PCO Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/PcoItem'
    PcoPartWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the PCO Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/PcoPart'
    Co_ItemBase:
      title: CoItem
      x-internal: false
      description: Change Order in TonicDM.
    CoPart:
      allOf:
        - $ref: '#/components/schemas/_PartBase'
        - type: object
          properties:
            cost:
              type: string
            time:
              type: string
    CoItem:
      allOf:
        - $ref: '#/components/schemas/Co_ItemBase'
        - $ref: '#/components/schemas/_ItemBase'
        - type: object
          properties:
            cost:
              type: string
            time:
              type: string
            parts:
              type: array
              items:
                $ref: '#/components/schemas/CoPart'
    CoItemWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the CO Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/CoItem'
    CoPartWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the CO Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/CoPart'
    Task_ItemBase:
      title: CoItem
      x-internal: false
      description: COs in TonicDM.
    TaskPart:
      allOf:
        - $ref: '#/components/schemas/_PartBase'
    TaskItem:
      allOf:
        - $ref: '#/components/schemas/Task_ItemBase'
        - $ref: '#/components/schemas/_ItemBase'
        - type: object
          properties:
            parts:
              type: array
              items:
                $ref: '#/components/schemas/TaskPart'
    TaskItemWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Task Item.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/TaskItem'
    TaskPartWithId:
      allOf:
        - type: object
          properties:
            id:
              description: The GUID of the Task Part.
              $ref: '#/components/schemas/CompactUUID'
        - $ref: '#/components/schemas/TaskPart'
  examples:
    OrganizationResponseArray:
      value:
        - id: 810e48a87ec44cf0bfbf43c6d0af2ee6
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          brands:
            - id: 39f81d26576d41a285504fac5cc0d215
              datetimeCreated: '2021-11-03T16:21:02+00:00'
              datetimeUpdated: '2024-04-20T16:21:02+00:00'
              status: active
              domains:
                - pacific-architects.com
                - pacific-arch.com
              nameLong: Pacific Architects and Engineers Inc.
              nameShort: Pacific
              nameInitials: PAE
              brandColor: 0F6CBD
              organizationId: f3efcad7082d4e85ae2741a57629b323
              isPrime: true
              customerDataWarehouseId: 675
              customerErpId: 8b37e6b2-786e-4546-93e8-d6760e71bed4
              customerCrmId: 8a12f0af-249d-435b-b997-2034fd472ff8
        - id: f5fcae6d03f342ceb9eb8c9b9250c0ce
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          brands:
            - id: 5af9258c92204f79b589ddf511f41604
              datetimeCreated: '2021-11-03T16:21:02+00:05'
              datetimeUpdated: '2024-04-20T16:21:02+00:05'
              status: active
              domains:
                - steven.novosel@gmail.com
              nameLong: Steve Novosel
              nameInitials: SN
              organizationId: 6c09ed8ddce440fab1319530ce22fd67
              customerDataWarehouseId: 987
              customerErpId: ae656d88-c979-4e11-ba0b-695b61fa7f5d
              customerCrmId: 9a6d37ef-fc9d-43ee-ac78-678c273cc1e8
    BrandResponseArray:
      value:
        - id: 39f81d26576d41a285504fac5cc0d215
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          status: active
          domains:
            - pacific-architects.com
            - pacific-arch.com
          nameLong: Pacific Architects and Engineers Inc.
          nameShort: Pacific
          nameInitials: PAE
          brandColor: 0F6CBD
          organizationId: f3efcad7082d4e85ae2741a57629b323
          isPrime: true
          customerDataWarehouseId: 675
          customerErpId: 8b37e6b2-786e-4546-93e8-d6760e71bed4
          customerCrmId: 8a12f0af-249d-435b-b997-2034fd472ff8
        - id: 5af9258c92204f79b589ddf511f41604
          datetimeCreated: '2021-11-03T16:21:02+00:05'
          datetimeUpdated: '2024-04-20T16:21:02+00:05'
          status: active
          domains:
            - steven.novosel@gmail.com
          nameLong: Steve Novosel
          nameInitials: SN
          organizationId: 6c09ed8ddce440fab1319530ce22fd67
          customerDataWarehouseId: 987
          customerErpId: ae656d88-c979-4e11-ba0b-695b61fa7f5d
          customerCrmId: 9a6d37ef-fc9d-43ee-ac78-678c273cc1e8
    OfficesWithIdArray:
      summary: Sample data for an array of Offices.
      value:
        - id: 2122ff9ebbb140e9856934e8e33a8c1f
          organizationId: da9c62640a894f61b247801a2e300c44
          status: active
          name: London
          address: 300 Dufferin Ave<br>London, ON N6B 1Z2
          phone:
            countryCode: 1
            phoneNumber: 5196612489
            extension: 32
        - id: 306b14664e374877ab19b75685393cf7
          organizationId: da9c62640a894f61b247801a2e300c44
          status: inactive
          name: Fairyville
          phone:
            countryCode: 1
            phoneNumber: 4308444422
    OfficeWithId:
      summary: Sample data for an Office.
      value:
        id: 2122ff9ebbb140e9856934e8e33a8c1f
        organizationId: da9c62640a894f61b247801a2e300c44
        status: active
        name: London
        address: 300 Dufferin Ave<br>London, ON N6B 1Z2
        phone:
          countryCode: 1
          phoneNumber: 5196612489
          extension: 32
    PersonResponseArray:
      value:
        - id: 9af493dfdabb48089b068ddad94c6287
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          status: active
          emailAddresses:
            - id: fc78c5afaf544816b9c0afe0a2d1b6b9
              datetimeCreated: '2021-11-03T16:21:02+00:00'
              datetimeUpdated: '2024-04-20T16:21:02+00:00'
              status: active
              organizationId: c3dea04054d143118514bb8b5170e5b4
              email: rita@argo-structural.com
              emailDeliveryStatus: delivered
              emailType: business
          name: Rita Coolidge
          title: Principal
          deskPhone: null
          mobilePhone: null
          office:
            id: b215b20dab3b4632a061f48315fc04e8
            datetimeCreated: '2021-11-03T16:21:02+00:00'
            datetimeUpdated: '2024-04-20T16:21:02+00:00'
            status: active
            name: Cambridge
            address: 233 Kirkland Street\nCambridge
            phone:
              countryCode: 1
              phoneNumber: 3107419309
          disciplines: null
          certifications: null
          customerDataWarehouseId: 123
          customerErpId: a8fc7aaf-cd16-4ee4-ae97-e75808257ae1
          customerCrmId: a9ea117f-84bc-421d-bad4-5bd69924a699
        - id: 496061e05a9b43a98d7cdfb0ad15e158
          datetimeCreated: '2021-11-03T16:21:02+00:01'
          datetimeUpdated: '2024-04-20T16:21:02+00:01'
          status: active
          emailAddresses:
            - id: e1e85e091acc49a4bd6dc9690eeffe40
              datetimeCreated: '2021-11-03T16:21:02+00:00'
              datetimeUpdated: '2024-04-20T16:21:02+00:00'
              status: active
              organizationId: f5fcae6d03f342ceb9eb8c9b9250c0ce
              email: steven.novosel@gmail.com
              emailDeliveryStatus: delivered
              emailType: personal
          name: Steve Novosel
          title: Architect
          deskPhone: null
          mobilePhone: null
          office:
            id: 570e423760dc4c9784d20a38216f0597
            datetimeCreated: '2021-11-03T16:21:02+00:01'
            datetimeUpdated: '2024-04-20T16:21:02+00:01'
            status: active
            name: London
            address: 123 Dundas Street\nLondon
            phone:
              countryCode: 1
              phoneNumber: 3107419309
          disciplines: null
          certifications: null
          customerDataWarehouseId: 124
          customerErpId: fc95ced9-8c56-4a53-89b2-1c7217ea5a9c
          customerCrmId: fcdaf58d-5497-47a2-af3d-077c928eda27
    SteveResponse:
      summary: An example of a Person Response for Steve.
      value:
        id: 496061e05a9b43a98d7cdfb0ad15e158
        datetimeCreated: '2021-11-03T16:21:02+00:01'
        datetimeUpdated: '2024-04-20T16:21:02+00:01'
        status: active
        emailAddresses:
          - id: e1e85e091acc49a4bd6dc9690eeffe40
            datetimeCreated: '2021-11-03T16:21:02+00:00'
            datetimeUpdated: '2024-04-20T16:21:02+00:00'
            status: active
            organizationId: f5fcae6d03f342ceb9eb8c9b9250c0ce
            email: steven.novosel@gmail.com
            emailDeliveryStatus: delivered
            emailType: personal
        name: Steve Novosel
        title: Architect
        deskPhone: null
        mobilePhone: null
        office:
          id: 570e423760dc4c9784d20a38216f0597
          datetimeCreated: '2021-11-03T16:21:02+00:01'
          datetimeUpdated: '2024-04-20T16:21:02+00:01'
          status: active
          name: London
          address: 123 Dundas Street\nLondon
          phone:
            countryCode: 1
            phoneNumber: 3107419309
        disciplines: null
        certifications: null
        customerDataWarehouseId: 124
        customerErpId: fc95ced9-8c56-4a53-89b2-1c7217ea5a9c
        customerCrmId: fcdaf58d-5497-47a2-af3d-077c928eda27
    StuartResponse:
      summary: An example of a Person Response for Stuart.
      value:
        id: 1edb8a0bb607442ba167b9d28a75778c
        datetimeCreated: '2021-11-03T16:21:02+00:02'
        datetimeUpdated: '2024-04-20T16:21:02+00:02'
        status: active
        emailAddresses:
          - id: 2949b750a54147299463e99285f834dc
            datetimeCreated: '2021-11-03T16:21:02+00:00'
            datetimeUpdated: '2024-04-20T16:21:02+00:00'
            status: active
            organizationId: 810e48a87ec44cf0bfbf43c6d0af2ee6
            email: stuart@pacific-architects.com
            emailDeliveryStatus: delivered
            emailType: business
          - id: 3e548ce27662409bbfe71dab443be124
            datetimeCreated: '2021-11-03T16:21:02+00:00'
            datetimeUpdated: '2024-04-20T16:21:02+00:01'
            status: inactive
            organizationId: 810e48a87ec44cf0bfbf43c6d0af2ee6
            email: stuart@pacific-arch.com
            emailDeliveryStatus: bounced
            emailType: business
        name: Stuart de Silva
        title: Senior Designer
        deskPhone: null
        mobilePhone: null
        office:
          id: 89df34cecd394e179436abc435368e53
          datetimeCreated: '2021-11-03T16:21:02+00:02'
          datetimeUpdated: '2024-04-20T16:21:02+00:02'
          status: active
          name: Dublin
          address: 50 Merrion Square South\nDublin
          phone:
            countryCode: 1
            phoneNumber: 3107419309
        disciplines: null
        certifications: null
        customerDataWarehouseId: 125
        customerErpId: 1b8c8dfc-daeb-42fd-8f50-b709a6dadf1a
        customerCrmId: 39b1011e-e21a-4518-8825-7b63f2fabe92
    ProjectResponseArray:
      value:
        - id: f71f272f752c4307b36c5124688562c4
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          status: active
          zone: aws-us
          isLocked: true
          projectNumber: 20-032
          projectNameLong: Olympic Rugby Venue
          projectNameShort: Paris Stadium
          projectManager: 1edb8a0bb607442ba167b9d28a75778c
          projectPrincipal: null
          brandId: null
          officeId:
            id: b215b20dab3b4632a061f48315fc04e8
            datetimeCreated: '2021-11-03T16:21:02+00:00'
            datetimeUpdated: '2024-04-20T16:21:02+00:00'
            status: active
            name: Cambridge
            address: 233 Kirkland Street\nCambridge
            phone:
              countryCode: 1
              phoneNumber: 3107419309
          division1Id: null
          division2Id: null
          certifications: null
          settingsCa: null
          clientOrganizationsId: null
          clientProjectNumber: 65702P
          customerDataWarehouseId: 675
          customerErpId: 8b37e6b2-786e-4546-93e8-d6760e71bed4
          customerCrmId: 8a12f0af-249d-435b-b997-2034fd472ff8
        - id: d6935bb577244d1692fe544c9c8ae6bd
          datetimeCreated: '2021-11-03T16:21:02+00:01'
          datetimeUpdated: '2024-04-20T16:21:02+00:01'
          status: inactive
          zone: aws-us
          isLocked: false
          projectNumber: 17-005
          projectNameLong: Es Todo Cafe and Grill
          projectNameShort: Es Todo
          officeId:
            id: 570e423760dc4c9784d20a38216f0597
            datetimeCreated: '2021-11-03T16:21:02+00:01'
            datetimeUpdated: '2024-04-20T16:21:02+00:01'
            status: active
            name: London
            address: 123 Dundas Street\nLondon
            phone:
              countryCode: 1
              phoneNumber: 3107419309
          division1Id: null
          certifications: null
          customerDataWarehouseId: 987
          customerErpId: ae656d88-c979-4e11-ba0b-695b61fa7f5d
          customerCrmId: 9a6d37ef-fc9d-43ee-ac78-678c273cc1e8
    RugbyRequest:
      summary: An example of a Rugby Project Request without ID.
      value:
        status: active
        zone: aws-us
        isLocked: true
        projectNumber: 20-032
        projectNameLong: Olympic Rugby Venue
        projectNameShort: Paris Stadium
        officeIdId: b215b20dab3b4632a061f48315fc04e8
        division1Id: null
        certifications: null
        customerDataWarehouseId: 675
        customerErpId: 8b37e6b2-786e-4546-93e8-d6760e71bed4
        customerCrmId: 8a12f0af-249d-435b-b997-2034fd472ff8
    RugbyResponse:
      summary: An example of a Project Response for Rugby.
      value:
        id: f71f272f752c4307b36c5124688562c4
        datetimeCreated: '2021-11-03T16:21:02+00:00'
        datetimeUpdated: '2024-04-20T16:21:02+00:00'
        status: active
        zone: aws-us
        isLocked: true
        projectNumber: 20-032
        projectNameLong: Olympic Rugby Venue
        projectNameShort: Paris Stadium
        projectManager: 1edb8a0bb607442ba167b9d28a75778c
        projectPrincipal: null
        brandId: null
        officeId:
          id: b215b20dab3b4632a061f48315fc04e8
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          status: active
          name: Cambridge
          address: 233 Kirkland Street\nCambridge
          phone:
            countryCode: 1
            phoneNumber: 3107419309
        division1Id: null
        division2Id: null
        certifications: null
        settingsCa: null
        clientOrganizationsId: null
        clientProjectNumber: 65702P
        customerDataWarehouseId: 675
        customerErpId: 8b37e6b2-786e-4546-93e8-d6760e71bed4
        customerCrmId: 8a12f0af-249d-435b-b997-2034fd472ff8
    CafeRequestWithId:
      summary: An example of a Cafe Project Request without ID.
      value:
        id: d6935bb577244d1692fe544c9c8ae6bd
        status: inactive
        zone: aws-us
        isLocked: false
        projectNumber: 17-005
        projectNameLong: Es Todo Cafe and Grill
        projectNameShort: Es Todo
        officeIdId: 570e423760dc4c9784d20a38216f0597
        division1Id: null
        certifications: null
        customerDataWarehouseId: 987
        customerErpId: ae656d88-c979-4e11-ba0b-695b61fa7f5d
        customerCrmId: 9a6d37ef-fc9d-43ee-ac78-678c273cc1e8
    CafeResponse:
      summary: An example of a Project Response for Cafe.
      value:
        id: d6935bb577244d1692fe544c9c8ae6bd
        datetimeCreated: '2021-11-03T16:21:02+00:01'
        datetimeUpdated: '2024-04-20T16:21:02+00:01'
        status: inactive
        zone: aws-us
        isLocked: false
        projectNumber: 17-005
        projectNameLong: Es Todo Cafe and Grill
        projectNameShort: Es Todo
        officeId:
          id: 570e423760dc4c9784d20a38216f0597
          datetimeCreated: '2021-11-03T16:21:02+00:01'
          datetimeUpdated: '2024-04-20T16:21:02+00:01'
          status: active
          name: London
          address: 123 Dundas Street\nLondon
          phone:
            countryCode: 1
            phoneNumber: 3107419309
        division1Id: null
        certifications: null
        customerDataWarehouseId: 987
        customerErpId: ae656d88-c979-4e11-ba0b-695b61fa7f5d
        customerCrmId: 9a6d37ef-fc9d-43ee-ac78-678c273cc1e8
    CertificationDefinitionResponseArray:
      summary: An example of a CertificateDefinition Response Array.
      value:
        - id: 2d407c21dcf748d1b437f51f966bfd5c
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          status: active
          appliesTo: project
          name: LEED Platinum
          jurisdiction: US
        - id: 76e09464184443d5a42e2ff00fa0c1fe
          datetimeCreated: '2021-11-03T16:21:02+00:00'
          datetimeUpdated: '2024-04-20T16:21:02+00:00'
          status: inactive
          appliesTo: person
          name: Architecture License
          jurisdiction: CA
    LeedRequest:
      summary: An example of a LEED CertificateDefinition Request.
      value:
        status: active
        appliesTo: project
        name: LEED Platinum
        jurisdiction: US
    LeedResponse:
      summary: An example of a CertificateDefinition Response for LEED.
      value:
        id: 2d407c21dcf748d1b437f51f966bfd5c
        datetimeCreated: '2021-11-03T16:21:02+00:00'
        datetimeUpdated: '2024-04-20T16:21:02+00:00'
        status: active
        appliesTo: project
        name: LEED Platinum
        jurisdiction: US
    LeedRequestWithId:
      summary: An example of a Leed CertificateDefinition RequestWithId.
      value:
        id: 2d407c21dcf748d1b437f51f966bfd5c
        status: active
        appliesTo: project
        name: LEED Platinum
        jurisdiction: US
    FilesetsArray:
      summary: Sample data array that would be returned for one or more Filesets.
      value:
        - id: be26af2278974fddb5fcf67d83c10de3
    FilesArray:
      summary: Sample data array that would be returned for one or more Files.
      value:
        - id: be26af2278974fddb5fcf67d83c10de3
    ThumbnailSetArray:
      summary: >-
        Sample data array that would be returned for several files, each with a
        set of thumbnails.
      value:
        - fileId: be26af2278974fddb5fcf67d83c10de3
          thumbnailArray:
            - page: 1
              size: small
              imageData: >-
                ylNaWNyb3NvZnQgQXp1cmUgRmVkZXJhdGVkIFNTTyBDZXJ0aWZpY2F0ZTAeFw0yNDAyM
            - page: 2
              size: small
              imageData: >-
                XvGyPnVqbpd+LZ6cxddkWjSmiyJMAbaNCd50KCk3XdTFXPo56F5Z5w6U3rMOZIUhh3AH
            - page: 1
              size: medium
              imageData: >-
                wbtfQQcHLjdIUzEtT+ck3gg5VJmQ1LIw6ucvUPbXeC2zT/1Lyk/YwmN3MyKWv0bnhx3Cglj+rZ02Biy3vvvl1d/7hc44QuEqKhw3pWKq/o3QsrJQuksEGoQLZLcA431eo+VyStC4f0MzSfXFw3csH5fPIeYxJyH
            - page: 2
              size: medium
              imageData: >-
                UCAut7LhUHizTdcgcC85ji+FIlAgh88/Fz05xUphUQ9Kvx9b9Agx8PiKdyakaJ7szzCX2aTftu431/oXvdkUi0cTzprEq+w5s4wJCp050M4Iu6rH2UUETO5pbmxWjfvWGtYBPV6fbi6jJ+WU5p1HUVr/2LGkapJ
        - fileId: e4e60c6333cc46b68ba4e740ee7d637f
          thumbnailArray:
            - page: 1
              size: small
              imageData: >-
                1cmUgRmVkZXJhdGVkIFNTTyBDZXJ0aWZpY2F0ZTAeFw0yNDAyMylNaWNyb3NvZnQgQXp
            - page: 2
              size: small
              imageData: >-
                jSmiyJMAbaNCd50KCk3XdTFXPo56F5Z5w6U3rMOZIUhh3AHXvGyPnVqbpd+LZ6cxddkW
            - page: 1
              size: medium
              imageData: >-
                U4TTZAuOqeemVUQBzfOyBa5uL6JQYAZ0efYrtfpBTboALw9Vf4OOJvlAy4A0GCSqGSIb3DQEBCwUAA4IBAQB8Wc+85F3FBtktFIqyiPrNg+xFnnEGnsRooUclAI3ng9NpIRB+c/ioTCOFDwqZjXf67u+F6njv5
            - page: 2
              size: medium
              imageData: >-
                Agx8PiKdyakaJ7szzCX2aTftu431/oXvdkUi0cTzprEq+w5s4wJCp050M4Iu6rH2UUETO5pbmxWjfvWGtYBPV6fbi6jJ+WU5p1HUVr/2LGkapJ7VVEa1oV9AY8ttTPFnBEygvnsepTmNIyy+Ab9d/qTEGzLCyyQ
    ExpiryUrl:
      summary: Sample data that would be returned for an Expiry URL.
      value:
        expiry_id: dea11ac43c5b4f35aacbd641d268670f
        expiry_url: https://app.tonicdm.com/w/dea11ac43c5b4f35aacbd641d268670f
    PresignedUrl:
      summary: The information required to make an upload direct to AWS S3.
      value:
        X-Amz-Algorithm: AWS4-HMAC-SHA256
        X-Amz-Date: 20240823T224600Z
        X-Amz-SignedHeaders: content-type%3Bhost
        X-Amz-Credential: AKI3GAIOBE2IAUG5IZUA%2F20240823%2Fus-east-1%2Fs3%2Faws4_request
        X-Amz-Expires: 600
        X-Amz-Signature: 6c45fece459e8cf8f124c13eba64702b0f7b0fcb769ecaf397479f65e1204d80
    ConversationsArray:
      summary: Sample data array that would be returned for one or more Conversations.
      value:
        - id: be26af2278974fddb5fcf67d83c10de3
    MessagesArray:
      summary: Sample data array that would be returned for one or more Messages.
      value:
        - id: be26af2278974fddb5fcf67d83c10de3
    FileTransfersArray:
      summary: Sample data array that would be returned for one or more FileTransfers.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    FileTransferPartsArray:
      summary: >-
        Sample data array that would be returned for one or more FileTransfer
        Parts.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    RfisArray:
      summary: Sample data array that would be returned for one or more RFIs.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    RfiPartsArray:
      summary: Sample data array that would be returned for one or more RFI Parts.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    SubmittalsArray:
      summary: Sample data array that would be returned for one or more Submittals.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    SubmittalPartsArray:
      summary: >-
        Sample data array that would be returned for one or more Submittal
        Parts.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    PcosArray:
      summary: Sample data array that would be returned for one or more PCOs.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    PcoPartsArray:
      summary: Sample data array that would be returned for one or more PCO Parts.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    CosArray:
      summary: Sample data array that would be returned for one or more COs.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    CoPartsArray:
      summary: Sample data array that would be returned for one or more CO Parts.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    TasksArray:
      summary: Sample data array that would be returned for one or more Tasks.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
    TaskPartsArray:
      summary: Sample data array that would be returned for one or more Task Parts.
      value:
        - id: be26af2278974fddb5fcf67d83c10de4
        - id: be26af2278974fddb5fcf67d83c10de3
  responses:
    NoContentSuccess:
      description: >-
        No content. The request was successfully executed on the server but
        there is no data to return.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    BadRequestError:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    AuthenticationError:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    NoAccessError:
      description: >-
        Authentication succeeded, but the user does not have access to the
        resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    NotFoundError:
      description: The resource cannot be found, client-side error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    RateLimitExceededError:
      description: Surpassed the max number of request units for the current hour.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
    UnexpectedError:
      description: Unexpected error. Consumer may try to send the request again.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Errors'
