/* tslint:disable */
/* eslint-disable */
/**
 * Apideck
 * The Apideck OpenAPI Spec: SDK Optimized
 *
 * The version of the OpenAPI document: 10.13.0
 * Contact: support@apideck.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import {
  ActivitiesFilter,
  ActivitiesSort,
  Activity,
  ActivityToJSON,
  CompaniesFilter,
  CompaniesSort,
  Company,
  CompanyToJSON,
  Contact,
  ContactsFilter,
  ContactsSort,
  ContactToJSON,
  CreateActivityResponse,
  CreateActivityResponseFromJSON,
  CreateCompanyResponse,
  CreateCompanyResponseFromJSON,
  CreateContactResponse,
  CreateContactResponseFromJSON,
  CreateLeadResponse,
  CreateLeadResponseFromJSON,
  CreateNoteResponse,
  CreateNoteResponseFromJSON,
  CreateOpportunityResponse,
  CreateOpportunityResponseFromJSON,
  CreatePipelineResponse,
  CreatePipelineResponseFromJSON,
  CreateUserResponse,
  CreateUserResponseFromJSON,
  DeleteActivityResponse,
  DeleteActivityResponseFromJSON,
  DeleteCompanyResponse,
  DeleteCompanyResponseFromJSON,
  DeleteContactResponse,
  DeleteContactResponseFromJSON,
  DeleteLeadResponse,
  DeleteLeadResponseFromJSON,
  DeleteNoteResponse,
  DeleteNoteResponseFromJSON,
  DeleteOpportunityResponse,
  DeleteOpportunityResponseFromJSON,
  DeletePipelineResponse,
  DeletePipelineResponseFromJSON,
  DeleteUserResponse,
  DeleteUserResponseFromJSON,
  GetActivitiesResponse,
  GetActivitiesResponseFromJSON,
  GetActivityResponse,
  GetActivityResponseFromJSON,
  GetCompaniesResponse,
  GetCompaniesResponseFromJSON,
  GetCompanyResponse,
  GetCompanyResponseFromJSON,
  GetContactResponse,
  GetContactResponseFromJSON,
  GetContactsResponse,
  GetContactsResponseFromJSON,
  GetLeadResponse,
  GetLeadResponseFromJSON,
  GetLeadsResponse,
  GetLeadsResponseFromJSON,
  GetNoteResponse,
  GetNoteResponseFromJSON,
  GetNotesResponse,
  GetNotesResponseFromJSON,
  GetOpportunitiesResponse,
  GetOpportunitiesResponseFromJSON,
  GetOpportunityResponse,
  GetOpportunityResponseFromJSON,
  GetPipelineResponse,
  GetPipelineResponseFromJSON,
  GetPipelinesResponse,
  GetPipelinesResponseFromJSON,
  GetUserResponse,
  GetUserResponseFromJSON,
  GetUsersResponse,
  GetUsersResponseFromJSON,
  Lead,
  LeadsFilter,
  LeadsSort,
  LeadToJSON,
  Note,
  NoteToJSON,
  OpportunitiesFilter,
  OpportunitiesSort,
  Opportunity,
  OpportunityToJSON,
  PassThroughQuery,
  Pipeline,
  PipelineToJSON,
  UpdateActivityResponse,
  UpdateActivityResponseFromJSON,
  UpdateCompanyResponse,
  UpdateCompanyResponseFromJSON,
  UpdateContactResponse,
  UpdateContactResponseFromJSON,
  UpdateLeadResponse,
  UpdateLeadResponseFromJSON,
  UpdateNoteResponse,
  UpdateNoteResponseFromJSON,
  UpdateOpportunityResponse,
  UpdateOpportunityResponseFromJSON,
  UpdatePipelineResponse,
  UpdatePipelineResponseFromJSON,
  UpdateUserResponse,
  UpdateUserResponseFromJSON,
  User,
  UserToJSON
} from '../models'
import * as runtime from '../runtime'

export interface CrmApiActivitiesAddRequest {
  activity: Activity
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiActivitiesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: ActivitiesFilter
  sort?: ActivitiesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiActivitiesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiActivitiesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface CrmApiActivitiesUpdateRequest {
  id: string
  activity: Activity
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiCompaniesAddRequest {
  company: Company
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiCompaniesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: CompaniesFilter
  sort?: CompaniesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiCompaniesDeleteRequest {
  id: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiCompaniesOneRequest {
  id: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  fields?: string | null
}

export interface CrmApiCompaniesUpdateRequest {
  id: string
  company: Company
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiContactsAddRequest {
  contact: Contact
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiContactsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: ContactsFilter
  sort?: ContactsSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiContactsDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiContactsOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
  filter?: ContactsFilter
}

export interface CrmApiContactsUpdateRequest {
  id: string
  contact: Contact
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiLeadsAddRequest {
  lead: Lead
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiLeadsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: LeadsFilter
  sort?: LeadsSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiLeadsDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiLeadsOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface CrmApiLeadsUpdateRequest {
  id: string
  lead: Lead
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiNotesAddRequest {
  note: Note
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiNotesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiNotesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiNotesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface CrmApiNotesUpdateRequest {
  id: string
  note: Note
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiOpportunitiesAddRequest {
  opportunity: Opportunity
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiOpportunitiesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: OpportunitiesFilter
  sort?: OpportunitiesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiOpportunitiesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiOpportunitiesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface CrmApiOpportunitiesUpdateRequest {
  id: string
  opportunity: Opportunity
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiPipelinesAddRequest {
  pipeline: Pipeline
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiPipelinesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiPipelinesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiPipelinesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface CrmApiPipelinesUpdateRequest {
  id: string
  pipeline: Pipeline
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiUsersAddRequest {
  user: User
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface CrmApiUsersAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface CrmApiUsersDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface CrmApiUsersOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface CrmApiUsersUpdateRequest {
  id: string
  user: User
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

/**
 *
 */
export class CrmApi extends runtime.BaseAPI {
  /**
   * Create activity
   * Create activity
   */
  async activitiesAddRaw(
    requestParameters: CrmApiActivitiesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateActivityResponse>> {
    if (requestParameters.activity === null || requestParameters.activity === undefined) {
      throw new runtime.RequiredError(
        'activity',
        'Required parameter requestParameters.activity was null or undefined when calling activitiesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/activities`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: ActivityToJSON(requestParameters.activity)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateActivityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create activity
   * Create activity
   */
  async activitiesAdd(
    requestParameters: CrmApiActivitiesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateActivityResponse> {
    const response = await this.activitiesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List activities
   * List activities
   */
  async activitiesAllRaw(
    requestParameters: CrmApiActivitiesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetActivitiesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/activities`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetActivitiesResponseFromJSON(jsonValue)
    )
  }

  /**
   * List activities
   * List activities
   */
  async activitiesAll(
    requestParameters: CrmApiActivitiesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetActivitiesResponse> {
    const response = await this.activitiesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete activity
   * Delete activity
   */
  async activitiesDeleteRaw(
    requestParameters: CrmApiActivitiesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteActivityResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling activitiesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/activities/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteActivityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete activity
   * Delete activity
   */
  async activitiesDelete(
    requestParameters: CrmApiActivitiesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteActivityResponse> {
    const response = await this.activitiesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get activity
   * Get activity
   */
  async activitiesOneRaw(
    requestParameters: CrmApiActivitiesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetActivityResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling activitiesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/activities/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetActivityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get activity
   * Get activity
   */
  async activitiesOne(
    requestParameters: CrmApiActivitiesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetActivityResponse> {
    const response = await this.activitiesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update activity
   * Update activity
   */
  async activitiesUpdateRaw(
    requestParameters: CrmApiActivitiesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateActivityResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling activitiesUpdate.'
      )
    }

    if (requestParameters.activity === null || requestParameters.activity === undefined) {
      throw new runtime.RequiredError(
        'activity',
        'Required parameter requestParameters.activity was null or undefined when calling activitiesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/activities/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: ActivityToJSON(requestParameters.activity)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateActivityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update activity
   * Update activity
   */
  async activitiesUpdate(
    requestParameters: CrmApiActivitiesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateActivityResponse> {
    const response = await this.activitiesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create company
   * Create company
   */
  async companiesAddRaw(
    requestParameters: CrmApiCompaniesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateCompanyResponse>> {
    if (requestParameters.company === null || requestParameters.company === undefined) {
      throw new runtime.RequiredError(
        'company',
        'Required parameter requestParameters.company was null or undefined when calling companiesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/companies`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: CompanyToJSON(requestParameters.company)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateCompanyResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create company
   * Create company
   */
  async companiesAdd(
    requestParameters: CrmApiCompaniesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateCompanyResponse> {
    const response = await this.companiesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List companies
   * List companies
   */
  async companiesAllRaw(
    requestParameters: CrmApiCompaniesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCompaniesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/companies`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetCompaniesResponseFromJSON(jsonValue)
    )
  }

  /**
   * List companies
   * List companies
   */
  async companiesAll(
    requestParameters: CrmApiCompaniesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetCompaniesResponse> {
    const response = await this.companiesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete company
   * Delete company
   */
  async companiesDeleteRaw(
    requestParameters: CrmApiCompaniesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteCompanyResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling companiesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/companies/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteCompanyResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete company
   * Delete company
   */
  async companiesDelete(
    requestParameters: CrmApiCompaniesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteCompanyResponse> {
    const response = await this.companiesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get company
   * Get company
   */
  async companiesOneRaw(
    requestParameters: CrmApiCompaniesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCompanyResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling companiesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/companies/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetCompanyResponseFromJSON(jsonValue))
  }

  /**
   * Get company
   * Get company
   */
  async companiesOne(
    requestParameters: CrmApiCompaniesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetCompanyResponse> {
    const response = await this.companiesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update company
   * Update company
   */
  async companiesUpdateRaw(
    requestParameters: CrmApiCompaniesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateCompanyResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling companiesUpdate.'
      )
    }

    if (requestParameters.company === null || requestParameters.company === undefined) {
      throw new runtime.RequiredError(
        'company',
        'Required parameter requestParameters.company was null or undefined when calling companiesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/companies/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: CompanyToJSON(requestParameters.company)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateCompanyResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update company
   * Update company
   */
  async companiesUpdate(
    requestParameters: CrmApiCompaniesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateCompanyResponse> {
    const response = await this.companiesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create contact
   * Create contact
   */
  async contactsAddRaw(
    requestParameters: CrmApiContactsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateContactResponse>> {
    if (requestParameters.contact === null || requestParameters.contact === undefined) {
      throw new runtime.RequiredError(
        'contact',
        'Required parameter requestParameters.contact was null or undefined when calling contactsAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/contacts`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: ContactToJSON(requestParameters.contact)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateContactResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create contact
   * Create contact
   */
  async contactsAdd(
    requestParameters: CrmApiContactsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateContactResponse> {
    const response = await this.contactsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List contacts
   * List contacts
   */
  async contactsAllRaw(
    requestParameters: CrmApiContactsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetContactsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/contacts`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetContactsResponseFromJSON(jsonValue)
    )
  }

  /**
   * List contacts
   * List contacts
   */
  async contactsAll(
    requestParameters: CrmApiContactsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetContactsResponse> {
    const response = await this.contactsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete contact
   * Delete contact
   */
  async contactsDeleteRaw(
    requestParameters: CrmApiContactsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteContactResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling contactsDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/contacts/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteContactResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete contact
   * Delete contact
   */
  async contactsDelete(
    requestParameters: CrmApiContactsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteContactResponse> {
    const response = await this.contactsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get contact
   * Get contact
   */
  async contactsOneRaw(
    requestParameters: CrmApiContactsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetContactResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling contactsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/contacts/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetContactResponseFromJSON(jsonValue))
  }

  /**
   * Get contact
   * Get contact
   */
  async contactsOne(
    requestParameters: CrmApiContactsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetContactResponse> {
    const response = await this.contactsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update contact
   * Update contact
   */
  async contactsUpdateRaw(
    requestParameters: CrmApiContactsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateContactResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling contactsUpdate.'
      )
    }

    if (requestParameters.contact === null || requestParameters.contact === undefined) {
      throw new runtime.RequiredError(
        'contact',
        'Required parameter requestParameters.contact was null or undefined when calling contactsUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/contacts/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: ContactToJSON(requestParameters.contact)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateContactResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update contact
   * Update contact
   */
  async contactsUpdate(
    requestParameters: CrmApiContactsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateContactResponse> {
    const response = await this.contactsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create lead
   * Create lead
   */
  async leadsAddRaw(
    requestParameters: CrmApiLeadsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateLeadResponse>> {
    if (requestParameters.lead === null || requestParameters.lead === undefined) {
      throw new runtime.RequiredError(
        'lead',
        'Required parameter requestParameters.lead was null or undefined when calling leadsAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/leads`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: LeadToJSON(requestParameters.lead)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => CreateLeadResponseFromJSON(jsonValue))
  }

  /**
   * Create lead
   * Create lead
   */
  async leadsAdd(
    requestParameters: CrmApiLeadsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateLeadResponse> {
    const response = await this.leadsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List leads
   * List leads
   */
  async leadsAllRaw(
    requestParameters: CrmApiLeadsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetLeadsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/leads`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetLeadsResponseFromJSON(jsonValue))
  }

  /**
   * List leads
   * List leads
   */
  async leadsAll(
    requestParameters: CrmApiLeadsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetLeadsResponse> {
    const response = await this.leadsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete lead
   * Delete lead
   */
  async leadsDeleteRaw(
    requestParameters: CrmApiLeadsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteLeadResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling leadsDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/leads/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => DeleteLeadResponseFromJSON(jsonValue))
  }

  /**
   * Delete lead
   * Delete lead
   */
  async leadsDelete(
    requestParameters: CrmApiLeadsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteLeadResponse> {
    const response = await this.leadsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get lead
   * Get lead
   */
  async leadsOneRaw(
    requestParameters: CrmApiLeadsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetLeadResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling leadsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/leads/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetLeadResponseFromJSON(jsonValue))
  }

  /**
   * Get lead
   * Get lead
   */
  async leadsOne(
    requestParameters: CrmApiLeadsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetLeadResponse> {
    const response = await this.leadsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update lead
   * Update lead
   */
  async leadsUpdateRaw(
    requestParameters: CrmApiLeadsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateLeadResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling leadsUpdate.'
      )
    }

    if (requestParameters.lead === null || requestParameters.lead === undefined) {
      throw new runtime.RequiredError(
        'lead',
        'Required parameter requestParameters.lead was null or undefined when calling leadsUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/leads/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: LeadToJSON(requestParameters.lead)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => UpdateLeadResponseFromJSON(jsonValue))
  }

  /**
   * Update lead
   * Update lead
   */
  async leadsUpdate(
    requestParameters: CrmApiLeadsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateLeadResponse> {
    const response = await this.leadsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create note
   * Create note
   */
  async notesAddRaw(
    requestParameters: CrmApiNotesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateNoteResponse>> {
    if (requestParameters.note === null || requestParameters.note === undefined) {
      throw new runtime.RequiredError(
        'note',
        'Required parameter requestParameters.note was null or undefined when calling notesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/notes`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: NoteToJSON(requestParameters.note)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => CreateNoteResponseFromJSON(jsonValue))
  }

  /**
   * Create note
   * Create note
   */
  async notesAdd(
    requestParameters: CrmApiNotesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateNoteResponse> {
    const response = await this.notesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List notes
   * List notes
   */
  async notesAllRaw(
    requestParameters: CrmApiNotesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetNotesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/notes`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetNotesResponseFromJSON(jsonValue))
  }

  /**
   * List notes
   * List notes
   */
  async notesAll(
    requestParameters: CrmApiNotesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetNotesResponse> {
    const response = await this.notesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete note
   * Delete note
   */
  async notesDeleteRaw(
    requestParameters: CrmApiNotesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteNoteResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling notesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/notes/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => DeleteNoteResponseFromJSON(jsonValue))
  }

  /**
   * Delete note
   * Delete note
   */
  async notesDelete(
    requestParameters: CrmApiNotesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteNoteResponse> {
    const response = await this.notesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get note
   * Get note
   */
  async notesOneRaw(
    requestParameters: CrmApiNotesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetNoteResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling notesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/notes/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetNoteResponseFromJSON(jsonValue))
  }

  /**
   * Get note
   * Get note
   */
  async notesOne(
    requestParameters: CrmApiNotesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetNoteResponse> {
    const response = await this.notesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update note
   * Update note
   */
  async notesUpdateRaw(
    requestParameters: CrmApiNotesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateNoteResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling notesUpdate.'
      )
    }

    if (requestParameters.note === null || requestParameters.note === undefined) {
      throw new runtime.RequiredError(
        'note',
        'Required parameter requestParameters.note was null or undefined when calling notesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/notes/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: NoteToJSON(requestParameters.note)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => UpdateNoteResponseFromJSON(jsonValue))
  }

  /**
   * Update note
   * Update note
   */
  async notesUpdate(
    requestParameters: CrmApiNotesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateNoteResponse> {
    const response = await this.notesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create opportunity
   * Create opportunity
   */
  async opportunitiesAddRaw(
    requestParameters: CrmApiOpportunitiesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateOpportunityResponse>> {
    if (requestParameters.opportunity === null || requestParameters.opportunity === undefined) {
      throw new runtime.RequiredError(
        'opportunity',
        'Required parameter requestParameters.opportunity was null or undefined when calling opportunitiesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/opportunities`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: OpportunityToJSON(requestParameters.opportunity)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateOpportunityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create opportunity
   * Create opportunity
   */
  async opportunitiesAdd(
    requestParameters: CrmApiOpportunitiesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateOpportunityResponse> {
    const response = await this.opportunitiesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List opportunities
   * List opportunities
   */
  async opportunitiesAllRaw(
    requestParameters: CrmApiOpportunitiesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetOpportunitiesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/opportunities`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetOpportunitiesResponseFromJSON(jsonValue)
    )
  }

  /**
   * List opportunities
   * List opportunities
   */
  async opportunitiesAll(
    requestParameters: CrmApiOpportunitiesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetOpportunitiesResponse> {
    const response = await this.opportunitiesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete opportunity
   * Delete opportunity
   */
  async opportunitiesDeleteRaw(
    requestParameters: CrmApiOpportunitiesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteOpportunityResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling opportunitiesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/opportunities/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteOpportunityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete opportunity
   * Delete opportunity
   */
  async opportunitiesDelete(
    requestParameters: CrmApiOpportunitiesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteOpportunityResponse> {
    const response = await this.opportunitiesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get opportunity
   * Get opportunity
   */
  async opportunitiesOneRaw(
    requestParameters: CrmApiOpportunitiesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetOpportunityResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling opportunitiesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/opportunities/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetOpportunityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get opportunity
   * Get opportunity
   */
  async opportunitiesOne(
    requestParameters: CrmApiOpportunitiesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetOpportunityResponse> {
    const response = await this.opportunitiesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update opportunity
   * Update opportunity
   */
  async opportunitiesUpdateRaw(
    requestParameters: CrmApiOpportunitiesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateOpportunityResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling opportunitiesUpdate.'
      )
    }

    if (requestParameters.opportunity === null || requestParameters.opportunity === undefined) {
      throw new runtime.RequiredError(
        'opportunity',
        'Required parameter requestParameters.opportunity was null or undefined when calling opportunitiesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/opportunities/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: OpportunityToJSON(requestParameters.opportunity)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateOpportunityResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update opportunity
   * Update opportunity
   */
  async opportunitiesUpdate(
    requestParameters: CrmApiOpportunitiesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateOpportunityResponse> {
    const response = await this.opportunitiesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create pipeline
   * Create pipeline
   */
  async pipelinesAddRaw(
    requestParameters: CrmApiPipelinesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreatePipelineResponse>> {
    if (requestParameters.pipeline === null || requestParameters.pipeline === undefined) {
      throw new runtime.RequiredError(
        'pipeline',
        'Required parameter requestParameters.pipeline was null or undefined when calling pipelinesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/pipelines`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: PipelineToJSON(requestParameters.pipeline)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreatePipelineResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create pipeline
   * Create pipeline
   */
  async pipelinesAdd(
    requestParameters: CrmApiPipelinesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreatePipelineResponse> {
    const response = await this.pipelinesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List pipelines
   * List pipelines
   */
  async pipelinesAllRaw(
    requestParameters: CrmApiPipelinesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPipelinesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/pipelines`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetPipelinesResponseFromJSON(jsonValue)
    )
  }

  /**
   * List pipelines
   * List pipelines
   */
  async pipelinesAll(
    requestParameters: CrmApiPipelinesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetPipelinesResponse> {
    const response = await this.pipelinesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete pipeline
   * Delete pipeline
   */
  async pipelinesDeleteRaw(
    requestParameters: CrmApiPipelinesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeletePipelineResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling pipelinesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/pipelines/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeletePipelineResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete pipeline
   * Delete pipeline
   */
  async pipelinesDelete(
    requestParameters: CrmApiPipelinesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeletePipelineResponse> {
    const response = await this.pipelinesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get pipeline
   * Get pipeline
   */
  async pipelinesOneRaw(
    requestParameters: CrmApiPipelinesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPipelineResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling pipelinesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/pipelines/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetPipelineResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get pipeline
   * Get pipeline
   */
  async pipelinesOne(
    requestParameters: CrmApiPipelinesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetPipelineResponse> {
    const response = await this.pipelinesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update pipeline
   * Update pipeline
   */
  async pipelinesUpdateRaw(
    requestParameters: CrmApiPipelinesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdatePipelineResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling pipelinesUpdate.'
      )
    }

    if (requestParameters.pipeline === null || requestParameters.pipeline === undefined) {
      throw new runtime.RequiredError(
        'pipeline',
        'Required parameter requestParameters.pipeline was null or undefined when calling pipelinesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/pipelines/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: PipelineToJSON(requestParameters.pipeline)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdatePipelineResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update pipeline
   * Update pipeline
   */
  async pipelinesUpdate(
    requestParameters: CrmApiPipelinesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdatePipelineResponse> {
    const response = await this.pipelinesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create user
   * Create user
   */
  async usersAddRaw(
    requestParameters: CrmApiUsersAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateUserResponse>> {
    if (requestParameters.user === null || requestParameters.user === undefined) {
      throw new runtime.RequiredError(
        'user',
        'Required parameter requestParameters.user was null or undefined when calling usersAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/users`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: UserToJSON(requestParameters.user)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => CreateUserResponseFromJSON(jsonValue))
  }

  /**
   * Create user
   * Create user
   */
  async usersAdd(
    requestParameters: CrmApiUsersAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateUserResponse> {
    const response = await this.usersAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List users
   * List users
   */
  async usersAllRaw(
    requestParameters: CrmApiUsersAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetUsersResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/users`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetUsersResponseFromJSON(jsonValue))
  }

  /**
   * List users
   * List users
   */
  async usersAll(
    requestParameters: CrmApiUsersAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetUsersResponse> {
    const response = await this.usersAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete user
   * Delete user
   */
  async usersDeleteRaw(
    requestParameters: CrmApiUsersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteUserResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling usersDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/users/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => DeleteUserResponseFromJSON(jsonValue))
  }

  /**
   * Delete user
   * Delete user
   */
  async usersDelete(
    requestParameters: CrmApiUsersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteUserResponse> {
    const response = await this.usersDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get user
   * Get user
   */
  async usersOneRaw(
    requestParameters: CrmApiUsersOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetUserResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling usersOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/users/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetUserResponseFromJSON(jsonValue))
  }

  /**
   * Get user
   * Get user
   */
  async usersOne(
    requestParameters: CrmApiUsersOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetUserResponse> {
    const response = await this.usersOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update user
   * Update user
   */
  async usersUpdateRaw(
    requestParameters: CrmApiUsersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateUserResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling usersUpdate.'
      )
    }

    if (requestParameters.user === null || requestParameters.user === undefined) {
      throw new runtime.RequiredError(
        'user',
        'Required parameter requestParameters.user was null or undefined when calling usersUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/crm/users/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: UserToJSON(requestParameters.user)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => UpdateUserResponseFromJSON(jsonValue))
  }

  /**
   * Update user
   * Update user
   */
  async usersUpdate(
    requestParameters: CrmApiUsersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateUserResponse> {
    const response = await this.usersUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }
}
