Kaseya Opportunities API

The Opportunities API from Kaseya — 12 operation(s) for opportunities.

Operations 19

GET /V1.0/Opportunities/query #
POST /V1.0/Opportunities/query #
GET /V1.0/Opportunities/{id} #
GET /V1.0/Opportunities/query/count #
POST /V1.0/Opportunities/query/count #
PUT /V1.0/Opportunities #
POST /V1.0/Opportunities #
PATCH /V1.0/Opportunities #
GET /V1.0/Opportunities/entityInformation #
GET /V1.0/Opportunities/entityInformation/fields #
GET /V1.0/Opportunities/entityInformation/userDefinedFields #
GET /v2/crm/opportunities/{id} #
PUT /v2/crm/opportunities/{id} #
GET /v2/crm/opportunities #
POST /v2/crm/opportunities #
GET /v2/crm/opportunities/{id}/notes #
POST /v2/crm/opportunities/{id}/notes #
PUT /v2/crm/opportunities/{opportunityId}/notes/{noteId} #
GET /v2/crm/opportunities/statuses/Lookup #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/kaseya-opportunities-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

kaseya-opportunities-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Kaseya Opportunities API
  version: '1.0'
  description: 'Operations tagged Opportunities across 2 of this provider''s published API definitions: kaseya-autotask-psa-openapi-original.json, kaseya-bms-openapi-original.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://webservices2.autotask.net/ATServicesRest
- url: https://api.bms.kaseya.com
tags:
- name: Opportunities
paths:
  /V1.0/Opportunities/query:
    get:
      tags:
      - Opportunities
      operationId: Opportunities_UrlParameterQuery
      parameters:
      - name: search
        in: query
        required: true
        schema:
          type: string
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryActionResult_OpportunityModel_Opportunity'
            text/json:
              schema:
                $ref: '#/components/schemas/QueryActionResult_OpportunityModel_Opportunity'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    post:
      tags:
      - Opportunities
      operationId: Opportunities_Query
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryActionResult_OpportunityModel_Opportunity'
            text/json:
              schema:
                $ref: '#/components/schemas/QueryActionResult_OpportunityModel_Opportunity'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryModel'
        required: true
    servers:
    - url: https://webservices2.autotask.net/ATServicesRest
  /V1.0/Opportunities/{id}:
    get:
      tags:
      - Opportunities
      operationId: Opportunities_QueryItem
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int64
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ItemQueryResultModel_OpportunityModel_Opportunity'
            text/json:
              schema:
                $ref: '#/components/schemas/ItemQueryResultModel_OpportunityModel_Opportunity'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    servers:
    - url: https://webservices2.autotask.net/ATServicesRest
  /V1.0/Opportunities/query/count:
    get:
      tags:
      - Opportunities
      operationId: Opportunities_UrlParameterQueryCount
      parameters:
      - name: search
        in: query
        required: true
        schema:
          type: string
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryCountResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/QueryCountResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    post:
      tags:
      - Opportunities
      operationId: Opportunities_QueryCount
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryCountResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/QueryCountResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryModel'
        required: true
    servers:
    - url: https://webservices2.autotask.net/ATServicesRest
  /V1.0/Opportunities:
    put:
      tags:
      - Opportunities
      operationId: Opportunities_UpdateEntity
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/OperationResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityModel'
        required: true
    post:
      tags:
      - Opportunities
      operationId: Opportunities_CreateEntity
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/OperationResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityModel'
        required: true
    patch:
      tags:
      - Opportunities
      operationId: Opportunities_PatchEntity
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/OperationResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityModel'
        required: true
    servers:
    - url: https://webservices2.autotask.net/ATServicesRest
  /V1.0/Opportunities/entityInformation:
    get:
      tags:
      - Opportunities
      operationId: Opportunities_QueryEntityInformation
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityInformationResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/EntityInformationResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    servers:
    - url: https://webservices2.autotask.net/ATServicesRest
  /V1.0/Opportunities/entityInformation/fields:
    get:
      tags:
      - Opportunities
      operationId: Opportunities_QueryFieldDefinitions
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FieldInformationResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/FieldInformationResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    servers:
    - url: https://webservices2.autotask.net/ATServicesRest
  /V1.0/Opportunities/entityInformation/userDefinedFields:
    get:
      tags:
      - Opportunities
      operationId: Opportunities_QueryUserDefinedFieldDefinitions
      parameters:
      - name: ApiIntegrationCode
        in: header
        description: API Integration Code
        required: true
        schema:
          type: string
      - name: UserName
        in: header
        description: User Name
        required: true
        schema:
          type: string
      - name: Secret
        in: header
        description: Secret
        required: true
        schema:
          type: string
      - name: ImpersonationResourceId
        in: header
        description: Impersonation Resource Key
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDefinedFieldInformationResultModel'
            text/json:
              schema:
                $ref: '#/components/schemas/UserDefinedFieldInformationResultModel'
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
    servers:
    - url: https://webservices2.autotask.net/ATServicesRest
  /v2/crm/opportunities/{id}:
    get:
      tags:
      - Opportunities
      operationId: GetOpportunity
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
      security:
      - bearerAuth: []
    put:
      tags:
      - Opportunities
      operationId: PutOpportunity
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
          text/json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
      security:
      - bearerAuth: []
    servers:
    - url: https://api.bms.kaseya.com
  /v2/crm/opportunities:
    get:
      tags:
      - Opportunities
      operationId: GetAllOpportunities
      parameters:
      - name: Filter.StatusId
        in: query
        schema:
          type: integer
          format: int32
      - name: Filter.AccountId
        in: query
        schema:
          type: integer
          format: int32
      - name: Filter.TypeId
        in: query
        schema:
          type: integer
          format: int32
      - name: Filter.SalesRepresentativeUserId
        in: query
        schema:
          type: integer
          format: int32
      - name: Filter.InPipeline
        in: query
        schema:
          type: boolean
      - name: Filter.CreatedOnFrom
        in: query
        schema:
          type: string
          format: date-time
      - name: Filter.CreatedOnTo
        in: query
        schema:
          type: string
          format: date-time
      - name: Filter.ModifiedOnFrom
        in: query
        schema:
          type: string
          format: date-time
      - name: Filter.ModifiedOnTo
        in: query
        schema:
          type: string
          format: date-time
      - name: Sort
        in: query
        schema:
          type: string
      - name: Exclude
        in: query
        schema:
          type: string
      - name: PageSize
        in: query
        schema:
          type: integer
          format: int32
      - name: PageNumber
        in: query
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoListPagedResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoListPagedResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoListPagedResponse'
      security:
      - bearerAuth: []
    post:
      tags:
      - Opportunities
      operationId: PostOpportunity
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
          text/json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/OpportunityInputDto'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityOutputDtoResponse'
      security:
      - bearerAuth: []
    servers:
    - url: https://api.bms.kaseya.com
  /v2/crm/opportunities/{id}/notes:
    get:
      tags:
      - Opportunities
      operationId: GetOpportunityNotes
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: PageSize
        in: query
        schema:
          type: integer
          format: int32
      - name: PageNumber
        in: query
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoListPagedResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoListPagedResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoListPagedResponse'
      security:
      - bearerAuth: []
    post:
      tags:
      - Opportunities
      operationId: PostOpportunityNote
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePostInputDto'
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePostInputDto'
          text/json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePostInputDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePostInputDto'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoResponse'
      security:
      - bearerAuth: []
    servers:
    - url: https://api.bms.kaseya.com
  /v2/crm/opportunities/{opportunityId}/notes/{noteId}:
    put:
      tags:
      - Opportunities
      operationId: PutOpportunityNote
      parameters:
      - name: opportunityId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      - name: noteId
        in: path
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePutInputDto'
          application/json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePutInputDto'
          text/json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePutInputDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/OpportunityNotePutInputDto'
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityNoteOutputDtoResponse'
      security:
      - bearerAuth: []
    servers:
    - url: https://api.bms.kaseya.com
  /v2/crm/opportunities/statuses/Lookup:
    get:
      tags:
      - Opportunities
      operationId: GetOpportunityStatusLookups
      responses:
        '200':
          description: OK
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/OpportunityStatusLookupOutputDtoListResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/OpportunityStatusLookupOutputDtoListResponse'
            text/json:
              schema:
                $ref: '#/components/schemas/OpportunityStatusLookupOutputDtoListResponse'
      security:
      - bearerAuth: []
    servers:
    - url: https://api.bms.kaseya.com
components:
  schemas:
    UserDefinedFieldInformationResultModel:
      type: object
      properties:
        fields:
          type: array
          items:
            $ref: '#/components/schemas/Field'
            readOnly: true
    EntityInformationResultModel:
      type: object
      properties:
        info:
          $ref: '#/components/schemas/EntityInformationModel'
          readOnly: true
    QueryActionResult_OpportunityModel_Opportunity:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/OpportunityModel'
        pageDetails:
          $ref: '#/components/schemas/PagingModel'
    FieldInformationModel:
      type: object
      properties:
        name:
          type: string
        dataType:
          type: string
        length:
          format: int32
          type: integer
        isRequired:
          type: boolean
        isReadOnly:
          type: boolean
        isQueryable:
          type: boolean
        isReference:
          type: boolean
        referenceEntityType:
          type: string
        isPickList:
          type: boolean
        picklistValues:
          type: array
          items:
            $ref: '#/components/schemas/PickListValue'
        picklistParentValueField:
          type: string
        isSupportedWebhookField:
          $ref: '#/components/schemas/Object'
    FieldInformationResultModel:
      type: object
      properties:
        fields:
          type: array
          items:
            $ref: '#/components/schemas/FieldInformationModel'
            readOnly: true
    QueryCountResultModel:
      type: object
      properties:
        queryCount:
          format: int32
          type: integer
    UserDefinedField:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
    OpportunityModel:
      type: object
      properties:
        id:
          format: int64
          type: integer
        advancedField1:
          format: double
          type: number
        advancedField2:
          format: double
          type: number
        advancedField3:
          format: double
          type: number
        advancedField4:
          format: double
          type: number
        advancedField5:
          format: double
          type: number
        amount:
          format: double
          type: number
        assessmentScore:
          format: double
          type: number
        barriers:
          type: string
        closedDate:
          format: date-time
          type: string
        companyID:
          format: int32
          type: integer
        contactID:
          format: int32
          type: integer
        cost:
          format: double
          type: number
        createDate:
          format: date-time
          type: string
        creatorResourceID:
          format: int32
          type: integer
        description:
          type: string
        helpNeeded:
          type: string
        impersonatorCreatorResourceID:
          format: int32
          type: integer
        lastActivity:
          format: date-time
          type: string
        leadSource:
          format: int32
          type: integer
        lossReason:
          format: int32
          type: integer
        lossReasonDetail:
          type: string
        lostDate:
          format: date-time
          type: string
        market:
          type: string
        monthlyCost:
          format: double
          type: number
        monthlyRevenue:
          format: double
          type: number
        nextStep:
          type: string
        onetimeCost:
          format: double
          type: number
        onetimeRevenue:
          format: double
          type: number
        opportunityCategoryID:
          format: int32
          type: integer
        organizationalLevelAssociationID:
          format: int32
          type: integer
        ownerResourceID:
          format: int32
          type: integer
        primaryCompetitor:
          format: int32
          type: integer
        probability:
          format: int32
          type: integer
        productID:
          format: int32
          type: integer
        projectedCloseDate:
          format: date-time
          type: string
        promisedFulfillmentDate:
          format: date-time
          type: string
        promotionName:
          type: string
        quarterlyCost:
          format: double
          type: number
        quarterlyRevenue:
          format: double
          type: number
        rating:
          format: int32
          type: integer
        relationshipAssessmentScore:
          format: double
          type: number
        revenueSpread:
          format: int32
          type: integer
        revenueSpreadUnit:
          type: string
        salesOrderID:
          format: int32
          type: integer
        salesProcessPercentComplete:
          format: double
          type: number
        semiannualCost:
          format: double
          type: number
        semiannualRevenue:
          format: double
          type: number
        stage:
          format: int32
          type: integer
        startDate:
          format: date-time
          type: string
        status:
          format: int32
          type: integer
        technicalAssessmentScore:
          format: double
          type: number
        throughDate:
          format: date-time
          type: string
        title:
          type: string
        totalAmountMonths:
          format: int32
          type: integer
        useQuoteTotals:
          type: boolean
        winReason:
          format: int32
          type: integer
        winReasonDetail:
          type: string
        yearlyCost:
          format: double
          type: number
        yearlyRevenue:
          format: double
          type: number
        userDefinedFields:
          type: array
          items:
            $ref: '#/components/schemas/UserDefinedField'
    PickListValue:
      type: object
      properties:
        value:
          type: string
        label:
          type: string
        isDefaultValue:
          type: boolean
        sortOrder:
          format: int32
          type: integer
        parentValue:
          type: string
        isActive:
          type: boolean
        isSystem:
          type: boolean
    QueryModel:
      type: object
      properties:
        maxRecords:
          format: int32
          type: integer
        includeFields:
          type: array
          items:
            type: string
        filter:
          type: array
          items:
            $ref: '#/components/schemas/Filter'
      example:
        MaxRecords: 10
        IncludeFields: []
        Filter:
        - op: gt
          field: id
          value: 0
          udf: false
          items: []
    ItemQueryResultModel_OpportunityModel_Opportunity:
      type: object
      properties:
        item:
          $ref: '#/components/schemas/OpportunityModel'
    Object:
      type: object
      properties: {}
    Field:
      type: object
      properties:
        name:
          type: string
        label:
          type: string
        type:
          type: string
        length:
          format: int32
          type: integer
        description:
          type: string
        isRequired:
          type: boolean
        isReadOnly:
          type: boolean
        isQueryable:
          type: boolean
        isReference:
          type: boolean
        referenceEntityType:
          type: string
        isPickList:
          type: boolean
        picklistValues:
          type: array
          items:
            $ref: '#/components/schemas/PickListValue'
        picklistParentValueField:
          type: string
        defaultValue:
          type: string
        isSupportedWebhookField:
          $ref: '#/components/schemas/Object'
    RestUserAccessLevel:
      type: object
      properties: {}
    EntityInformationModel:
      type: object
      properties:
        name:
          type: string
          readOnly: true
        canCreate:
          type: boolean
          readOnly: true
        canDelete:
          type: boolean
          readOnly: true
        canQuery:
          type: boolean
          readOnly: true
        canUpdate:
          type: boolean
       

# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kaseya/refs/heads/main/openapi/kaseya-opportunities-api-openapi.yml