openapi: 3.0.3
info:
  title: Hook REST API
  description: >-
    The Hook REST API enables you to programmatically access and manage your
    Hook workspace.
  version: 1.0.33
servers:
  - url: https://api.hook.co/v1
paths:
  /members/me:
    get:
      operationId: getCurrentMember
      summary: Get the current member
      description: Returns the member associated with the authorisation token
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
      tags:
        - Members
  /organizations/{organizationId}/automations:
    get:
      operationId: listAutomations
      summary: List all automations
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationSummaryList'
      tags:
        - Automations
  /organizations/{organizationId}/automations/{automationId}:
    get:
      operationId: getAutomation
      summary: Get a single automation by ID
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: automationId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Automation'
      tags:
        - Automations
  /organizations/{organizationId}/automations/{automationId}/actions/{actionId}/logs:
    get:
      operationId: listAutomationActionLogs
      summary: List logs for an automation action
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: automationId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
        - name: actionId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationActionLogList'
      tags:
        - Automations
  /organizations/{organizationId}/automations/{automationId}/triggers/{triggerId}/logs:
    get:
      operationId: listAutomationTriggerLogs
      summary: List logs for an automation trigger
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: automationId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
        - name: triggerId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AutomationTriggerLogList'
      tags:
        - Automations
  /organizations/{organizationId}/briefs:
    get:
      operationId: listBriefs
      summary: List all briefs
      description: Returns the active brief definitions configured for the organization
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefList'
      tags:
        - Briefs
  /organizations/{organizationId}/custom-fields:
    get:
      operationId: listCustomFields
      summary: List custom fields
      description: Returns the custom field definitions for the organization
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldList'
      tags:
        - CustomFields
  /organizations/{organizationId}/member-roles:
    get:
      operationId: listMemberRoles
      summary: List member roles
      description: >-
        Returns the member-customer role definitions for the organization. These
        are the roles that associate a member with a customer, such as CSM or
        Account Manager
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberRoleList'
      tags:
        - MemberRoles
  /organizations/{organizationId}/members:
    get:
      operationId: listMembers
      summary: List all members
      description: Returns a list of members
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MemberList'
      tags:
        - Members
  /organizations/{organizationId}/members/{memberId}:
    get:
      operationId: getMember
      summary: Get a member
      description: Returns a member by their ID
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: memberId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Member'
      tags:
        - Members
  /organizations/{organizationId}/note-categories:
    get:
      operationId: listNoteCategories
      summary: List note categories
      description: >-
        Returns the active note categories for the organization, for use when
        creating a note
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoteCategoryList'
      tags:
        - Notes
  /organizations/{organizationId}/products:
    get:
      operationId: listProducts
      summary: List products
      parameters:
        - name: organizationId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductList'
      tags:
        - Products
  /organizations/{organizationId}/products/{productId}/metrics:
    get:
      operationId: listProductMetrics
      summary: List product metrics
      description: Returns the metrics for a given product
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: productId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductMetricList'
      tags:
        - Products
  /organizations/{organizationId}/signals:
    get:
      operationId: listSignals
      summary: List all signals
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: scope
          in: query
          description: >-
            All will return all visible customers. Team will restrict this to
            those where your team members (members under a shared manager) are
            assigned a role on the customer. Mine will only return customers you
            are assigned a role to on the customer.
          required: false
          schema:
            default: all
            allOf:
              - $ref: '#/components/schemas/ScopeInput'
        - name: status
          in: query
          required: false
          schema:
            allOf:
              - $ref: '#/components/schemas/SignalStatusInput'
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SignalList'
      tags:
        - Signals
  /organizations/{organizationId}/signals/{signalId}:
    get:
      operationId: getSignal
      summary: Get a single signal by ID
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: signalId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Signal'
      tags:
        - Signals
  /organizations/{organizationId}/customers:
    get:
      operationId: listCustomers
      summary: List all customers
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: scope
          in: query
          description: >-
            All will return all visible customers. Team will restrict this to
            those where your team members (members under a shared manager) are
            assigned a role on the customer. Mine will only return customers you
            are assigned a role to on the customer.
          required: false
          schema:
            default: all
            allOf:
              - $ref: '#/components/schemas/ScopeInput'
        - name: status
          in: query
          required: false
          schema:
            allOf:
              - $ref: '#/components/schemas/CustomerStatusInput'
        - name: updatedSince
          in: query
          description: Only return customers updated at or after this time, up to now.
          required: false
          schema:
            type: string
            format: date-time
            pattern: >-
              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        - name: memberId
          in: query
          description: Only return customers this member is assigned to (in any role).
          required: false
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
        - name: memberRoleId
          in: query
          description: >-
            Narrow the `memberId` filter to a single role, e.g. CSM. The role id
            is the `id` returned by ListMemberRoles. Must be supplied together
            with `memberId`.
          required: false
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
        - name: sourceKey
          in: query
          description: >-
            The source to match `sourceExternalId` against, e.g. salesforce.
            This is the `key` returned in a customer `sources` entry. Must be
            supplied together with `sourceExternalId`.
          required: false
          schema:
            type: string
            minLength: 1
        - name: sourceExternalId
          in: query
          description: >-
            Filter customers by their ID in an external source, such as a CRM.
            Must be supplied together with `sourceKey`.
          required: false
          schema:
            type: array
            items:
              type: string
              minLength: 1
            minItems: 1
        - name: segment
          in: query
          description: Filter customers by segment name
          required: false
          schema:
            type: array
            items:
              type: string
              minLength: 1
            minItems: 1
        - name: domain
          in: query
          description: Filter customers by domain, e.g. example.com
          required: false
          schema:
            type: array
            items:
              type: string
              minLength: 1
            minItems: 1
        - name: country
          in: query
          description: Filter customers by country
          required: false
          schema:
            type: array
            items:
              type: string
              minLength: 1
            minItems: 1
        - name: region
          in: query
          description: Filter customers by region
          required: false
          schema:
            type: array
            items:
              type: string
              minLength: 1
            minItems: 1
        - name: city
          in: query
          description: Filter customers by city
          required: false
          schema:
            type: array
            items:
              type: string
              minLength: 1
            minItems: 1
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerList'
      tags:
        - Customers
  /organizations/{organizationId}/customers/{customerId}/briefs/{briefId}/contents:
    get:
      operationId: listCustomerBriefContents
      summary: List the contents generated for a brief for a customer
      description: >-
        Returns the generated contents for a single brief on a customer, most
        recent first
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
        - name: briefId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BriefContentList'
      tags:
        - Briefs
  /organizations/{organizationId}/customers/{customerId}/meetings:
    get:
      operationId: listCustomerMeetings
      summary: List all meetings for a customer
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: minStartDate
          in: query
          description: Only return meetings starting on or after this date
          required: false
          schema:
            type: string
            format: date-time
            pattern: >-
              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingList'
      tags:
        - Meetings
  /organizations/{organizationId}/customers/{customerId}/meetings/{meetingId}:
    get:
      operationId: getCustomerMeeting
      summary: Get a single meeting for a customer by ID, including its transcript
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
        - name: meetingId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MeetingWithTranscript'
      tags:
        - Meetings
  /organizations/{organizationId}/customers/{customerId}/notes:
    get:
      operationId: listCustomerNotes
      summary: List all notes for a customer
      parameters:
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
            maximum: 9007199254740991
            minimum: 0
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 100
            exclusiveMinimum: true
            maximum: 250
            minimum: 0
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoteList'
      tags:
        - Notes
    post:
      operationId: createCustomerNote
      summary: Create a note for a customer
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                categoryId:
                  type: integer
                  example: 3
                  exclusiveMinimum: true
                  maximum: 9007199254740991
                  minimum: 0
                title:
                  type: string
                  example: Kick off call
                  minLength: 1
                body:
                  type: string
                  example: Discussed onboarding plan.
                  minLength: 1
                userIds:
                  type: array
                  items:
                    type: integer
                    minimum: 0
                    exclusiveMinimum: true
                    maximum: 9007199254740991
                  example:
                    - 7
                    - 11
                contactIds:
                  type: array
                  items:
                    type: integer
                    minimum: 0
                    exclusiveMinimum: true
                    maximum: 9007199254740991
                  example:
                    - 21
                    - 34
              required:
                - categoryId
                - body
      responses:
        '201':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Note'
      tags:
        - Notes
  /organizations/{organizationId}/customers/{customerId}:
    get:
      operationId: getCustomer
      summary: Get a single customer by ID
      parameters:
        - name: organizationId
          in: path
          description: Organization ID of the member accessing the resource
          required: true
          schema:
            type: string
            example: my-organization-id
        - name: customerId
          in: path
          required: true
          schema:
            type: integer
            exclusiveMinimum: true
            maximum: 9007199254740991
            minimum: 0
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Customer'
      tags:
        - Customers
components:
  schemas:
    ScopeInput:
      type: string
      enum:
        - mine
        - team
        - all
    SignalStatusInput:
      type: string
      enum:
        - Active
        - Cleared
        - Detected
        - Dismissed
    CustomerStatusInput:
      type: string
      enum:
        - Active
        - Churned
        - Upcoming
        - Unassigned
    Member:
      type: object
      properties:
        id:
          type: integer
          example: 1234
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        firstName:
          type: string
          example: Phoebe
          nullable: true
        lastName:
          type: string
          example: Frere
          nullable: true
        email:
          type: string
          example: phoebe@example.com
        organizationId:
          type: string
          example: my-organization-id
        managerId:
          description: The Member ID of this member's manager
          type: integer
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
          nullable: true
      additionalProperties: false
      required:
        - id
        - firstName
        - lastName
        - email
        - organizationId
        - managerId
    MemberList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Member'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    AutomationActionLogStatus:
      type: string
      enum:
        - success
        - error
        - skipped
        - info
        - close
    AutomationTriggerLogStatus:
      type: string
      enum:
        - info
        - failed
    AutomationSummary:
      type: object
      properties:
        id:
          type: integer
          example: 1234
          maximum: 9007199254740991
          minimum: -9007199254740991
        name:
          type: string
          example: High value account at risk
        deactivatedDate:
          type: string
          format: date-time
          nullable: true
      additionalProperties: false
      required:
        - id
        - name
        - deactivatedDate
    AutomationTrigger:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
      additionalProperties: false
      required:
        - id
    AutomationAction:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
      additionalProperties: false
      required:
        - id
    Automation:
      type: object
      properties:
        id:
          type: integer
          example: 1234
          maximum: 9007199254740991
          minimum: -9007199254740991
        name:
          type: string
          example: High value account at risk
        deactivatedDate:
          type: string
          format: date-time
          nullable: true
        triggers:
          type: array
          items:
            $ref: '#/components/schemas/AutomationTrigger'
        actions:
          type: array
          items:
            $ref: '#/components/schemas/AutomationAction'
        children:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Automation'
      additionalProperties: false
      required:
        - id
        - name
        - deactivatedDate
        - triggers
        - actions
        - children
    AutomationActionLog:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        customer:
          type: object
          additionalProperties: false
          nullable: true
          properties:
            id:
              type: integer
              maximum: 9007199254740991
              minimum: -9007199254740991
            name:
              type: string
          required:
            - id
            - name
        user:
          type: object
          additionalProperties: false
          nullable: true
          properties:
            id:
              type: integer
              maximum: 9007199254740991
              minimum: -9007199254740991
            customerId:
              type: integer
              maximum: 9007199254740991
              minimum: -9007199254740991
            firstName:
              type: string
              nullable: true
            lastName:
              type: string
              nullable: true
          required:
            - id
            - customerId
            - firstName
            - lastName
        contact:
          type: object
          additionalProperties: false
          nullable: true
          properties:
            id:
              type: integer
              maximum: 9007199254740991
              minimum: -9007199254740991
            customerId:
              type: integer
              maximum: 9007199254740991
              minimum: -9007199254740991
            firstName:
              type: string
              nullable: true
            lastName:
              type: string
              nullable: true
          required:
            - id
            - customerId
            - firstName
            - lastName
        status:
          allOf:
            - $ref: '#/components/schemas/AutomationActionLogStatus'
          nullable: true
        message:
          type: string
          nullable: true
        createdDate:
          type: string
          format: date-time
      additionalProperties: false
      required:
        - id
        - customer
        - user
        - contact
        - status
        - message
        - createdDate
    AutomationTriggerLog:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        status:
          $ref: '#/components/schemas/AutomationTriggerLogStatus'
        message:
          type: string
          nullable: true
        createdDate:
          type: string
          format: date-time
      additionalProperties: false
      required:
        - id
        - status
        - message
        - createdDate
    AutomationSummaryList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/AutomationSummary'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    AutomationActionLogList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/AutomationActionLog'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    AutomationTriggerLogList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/AutomationTriggerLog'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    Brief:
      type: object
      properties:
        id:
          type: integer
          example: 42
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        name:
          type: string
          example: Executive summary
        description:
          type: string
          example: A high level summary of the customer relationship.
          nullable: true
      additionalProperties: false
      required:
        - id
        - name
        - description
    BriefList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Brief'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    BriefContent:
      type: object
      properties:
        id:
          type: integer
          example: 981
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        briefId:
          type: integer
          example: 42
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        customerId:
          type: integer
          example: 12
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        content:
          example: Renewal is on track; the champion is engaged.
          type: string
        createdDate:
          type: string
          format: date-time
        updatedDate:
          type: string
          format: date-time
      additionalProperties: false
      required:
        - id
        - briefId
        - customerId
        - content
        - createdDate
        - updatedDate
    BriefContentList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/BriefContent'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    CustomField:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        key:
          type: string
          example: tier
        name:
          type: string
          example: Tier
        type:
          type: string
          example: account
        dataType:
          type: string
          example: string
        productId:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
      additionalProperties: false
      required:
        - id
        - key
        - name
        - type
        - dataType
        - productId
    CustomFieldList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    MemberRole:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        key:
          type: string
          example: csm
        name:
          type: string
          example: CSM
      additionalProperties: false
      required:
        - id
        - key
        - name
    MemberRoleList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/MemberRole'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    NoteCategory:
      type: object
      properties:
        id:
          type: integer
          example: 3
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        name:
          type: string
          example: Meeting
      additionalProperties: false
      required:
        - id
        - name
    NoteCategoryList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/NoteCategory'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    NotePerson:
      type: object
      properties:
        id:
          type: integer
          example: 7
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        email:
          type: string
          example: jane@example.com
          nullable: true
        firstName:
          type: string
          example: Jane
          nullable: true
        lastName:
          type: string
          example: Doe
          nullable: true
      additionalProperties: false
      required:
        - id
        - email
        - firstName
        - lastName
    Note:
      type: object
      properties:
        id:
          type: integer
          example: 64
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        customerId:
          type: integer
          example: 12
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        title:
          type: string
          example: Kick off call
          nullable: true
        body:
          type: string
          example: Discussed onboarding plan.
          nullable: true
        category:
          $ref: '#/components/schemas/NoteCategory'
        users:
          type: array
          items:
            $ref: '#/components/schemas/NotePerson'
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/NotePerson'
        createdDate:
          type: string
          format: date-time
        updatedDate:
          type: string
          format: date-time
      additionalProperties: false
      required:
        - id
        - customerId
        - title
        - body
        - category
        - users
        - contacts
        - createdDate
        - updatedDate
    NoteList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Note'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    Product:
      type: object
      properties:
        id:
          type: integer
          example: 8732
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        name:
          type: string
          example: Platform product
        key:
          type: string
          example: platform
      additionalProperties: false
      required:
        - id
        - name
        - key
    ProductList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Product'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    ProductMetric:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        key:
          type: string
          example: health_score
        name:
          type: string
          example: Health Score
        dataType:
          type: string
          example: percentage
      additionalProperties: false
      required:
        - id
        - key
        - name
        - dataType
    ProductMetricList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/ProductMetric'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    SignalCategory:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        name:
          type: string
      additionalProperties: false
      required:
        - id
        - name
    SignalDismissalReason:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        name:
          type: string
      additionalProperties: false
      required:
        - id
        - name
    SignalOutcome:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        name:
          type: string
      additionalProperties: false
      required:
        - id
        - name
    SignalCompetitor:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        name:
          type: string
      additionalProperties: false
      required:
        - id
        - name
    SignalType:
      type: object
      properties:
        id:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
        name:
          type: string
        color:
          type: string
      additionalProperties: false
      required:
        - id
        - name
        - color
    Signal:
      type: object
      properties:
        id:
          type: integer
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        customerId:
          type: integer
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        productId:
          type: integer
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        productKey:
          type: string
        status:
          type: string
        source:
          type: string
        summary:
          type: string
          nullable: true
        notes:
          type: string
          enum:
            - null
          deprecated: true
          nullable: true
        severity:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
        severityExplanation:
          type: string
          nullable: true
        createdById:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
        updatedById:
          type: integer
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
        ownerId:
          type: integer
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
          nullable: true
        latestNote:
          type: string
          nullable: true
        isDraft:
          type: boolean
        isPrimary:
          type: boolean
          nullable: true
        createdDate:
          type: string
          format: date-time
        raisedDate:
          type: string
          format: date-time
        closedDate:
          type: string
          format: date-time
          nullable: true
        updatedDate:
          type: string
          format: date-time
        opportunity:
          type: string
          nullable: true
        category:
          allOf:
            - $ref: '#/components/schemas/SignalCategory'
          nullable: true
        dismissalReason:
          allOf:
            - $ref: '#/components/schemas/SignalDismissalReason'
          nullable: true
        subCategory:
          allOf:
            - $ref: '#/components/schemas/SignalCategory'
          nullable: true
        outcome:
          allOf:
            - $ref: '#/components/schemas/SignalOutcome'
          nullable: true
        outcomeNotes:
          type: string
          nullable: true
        competitor:
          allOf:
            - $ref: '#/components/schemas/SignalCompetitor'
          nullable: true
        type:
          $ref: '#/components/schemas/SignalType'
      additionalProperties: false
      required:
        - id
        - customerId
        - productId
        - productKey
        - status
        - source
        - summary
        - notes
        - severity
        - severityExplanation
        - createdById
        - updatedById
        - ownerId
        - latestNote
        - isDraft
        - isPrimary
        - createdDate
        - raisedDate
        - closedDate
        - updatedDate
        - opportunity
        - category
        - dismissalReason
        - subCategory
        - outcome
        - outcomeNotes
        - competitor
        - type
    SignalList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Signal'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    CustomerMemberRole:
      type: object
      properties:
        members:
          type: array
          items:
            $ref: '#/components/schemas/Member'
        key:
          type: string
          example: csm
        name:
          type: string
          example: CSM
      additionalProperties: false
      required:
        - members
        - key
        - name
    CustomerCustomField:
      type: object
      properties:
        key:
          type: string
          example: health_score
        value:
          example: 85
      additionalProperties: false
      required:
        - key
        - value
    CustomerProductMetric:
      type: object
      properties:
        key:
          type: string
          example: active_integrations
        value:
          example: 85
      additionalProperties: false
      required:
        - key
        - value
    CustomerProduct:
      type: object
      properties:
        key:
          type: string
          example: platform
        status:
          type: string
          example: active
        arr:
          type: number
          example: 12000
          nullable: true
        renewalDate:
          type: string
          example: '2026-01-01'
          nullable: true
        engagement:
          type: object
          additionalProperties: false
          nullable: true
          properties:
            level:
              type: string
              example: high
              nullable: true
          required:
            - level
        upsell:
          type: object
          additionalProperties: false
          nullable: true
          properties:
            level:
              type: string
              example: upsell
          required:
            - level
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/CustomerProductMetric'
      additionalProperties: false
      required:
        - key
        - status
        - arr
        - renewalDate
        - engagement
        - upsell
        - metrics
    CustomerSource:
      type: object
      properties:
        key:
          type: string
          example: salesforce
        externalId:
          type: string
          example: 0010x000000aAAA
      additionalProperties: false
      required:
        - key
        - externalId
    Customer:
      type: object
      properties:
        id:
          type: integer
          example: 1234
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        name:
          type: string
          example: Acme Corp
        city:
          type: string
          example: San Francisco
          nullable: true
        country:
          type: string
          example: US
          nullable: true
        region:
          type: string
          example: US
          nullable: true
        timezone:
          type: string
          example: America/Los_Angeles
          nullable: true
        domain:
          type: string
          example: acme.com
          nullable: true
        employeeCount:
          type: integer
          example: 500
          maximum: 9007199254740991
          minimum: -9007199254740991
          nullable: true
        segment:
          type: string
          example: Enterprise
          nullable: true
        memberRoles:
          type: array
          items:
            $ref: '#/components/schemas/CustomerMemberRole'
        customFields:
          type: array
          items:
            $ref: '#/components/schemas/CustomerCustomField'
        products:
          type: array
          items:
            $ref: '#/components/schemas/CustomerProduct'
        sources:
          type: array
          items:
            $ref: '#/components/schemas/CustomerSource'
        updatedDate:
          type: string
          format: date-time
      additionalProperties: false
      required:
        - id
        - name
        - city
        - country
        - region
        - timezone
        - domain
        - employeeCount
        - segment
        - memberRoles
        - customFields
        - products
        - sources
        - updatedDate
    CustomerList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Customer'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    MeetingPerson:
      type: object
      properties:
        id:
          type: integer
          example: 7
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        email:
          type: string
          example: jane@example.com
          nullable: true
        firstName:
          type: string
          example: Jane
          nullable: true
        lastName:
          type: string
          example: Doe
          nullable: true
      additionalProperties: false
      required:
        - id
        - email
        - firstName
        - lastName
    Meeting:
      type: object
      properties:
        id:
          type: integer
          example: 88
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        customerId:
          type: integer
          example: 12
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        topic:
          type: string
          example: Quarterly business review
        summary:
          type: string
          example: Reviewed adoption and agreed next steps.
          nullable: true
        url:
          type: string
          example: https://meet.example.com/abc-defg-hij
          nullable: true
        startDate:
          type: string
          format: date-time
        endDate:
          type: string
          format: date-time
        members:
          type: array
          items:
            $ref: '#/components/schemas/Member'
        users:
          type: array
          items:
            $ref: '#/components/schemas/MeetingPerson'
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/MeetingPerson'
        unmatchedParticipants:
          description: Participants that could not be matched to a member, user or contact
          type: array
          items:
            type: string
          example:
            - guest@example.com
        nextSteps:
          type: array
          items:
            type: string
          example:
            - Share the updated pricing proposal
        hasTranscript:
          type: boolean
        createdDate:
          type: string
          format: date-time
        updatedDate:
          type: string
          format: date-time
      additionalProperties: false
      required:
        - id
        - customerId
        - topic
        - summary
        - url
        - startDate
        - endDate
        - members
        - users
        - contacts
        - unmatchedParticipants
        - nextSteps
        - hasTranscript
        - createdDate
        - updatedDate
    MeetingList:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/Meeting'
        totalCount:
          type: number
      additionalProperties: false
      required:
        - items
        - totalCount
    MeetingTranscriptLine:
      type: object
      properties:
        speakerName:
          type: string
          example: Jane Doe
        orderNumber:
          type: integer
          example: 1
          maximum: 9007199254740991
          minimum: -9007199254740991
        text:
          type: string
          example: Thanks everyone for joining.
        start:
          description: Milliseconds from the start of the meeting
          type: number
          example: 500
          nullable: true
        end:
          description: Milliseconds from the start of the meeting
          type: number
          example: 3200
          nullable: true
      additionalProperties: false
      required:
        - speakerName
        - orderNumber
        - text
        - start
        - end
    MeetingWithTranscript:
      type: object
      properties:
        id:
          type: integer
          example: 88
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        customerId:
          type: integer
          example: 12
          exclusiveMinimum: true
          maximum: 9007199254740991
          minimum: 0
        topic:
          type: string
          example: Quarterly business review
        summary:
          type: string
          example: Reviewed adoption and agreed next steps.
          nullable: true
        url:
          type: string
          example: https://meet.example.com/abc-defg-hij
          nullable: true
        startDate:
          type: string
          format: date-time
        endDate:
          type: string
          format: date-time
        members:
          type: array
          items:
            $ref: '#/components/schemas/Member'
        users:
          type: array
          items:
            $ref: '#/components/schemas/MeetingPerson'
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/MeetingPerson'
        unmatchedParticipants:
          description: Participants that could not be matched to a member, user or contact
          type: array
          items:
            type: string
          example:
            - guest@example.com
        nextSteps:
          type: array
          items:
            type: string
          example:
            - Share the updated pricing proposal
        hasTranscript:
          type: boolean
        createdDate:
          type: string
          format: date-time
        updatedDate:
          type: string
          format: date-time
        transcript:
          description: >-
            The lines of the transcript, in order. Null when the meeting was not
            transcribed
          type: array
          items:
            $ref: '#/components/schemas/MeetingTranscriptLine'
          nullable: true
      additionalProperties: false
      required:
        - id
        - customerId
        - topic
        - summary
        - url
        - startDate
        - endDate
        - members
        - users
        - contacts
        - unmatchedParticipants
        - nextSteps
        - hasTranscript
        - createdDate
        - updatedDate
        - transcript
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
security:
  - bearerAuth: []
