/* 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 {
  AccountingDepartment,
  AccountingDepartmentsFilter,
  AccountingDepartmentToJSON,
  AccountingLocation,
  AccountingLocationsFilter,
  AccountingLocationToJSON,
  AgedReportFilter,
  AttachmentReferenceType,
  BalanceSheetFilter,
  Bill,
  BillPayment,
  BillPaymentToJSON,
  BillsFilter,
  BillsSort,
  BillToJSON,
  CreateAccountingDepartmentResponse,
  CreateAccountingDepartmentResponseFromJSON,
  CreateAccountingLocationResponse,
  CreateAccountingLocationResponseFromJSON,
  CreateBillPaymentResponse,
  CreateBillPaymentResponseFromJSON,
  CreateBillResponse,
  CreateBillResponseFromJSON,
  CreateCreditNoteResponse,
  CreateCreditNoteResponseFromJSON,
  CreateCustomerResponse,
  CreateCustomerResponseFromJSON,
  CreateExpenseResponse,
  CreateExpenseResponseFromJSON,
  CreateInvoiceItemResponse,
  CreateInvoiceItemResponseFromJSON,
  CreateInvoiceResponse,
  CreateInvoiceResponseFromJSON,
  CreateJournalEntryResponse,
  CreateJournalEntryResponseFromJSON,
  CreateLedgerAccountResponse,
  CreateLedgerAccountResponseFromJSON,
  CreatePaymentResponse,
  CreatePaymentResponseFromJSON,
  CreatePurchaseOrderResponse,
  CreatePurchaseOrderResponseFromJSON,
  CreateSubsidiaryResponse,
  CreateSubsidiaryResponseFromJSON,
  CreateSupplierResponse,
  CreateSupplierResponseFromJSON,
  CreateTaxRateResponse,
  CreateTaxRateResponseFromJSON,
  CreateTrackingCategoryResponse,
  CreateTrackingCategoryResponseFromJSON,
  CreditNote,
  CreditNotesFilter,
  CreditNotesSort,
  CreditNoteToJSON,
  Customer,
  CustomersFilter,
  CustomersSort,
  CustomerToJSON,
  DeleteAccountingDepartmentResponse,
  DeleteAccountingDepartmentResponseFromJSON,
  DeleteAccountingLocationResponse,
  DeleteAccountingLocationResponseFromJSON,
  DeleteAttachmentResponse,
  DeleteAttachmentResponseFromJSON,
  DeleteBillPaymentResponse,
  DeleteBillPaymentResponseFromJSON,
  DeleteBillResponse,
  DeleteBillResponseFromJSON,
  DeleteCreditNoteResponse,
  DeleteCreditNoteResponseFromJSON,
  DeleteCustomerResponse,
  DeleteCustomerResponseFromJSON,
  DeleteExpenseResponse,
  DeleteExpenseResponseFromJSON,
  DeleteInvoiceResponse,
  DeleteInvoiceResponseFromJSON,
  DeleteJournalEntryResponse,
  DeleteJournalEntryResponseFromJSON,
  DeleteLedgerAccountResponse,
  DeleteLedgerAccountResponseFromJSON,
  DeletePaymentResponse,
  DeletePaymentResponseFromJSON,
  DeletePurchaseOrderResponse,
  DeletePurchaseOrderResponseFromJSON,
  DeleteSubsidiaryResponse,
  DeleteSubsidiaryResponseFromJSON,
  DeleteSupplierResponse,
  DeleteSupplierResponseFromJSON,
  DeleteTaxRateResponse,
  DeleteTaxRateResponseFromJSON,
  DeleteTrackingCategoryResponse,
  DeleteTrackingCategoryResponseFromJSON,
  Expense,
  ExpenseToJSON,
  GetAccountingDepartmentResponse,
  GetAccountingDepartmentResponseFromJSON,
  GetAccountingDepartmentsResponse,
  GetAccountingDepartmentsResponseFromJSON,
  GetAccountingLocationResponse,
  GetAccountingLocationResponseFromJSON,
  GetAccountingLocationsResponse,
  GetAccountingLocationsResponseFromJSON,
  GetAgedCreditorsResponse,
  GetAgedCreditorsResponseFromJSON,
  GetAgedDebtorsResponse,
  GetAgedDebtorsResponseFromJSON,
  GetAttachmentResponse,
  GetAttachmentResponseFromJSON,
  GetAttachmentsResponse,
  GetAttachmentsResponseFromJSON,
  GetBalanceSheetResponse,
  GetBalanceSheetResponseFromJSON,
  GetBillPaymentResponse,
  GetBillPaymentResponseFromJSON,
  GetBillPaymentsResponse,
  GetBillPaymentsResponseFromJSON,
  GetBillResponse,
  GetBillResponseFromJSON,
  GetBillsResponse,
  GetBillsResponseFromJSON,
  GetCompanyInfoResponse,
  GetCompanyInfoResponseFromJSON,
  GetCreditNoteResponse,
  GetCreditNoteResponseFromJSON,
  GetCreditNotesResponse,
  GetCreditNotesResponseFromJSON,
  GetCustomerResponse,
  GetCustomerResponseFromJSON,
  GetCustomersResponse,
  GetCustomersResponseFromJSON,
  GetExpenseResponse,
  GetExpenseResponseFromJSON,
  GetExpensesResponse,
  GetExpensesResponseFromJSON,
  GetInvoiceItemResponse,
  GetInvoiceItemResponseFromJSON,
  GetInvoiceItemsResponse,
  GetInvoiceItemsResponseFromJSON,
  GetInvoiceResponse,
  GetInvoiceResponseFromJSON,
  GetInvoicesResponse,
  GetInvoicesResponseFromJSON,
  GetJournalEntriesResponse,
  GetJournalEntriesResponseFromJSON,
  GetJournalEntryResponse,
  GetJournalEntryResponseFromJSON,
  GetLedgerAccountResponse,
  GetLedgerAccountResponseFromJSON,
  GetLedgerAccountsResponse,
  GetLedgerAccountsResponseFromJSON,
  GetPaymentResponse,
  GetPaymentResponseFromJSON,
  GetPaymentsResponse,
  GetPaymentsResponseFromJSON,
  GetProfitAndLossResponse,
  GetProfitAndLossResponseFromJSON,
  GetPurchaseOrderResponse,
  GetPurchaseOrderResponseFromJSON,
  GetPurchaseOrdersResponse,
  GetPurchaseOrdersResponseFromJSON,
  GetSubsidiariesResponse,
  GetSubsidiariesResponseFromJSON,
  GetSubsidiaryResponse,
  GetSubsidiaryResponseFromJSON,
  GetSupplierResponse,
  GetSupplierResponseFromJSON,
  GetSuppliersResponse,
  GetSuppliersResponseFromJSON,
  GetTaxRateResponse,
  GetTaxRateResponseFromJSON,
  GetTaxRatesResponse,
  GetTaxRatesResponseFromJSON,
  GetTrackingCategoriesResponse,
  GetTrackingCategoriesResponseFromJSON,
  GetTrackingCategoryResponse,
  GetTrackingCategoryResponseFromJSON,
  Invoice,
  InvoiceItem,
  InvoiceItemFilter,
  InvoiceItemsFilter,
  InvoiceItemsSort,
  InvoiceItemToJSON,
  InvoicesFilter,
  InvoicesSort,
  InvoiceToJSON,
  JournalEntriesFilter,
  JournalEntriesSort,
  JournalEntry,
  JournalEntryToJSON,
  LedgerAccount,
  LedgerAccountsFilter,
  LedgerAccountsSort,
  LedgerAccountToJSON,
  PassThroughQuery,
  Payment,
  PaymentsFilter,
  PaymentsSort,
  PaymentToJSON,
  ProfitAndLossFilter,
  PurchaseOrder,
  PurchaseOrdersFilter,
  PurchaseOrdersSort,
  PurchaseOrderToJSON,
  Subsidiary,
  SubsidiaryToJSON,
  Supplier,
  SuppliersFilter,
  SuppliersSort,
  SupplierToJSON,
  TaxRate,
  TaxRatesFilter,
  TaxRateToJSON,
  TrackingCategory,
  TrackingCategoryToJSON,
  UpdateAccountingDepartmentResponse,
  UpdateAccountingDepartmentResponseFromJSON,
  UpdateAccountingLocationResponse,
  UpdateAccountingLocationResponseFromJSON,
  UpdateBillPaymentResponse,
  UpdateBillPaymentResponseFromJSON,
  UpdateBillResponse,
  UpdateBillResponseFromJSON,
  UpdateCreditNoteResponse,
  UpdateCreditNoteResponseFromJSON,
  UpdateCustomerResponse,
  UpdateCustomerResponseFromJSON,
  UpdateExpenseResponse,
  UpdateExpenseResponseFromJSON,
  UpdateInvoiceItemsResponse,
  UpdateInvoiceItemsResponseFromJSON,
  UpdateInvoiceResponse,
  UpdateInvoiceResponseFromJSON,
  UpdateJournalEntryResponse,
  UpdateJournalEntryResponseFromJSON,
  UpdateLedgerAccountResponse,
  UpdateLedgerAccountResponseFromJSON,
  UpdatePaymentResponse,
  UpdatePaymentResponseFromJSON,
  UpdatePurchaseOrderResponse,
  UpdatePurchaseOrderResponseFromJSON,
  UpdateSubsidiaryResponse,
  UpdateSubsidiaryResponseFromJSON,
  UpdateSupplierResponse,
  UpdateSupplierResponseFromJSON,
  UpdateTaxRateResponse,
  UpdateTaxRateResponseFromJSON,
  UpdateTrackingCategoryResponse,
  UpdateTrackingCategoryResponseFromJSON
} from '../models'
import * as runtime from '../runtime'

export interface AccountingApiAgedCreditorsOneRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  filter?: AgedReportFilter
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface AccountingApiAgedDebtorsOneRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  filter?: AgedReportFilter
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface AccountingApiAttachmentsAllRequest {
  referenceType: AttachmentReferenceType
  referenceId: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  fields?: string | null
}

export interface AccountingApiAttachmentsDeleteRequest {
  referenceType: AttachmentReferenceType
  referenceId: string
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiAttachmentsDownloadRequest {
  referenceType: AttachmentReferenceType
  referenceId: string
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  fields?: string | null
}

export interface AccountingApiAttachmentsOneRequest {
  referenceType: AttachmentReferenceType
  referenceId: string
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface AccountingApiBalanceSheetOneRequest {
  consumerId?: string
  appId?: string
  serviceId?: string
  passThrough?: PassThroughQuery
  filter?: BalanceSheetFilter
  raw?: boolean
}

export interface AccountingApiBillPaymentsAddRequest {
  billPayment: BillPayment
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiBillPaymentsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: PaymentsFilter
  sort?: PaymentsSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiBillPaymentsUpdateRequest {
  id: string
  billPayment: BillPayment
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiBillsAddRequest {
  bill: Bill
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiBillsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: BillsFilter
  sort?: BillsSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiBillsUpdateRequest {
  id: string
  bill: Bill
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

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

export interface AccountingApiCreditNotesAddRequest {
  creditNote: CreditNote
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiCreditNotesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: CreditNotesFilter
  sort?: CreditNotesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiCreditNotesUpdateRequest {
  id: string
  creditNote: CreditNote
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiCustomersAddRequest {
  customer: Customer
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiCustomersAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: CustomersFilter
  sort?: CustomersSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiCustomersUpdateRequest {
  id: string
  customer: Customer
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiDepartmentsAddRequest {
  department: AccountingDepartment
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiDepartmentsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  fields?: string | null
  filter?: AccountingDepartmentsFilter
}

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

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

export interface AccountingApiDepartmentsUpdateRequest {
  id: string
  department: AccountingDepartment
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiExpensesAddRequest {
  expense: Expense
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiExpensesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
}

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

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

export interface AccountingApiExpensesUpdateRequest {
  id: string
  expense: Expense
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiInvoiceItemsAddRequest {
  invoiceItem: InvoiceItem
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiInvoiceItemsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: InvoiceItemsFilter
  sort?: InvoiceItemsSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiInvoiceItemsUpdateRequest {
  id: string
  invoiceItem: InvoiceItem
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiInvoicesAddRequest {
  invoice: Invoice
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiInvoicesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: InvoicesFilter
  sort?: InvoicesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiInvoicesUpdateRequest {
  id: string
  invoice: Invoice
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiJournalEntriesAddRequest {
  journalEntry: JournalEntry
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiJournalEntriesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: JournalEntriesFilter
  sort?: JournalEntriesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiJournalEntriesUpdateRequest {
  id: string
  journalEntry: JournalEntry
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiLedgerAccountsAddRequest {
  ledgerAccount: LedgerAccount
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiLedgerAccountsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: LedgerAccountsFilter
  sort?: LedgerAccountsSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiLedgerAccountsUpdateRequest {
  id: string
  ledgerAccount: LedgerAccount
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiLocationsAddRequest {
  location: AccountingLocation
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiLocationsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  fields?: string | null
  filter?: AccountingLocationsFilter
}

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

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

export interface AccountingApiLocationsUpdateRequest {
  id: string
  location: AccountingLocation
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiPaymentsAddRequest {
  payment: Payment
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiPaymentsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: PaymentsFilter
  sort?: PaymentsSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiPaymentsUpdateRequest {
  id: string
  payment: Payment
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiProfitAndLossOneRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  filter?: ProfitAndLossFilter
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface AccountingApiPurchaseOrdersAddRequest {
  purchaseOrder: PurchaseOrder
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiPurchaseOrdersAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  passThrough?: PassThroughQuery
  limit?: number
  filter?: PurchaseOrdersFilter
  sort?: PurchaseOrdersSort
}

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

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

export interface AccountingApiPurchaseOrdersUpdateRequest {
  id: string
  purchaseOrder: PurchaseOrder
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiSubsidiariesAddRequest {
  subsidiary: Subsidiary
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

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

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

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

export interface AccountingApiSubsidiariesUpdateRequest {
  id: string
  subsidiary: Subsidiary
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiSuppliersAddRequest {
  supplier: Supplier
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface AccountingApiSuppliersAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: SuppliersFilter
  sort?: SuppliersSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

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

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

export interface AccountingApiSuppliersUpdateRequest {
  id: string
  supplier: Supplier
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiTaxRatesAddRequest {
  taxRate: TaxRate
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

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

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

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

export interface AccountingApiTaxRatesUpdateRequest {
  id: string
  taxRate: TaxRate
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface AccountingApiTrackingCategoriesAddRequest {
  trackingCategory: TrackingCategory
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

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

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

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

export interface AccountingApiTrackingCategoriesUpdateRequest {
  id: string
  trackingCategory: TrackingCategory
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

/**
 *
 */
export class AccountingApi extends runtime.BaseAPI {
  /**
   * Get Aged Creditors
   * Get Aged Creditors
   */
  async agedCreditorsOneRaw(
    requestParameters: AccountingApiAgedCreditorsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAgedCreditorsResponse>> {
    const queryParameters: any = {}

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

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

    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: `/accounting/aged-creditors`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Aged Creditors
   * Get Aged Creditors
   */
  async agedCreditorsOne(
    requestParameters: AccountingApiAgedCreditorsOneRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetAgedCreditorsResponse> {
    const response = await this.agedCreditorsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Aged Debtors
   * Get Aged Debtors
   */
  async agedDebtorsOneRaw(
    requestParameters: AccountingApiAgedDebtorsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAgedDebtorsResponse>> {
    const queryParameters: any = {}

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

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

    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: `/accounting/aged-debtors`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Aged Debtors
   * Get Aged Debtors
   */
  async agedDebtorsOne(
    requestParameters: AccountingApiAgedDebtorsOneRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetAgedDebtorsResponse> {
    const response = await this.agedDebtorsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Attachments
   * List Attachments
   */
  async attachmentsAllRaw(
    requestParameters: AccountingApiAttachmentsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAttachmentsResponse>> {
    if (requestParameters.referenceType === null || requestParameters.referenceType === undefined) {
      throw new runtime.RequiredError(
        'referenceType',
        'Required parameter requestParameters.referenceType was null or undefined when calling attachmentsAll.'
      )
    }

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

    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.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: `/accounting/attachments/{reference_type}/{reference_id}`
          .replace(
            `{${'reference_type'}}`,
            encodeURIComponent(String(requestParameters.referenceType))
          )
          .replace(
            `{${'reference_id'}}`,
            encodeURIComponent(String(requestParameters.referenceId))
          ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Attachments
   * List Attachments
   */
  async attachmentsAll(
    requestParameters: AccountingApiAttachmentsAllRequest,
    initOverrides?: RequestInit
  ): Promise<GetAttachmentsResponse> {
    const response = await this.attachmentsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Attachment
   * Delete Attachment
   */
  async attachmentsDeleteRaw(
    requestParameters: AccountingApiAttachmentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteAttachmentResponse>> {
    if (requestParameters.referenceType === null || requestParameters.referenceType === undefined) {
      throw new runtime.RequiredError(
        'referenceType',
        'Required parameter requestParameters.referenceType was null or undefined when calling attachmentsDelete.'
      )
    }

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

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

    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: `/accounting/attachments/{reference_type}/{reference_id}/{id}`
          .replace(
            `{${'reference_type'}}`,
            encodeURIComponent(String(requestParameters.referenceType))
          )
          .replace(`{${'reference_id'}}`, encodeURIComponent(String(requestParameters.referenceId)))
          .replace(`{${'id'}}`, encodeURIComponent(String(requestParameters.id))),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Attachment
   * Delete Attachment
   */
  async attachmentsDelete(
    requestParameters: AccountingApiAttachmentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteAttachmentResponse> {
    const response = await this.attachmentsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Download Attachment
   * Download Attachment
   */
  async attachmentsDownloadRaw(
    requestParameters: AccountingApiAttachmentsDownloadRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<Blob>> {
    if (requestParameters.referenceType === null || requestParameters.referenceType === undefined) {
      throw new runtime.RequiredError(
        'referenceType',
        'Required parameter requestParameters.referenceType was null or undefined when calling attachmentsDownload.'
      )
    }

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

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

    const queryParameters: any = {}

    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: `/accounting/attachments/{reference_type}/{reference_id}/{id}/download`
          .replace(
            `{${'reference_type'}}`,
            encodeURIComponent(String(requestParameters.referenceType))
          )
          .replace(`{${'reference_id'}}`, encodeURIComponent(String(requestParameters.referenceId)))
          .replace(`{${'id'}}`, encodeURIComponent(String(requestParameters.id))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.BlobApiResponse(response)
  }

  /**
   * Download Attachment
   * Download Attachment
   */
  async attachmentsDownload(
    requestParameters: AccountingApiAttachmentsDownloadRequest,
    initOverrides?: RequestInit
  ): Promise<Blob> {
    const response = await this.attachmentsDownloadRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Attachment
   * Get Attachment
   */
  async attachmentsOneRaw(
    requestParameters: AccountingApiAttachmentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAttachmentResponse>> {
    if (requestParameters.referenceType === null || requestParameters.referenceType === undefined) {
      throw new runtime.RequiredError(
        'referenceType',
        'Required parameter requestParameters.referenceType was null or undefined when calling attachmentsOne.'
      )
    }

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

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

    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: `/accounting/attachments/{reference_type}/{reference_id}/{id}`
          .replace(
            `{${'reference_type'}}`,
            encodeURIComponent(String(requestParameters.referenceType))
          )
          .replace(`{${'reference_id'}}`, encodeURIComponent(String(requestParameters.referenceId)))
          .replace(`{${'id'}}`, encodeURIComponent(String(requestParameters.id))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Attachment
   * Get Attachment
   */
  async attachmentsOne(
    requestParameters: AccountingApiAttachmentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetAttachmentResponse> {
    const response = await this.attachmentsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get BalanceSheet
   * Get BalanceSheet
   */
  async balanceSheetOneRaw(
    requestParameters: AccountingApiBalanceSheetOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetBalanceSheetResponse>> {
    const queryParameters: any = {}

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

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

    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: `/accounting/balance-sheet`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get BalanceSheet
   * Get BalanceSheet
   */
  async balanceSheetOne(
    requestParameters: AccountingApiBalanceSheetOneRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetBalanceSheetResponse> {
    const response = await this.balanceSheetOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Bill Payment
   * Create Bill Payment
   */
  async billPaymentsAddRaw(
    requestParameters: AccountingApiBillPaymentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateBillPaymentResponse>> {
    if (requestParameters.billPayment === null || requestParameters.billPayment === undefined) {
      throw new runtime.RequiredError(
        'billPayment',
        'Required parameter requestParameters.billPayment was null or undefined when calling billPaymentsAdd.'
      )
    }

    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: `/accounting/bill-payments`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: BillPaymentToJSON(requestParameters.billPayment)
      },
      initOverrides
    )

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

  /**
   * Create Bill Payment
   * Create Bill Payment
   */
  async billPaymentsAdd(
    requestParameters: AccountingApiBillPaymentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateBillPaymentResponse> {
    const response = await this.billPaymentsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Bill Payments
   * List Bill Payments
   */
  async billPaymentsAllRaw(
    requestParameters: AccountingApiBillPaymentsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetBillPaymentsResponse>> {
    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: `/accounting/bill-payments`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Bill Payments
   * List Bill Payments
   */
  async billPaymentsAll(
    requestParameters: AccountingApiBillPaymentsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetBillPaymentsResponse> {
    const response = await this.billPaymentsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Bill Payment
   * Delete Bill Payment
   */
  async billPaymentsDeleteRaw(
    requestParameters: AccountingApiBillPaymentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteBillPaymentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling billPaymentsDelete.'
      )
    }

    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: `/accounting/bill-payments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Bill Payment
   * Delete Bill Payment
   */
  async billPaymentsDelete(
    requestParameters: AccountingApiBillPaymentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteBillPaymentResponse> {
    const response = await this.billPaymentsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Bill Payment
   * Get Bill Payment
   */
  async billPaymentsOneRaw(
    requestParameters: AccountingApiBillPaymentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetBillPaymentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling billPaymentsOne.'
      )
    }

    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: `/accounting/bill-payments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Bill Payment
   * Get Bill Payment
   */
  async billPaymentsOne(
    requestParameters: AccountingApiBillPaymentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetBillPaymentResponse> {
    const response = await this.billPaymentsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Bill Payment
   * Update Bill Payment
   */
  async billPaymentsUpdateRaw(
    requestParameters: AccountingApiBillPaymentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateBillPaymentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling billPaymentsUpdate.'
      )
    }

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

    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: `/accounting/bill-payments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: BillPaymentToJSON(requestParameters.billPayment)
      },
      initOverrides
    )

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

  /**
   * Update Bill Payment
   * Update Bill Payment
   */
  async billPaymentsUpdate(
    requestParameters: AccountingApiBillPaymentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateBillPaymentResponse> {
    const response = await this.billPaymentsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Bill
   * Create Bill
   */
  async billsAddRaw(
    requestParameters: AccountingApiBillsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateBillResponse>> {
    if (requestParameters.bill === null || requestParameters.bill === undefined) {
      throw new runtime.RequiredError(
        'bill',
        'Required parameter requestParameters.bill was null or undefined when calling billsAdd.'
      )
    }

    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: `/accounting/bills`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: BillToJSON(requestParameters.bill)
      },
      initOverrides
    )

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

  /**
   * Create Bill
   * Create Bill
   */
  async billsAdd(
    requestParameters: AccountingApiBillsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateBillResponse> {
    const response = await this.billsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Bills
   * List Bills
   */
  async billsAllRaw(
    requestParameters: AccountingApiBillsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetBillsResponse>> {
    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: `/accounting/bills`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Bills
   * List Bills
   */
  async billsAll(
    requestParameters: AccountingApiBillsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetBillsResponse> {
    const response = await this.billsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Bill
   * Delete Bill
   */
  async billsDeleteRaw(
    requestParameters: AccountingApiBillsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteBillResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling billsDelete.'
      )
    }

    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: `/accounting/bills/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Bill
   * Delete Bill
   */
  async billsDelete(
    requestParameters: AccountingApiBillsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteBillResponse> {
    const response = await this.billsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Bill
   * Get Bill
   */
  async billsOneRaw(
    requestParameters: AccountingApiBillsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetBillResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling billsOne.'
      )
    }

    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: `/accounting/bills/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Bill
   * Get Bill
   */
  async billsOne(
    requestParameters: AccountingApiBillsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetBillResponse> {
    const response = await this.billsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Bill
   * Update Bill
   */
  async billsUpdateRaw(
    requestParameters: AccountingApiBillsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateBillResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling billsUpdate.'
      )
    }

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

    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: `/accounting/bills/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: BillToJSON(requestParameters.bill)
      },
      initOverrides
    )

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

  /**
   * Update Bill
   * Update Bill
   */
  async billsUpdate(
    requestParameters: AccountingApiBillsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateBillResponse> {
    const response = await this.billsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get company info
   * Get company info
   */
  async companyInfoOneRaw(
    requestParameters: AccountingApiCompanyInfoOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCompanyInfoResponse>> {
    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: `/accounting/company-info`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get company info
   * Get company info
   */
  async companyInfoOne(
    requestParameters: AccountingApiCompanyInfoOneRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetCompanyInfoResponse> {
    const response = await this.companyInfoOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Credit Note
   * Create Credit Note
   */
  async creditNotesAddRaw(
    requestParameters: AccountingApiCreditNotesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateCreditNoteResponse>> {
    if (requestParameters.creditNote === null || requestParameters.creditNote === undefined) {
      throw new runtime.RequiredError(
        'creditNote',
        'Required parameter requestParameters.creditNote was null or undefined when calling creditNotesAdd.'
      )
    }

    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: `/accounting/credit-notes`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: CreditNoteToJSON(requestParameters.creditNote)
      },
      initOverrides
    )

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

  /**
   * Create Credit Note
   * Create Credit Note
   */
  async creditNotesAdd(
    requestParameters: AccountingApiCreditNotesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateCreditNoteResponse> {
    const response = await this.creditNotesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Credit Notes
   * List Credit Notes
   */
  async creditNotesAllRaw(
    requestParameters: AccountingApiCreditNotesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCreditNotesResponse>> {
    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: `/accounting/credit-notes`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Credit Notes
   * List Credit Notes
   */
  async creditNotesAll(
    requestParameters: AccountingApiCreditNotesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetCreditNotesResponse> {
    const response = await this.creditNotesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Credit Note
   * Delete Credit Note
   */
  async creditNotesDeleteRaw(
    requestParameters: AccountingApiCreditNotesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteCreditNoteResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling creditNotesDelete.'
      )
    }

    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: `/accounting/credit-notes/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Credit Note
   * Delete Credit Note
   */
  async creditNotesDelete(
    requestParameters: AccountingApiCreditNotesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteCreditNoteResponse> {
    const response = await this.creditNotesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Credit Note
   * Get Credit Note
   */
  async creditNotesOneRaw(
    requestParameters: AccountingApiCreditNotesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCreditNoteResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling creditNotesOne.'
      )
    }

    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: `/accounting/credit-notes/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Credit Note
   * Get Credit Note
   */
  async creditNotesOne(
    requestParameters: AccountingApiCreditNotesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetCreditNoteResponse> {
    const response = await this.creditNotesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Credit Note
   * Update Credit Note
   */
  async creditNotesUpdateRaw(
    requestParameters: AccountingApiCreditNotesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateCreditNoteResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling creditNotesUpdate.'
      )
    }

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

    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: `/accounting/credit-notes/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: CreditNoteToJSON(requestParameters.creditNote)
      },
      initOverrides
    )

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

  /**
   * Update Credit Note
   * Update Credit Note
   */
  async creditNotesUpdate(
    requestParameters: AccountingApiCreditNotesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateCreditNoteResponse> {
    const response = await this.creditNotesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Customer
   * Create Customer
   */
  async customersAddRaw(
    requestParameters: AccountingApiCustomersAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateCustomerResponse>> {
    if (requestParameters.customer === null || requestParameters.customer === undefined) {
      throw new runtime.RequiredError(
        'customer',
        'Required parameter requestParameters.customer was null or undefined when calling customersAdd.'
      )
    }

    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: `/accounting/customers`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: CustomerToJSON(requestParameters.customer)
      },
      initOverrides
    )

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

  /**
   * Create Customer
   * Create Customer
   */
  async customersAdd(
    requestParameters: AccountingApiCustomersAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateCustomerResponse> {
    const response = await this.customersAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Customers
   * List Customers
   */
  async customersAllRaw(
    requestParameters: AccountingApiCustomersAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCustomersResponse>> {
    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: `/accounting/customers`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Customers
   * List Customers
   */
  async customersAll(
    requestParameters: AccountingApiCustomersAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetCustomersResponse> {
    const response = await this.customersAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Customer
   * Delete Customer
   */
  async customersDeleteRaw(
    requestParameters: AccountingApiCustomersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteCustomerResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling customersDelete.'
      )
    }

    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: `/accounting/customers/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Customer
   * Delete Customer
   */
  async customersDelete(
    requestParameters: AccountingApiCustomersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteCustomerResponse> {
    const response = await this.customersDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Customer
   * Get Customer
   */
  async customersOneRaw(
    requestParameters: AccountingApiCustomersOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetCustomerResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling customersOne.'
      )
    }

    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: `/accounting/customers/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Customer
   * Get Customer
   */
  async customersOne(
    requestParameters: AccountingApiCustomersOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetCustomerResponse> {
    const response = await this.customersOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Customer
   * Update Customer
   */
  async customersUpdateRaw(
    requestParameters: AccountingApiCustomersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateCustomerResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling customersUpdate.'
      )
    }

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

    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: `/accounting/customers/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: CustomerToJSON(requestParameters.customer)
      },
      initOverrides
    )

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

  /**
   * Update Customer
   * Update Customer
   */
  async customersUpdate(
    requestParameters: AccountingApiCustomersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateCustomerResponse> {
    const response = await this.customersUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Department
   * Create Department
   */
  async departmentsAddRaw(
    requestParameters: AccountingApiDepartmentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateAccountingDepartmentResponse>> {
    if (requestParameters.department === null || requestParameters.department === undefined) {
      throw new runtime.RequiredError(
        'department',
        'Required parameter requestParameters.department was null or undefined when calling departmentsAdd.'
      )
    }

    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: `/accounting/departments`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: AccountingDepartmentToJSON(requestParameters.department)
      },
      initOverrides
    )

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

  /**
   * Create Department
   * Create Department
   */
  async departmentsAdd(
    requestParameters: AccountingApiDepartmentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateAccountingDepartmentResponse> {
    const response = await this.departmentsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Departments
   * List Departments
   */
  async departmentsAllRaw(
    requestParameters: AccountingApiDepartmentsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAccountingDepartmentsResponse>> {
    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.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: `/accounting/departments`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Departments
   * List Departments
   */
  async departmentsAll(
    requestParameters: AccountingApiDepartmentsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetAccountingDepartmentsResponse> {
    const response = await this.departmentsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Department
   * Delete Department
   */
  async departmentsDeleteRaw(
    requestParameters: AccountingApiDepartmentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteAccountingDepartmentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling departmentsDelete.'
      )
    }

    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: `/accounting/departments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Department
   * Delete Department
   */
  async departmentsDelete(
    requestParameters: AccountingApiDepartmentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteAccountingDepartmentResponse> {
    const response = await this.departmentsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Department
   * Get Department
   */
  async departmentsOneRaw(
    requestParameters: AccountingApiDepartmentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAccountingDepartmentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling departmentsOne.'
      )
    }

    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: `/accounting/departments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Department
   * Get Department
   */
  async departmentsOne(
    requestParameters: AccountingApiDepartmentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetAccountingDepartmentResponse> {
    const response = await this.departmentsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Department
   * Update Department
   */
  async departmentsUpdateRaw(
    requestParameters: AccountingApiDepartmentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateAccountingDepartmentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling departmentsUpdate.'
      )
    }

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

    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: `/accounting/departments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: AccountingDepartmentToJSON(requestParameters.department)
      },
      initOverrides
    )

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

  /**
   * Update Department
   * Update Department
   */
  async departmentsUpdate(
    requestParameters: AccountingApiDepartmentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateAccountingDepartmentResponse> {
    const response = await this.departmentsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Expense
   * Create Expense
   */
  async expensesAddRaw(
    requestParameters: AccountingApiExpensesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateExpenseResponse>> {
    if (requestParameters.expense === null || requestParameters.expense === undefined) {
      throw new runtime.RequiredError(
        'expense',
        'Required parameter requestParameters.expense was null or undefined when calling expensesAdd.'
      )
    }

    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: `/accounting/expenses`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: ExpenseToJSON(requestParameters.expense)
      },
      initOverrides
    )

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

  /**
   * Create Expense
   * Create Expense
   */
  async expensesAdd(
    requestParameters: AccountingApiExpensesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateExpenseResponse> {
    const response = await this.expensesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Expenses
   * List Expenses
   */
  async expensesAllRaw(
    requestParameters: AccountingApiExpensesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetExpensesResponse>> {
    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
    }

    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: `/accounting/expenses`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Expenses
   * List Expenses
   */
  async expensesAll(
    requestParameters: AccountingApiExpensesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetExpensesResponse> {
    const response = await this.expensesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Expense
   * Delete Expense
   */
  async expensesDeleteRaw(
    requestParameters: AccountingApiExpensesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteExpenseResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling expensesDelete.'
      )
    }

    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: `/accounting/expenses/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Expense
   * Delete Expense
   */
  async expensesDelete(
    requestParameters: AccountingApiExpensesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteExpenseResponse> {
    const response = await this.expensesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Expense
   * Get Expense
   */
  async expensesOneRaw(
    requestParameters: AccountingApiExpensesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetExpenseResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling expensesOne.'
      )
    }

    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: `/accounting/expenses/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Expense
   * Get Expense
   */
  async expensesOne(
    requestParameters: AccountingApiExpensesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetExpenseResponse> {
    const response = await this.expensesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Expense
   * Update Expense
   */
  async expensesUpdateRaw(
    requestParameters: AccountingApiExpensesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateExpenseResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling expensesUpdate.'
      )
    }

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

    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: `/accounting/expenses/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: ExpenseToJSON(requestParameters.expense)
      },
      initOverrides
    )

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

  /**
   * Update Expense
   * Update Expense
   */
  async expensesUpdate(
    requestParameters: AccountingApiExpensesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateExpenseResponse> {
    const response = await this.expensesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Invoice Item
   * Create Invoice Item
   */
  async invoiceItemsAddRaw(
    requestParameters: AccountingApiInvoiceItemsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateInvoiceItemResponse>> {
    if (requestParameters.invoiceItem === null || requestParameters.invoiceItem === undefined) {
      throw new runtime.RequiredError(
        'invoiceItem',
        'Required parameter requestParameters.invoiceItem was null or undefined when calling invoiceItemsAdd.'
      )
    }

    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: `/accounting/invoice-items`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: InvoiceItemToJSON(requestParameters.invoiceItem)
      },
      initOverrides
    )

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

  /**
   * Create Invoice Item
   * Create Invoice Item
   */
  async invoiceItemsAdd(
    requestParameters: AccountingApiInvoiceItemsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateInvoiceItemResponse> {
    const response = await this.invoiceItemsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Invoice Items
   * List Invoice Items
   */
  async invoiceItemsAllRaw(
    requestParameters: AccountingApiInvoiceItemsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetInvoiceItemsResponse>> {
    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: `/accounting/invoice-items`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Invoice Items
   * List Invoice Items
   */
  async invoiceItemsAll(
    requestParameters: AccountingApiInvoiceItemsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetInvoiceItemsResponse> {
    const response = await this.invoiceItemsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Invoice Item
   * Delete Invoice Item
   */
  async invoiceItemsDeleteRaw(
    requestParameters: AccountingApiInvoiceItemsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteTaxRateResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling invoiceItemsDelete.'
      )
    }

    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: `/accounting/invoice-items/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Invoice Item
   * Delete Invoice Item
   */
  async invoiceItemsDelete(
    requestParameters: AccountingApiInvoiceItemsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteTaxRateResponse> {
    const response = await this.invoiceItemsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Invoice Item
   * Get Invoice Item
   */
  async invoiceItemsOneRaw(
    requestParameters: AccountingApiInvoiceItemsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetInvoiceItemResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling invoiceItemsOne.'
      )
    }

    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: `/accounting/invoice-items/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Invoice Item
   * Get Invoice Item
   */
  async invoiceItemsOne(
    requestParameters: AccountingApiInvoiceItemsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetInvoiceItemResponse> {
    const response = await this.invoiceItemsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Invoice Item
   * Update Invoice Item
   */
  async invoiceItemsUpdateRaw(
    requestParameters: AccountingApiInvoiceItemsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateInvoiceItemsResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling invoiceItemsUpdate.'
      )
    }

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

    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: `/accounting/invoice-items/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: InvoiceItemToJSON(requestParameters.invoiceItem)
      },
      initOverrides
    )

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

  /**
   * Update Invoice Item
   * Update Invoice Item
   */
  async invoiceItemsUpdate(
    requestParameters: AccountingApiInvoiceItemsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateInvoiceItemsResponse> {
    const response = await this.invoiceItemsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Invoice
   * Create Invoice
   */
  async invoicesAddRaw(
    requestParameters: AccountingApiInvoicesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateInvoiceResponse>> {
    if (requestParameters.invoice === null || requestParameters.invoice === undefined) {
      throw new runtime.RequiredError(
        'invoice',
        'Required parameter requestParameters.invoice was null or undefined when calling invoicesAdd.'
      )
    }

    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: `/accounting/invoices`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: InvoiceToJSON(requestParameters.invoice)
      },
      initOverrides
    )

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

  /**
   * Create Invoice
   * Create Invoice
   */
  async invoicesAdd(
    requestParameters: AccountingApiInvoicesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateInvoiceResponse> {
    const response = await this.invoicesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Invoices
   * List Invoices
   */
  async invoicesAllRaw(
    requestParameters: AccountingApiInvoicesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetInvoicesResponse>> {
    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: `/accounting/invoices`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Invoices
   * List Invoices
   */
  async invoicesAll(
    requestParameters: AccountingApiInvoicesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetInvoicesResponse> {
    const response = await this.invoicesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Invoice
   * Delete Invoice
   */
  async invoicesDeleteRaw(
    requestParameters: AccountingApiInvoicesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteInvoiceResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling invoicesDelete.'
      )
    }

    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: `/accounting/invoices/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Invoice
   * Delete Invoice
   */
  async invoicesDelete(
    requestParameters: AccountingApiInvoicesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteInvoiceResponse> {
    const response = await this.invoicesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Invoice
   * Get Invoice
   */
  async invoicesOneRaw(
    requestParameters: AccountingApiInvoicesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetInvoiceResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling invoicesOne.'
      )
    }

    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: `/accounting/invoices/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Invoice
   * Get Invoice
   */
  async invoicesOne(
    requestParameters: AccountingApiInvoicesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetInvoiceResponse> {
    const response = await this.invoicesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Invoice
   * Update Invoice
   */
  async invoicesUpdateRaw(
    requestParameters: AccountingApiInvoicesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateInvoiceResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling invoicesUpdate.'
      )
    }

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

    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: `/accounting/invoices/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: InvoiceToJSON(requestParameters.invoice)
      },
      initOverrides
    )

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

  /**
   * Update Invoice
   * Update Invoice
   */
  async invoicesUpdate(
    requestParameters: AccountingApiInvoicesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateInvoiceResponse> {
    const response = await this.invoicesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Journal Entry
   * Create Journal Entry
   */
  async journalEntriesAddRaw(
    requestParameters: AccountingApiJournalEntriesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateJournalEntryResponse>> {
    if (requestParameters.journalEntry === null || requestParameters.journalEntry === undefined) {
      throw new runtime.RequiredError(
        'journalEntry',
        'Required parameter requestParameters.journalEntry was null or undefined when calling journalEntriesAdd.'
      )
    }

    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: `/accounting/journal-entries`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: JournalEntryToJSON(requestParameters.journalEntry)
      },
      initOverrides
    )

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

  /**
   * Create Journal Entry
   * Create Journal Entry
   */
  async journalEntriesAdd(
    requestParameters: AccountingApiJournalEntriesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateJournalEntryResponse> {
    const response = await this.journalEntriesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Journal Entries
   * List Journal Entries
   */
  async journalEntriesAllRaw(
    requestParameters: AccountingApiJournalEntriesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetJournalEntriesResponse>> {
    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: `/accounting/journal-entries`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Journal Entries
   * List Journal Entries
   */
  async journalEntriesAll(
    requestParameters: AccountingApiJournalEntriesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetJournalEntriesResponse> {
    const response = await this.journalEntriesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Journal Entry
   * Delete Journal Entry
   */
  async journalEntriesDeleteRaw(
    requestParameters: AccountingApiJournalEntriesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteJournalEntryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling journalEntriesDelete.'
      )
    }

    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: `/accounting/journal-entries/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Journal Entry
   * Delete Journal Entry
   */
  async journalEntriesDelete(
    requestParameters: AccountingApiJournalEntriesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteJournalEntryResponse> {
    const response = await this.journalEntriesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Journal Entry
   * Get Journal Entry
   */
  async journalEntriesOneRaw(
    requestParameters: AccountingApiJournalEntriesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetJournalEntryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling journalEntriesOne.'
      )
    }

    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: `/accounting/journal-entries/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Journal Entry
   * Get Journal Entry
   */
  async journalEntriesOne(
    requestParameters: AccountingApiJournalEntriesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetJournalEntryResponse> {
    const response = await this.journalEntriesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Journal Entry
   * Update Journal Entry
   */
  async journalEntriesUpdateRaw(
    requestParameters: AccountingApiJournalEntriesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateJournalEntryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling journalEntriesUpdate.'
      )
    }

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

    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: `/accounting/journal-entries/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: JournalEntryToJSON(requestParameters.journalEntry)
      },
      initOverrides
    )

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

  /**
   * Update Journal Entry
   * Update Journal Entry
   */
  async journalEntriesUpdate(
    requestParameters: AccountingApiJournalEntriesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateJournalEntryResponse> {
    const response = await this.journalEntriesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Ledger Account
   * Create Ledger Account
   */
  async ledgerAccountsAddRaw(
    requestParameters: AccountingApiLedgerAccountsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateLedgerAccountResponse>> {
    if (requestParameters.ledgerAccount === null || requestParameters.ledgerAccount === undefined) {
      throw new runtime.RequiredError(
        'ledgerAccount',
        'Required parameter requestParameters.ledgerAccount was null or undefined when calling ledgerAccountsAdd.'
      )
    }

    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: `/accounting/ledger-accounts`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: LedgerAccountToJSON(requestParameters.ledgerAccount)
      },
      initOverrides
    )

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

  /**
   * Create Ledger Account
   * Create Ledger Account
   */
  async ledgerAccountsAdd(
    requestParameters: AccountingApiLedgerAccountsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateLedgerAccountResponse> {
    const response = await this.ledgerAccountsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Ledger Accounts
   * List Ledger Accounts
   */
  async ledgerAccountsAllRaw(
    requestParameters: AccountingApiLedgerAccountsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetLedgerAccountsResponse>> {
    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: `/accounting/ledger-accounts`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Ledger Accounts
   * List Ledger Accounts
   */
  async ledgerAccountsAll(
    requestParameters: AccountingApiLedgerAccountsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetLedgerAccountsResponse> {
    const response = await this.ledgerAccountsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Ledger Account
   * Delete Ledger Account
   */
  async ledgerAccountsDeleteRaw(
    requestParameters: AccountingApiLedgerAccountsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteLedgerAccountResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling ledgerAccountsDelete.'
      )
    }

    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: `/accounting/ledger-accounts/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Ledger Account
   * Delete Ledger Account
   */
  async ledgerAccountsDelete(
    requestParameters: AccountingApiLedgerAccountsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteLedgerAccountResponse> {
    const response = await this.ledgerAccountsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Ledger Account
   * Get Ledger Account
   */
  async ledgerAccountsOneRaw(
    requestParameters: AccountingApiLedgerAccountsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetLedgerAccountResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling ledgerAccountsOne.'
      )
    }

    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: `/accounting/ledger-accounts/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Ledger Account
   * Get Ledger Account
   */
  async ledgerAccountsOne(
    requestParameters: AccountingApiLedgerAccountsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetLedgerAccountResponse> {
    const response = await this.ledgerAccountsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Ledger Account
   * Update Ledger Account
   */
  async ledgerAccountsUpdateRaw(
    requestParameters: AccountingApiLedgerAccountsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateLedgerAccountResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling ledgerAccountsUpdate.'
      )
    }

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

    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: `/accounting/ledger-accounts/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: LedgerAccountToJSON(requestParameters.ledgerAccount)
      },
      initOverrides
    )

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

  /**
   * Update Ledger Account
   * Update Ledger Account
   */
  async ledgerAccountsUpdate(
    requestParameters: AccountingApiLedgerAccountsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateLedgerAccountResponse> {
    const response = await this.ledgerAccountsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Location
   * Create Location
   */
  async locationsAddRaw(
    requestParameters: AccountingApiLocationsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateAccountingLocationResponse>> {
    if (requestParameters.location === null || requestParameters.location === undefined) {
      throw new runtime.RequiredError(
        'location',
        'Required parameter requestParameters.location was null or undefined when calling locationsAdd.'
      )
    }

    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: `/accounting/locations`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: AccountingLocationToJSON(requestParameters.location)
      },
      initOverrides
    )

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

  /**
   * Create Location
   * Create Location
   */
  async locationsAdd(
    requestParameters: AccountingApiLocationsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateAccountingLocationResponse> {
    const response = await this.locationsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Locations
   * List Locations
   */
  async locationsAllRaw(
    requestParameters: AccountingApiLocationsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAccountingLocationsResponse>> {
    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.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: `/accounting/locations`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Locations
   * List Locations
   */
  async locationsAll(
    requestParameters: AccountingApiLocationsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetAccountingLocationsResponse> {
    const response = await this.locationsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Location
   * Delete Location
   */
  async locationsDeleteRaw(
    requestParameters: AccountingApiLocationsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteAccountingLocationResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling locationsDelete.'
      )
    }

    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: `/accounting/locations/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Location
   * Delete Location
   */
  async locationsDelete(
    requestParameters: AccountingApiLocationsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteAccountingLocationResponse> {
    const response = await this.locationsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Location
   * Get Location
   */
  async locationsOneRaw(
    requestParameters: AccountingApiLocationsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetAccountingLocationResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling locationsOne.'
      )
    }

    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: `/accounting/locations/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Location
   * Get Location
   */
  async locationsOne(
    requestParameters: AccountingApiLocationsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetAccountingLocationResponse> {
    const response = await this.locationsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Location
   * Update Location
   */
  async locationsUpdateRaw(
    requestParameters: AccountingApiLocationsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateAccountingLocationResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling locationsUpdate.'
      )
    }

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

    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: `/accounting/locations/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: AccountingLocationToJSON(requestParameters.location)
      },
      initOverrides
    )

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

  /**
   * Update Location
   * Update Location
   */
  async locationsUpdate(
    requestParameters: AccountingApiLocationsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateAccountingLocationResponse> {
    const response = await this.locationsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Payment
   * Create Payment
   */
  async paymentsAddRaw(
    requestParameters: AccountingApiPaymentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreatePaymentResponse>> {
    if (requestParameters.payment === null || requestParameters.payment === undefined) {
      throw new runtime.RequiredError(
        'payment',
        'Required parameter requestParameters.payment was null or undefined when calling paymentsAdd.'
      )
    }

    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: `/accounting/payments`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: PaymentToJSON(requestParameters.payment)
      },
      initOverrides
    )

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

  /**
   * Create Payment
   * Create Payment
   */
  async paymentsAdd(
    requestParameters: AccountingApiPaymentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreatePaymentResponse> {
    const response = await this.paymentsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Payments
   * List Payments
   */
  async paymentsAllRaw(
    requestParameters: AccountingApiPaymentsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPaymentsResponse>> {
    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: `/accounting/payments`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Payments
   * List Payments
   */
  async paymentsAll(
    requestParameters: AccountingApiPaymentsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetPaymentsResponse> {
    const response = await this.paymentsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Payment
   * Delete Payment
   */
  async paymentsDeleteRaw(
    requestParameters: AccountingApiPaymentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeletePaymentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling paymentsDelete.'
      )
    }

    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: `/accounting/payments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Payment
   * Delete Payment
   */
  async paymentsDelete(
    requestParameters: AccountingApiPaymentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeletePaymentResponse> {
    const response = await this.paymentsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Payment
   * Get Payment
   */
  async paymentsOneRaw(
    requestParameters: AccountingApiPaymentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPaymentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling paymentsOne.'
      )
    }

    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: `/accounting/payments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Payment
   * Get Payment
   */
  async paymentsOne(
    requestParameters: AccountingApiPaymentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetPaymentResponse> {
    const response = await this.paymentsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Payment
   * Update Payment
   */
  async paymentsUpdateRaw(
    requestParameters: AccountingApiPaymentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdatePaymentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling paymentsUpdate.'
      )
    }

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

    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: `/accounting/payments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: PaymentToJSON(requestParameters.payment)
      },
      initOverrides
    )

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

  /**
   * Update Payment
   * Update Payment
   */
  async paymentsUpdate(
    requestParameters: AccountingApiPaymentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdatePaymentResponse> {
    const response = await this.paymentsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Profit and Loss
   * Get Profit and Loss
   */
  async profitAndLossOneRaw(
    requestParameters: AccountingApiProfitAndLossOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetProfitAndLossResponse>> {
    const queryParameters: any = {}

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

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

    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: `/accounting/profit-and-loss`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Profit and Loss
   * Get Profit and Loss
   */
  async profitAndLossOne(
    requestParameters: AccountingApiProfitAndLossOneRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetProfitAndLossResponse> {
    const response = await this.profitAndLossOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Purchase Order
   * Create Purchase Order
   */
  async purchaseOrdersAddRaw(
    requestParameters: AccountingApiPurchaseOrdersAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreatePurchaseOrderResponse>> {
    if (requestParameters.purchaseOrder === null || requestParameters.purchaseOrder === undefined) {
      throw new runtime.RequiredError(
        'purchaseOrder',
        'Required parameter requestParameters.purchaseOrder was null or undefined when calling purchaseOrdersAdd.'
      )
    }

    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: `/accounting/purchase-orders`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: PurchaseOrderToJSON(requestParameters.purchaseOrder)
      },
      initOverrides
    )

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

  /**
   * Create Purchase Order
   * Create Purchase Order
   */
  async purchaseOrdersAdd(
    requestParameters: AccountingApiPurchaseOrdersAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreatePurchaseOrderResponse> {
    const response = await this.purchaseOrdersAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Purchase Orders
   * List Purchase Orders
   */
  async purchaseOrdersAllRaw(
    requestParameters: AccountingApiPurchaseOrdersAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPurchaseOrdersResponse>> {
    const queryParameters: any = {}

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

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

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

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

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

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

    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: `/accounting/purchase-orders`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Purchase Orders
   * List Purchase Orders
   */
  async purchaseOrdersAll(
    requestParameters: AccountingApiPurchaseOrdersAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetPurchaseOrdersResponse> {
    const response = await this.purchaseOrdersAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Purchase Order
   * Delete Purchase Order
   */
  async purchaseOrdersDeleteRaw(
    requestParameters: AccountingApiPurchaseOrdersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeletePurchaseOrderResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling purchaseOrdersDelete.'
      )
    }

    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: `/accounting/purchase-orders/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Purchase Order
   * Delete Purchase Order
   */
  async purchaseOrdersDelete(
    requestParameters: AccountingApiPurchaseOrdersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeletePurchaseOrderResponse> {
    const response = await this.purchaseOrdersDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Purchase Order
   * Get Purchase Order
   */
  async purchaseOrdersOneRaw(
    requestParameters: AccountingApiPurchaseOrdersOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPurchaseOrderResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling purchaseOrdersOne.'
      )
    }

    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: `/accounting/purchase-orders/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Purchase Order
   * Get Purchase Order
   */
  async purchaseOrdersOne(
    requestParameters: AccountingApiPurchaseOrdersOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetPurchaseOrderResponse> {
    const response = await this.purchaseOrdersOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Purchase Order
   * Update Purchase Order
   */
  async purchaseOrdersUpdateRaw(
    requestParameters: AccountingApiPurchaseOrdersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdatePurchaseOrderResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling purchaseOrdersUpdate.'
      )
    }

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

    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: `/accounting/purchase-orders/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: PurchaseOrderToJSON(requestParameters.purchaseOrder)
      },
      initOverrides
    )

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

  /**
   * Update Purchase Order
   * Update Purchase Order
   */
  async purchaseOrdersUpdate(
    requestParameters: AccountingApiPurchaseOrdersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdatePurchaseOrderResponse> {
    const response = await this.purchaseOrdersUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Subsidiary
   * Create Subsidiary
   */
  async subsidiariesAddRaw(
    requestParameters: AccountingApiSubsidiariesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateSubsidiaryResponse>> {
    if (requestParameters.subsidiary === null || requestParameters.subsidiary === undefined) {
      throw new runtime.RequiredError(
        'subsidiary',
        'Required parameter requestParameters.subsidiary was null or undefined when calling subsidiariesAdd.'
      )
    }

    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: `/accounting/subsidiaries`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: SubsidiaryToJSON(requestParameters.subsidiary)
      },
      initOverrides
    )

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

  /**
   * Create Subsidiary
   * Create Subsidiary
   */
  async subsidiariesAdd(
    requestParameters: AccountingApiSubsidiariesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateSubsidiaryResponse> {
    const response = await this.subsidiariesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Subsidiaries
   * List Subsidiaries
   */
  async subsidiariesAllRaw(
    requestParameters: AccountingApiSubsidiariesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetSubsidiariesResponse>> {
    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.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: `/accounting/subsidiaries`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Subsidiaries
   * List Subsidiaries
   */
  async subsidiariesAll(
    requestParameters: AccountingApiSubsidiariesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetSubsidiariesResponse> {
    const response = await this.subsidiariesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Subsidiary
   * Delete Subsidiary
   */
  async subsidiariesDeleteRaw(
    requestParameters: AccountingApiSubsidiariesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteSubsidiaryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling subsidiariesDelete.'
      )
    }

    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: `/accounting/subsidiaries/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Subsidiary
   * Delete Subsidiary
   */
  async subsidiariesDelete(
    requestParameters: AccountingApiSubsidiariesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteSubsidiaryResponse> {
    const response = await this.subsidiariesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Subsidiary
   * Get Subsidiary
   */
  async subsidiariesOneRaw(
    requestParameters: AccountingApiSubsidiariesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetSubsidiaryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling subsidiariesOne.'
      )
    }

    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: `/accounting/subsidiaries/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Subsidiary
   * Get Subsidiary
   */
  async subsidiariesOne(
    requestParameters: AccountingApiSubsidiariesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetSubsidiaryResponse> {
    const response = await this.subsidiariesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Subsidiary
   * Update Subsidiary
   */
  async subsidiariesUpdateRaw(
    requestParameters: AccountingApiSubsidiariesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateSubsidiaryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling subsidiariesUpdate.'
      )
    }

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

    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: `/accounting/subsidiaries/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: SubsidiaryToJSON(requestParameters.subsidiary)
      },
      initOverrides
    )

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

  /**
   * Update Subsidiary
   * Update Subsidiary
   */
  async subsidiariesUpdate(
    requestParameters: AccountingApiSubsidiariesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateSubsidiaryResponse> {
    const response = await this.subsidiariesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Supplier
   * Create Supplier
   */
  async suppliersAddRaw(
    requestParameters: AccountingApiSuppliersAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateSupplierResponse>> {
    if (requestParameters.supplier === null || requestParameters.supplier === undefined) {
      throw new runtime.RequiredError(
        'supplier',
        'Required parameter requestParameters.supplier was null or undefined when calling suppliersAdd.'
      )
    }

    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: `/accounting/suppliers`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: SupplierToJSON(requestParameters.supplier)
      },
      initOverrides
    )

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

  /**
   * Create Supplier
   * Create Supplier
   */
  async suppliersAdd(
    requestParameters: AccountingApiSuppliersAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateSupplierResponse> {
    const response = await this.suppliersAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Suppliers
   * List Suppliers
   */
  async suppliersAllRaw(
    requestParameters: AccountingApiSuppliersAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetSuppliersResponse>> {
    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: `/accounting/suppliers`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Suppliers
   * List Suppliers
   */
  async suppliersAll(
    requestParameters: AccountingApiSuppliersAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetSuppliersResponse> {
    const response = await this.suppliersAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Supplier
   * Delete Supplier
   */
  async suppliersDeleteRaw(
    requestParameters: AccountingApiSuppliersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteSupplierResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling suppliersDelete.'
      )
    }

    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: `/accounting/suppliers/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Supplier
   * Delete Supplier
   */
  async suppliersDelete(
    requestParameters: AccountingApiSuppliersDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteSupplierResponse> {
    const response = await this.suppliersDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Supplier
   * Get Supplier
   */
  async suppliersOneRaw(
    requestParameters: AccountingApiSuppliersOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetSupplierResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling suppliersOne.'
      )
    }

    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: `/accounting/suppliers/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Supplier
   * Get Supplier
   */
  async suppliersOne(
    requestParameters: AccountingApiSuppliersOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetSupplierResponse> {
    const response = await this.suppliersOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Supplier
   * Update Supplier
   */
  async suppliersUpdateRaw(
    requestParameters: AccountingApiSuppliersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateSupplierResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling suppliersUpdate.'
      )
    }

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

    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: `/accounting/suppliers/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: SupplierToJSON(requestParameters.supplier)
      },
      initOverrides
    )

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

  /**
   * Update Supplier
   * Update Supplier
   */
  async suppliersUpdate(
    requestParameters: AccountingApiSuppliersUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateSupplierResponse> {
    const response = await this.suppliersUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Tax Rate
   * Create Tax Rate
   */
  async taxRatesAddRaw(
    requestParameters: AccountingApiTaxRatesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateTaxRateResponse>> {
    if (requestParameters.taxRate === null || requestParameters.taxRate === undefined) {
      throw new runtime.RequiredError(
        'taxRate',
        'Required parameter requestParameters.taxRate was null or undefined when calling taxRatesAdd.'
      )
    }

    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: `/accounting/tax-rates`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: TaxRateToJSON(requestParameters.taxRate)
      },
      initOverrides
    )

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

  /**
   * Create Tax Rate
   * Create Tax Rate
   */
  async taxRatesAdd(
    requestParameters: AccountingApiTaxRatesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateTaxRateResponse> {
    const response = await this.taxRatesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Tax Rates. Note: Not all connectors return the actual rate/percentage value. In this case, only the tax code or reference is returned. Connectors Affected: Quickbooks
   * List Tax Rates
   */
  async taxRatesAllRaw(
    requestParameters: AccountingApiTaxRatesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetTaxRatesResponse>> {
    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.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: `/accounting/tax-rates`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Tax Rates. Note: Not all connectors return the actual rate/percentage value. In this case, only the tax code or reference is returned. Connectors Affected: Quickbooks
   * List Tax Rates
   */
  async taxRatesAll(
    requestParameters: AccountingApiTaxRatesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetTaxRatesResponse> {
    const response = await this.taxRatesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Tax Rate
   * Delete Tax Rate
   */
  async taxRatesDeleteRaw(
    requestParameters: AccountingApiTaxRatesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteTaxRateResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling taxRatesDelete.'
      )
    }

    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: `/accounting/tax-rates/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Tax Rate
   * Delete Tax Rate
   */
  async taxRatesDelete(
    requestParameters: AccountingApiTaxRatesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteTaxRateResponse> {
    const response = await this.taxRatesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Tax Rate. Note: Not all connectors return the actual rate/percentage value. In this case, only the tax code or reference is returned. Support will soon be added to return the actual rate/percentage by doing additional calls in the background to provide the full view of a given tax rate. Connectors Affected: Quickbooks
   * Get Tax Rate
   */
  async taxRatesOneRaw(
    requestParameters: AccountingApiTaxRatesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetTaxRateResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling taxRatesOne.'
      )
    }

    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: `/accounting/tax-rates/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Tax Rate. Note: Not all connectors return the actual rate/percentage value. In this case, only the tax code or reference is returned. Support will soon be added to return the actual rate/percentage by doing additional calls in the background to provide the full view of a given tax rate. Connectors Affected: Quickbooks
   * Get Tax Rate
   */
  async taxRatesOne(
    requestParameters: AccountingApiTaxRatesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetTaxRateResponse> {
    const response = await this.taxRatesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Tax Rate
   * Update Tax Rate
   */
  async taxRatesUpdateRaw(
    requestParameters: AccountingApiTaxRatesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateTaxRateResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling taxRatesUpdate.'
      )
    }

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

    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: `/accounting/tax-rates/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: TaxRateToJSON(requestParameters.taxRate)
      },
      initOverrides
    )

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

  /**
   * Update Tax Rate
   * Update Tax Rate
   */
  async taxRatesUpdate(
    requestParameters: AccountingApiTaxRatesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateTaxRateResponse> {
    const response = await this.taxRatesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Tracking Category
   * Create Tracking Category
   */
  async trackingCategoriesAddRaw(
    requestParameters: AccountingApiTrackingCategoriesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateTrackingCategoryResponse>> {
    if (
      requestParameters.trackingCategory === null ||
      requestParameters.trackingCategory === undefined
    ) {
      throw new runtime.RequiredError(
        'trackingCategory',
        'Required parameter requestParameters.trackingCategory was null or undefined when calling trackingCategoriesAdd.'
      )
    }

    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: `/accounting/tracking-categories`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: TrackingCategoryToJSON(requestParameters.trackingCategory)
      },
      initOverrides
    )

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

  /**
   * Create Tracking Category
   * Create Tracking Category
   */
  async trackingCategoriesAdd(
    requestParameters: AccountingApiTrackingCategoriesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateTrackingCategoryResponse> {
    const response = await this.trackingCategoriesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Tracking Categories
   * List Tracking Categories
   */
  async trackingCategoriesAllRaw(
    requestParameters: AccountingApiTrackingCategoriesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetTrackingCategoriesResponse>> {
    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: `/accounting/tracking-categories`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * List Tracking Categories
   * List Tracking Categories
   */
  async trackingCategoriesAll(
    requestParameters: AccountingApiTrackingCategoriesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetTrackingCategoriesResponse> {
    const response = await this.trackingCategoriesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Tracking Category
   * Delete Tracking Category
   */
  async trackingCategoriesDeleteRaw(
    requestParameters: AccountingApiTrackingCategoriesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteTrackingCategoryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling trackingCategoriesDelete.'
      )
    }

    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: `/accounting/tracking-categories/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Delete Tracking Category
   * Delete Tracking Category
   */
  async trackingCategoriesDelete(
    requestParameters: AccountingApiTrackingCategoriesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteTrackingCategoryResponse> {
    const response = await this.trackingCategoriesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Tracking Category
   * Get Tracking Category
   */
  async trackingCategoriesOneRaw(
    requestParameters: AccountingApiTrackingCategoriesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetTrackingCategoryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling trackingCategoriesOne.'
      )
    }

    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: `/accounting/tracking-categories/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

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

  /**
   * Get Tracking Category
   * Get Tracking Category
   */
  async trackingCategoriesOne(
    requestParameters: AccountingApiTrackingCategoriesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetTrackingCategoryResponse> {
    const response = await this.trackingCategoriesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Tracking Category
   * Update Tracking Category
   */
  async trackingCategoriesUpdateRaw(
    requestParameters: AccountingApiTrackingCategoriesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateTrackingCategoryResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling trackingCategoriesUpdate.'
      )
    }

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

    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: `/accounting/tracking-categories/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: TrackingCategoryToJSON(requestParameters.trackingCategory)
      },
      initOverrides
    )

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

  /**
   * Update Tracking Category
   * Update Tracking Category
   */
  async trackingCategoriesUpdate(
    requestParameters: AccountingApiTrackingCategoriesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateTrackingCategoryResponse> {
    const response = await this.trackingCategoriesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }
}
