swagger: "2.0"
schemes:
  - https
host: api.avaza.com
info:
  contact:
    x-twitter: AvazaHq
  description: "Welcome to the autogenerated documentation & test tool for Avaza's API. <br/><br/><strong>API Security & Authentication</strong><br/>Authentication options include OAuth2 Implicit and Authorization Code flows, and Personal Access Token. All connections should be encrypted over SSL/TLS <br/><br/>You can set up and manage your api authentication credentials from within your Avaza account. (requires Administrator permissions on your Avaza account).<br/><br/> OAuth2 Authorization endpoint: https://any.avaza.com/oauth2/authorize  <br/>OAuth2 Token endpoint: https://any.avaza.com/oauth2/token<br/>Base URL for subsequent API Requests: https://api.avaza.com/ <br/><br/>Blogpost about authenticating with Avaza's API:  https://www.avaza.com/avaza-api-oauth2-authentication/ <br/>Blogpost on using Avaza's webhooks: https://www.avaza.com/avaza-api-webhook-notifications/<br/>The OAuth flow currently issues Access Tokens that last 1 day, and Refresh tokens that last 180 days<br/>The Api respects the security Roles assigned to the authenticating Avaza user and filters the data return appropriately. <br/><br><strong>Support</strong><br/>For API Support, and to request access please contact Avaza Support Team via our support chat. <br/><br/><strong>User Contributed Libraries:</strong><br/>Graciously contributed by 3rd party users like you. <br/>Note these are not tested or endorsesd by Avaza. We encourage you to review before use, and use at own risk.<br/> <ul><li> - <a target='blank' href='https://packagist.org/packages/debiprasad/oauth2-avaza'>PHP OAuth Client Package for Azava API (by Debiprasad Sahoo)</a></li></ul>"
  title: Avaza API Documentation
  version: v1
  x-apisguru-categories:
    - collaboration
  x-logo:
    url: https://twitter.com/AvazaHq/profile_image?size=original
  x-origin:
    - format: swagger
      url: https://api.avaza.com/swagger/docs/v1
      version: "2.0"
  x-providerName: avaza.com
securityDefinitions:
  oauth2:
    authorizationUrl: https://any.avaza.com/oauth2/authorize
    description: OAuth2 Implicit Grant
    flow: implicit
    scopes:
      read_account: Read access to Account metadata
      read_contacts: Read access to Customers, Contacts
      read_expenses: Read access to Expense Details
      read_financials: Read access to Estimates, Invoices, Payments, Credit Notes
      read_projects: Read access to Projects, Project Settings, Tasks
      read_schedule: Read access to Schedule Details
      read_timesheets: Read access to Timesheet Details
      read_users: Read access to User Profiles
      webhook_notifications: Read access to webhook notification events
      write_account: Write access to Account metadata
      write_contacts: Write access to Customers, Contacts
      write_expenses: Write access to Expense module
      write_financials: Write access to Estimates, Invoices, Payments, Credit Notes
      write_projects: Write access to Projects, Project Settings, Tasks
      write_schedule: Write access to Schedule module
      write_timesheets: Write access to Timesheets module
      write_users: Write access to User Profiles
    type: oauth2
paths:
  /ScheduleSeries/AddBooking:
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: ScheduleSeries_AddBooking
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/CreateBooking"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ScheduleSeriesDetails"
      security:
        - oauth2:
            - write_schedule
      summary: Create new Schedule Booking
      tags:
        - ScheduleSeries
  /ScheduleSeries/AddLeave:
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: ScheduleSeries_AddLeave
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/CreateLeave"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ScheduleSeriesDetails"
      security:
        - oauth2:
            - write_schedule
      summary: Create new Leave Booking
      tags:
        - ScheduleSeries
  /ScheduleSeries/EditBooking:
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: ScheduleSeries_EditBooking
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/EditBooking"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ScheduleSeriesDetails"
      security:
        - oauth2:
            - write_schedule
      summary: Edit Booking
      tags:
        - ScheduleSeries
  /ScheduleSeries/EditLeave:
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: ScheduleSeries_EditLeave
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/EditLeave"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ScheduleSeriesDetails"
      security:
        - oauth2:
            - write_schedule
      summary: Edit Leave Booking
      tags:
        - ScheduleSeries
  /api/Account:
    get:
      consumes: []
      operationId: Account_Get
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/AccountDetails"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_account
      summary: Account Details
      tags:
        - Account
  /api/Bill:
    get:
      consumes: []
      description: 'TransactionStatusCode values are: "Draft", "Verified", "Late", "Paid", "Partial", "Void"'
      operationId: Bill_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - in: query
          name: Sort
          required: false
          type: string
        - format: int32
          in: query
          name: CompanyIDFK
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/BillList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of Bills
      tags:
        - Bill
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Bill_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewBill"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/Bill"
      security:
        - oauth2:
            - write_financials
      summary: Create a new draft Bill
      tags:
        - Bill
  "/api/Bill/{id}":
    get:
      consumes: []
      operationId: Bill_GetByID
      parameters:
        - description: Bill Transaction ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_financials
      summary: Gets a Bill by Bill ID
      tags:
        - Bill
  /api/BillPayment:
    get:
      consumes: []
      operationId: BillPayment_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/BillPaymentList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of Bill Payments
      tags:
        - BillPayment
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: BillPayment_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewBillPayment"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/BillPayment"
      security:
        - oauth2:
            - write_financials
      summary: Create new Bill Payment and optionally assign payment allocations to Bills
      tags:
        - BillPayment
  "/api/BillPayment/{id}":
    get:
      consumes: []
      operationId: BillPayment_GetByID
      parameters:
        - description: Invoice Transaction ID Number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/BillPayment"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_financials
      summary: Gets a Bill Payment by Payment Transaction ID
      tags:
        - BillPayment
  /api/Company:
    get:
      consumes: []
      operationId: Company_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of results per page
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: 1 based page number to retrieve
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: '(optional) Supply one of: "DateUpdated", "DateCreated", "CompanyName","DateUpdated desc","DateCreated desc", "CompanyName desc"'
          in: query
          name: Sort
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/CompanyList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_contacts
      summary: Gets list of Companies
      tags:
        - Company
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Company_Post
      parameters:
        - in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewCompany"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/Company"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - write_contacts
      summary: Create a Company
      tags:
        - Company
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: Requires CompanyID and a list of field names to update. The FieldsToUpdate field accepts a string array containing field names that should be updated.
      operationId: Company_Put
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/UpdateCompany"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/Company"
      security:
        - oauth2:
            - write_contacts
      summary: Update a Company record.
      tags:
        - Company
  /api/Company/Lookup:
    get:
      consumes: []
      description: Certain roles see a restricted set of companies based on their project memberships
      operationId: CompanyLookup
      parameters:
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: Search string to match against Company title
          in: query
          name: search
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/CompanyDropdownList"
      security:
        - oauth2:
            - read_contacts
      summary: Gets minimal list of Companies.
      tags:
        - Company
  "/api/Company/{id}":
    get:
      consumes: []
      operationId: Company_GetByID
      parameters:
        - description: Company ID Number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/Company"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_contacts
      summary: Gets Company by Company ID
      tags:
        - Company
  /api/Contact:
    get:
      consumes: []
      operationId: Contact_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - in: query
          name: Sort
          required: false
          type: string
        - format: int32
          in: query
          name: CompanyIDFK
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ContactList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_contacts
      summary: Gets list of Contacts
      tags:
        - Contact
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Contact_Post
      parameters:
        - in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewCompanyContact"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/CompanyContact"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - write_contacts
      summary: Create a Contact
      tags:
        - Contact
  "/api/Contact/{id}":
    get:
      consumes: []
      operationId: Contact_GetByID
      parameters:
        - description: Contact ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/CompanyContact"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_contacts
      summary: Gets Contact by Contact ID
      tags:
        - Contact
  /api/CreditNote:
    get:
      consumes: []
      operationId: CreditNote_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/CreditNoteList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of CreditNotes
      tags:
        - CreditNote
  "/api/CreditNote/{id}":
    get:
      consumes: []
      operationId: CreditNote_GetByID
      parameters:
        - description: Credit Note ID Number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/CreditNote"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_financials
      summary: Gets Credit Note by CreditNoteID
      tags:
        - CreditNote
  /api/Currency:
    get:
      consumes: []
      operationId: Currency_Get
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/CurrencyList"
      summary: Gets list of Currencies
      tags:
        - Currency
  /api/Estimate:
    get:
      consumes: []
      description: 'EstimateStatusCode values are: "Draft", "Sent", "Accepted", "Converted", "Expired", "Rejected"'
      operationId: Estimate_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - in: query
          name: Sort
          required: false
          type: string
        - format: int32
          in: query
          name: CompanyIDFK
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/EstimateList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of Estimates
      tags:
        - Estimate
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Estimate_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewEstimate"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/EstimateDetails"
      security:
        - oauth2:
            - write_financials
      summary: Create a new draft Estimate
      tags:
        - Estimate
  "/api/Estimate/{id}":
    get:
      consumes: []
      operationId: Estimate_GetByID
      parameters:
        - description: Estimate Estimate ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_financials
      summary: Gets Estimate by Estimate ID
      tags:
        - Estimate
  /api/Expense:
    delete:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Expense_Delete
      parameters:
        - description: A collection of ExpenseIDs to delete
          in: body
          name: ExpenseIDs
          required: true
          schema:
            items:
              format: int64
              type: integer
            type: array
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpenseDeleteResultSet"
      security:
        - oauth2:
            - write_expenses
      summary: Delete a Timesheet Entry
      tags:
        - Expense
    get:
      consumes: []
      operationId: Expense_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - format: date-time
          in: query
          name: ExpenseDateFrom
          required: false
          type: string
        - format: date-time
          in: query
          name: ExpenseDateTo
          required: false
          type: string
        - in: query
          name: UserEmail
          required: false
          type: string
        - format: int32
          in: query
          name: UserID
          required: false
          type: integer
        - in: query
          name: CategoryName
          required: false
          type: string
        - format: int32
          in: query
          name: CustomerID
          required: false
          type: integer
        - format: int32
          in: query
          name: ProjectID
          required: false
          type: integer
        - in: query
          name: isChargeable
          required: false
          type: boolean
        - in: query
          name: isInvoiced
          required: false
          type: boolean
        - format: int64
          in: query
          name: ExpenseReimbursementIDFK
          required: false
          type: integer
        - format: int32
          in: query
          name: ExpensePaymentMethodIDFK
          required: false
          type: integer
        - in: query
          name: ExpenseApprovalStatusCode
          required: false
          type: string
        - in: query
          name: Search
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - in: query
          name: Sort
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ExpenseList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_expenses
      summary: Gets list of Expenses
      tags:
        - Expense
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: Create an Expense
      operationId: Expense_Post
      parameters:
        - in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewExpense"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpenseDetails"
      security:
        - oauth2:
            - write_expenses
      summary: Create an Expense
      tags:
        - Expense
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: Update an Expense
      operationId: Expense_Put
      parameters:
        - in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/UpdateExpense"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpenseDetails"
      security:
        - oauth2:
            - write_expenses
      summary: Update an Expense
      tags:
        - Expense
  /api/Expense/Attachment:
    post:
      consumes:
        - application/form-data
      operationId: ExpenseAttachment
      parameters:
        - description: Upload software package
          in: formData
          name: File
          required: true
          type: file
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpenseAttachmentUploadResult"
      security:
        - oauth2:
            - write_expenses
      tags:
        - Expense
  "/api/Expense/{id}":
    get:
      consumes: []
      operationId: Expense_GetByID
      parameters:
        - description: Expense ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ExpenseDetails"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_expenses
      summary: Gets an Expense Entry by Expense ID
      tags:
        - Expense
  /api/ExpenseApproval/Submit:
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: ExpenseApproval
      parameters:
        - description: A collection of ExpenseID's that should be submitted for approval. If not provided, submits all verified expenses for approval.
          in: body
          name: ExpenseIDs
          required: true
          schema:
            items:
              format: int64
              type: integer
            type: array
        - description: The user to submit the Expenses for. Defaults to current user. Only allowed to be different from the current user when the current user has rights to Impersonate other users.
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
        - description: Send email alerts to expense approvers. Defaults to true
          in: query
          name: SendNotifications
          required: false
          type: boolean
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            type: object
      security:
        - oauth2:
            - write_expenses
      summary: Submit Expenses for Approval.
      tags:
        - Expense
  /api/ExpenseCategory:
    get:
      consumes: []
      description: The default sort order is by Name asc
      operationId: ExpenseCategory_Get
      parameters:
        - description: Optional filter on for enabled/disabled categories. Defaults to true.
          in: query
          name: isEnabled
          required: false
          type: boolean
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ExpenseCategoryList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_expenses
      summary: Gets list of Expense Categories
      tags:
        - ExpenseCategory
  /api/ExpenseGroup/Lookup:
    get:
      consumes: []
      description: Expense Groups are for adhoc grouping of reported expenses. e.g. for expenses incurred on a Trip
      operationId: ExpenseGroupLookup
      parameters:
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: Search string to match against Expense Group Name
          in: query
          name: search
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpenseGroupDropdownList"
      security:
        - oauth2:
            - read_expenses
      summary: Gets minimal list of Expense Groups.
      tags:
        - ExpenseGroup
  /api/ExpenseMerchant/Lookup:
    get:
      consumes: []
      operationId: ExpenseMerchangeLookup
      parameters:
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: Search string to match against Expense Group Name
          in: query
          name: search
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpenseMerchantDropdownList"
      security:
        - oauth2:
            - read_expenses
      summary: Gets minimal list of Expense Merchants.
      tags:
        - ExpenseMerchant
  /api/ExpensePaymentMethod/Lookup:
    get:
      consumes: []
      operationId: ExpensePaymentMethodLookup
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpensePaymentMethodDropdownList"
      security:
        - oauth2:
            - read_expenses
      summary: Gets minimal list of Expense Payment Methods.
      tags:
        - ExpensePaymentMethod
  /api/ExpenseSummary:
    get:
      consumes: []
      operationId: ExpenseSummary_Get
      parameters:
        - collectionFormat: multi
          description: '(Optional) Combine one, two or three levels of Grouping. Combine these possible grouping values: "Category", "ChargeableStatus", "Merchant", "ApprovalStatus", "ReimbursementStatus", "Customer", "Project", "User", "Task", "Year", "Month", "Day", "Week".'
          in: query
          items:
            type: string
          name: model.groupBy
          required: false
          type: array
        - description: (Required) Filter for expenses with expense dates greater or equal to the specified date. e.g. 2019-01-25.
          format: date-time
          in: query
          name: model.expenseDateFrom
          required: false
          type: string
        - description: (Required) Filter for expenses with an expense date smaller or equal to the specified  date. e.g. 2019-01-25.
          format: date-time
          in: query
          name: model.expenseDateTo
          required: false
          type: string
        - collectionFormat: multi
          description: (Optional) Defaults to the current user. Provide one or more UserIDs of Users whose expenses should be retrieved. If the current user doesn't have impersonation rights, then they will only see their own data.
          in: query
          items:
            format: int32
            type: integer
          name: model.userID
          required: false
          type: array
        - description: (Optional) Filter by Project
          format: int32
          in: query
          name: model.projectID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ExpenseSummaryResult"
      security:
        - oauth2:
            - read_expenses
      summary: Gets Basic Summary of Expense Statistics
      tags:
        - ExpenseSummary
  /api/FixedAmount:
    get:
      consumes: []
      operationId: FixedAmount_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - format: date-time
          in: query
          name: EntryDateFrom
          required: false
          type: string
        - format: date-time
          in: query
          name: EntryDateTo
          required: false
          type: string
        - description: (Optional) The ProjectID of a Project to filter Fixed Amounts for
          format: int32
          in: query
          name: ProjectID
          required: false
          type: integer
        - description: (Optional) The TaskID of a Task to filter Fixed Amounts for
          format: int32
          in: query
          name: TaskID
          required: false
          type: integer
        - in: query
          name: isInvoiced
          required: false
          type: boolean
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: 'Optional sorting instruction. Currently possible values: "DateUpdated", "DateCreated", "DateUpdated desc", "DateCreated desc","EntryDate", "EntryDate desc", "StartTimeLocal","StartTimeLocal desc", "TimeSheetEntryID", "TimeSheetEntryID desc"'
          in: query
          name: Sort
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/FixedAmountList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of Fixed Amounts
      tags:
        - FixedAmount
  /api/Inventory:
    get:
      consumes: []
      description: ""
      operationId: Inventory_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/InventoryList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of Inventory
      tags:
        - Inventory
  "/api/Inventory/{id}":
    get:
      consumes: []
      operationId: Inventory_GetByID
      parameters:
        - description: InventoryItem ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_financials
      summary: Gets InventoryItem by InventoryItem ID
      tags:
        - Inventory
  /api/Invoice:
    get:
      consumes: []
      description: 'TransactionStatusCode values are: "Draft", "Sent", "Late", "Paid", "Partial", "Void"'
      operationId: Invoice_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - in: query
          name: Sort
          required: false
          type: string
        - format: int32
          in: query
          name: CompanyIDFK
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/InvoiceList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of Invoices
      tags:
        - Invoice
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Invoice_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewInvoice"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/Invoice"
      security:
        - oauth2:
            - write_financials
      summary: Create a new draft invoice
      tags:
        - Invoice
  "/api/Invoice/{id}":
    get:
      consumes: []
      operationId: Invoice_GetByID
      parameters:
        - description: Invoice Transaction ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_financials
      summary: Gets Invoice by Invoice ID
      tags:
        - Invoice
  /api/Payment:
    get:
      consumes: []
      operationId: Payment_Get
      parameters:
        - description: Filter for Payments that have at least one allocation against a given Invoice Transaction ID
          format: int64
          in: query
          name: InvoiceTransactionID
          required: false
          type: integer
        - description: Filter for Payments updated after a given date
          format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/PaymentList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_financials
      summary: Gets list of Payments
      tags:
        - Payment
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Payment_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewPayment"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/Payment"
      security:
        - oauth2:
            - write_financials
      summary: Create new Payment and optionally assign payment allocations to Invoices
      tags:
        - Payment
  "/api/Payment/{id}":
    get:
      consumes: []
      operationId: Payment_GetByID
      parameters:
        - description: Invoice Transaction ID Number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/Payment"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_financials
      summary: Gets Payment by Payment Transaction ID
      tags:
        - Payment
  /api/Project:
    get:
      consumes: []
      operationId: Project_Get
      parameters:
        - description: Only show project records updated after a certain date (UTC)
          format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: 'A column to sort on. Current possible values: "DateUpdated", "DateCreated", "DateUpdated desc", "DateCreated desc"'
          in: query
          name: Sort
          required: false
          type: string
        - description: Filter to the projects that the supplied UserID can add timesheets to
          format: int32
          in: query
          name: TimesheetUserID
          required: false
          type: integer
        - description: Include Archived Projects in the results
          in: query
          name: includeArchived
          required: false
          type: boolean
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ProjectList"
      security:
        - oauth2:
            - read_projects
      summary: Gets list of Projects
      tags:
        - Project
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Project_Post
      parameters:
        - in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewProjectModel"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ProjectDetails"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - write_projects
      summary: Create a Project
      tags:
        - Project
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: Update a Project
      operationId: Project_Put
      parameters:
        - in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/UpdateProjectModel"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ProjectDetails"
      security:
        - oauth2:
            - write_projects
      summary: Update an Project
      tags:
        - Project
  /api/Project/Lookup:
    get:
      consumes: []
      operationId: ProjectLookup
      parameters:
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: Optionally Filter to the projects that the supplied UserID can add timesheets to
          format: int32
          in: query
          name: TimesheetUserID
          required: false
          type: integer
        - description: Optionally Filter for a specific Company ID
          format: int32
          in: query
          name: CompanyIDFK
          required: false
          type: integer
        - description: Search string to match against Project title and Customer name
          in: query
          name: search
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ProjectDropdownList"
      security:
        - oauth2:
            - read_projects
      summary: Gets minimal list of active Projects for the current user
      tags:
        - Project
  "/api/Project/{id}":
    get:
      consumes: []
      operationId: Project_GetByID
      parameters:
        - description: Project ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ProjectDetails"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_projects
      summary: Gets Project by Project ID
      tags:
        - Project
  /api/ProjectMember:
    get:
      consumes: []
      description: Include at least one of ProjectID or UserID parameters.
      operationId: ProjectMember_Get
      parameters:
        - description: Get Project members filtered by ProjectID
          format: int32
          in: query
          name: ProjectID
          required: false
          type: integer
        - description: Get Project members filtered by UserID
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ProjectMemberList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_projects
      summary: Gets list of Project Members
      tags:
        - ProjectMember
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: the Amount columns for Cost, Budget, Rates should be specified as a decimal. Financial amounts assume the currency of the Customer company. Budget units depend on the Budget method set on the Project.
      operationId: ProjectMember_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewProjectMember"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ProjectMemberDetails"
      security:
        - oauth2:
            - write_projects
      summary: Assign a user as a Member of a Project
      tags:
        - ProjectMember
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: Fields are only updated if their field name is in the FieldsToUpdate string collection. The Amount columns for Cost, Budget, Rates if specified should be a decimal. Financial amounts assume the currency of the parent Company. Budget units depend on the Budget method set on the Project.
      operationId: ProjectMember_Put
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/UpdateProjectMember"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ProjectMemberDetails"
      security:
        - oauth2:
            - write_projects
      summary: Update a Member of a Project
      tags:
        - ProjectMember
  /api/ProjectTimesheetCategory:
    get:
      consumes: []
      description: The default sort order is by isBillable desc, Name asc
      operationId: ProjectTimesheetCategory_Get
      parameters:
        - description: Get categories filtered by ProjectID
          format: int32
          in: query
          name: ProjectID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ProjectTimesheetCategoryList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_timesheets
      summary: Gets list of Project Timesheet Categories
      tags:
        - ProjectTimesheetCategory
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: ""
      operationId: ProjectTimesheetCategory_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/AssignProjectTimesheetCategory"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/ProjectTimesheetCategoryDetails"
      security:
        - oauth2:
            - write_projects
      summary: Assign a TimeSheetCategory to a Project.
      tags:
        - ProjectTimesheetCategory
  /api/ScheduleAssignment:
    get:
      consumes: []
      description: Schedule assignments are per-day, and link to a parent Schedule Series.
      operationId: ScheduleAssignment_Get
      parameters:
        - description: Limit results to records updated after the specified date
          format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Filter for schedule assignement  that are  on or after a specific date
          format: date-time
          in: query
          name: ScheduleDateFrom
          required: false
          type: string
        - description: Filter for schedules that are on or before a specific date
          format: date-time
          in: query
          name: ScheduleDateTo
          required: false
          type: string
        - description: Filter to records for a particular Schedule Series
          format: int64
          in: query
          name: ScheduleSeriesID
          required: false
          type: integer
        - description: The UserID of a schedule user to filter assignments for. Only api users with Admin role can see all schedules across all users. Users with ScheduleUser role can access their own ScheduleSeries.
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
        - description: The email of the user who has been scheduled
          in: query
          name: UserEmail
          required: false
          type: string
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: 'Optional sorting instruction. Currently possible values: "DateUpdated", "DateCreated", "DateUpdated desc", "DateCreated desc"'
          in: query
          name: Sort
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ScheduleAssignmentList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_schedule
      summary: Gets list of Schedule Assignments.
      tags:
        - ScheduleAssignment
  /api/ScheduleSeries:
    get:
      consumes: []
      description: Schedule Series represents a strip of time assigned to a user over a date range, for a certain number of hours per day. They can be for Leave or for project work Bookings.
      operationId: ScheduleSeries_Get
      parameters:
        - description: Limit results to records updated after the specified date
          format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Filter for schedules that start on or after a specific date
          format: date-time
          in: query
          name: ScheduleStartDateFrom
          required: false
          type: string
        - description: Filter for schedules that start on or before a specific date
          format: date-time
          in: query
          name: ScheduleStartDateTo
          required: false
          type: string
        - description: Filter for schedules that end on or after a specific date
          format: date-time
          in: query
          name: ScheduleEndDateFrom
          required: false
          type: string
        - description: Filter for schedules that end on or before a specific date
          format: date-time
          in: query
          name: ScheduleEndDateTo
          required: false
          type: string
        - description: The UserID of a schedule user to filter assignments for. Only api users with Admin role can see all schedules across all users. Users with ScheduleUser role can access their own ScheduleSeries.
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
        - description: The email of the user who has been scheduled
          in: query
          name: UserEmail
          required: false
          type: string
        - description: Filter for schedule records linked to a specific timesheeet category
          format: int32
          in: query
          name: TimeSheetCategoryID
          required: false
          type: integer
        - description: Filter for schedule records with a specific timesheeet category name (exact string match)
          in: query
          name: TimeSheetCategoryName
          required: false
          type: string
        - description: Filter to records of a particular leave type
          format: int32
          in: query
          name: LeaveTypeID
          required: false
          type: integer
        - description: Filter to only include books linked to a specific project
          format: int32
          in: query
          name: ProjectID
          required: false
          type: integer
        - description: Filter to only include records linked to projects, where that project belongs to a specific customer company
          format: int32
          in: query
          name: CompanyID
          required: false
          type: integer
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: 'Optional sorting instruction. Currently possible values: "DateUpdated", "DateCreated", "DateUpdated desc", "DateCreated desc"'
          in: query
          name: Sort
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/ScheduleSeriesList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_schedule
      summary: Gets list of Schedule Series
      tags:
        - ScheduleSeries
  /api/Section:
    delete:
      consumes: []
      operationId: Section_Delete
      parameters:
        - description: ""
          format: int64
          in: query
          name: SectionID
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            type: object
      security:
        - oauth2:
            - write_projects
      summary: Delete a Section
      tags:
        - Section
    get:
      consumes: []
      operationId: Section_Get
      parameters:
        - description: Get sections for Project with ProjectID
          format: int32
          in: query
          name: ProjectID
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/SectionList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_projects
      summary: Gets list of Sections
      tags:
        - Section
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Section_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewSection"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/SectionDetails"
      security:
        - oauth2:
            - write_projects
      summary: Create a Section
      tags:
        - Section
  /api/Task:
    delete:
      consumes: []
      operationId: Task_Delete
      parameters:
        - description: ""
          format: int64
          in: query
          name: TaskID
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            type: object
      security:
        - oauth2:
            - write_projects
      summary: Delete a Task
      tags:
        - Task
    get:
      consumes: []
      operationId: Task_Get
      parameters:
        - description: Optional filter to records updated after a specific date.
          format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - description: Number of items per page. Defaults to 20.
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1. Defaults to 1
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: 'Optional sorting instruction. Currently possible values: "DateUpdated", "DateCreated", "DateUpdated desc", "DateCreated desc", "SectionTitle", "Title"'
          in: query
          name: Sort
          required: false
          type: string
        - description: Optional filter to only display tasks linked to a Task Status where isComplete=false, or where isComplete=true
          in: query
          name: isComplete
          required: false
          type: boolean
        - description: Optional filter to only display tasks belonging to a specific ProjectID
          format: int32
          in: query
          name: ProjectID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/TaskList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_projects
      summary: Gets list of Tasks
      tags:
        - Task
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Task_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewTask"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/TaskDetails"
      security:
        - oauth2:
            - write_projects
      summary: Create a Task
      tags:
        - Task
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: Requires TaskID and a list of field names to update. The FieldsToUpdate field accepts a string array containing field names that should be updated.
      operationId: Task_Put
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/UpdateTask"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/TaskDetails"
      security:
        - oauth2:
            - write_projects
      summary: Update a Task.
      tags:
        - Task
  /api/Task/Lookup:
    get:
      consumes: []
      description: Groups Tasks by Section. Default sort is by Section Title followed by Task Title
      operationId: TaskLookup
      parameters:
        - description: (required) The ProjectID to use when filtering Tasks
          format: int32
          in: query
          name: projectID
          required: true
          type: integer
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: (optional) true/false to hide completed tasks. Defaults false
          in: query
          name: hideCompleted
          required: false
          type: boolean
        - description: (optional) Search string to match against Task title. Performs begins-with match
          in: query
          name: search
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/TaskDropdownList"
      security:
        - oauth2:
            - read_projects
      summary: Gets minimal list of Tasks for the current user
      tags:
        - Task
  "/api/Task/{id}":
    get:
      consumes: []
      operationId: Task_GetByID
      parameters:
        - description: Task ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/TaskDetails"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_projects
      summary: Gets Task by Task ID
      tags:
        - Task
  /api/TaskStatus:
    get:
      consumes: []
      operationId: TaskStatus_Get
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/TaskStatusList"
      security:
        - oauth2:
            - read_projects
      summary: Gets list of Task Statuses
      tags:
        - TaskStatus
  /api/TaskType:
    get:
      consumes: []
      operationId: TaskType_Get
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/TaskTypeList"
      security:
        - oauth2:
            - read_projects
      summary: Gets list of Task Types
      tags:
        - TaskType
  /api/Tax:
    get:
      consumes: []
      operationId: Tax_Get
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/TaxList"
      security:
        - oauth2:
            - read_financials
      summary: Get List of Taxes configured in the Avaza account.
      tags:
        - Tax
  /api/Timesheet:
    get:
      consumes: []
      operationId: Timesheet_Get
      parameters:
        - format: date-time
          in: query
          name: UpdatedAfter
          required: false
          type: string
        - format: date-time
          in: query
          name: EntryDateFrom
          required: false
          type: string
        - format: date-time
          in: query
          name: EntryDateTo
          required: false
          type: string
        - description: The UserID of a timesheet user to filter timesheets for. Only api users with certain higher roles can see timesheets across multiple users.
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
        - in: query
          name: UserEmail
          required: false
          type: string
        - in: query
          name: CategoryName
          required: false
          type: string
        - format: int32
          in: query
          name: ProjectID
          required: false
          type: integer
        - in: query
          name: isBillable
          required: false
          type: boolean
        - in: query
          name: isInvoiced
          required: false
          type: boolean
        - in: query
          name: isTimerRunning
          required: false
          type: boolean
        - description: Number of items per page (max 1000)
          format: int32
          in: query
          name: pageSize
          required: false
          type: integer
        - description: Page to display. Starts from 1.
          format: int32
          in: query
          name: pageNumber
          required: false
          type: integer
        - description: Defaults to false. When true, the InvoiceIDFK value will be included in the response.
          in: query
          name: includeInvoiceDetails
          required: false
          type: boolean
        - description: 'Optional sorting instruction. Currently possible values: "DateUpdated", "DateCreated", "DateUpdated desc", "DateCreated desc","EntryDate", "EntryDate desc", "StartTimeLocal","StartTimeLocal desc", "TimeSheetEntryID", "TimeSheetEntryID desc"'
          in: query
          name: Sort
          required: false
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/TimesheetList"
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - read_timesheets
      summary: Gets list of Timsheets
      tags:
        - Timesheet
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      operationId: Timesheet_Post
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/NewTimesheet"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/TimesheetDetails"
      security:
        - oauth2:
            - write_timesheets
      summary: Create a new Timesheet Entry
      tags:
        - Timesheet
    put:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: The FieldsToUpdate field expects a string array collection of the field names you would like updated. Valid fields to update inlcude "ProjectIDFK", "TimeSheetCategoryIDFK", "TaskIDFK", "Duration", "EntryDate", "Notes", "hasStartEndTime", "CustomMetadata". If you intend to provide start/end times on timesheets, this is achieved by including the start time in the EntryDate field (Iso date format), along with a Duration (decimal format).
      operationId: Timesheet_Put
      parameters:
        - description: ""
          in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/UpdateTimesheetModel"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/TimesheetDetails"
      security:
        - oauth2:
            - write_timesheets
      summary: Update a Timesheet
      tags:
        - Timesheet
  "/api/Timesheet/{id}":
    delete:
      consumes: []
      operationId: Timesheet_Delete
      parameters:
        - description: The id of the timesheet entry to be deleted
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            type: object
      security:
        - oauth2:
            - write_timesheets
      summary: Delete a Timesheet Entry
      tags:
        - Timesheet
    get:
      consumes: []
      operationId: Timesheet_GetByID
      parameters:
        - description: Timesheet ID number
          format: int64
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/TimesheetDetails"
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_timesheets
      summary: Gets a Timesheet Entry by Timesheet ID
      tags:
        - Timesheet
  /api/TimesheetSubmission:
    post:
      consumes: []
      description: Either provide a a specific Day (WholeDayOf) or any day in a Week (WholeWeekOf) to submit all draft timesheets in that day or week
      operationId: TimesheetSubmission_Post
      parameters:
        - description: Send email alerts to timesheet approvers. Defaults to true
          in: query
          name: SendNotifications
          required: false
          type: boolean
        - description: A date (yyyy-MM-dd) that falls within  a Week to have all timesheets in that week submitted. Respects the First Day of Week setting in your account Timesheet Settings to determine the week range.
          format: date-time
          in: query
          name: WholeWeekOf
          required: false
          type: string
        - description: A date (yyyy-MM-dd) to submit all timesheets on this day
          format: date-time
          in: query
          name: WholeDayOf
          required: false
          type: string
        - description: The user to submit timesheets for. Defaults to current user. Only allowed to be different from the current user when the current user has rights to Impersonate other users.
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            type: object
      security:
        - oauth2:
            - write_timesheets
      summary: Submit Timesheets for Approval.
      tags:
        - TimesheetSubmission
  /api/TimesheetSummary:
    get:
      consumes: []
      operationId: TimesheetSummary_Get
      parameters:
        - collectionFormat: multi
          description: '(Optional) Combine one, two or three levels of Grouping. Combine these possible grouping values: "Customer", "Project", "Category", "User", "Task", "Year", "Month", "Day", "Week".'
          in: query
          items:
            type: string
          name: model.groupBy
          required: false
          type: array
        - description: (Required) Filter for timesheets greater or equal to the specified date. e.g. 2019-01-25. You can optionally include a time component, otherwise it assumes 00:00
          format: date-time
          in: query
          name: model.entryDateFrom
          required: false
          type: string
        - description: (Required) Filter for timesheets with an entry date smaller or equal to the specified  date. e.g. 2019-01-25. You can optionally include a time component, otherwise it assumes 00:00
          format: date-time
          in: query
          name: model.entryDateTo
          required: false
          type: string
        - collectionFormat: multi
          description: (Optional) Defaults to the current user. Provide one or more UserIDs of Users whose timesheets should be retrieved. If the current user doesn't have impersonation rights, then they will only see their own data.
          in: query
          items:
            format: int32
            type: integer
          name: model.userID
          required: false
          type: array
        - description: (Optional) Filter by Project
          format: int32
          in: query
          name: model.projectID
          required: false
          type: integer
        - description: (Optional) Filter by the billable status of Timesheets.
          in: query
          name: model.isBillable
          required: false
          type: boolean
        - description: (Optional) Filter for timesheets by whether they have been Invoiced or not.
          in: query
          name: model.isInvoiced
          required: false
          type: boolean
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/TimesheetSummaryResult"
      security:
        - oauth2:
            - read_timesheets
      summary: Gets Basic Summary of Timesheet Statistics
      tags:
        - TimesheetSummary
  /api/TimesheetTimer:
    get:
      consumes: []
      operationId: TimesheetTimer_GetRunningTimer
      parameters:
        - description: Optional - User ID number if impersonating a different user. Otherwise assumes the current user. Only users with certain security roles have permission to impersonate other users
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            type: object
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - read_timesheets
      summary: Gets the  Running Timer if there is one for a user.
      tags:
        - TimesheetTimer
  "/api/TimesheetTimer/{id}":
    delete:
      consumes: []
      operationId: TimesheetTimer_StopTimer
      parameters:
        - description: The ID of the existing timesheet entry that needs its timer stopped
          format: int64
          in: path
          name: id
          required: true
          type: integer
        - description: Optional - User ID number if impersonating a different user. Otherwise assumes the current user. Only users with certain security roles have permission to impersonate other users
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            type: object
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - write_timesheets
      summary: Stop the timer running on an existing Timesheet Entry
      tags:
        - TimesheetTimer
    post:
      consumes: []
      operationId: TimesheetTimer_StartTimer
      parameters:
        - description: id of timesheet entry that should be used as the basis for running a timer. If the existing timesheet is not on the current day, or you have start/end times enabled, then a new timesheet will be created for the timer.
          format: int64
          in: path
          name: id
          required: true
          type: integer
        - description: Optional - User ID number if impersonating a different user. Otherwise assumes the current user. Only users with certain security roles have permission to impersonate other users
          format: int32
          in: query
          name: UserID
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Success
          schema:
            type: object
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "404":
          description: Not Found
      security:
        - oauth2:
            - write_timesheets
      summary: Starts a Timer running on an existing Timesheet Entry
      tags:
        - TimesheetTimer
  /api/UserProfile:
    get:
      consumes: []
      description: Admin and Invoice Managers can see all. Other users are limited to seeing their own profile.
      operationId: UserProfile_Get
      parameters:
        - description: Optional list of comma separated role codes to filter users by (e.g. "TimesheetUser,Admin")
          in: query
          name: Roles
          required: false
          type: string
        - in: query
          name: Tags
          required: false
          type: string
        - description: Optional boolean (true/false) to filter to only show current authenticated user (always true for non Admin/InvoiceManager users)
          in: query
          name: CurrentUserOnly
          required: false
          type: boolean
        - description: Optionally filter by Company ID
          format: int32
          in: query
          name: CompanyIDFK
          required: false
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/UserList"
      security:
        - oauth2:
            - read_users
      summary: Get Collection of Users who have roles in the current Avaza account.
      tags:
        - UserProfile
  /api/Webhook:
    delete:
      consumes: []
      operationId: Webhook_DeleteByUrl
      parameters:
        - description: Target URL that should be used to delete subscriptions
          in: query
          name: target_url
          required: true
          type: string
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Subscription Deleted OK
          schema:
            type: object
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - webhook_notifications
      summary: Delete webhook subscription by URL
      tags:
        - Webhook
    get:
      consumes: []
      operationId: Webhook_Get
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/WebhookList"
      security:
        - oauth2:
            - webhook_notifications
      summary: Get list of Webhook Subscriptions
      tags:
        - Webhook
    post:
      consumes:
        - application/json
        - text/json
        - application/xml
        - text/xml
        - application/x-www-form-urlencoded
      description: 'When you receive a webhook, you should respond with Http 200 OK Status Code, otherwise we will retry. To create a webhook, you need both the webhook_notifications scope, as well as the scope for the required entity being monitored.  Event values are: "company_created", "company_deleted", "company_updated", "contact_created", "contact_deleted", "contact_updated", "invoice_created", "invoice_sent","invoice_updated","invoice_deleted", "project_created", "project_deleted", "project_updated", "task_created", "task_updated","task_deleted", "timesheet_created", "timesheet_deleted", "timesheet_updated, "bill_created", "bill_updated".  You can subscribe to any webhook, but you will only receive notifications for data appropriate to the roles of your user account. There is an optional  Secret parameter (string 255 char max). This allows for webhook authentication. If provided, the Secret will be BASE 64 encoded and passed with notications as a basic authentication http header. i.e. Authorization Basic [BASE64 of Secret]"'
      operationId: Webhook_Post
      parameters:
        - in: body
          name: model
          required: true
          schema:
            $ref: "#/definitions/CreateSubscription"
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "201":
          description: Subscription created
          schema:
            $ref: "#/definitions/SubscribeResult"
        "401":
          description: Unauthorized
        "409":
          description: Duplicate subscription already exists
      security:
        - oauth2:
            - webhook_notifications
            - read_contacts
            - read_account
            - read_users
            - read_financials
            - read_projects
            - read_schedule
            - read_timesheets
            - read_expenses
            - write_contacts
            - write_account
            - write_users
            - write_financials
            - write_projects
            - write_schedule
            - write_timesheets
            - write_expenses
      summary: Subscribe to Webhook. On success, returns ID of webhook subscription.
      tags:
        - Webhook
  "/api/Webhook/{id}":
    delete:
      consumes: []
      operationId: Webhook_Delete
      parameters:
        - description: Subscription id to be deleted
          format: int32
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: Subscription deleted ok
          schema:
            type: object
        "401":
          description: Unauthorized
      security:
        - oauth2:
            - webhook_notifications
      summary: Delete Webhook Subscription by ID
      tags:
        - Webhook
    get:
      consumes: []
      operationId: Webhook_GetByID
      parameters:
        - format: int32
          in: path
          name: id
          required: true
          type: integer
      produces:
        - application/json
        - text/json
        - application/xml
        - text/xml
      responses:
        "200":
          description: OK
          schema:
            $ref: "#/definitions/WebhookList"
      security:
        - oauth2:
            - webhook_notifications
      summary: Get Webhook Subscription by SubscriptionID
      tags:
        - Webhook
definitions:
  AccountDetails:
    properties:
      AccountEmail:
        type: string
      AccountID:
        format: int32
        type: integer
      AllowHidingCompletedTasksOnTimesheet:
        type: boolean
      BrandPrimaryColor:
        description: A custom branding color for the account. Available on paid accounts.
        type: string
      BrandPrimaryColorLuminance:
        description: "A determination of the luminance of the Brand Primary Color (possible values: 'Dark', 'Medium', 'Light'). This can be used to determine appropriate font colors to sit on top of the brand color."
        type: string
      CompanyName:
        type: string
      CurrentServerTimeISO:
        description: 'Format: ISO "YYYY-MM-DD HH:mm:ss.SSS"'
        type: string
      DefaultCurrencyCode:
        description: ISO 3 letter base Currency Code for the account
        type: string
      ExpenseApprovalRequired:
        description: Whether the account requires expenses be approved.
        type: boolean
      LockApprovedExpenses:
        description: Approved expenses get locked from subsequent editing by standard expense users.
        type: boolean
      LockApprovedTimesheets:
        type: boolean
      SC:
        type: string
      Subdomain:
        type: string
      TimesheetDayOfWeek:
        format: int32
        type: integer
      TimesheetDisplayFormatCode:
        type: string
      WeeklyTimesheetReminder:
        type: boolean
      has24HourTimesheetFormat:
        type: boolean
      hasStartEndTimesheets:
        type: boolean
    type: object
  AccountTaskTypeDetails:
    properties:
      AccountTaskTypeID:
        format: int32
        type: integer
      Icon:
        type: string
      IconType:
        type: string
      Name:
        type: string
      isDefault:
        type: boolean
    type: object
  AssignProjectTimesheetCategory:
    properties:
      BudgetHours:
        format: double
        type: number
      CostAmount:
        format: double
        type: number
      ProjectIDFK:
        format: int32
        type: integer
      RateAmount:
        format: double
        type: number
      TimesheetCategoryIDFK:
        format: int32
        type: integer
      isBillable:
        type: boolean
      isPayable:
        type: boolean
    type: object
  AssignedToUser:
    properties:
      AssignedToEmail:
        type: string
      AssignedToFirstname:
        type: string
      AssignedToLastname:
        type: string
      AssignedToUserIDFK:
        format: int32
        type: integer
    type: object
  Bill:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      Balance:
        format: double
        type: number
      BillNumber:
        type: string
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      CurrencyCode:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateIssued:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      DateVerified:
        format: date-time
        type: string
      DueDate:
        format: date-time
        type: string
      ExchangeRate:
        format: double
        type: number
      Issuer:
        $ref: "#/definitions/BillIssuerDetails"
      LineItems:
        items:
          $ref: "#/definitions/BillLineItem"
        type: array
      Links:
        $ref: "#/definitions/BillLinks"
      Notes:
        type: string
      Recipient:
        $ref: "#/definitions/BillRecipientDetails"
      Subject:
        type: string
      SupplierPONumber:
        type: string
      TaxAmount:
        format: double
        type: number
      TotalAmount:
        format: double
        type: number
      TransactionID:
        format: int64
        type: integer
      TransactionPrefix:
        type: string
      TransactionStatusCode:
        type: string
      TransactionTaxConfigCode:
        type: string
    type: object
  BillIssuerDetails:
    properties:
      BillingAddress:
        type: string
      BillingAddressCity:
        type: string
      BillingAddressLine:
        type: string
      BillingAddressPostCode:
        type: string
      BillingAddressState:
        type: string
      BillingCountryCode:
        type: string
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
    type: object
  BillLineItem:
    properties:
      Amount:
        format: double
        type: number
      Description:
        type: string
      Discount:
        format: double
        type: number
      InventoryItemIDFK:
        format: int64
        type: integer
      InventoryItemName:
        type: string
      InventoryItemSKU:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      Quantity:
        format: double
        type: number
      TaxAmount:
        format: double
        type: number
      TaxCode:
        type: string
      TaxIDFK:
        format: int32
        type: integer
      TaxName:
        type: string
      TransactionLineItemID:
        format: int64
        type: integer
      UnitPrice:
        format: double
        type: number
    type: object
  BillLinks:
    properties:
      Edit:
        type: string
      View:
        type: string
      WebView:
        type: string
    type: object
  BillList:
    properties:
      Bills:
        items:
          $ref: "#/definitions/Bill"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  BillPayment:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      Balance:
        format: double
        type: number
      CurrencyCode:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateIssued:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      ExchangeRate:
        format: double
        type: number
      Notes:
        type: string
      PaymentAllocations:
        items:
          $ref: "#/definitions/BillPaymentAllocation"
        type: array
      PaymentNumber:
        type: string
      PaymentProviderCode:
        type: string
      SupplierIDFK:
        format: int32
        type: integer
      TotalAmount:
        format: double
        type: number
      TransactionID:
        format: int64
        type: integer
      TransactionPrefix:
        type: string
      TransactionReference:
        type: string
      TransactionStatusCode:
        type: string
    type: object
  BillPaymentAllocation:
    properties:
      AllocationAmount:
        format: double
        type: number
      AllocationDate:
        format: date-time
        type: string
      BillTransactionIDFK:
        format: int64
        type: integer
      PaymentTransactionIDFK:
        format: int64
        type: integer
      TransactionAllocationID:
        format: int64
        type: integer
    type: object
  BillPaymentList:
    properties:
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      Payments:
        items:
          $ref: "#/definitions/BillPayment"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  BillRecipientDetails:
    properties:
      RecipientBillingAddressCity:
        type: string
      RecipientBillingAddressCountryCode:
        type: string
      RecipientBillingAddressLine:
        type: string
      RecipientBillingAddressPostCode:
        type: string
      RecipientBillingAddressState:
        type: string
      RecipientFormattedBillingAddress:
        type: string
    type: object
  Company:
    properties:
      BillingAddress:
        type: string
      BillingAddressCity:
        type: string
      BillingAddressLine:
        type: string
      BillingAddressPostCode:
        type: string
      BillingAddressState:
        type: string
      BillingCountryCode:
        type: string
      Comments:
        type: string
      CompanyID:
        format: int32
        type: integer
      CompanyName:
        type: string
      Contacts:
        items:
          $ref: "#/definitions/CompanyContact"
        type: array
      CurrencyCode:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      DefaultTradingTermIDFK:
        format: int32
        type: integer
      Fax:
        type: string
      Phone:
        type: string
      TaxNumber:
        type: string
      website:
        type: string
    type: object
  CompanyContact:
    properties:
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      ContactID:
        format: int32
        type: integer
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Email:
        type: string
      Firstname:
        type: string
      Lastname:
        type: string
      Mobile:
        type: string
      Phone:
        type: string
      PositionTitle:
        type: string
      TimeZone:
        type: string
    type: object
  CompanyDropdownList:
    properties:
      Companies:
        items:
          $ref: "#/definitions/CompanyMinimal"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  CompanyList:
    properties:
      Companies:
        items:
          $ref: "#/definitions/Company"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  CompanyMinimal:
    properties:
      CompanyID:
        format: int64
        type: integer
      CompanyName:
        type: string
    type: object
  ContactList:
    properties:
      Contacts:
        items:
          $ref: "#/definitions/CompanyContact"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  CreateBooking:
    properties:
      CategoryIDFK:
        format: int32
        type: integer
      DurationType:
        type: string
      EndDate:
        format: date-time
        type: string
      HoursPerDay:
        format: double
        type: number
      Notes:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ScheduleOnDaysOff:
        type: boolean
      StartDate:
        format: date-time
        type: string
      TaskIDFK:
        format: int32
        type: integer
      TotalDuration:
        format: double
        type: number
      UserIDFK:
        format: int32
        type: integer
    type: object
  CreateLeave:
    properties:
      LeaveEndDate:
        format: date-time
        type: string
      LeaveHoursPerDay:
        format: double
        type: number
      LeaveNotes:
        type: string
      LeaveNotify:
        type: boolean
      LeaveStartDate:
        format: date-time
        type: string
      LeaveTypeIDFK:
        format: int32
        type: integer
      LeaveUserIDFK:
        format: int32
        type: integer
    type: object
  CreateSubscription:
    description: New Subscription to be Created
    properties:
      event:
        description: "The event code to be notified about. Possible values: company_created, contact_created, invoice_created, invoice_sent, project_created, task_created"
        type: string
      secret:
        description: Optional Secret string (255 char max). If provided, the secret will be BASE 64 encoded and used as a basic authentication http header with webhook notifications. i.e. Authorization Basic [BASE64 of Secret]"
        type: string
      target_url:
        description: The URL that should be notified of the event.
        type: string
    required:
      - target_url
      - event
    type: object
  CreditNote:
    properties:
      Balance:
        format: double
        type: number
      CreditNoteAllocations:
        items:
          $ref: "#/definitions/CreditNoteAllocation"
        type: array
      CreditNoteLineItems:
        items:
          $ref: "#/definitions/CreditNoteLineItem"
        type: array
      CreditNoteNumber:
        type: string
      CurrencyCode:
        type: string
      CustomerIDFK:
        format: int32
        type: integer
      DateCreated:
        format: date-time
        type: string
      DateIssued:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Notes:
        type: string
      TotalAmount:
        format: double
        type: number
      TransactionID:
        format: int64
        type: integer
      TransactionPrefix:
        type: string
      TransactionStatusCode:
        type: string
    type: object
  CreditNoteAllocation:
    properties:
      AllocationAmount:
        format: double
        type: number
      AllocationDate:
        format: date-time
        type: string
      CreditNoteTransactionIDFK:
        format: int64
        type: integer
      InvoiceTransactionIDFK:
        format: int64
        type: integer
      TransactionAllocationID:
        format: int64
        type: integer
    type: object
  CreditNoteLineItem:
    properties:
      Amount:
        format: double
        type: number
      Description:
        type: string
      Discount:
        format: double
        type: number
      Quantity:
        format: double
        type: number
      TaxAmount:
        format: double
        type: number
      TaxIDFK:
        format: int32
        type: integer
      TransactionLineItemID:
        format: int64
        type: integer
      UnitPrice:
        format: double
        type: number
    type: object
  CreditNoteList:
    properties:
      CreditNotes:
        items:
          $ref: "#/definitions/CreditNote"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  Currency:
    properties:
      CurrencyCode:
        type: string
      DecimalPlaces:
        format: int32
        type: integer
      Name:
        type: string
      Symbol:
        type: string
      Symbol2:
        type: string
    type: object
  CurrencyList:
    properties:
      Currencies:
        items:
          $ref: "#/definitions/Currency"
        type: array
    type: object
  EditBooking:
    properties:
      CategoryIDFK:
        format: int32
        type: integer
      DurationType:
        type: string
      EndDate:
        format: date-time
        type: string
      HoursPerDay:
        format: double
        type: number
      Notes:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ScheduleOnDaysOff:
        type: boolean
      ScheduleSeriesID:
        format: int64
        type: integer
      StartDate:
        format: date-time
        type: string
      TaskIDFK:
        format: int32
        type: integer
      TotalDuration:
        format: double
        type: number
      UserIDFK:
        format: int32
        type: integer
    type: object
  EditLeave:
    properties:
      EndDate:
        format: date-time
        type: string
      HoursPerDay:
        format: double
        type: number
      LeaveTypeIDFK:
        format: int32
        type: integer
      Notes:
        type: string
      ScheduleSeriesID:
        format: int64
        type: integer
      StartDate:
        format: date-time
        type: string
      UserIDFK:
        format: int32
        type: integer
    type: object
  EstimateDetails:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      Balance:
        format: double
        type: number
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      CurrencyCode:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateIssued:
        format: date-time
        type: string
      DateSent:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      DueDate:
        format: date-time
        type: string
      EstimateID:
        format: int64
        type: integer
      EstimateItemNumber:
        type: string
      EstimatePrefix:
        type: string
      EstimateStatusCode:
        type: string
      EstimateTaxConfigCode:
        type: string
      ExchangeRate:
        format: double
        type: number
      Issuer:
        $ref: "#/definitions/IssuerDetails"
      LineItems:
        items:
          $ref: "#/definitions/EstimateLineItemDetails"
        type: array
      Links:
        $ref: "#/definitions/EstimateLinks"
      Notes:
        type: string
      Recipient:
        $ref: "#/definitions/RecipientDetails"
      Subject:
        type: string
      TaxAmount:
        format: double
        type: number
      TotalAmount:
        format: double
        type: number
    type: object
  EstimateLineItemDetails:
    properties:
      Amount:
        format: double
        type: number
      Description:
        type: string
      Discount:
        format: double
        type: number
      EstimateLineItemID:
        format: int64
        type: integer
      InventoryItemIDFK:
        format: int64
        type: integer
      InventoryItemName:
        type: string
      InventoryItemSKU:
        type: string
      Quantity:
        format: double
        type: number
      TaxAmount:
        format: double
        type: number
      TaxCode:
        type: string
      TaxIDFK:
        format: int32
        type: integer
      TaxName:
        type: string
      UnitPrice:
        format: double
        type: number
    type: object
  EstimateLinks:
    properties:
      ClientView:
        type: string
      Edit:
        type: string
      View:
        type: string
    type: object
  EstimateList:
    properties:
      Estimates:
        items:
          $ref: "#/definitions/EstimateDetails"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  ExpenseAttachmentUploadResult:
    properties:
      FileAttachments:
        items:
          $ref: "#/definitions/FileAttachmentDetails"
        type: array
    type: object
  ExpenseCategoryDetails:
    properties:
      Enabled:
        type: boolean
      ExpenseCategoryID:
        format: int32
        type: integer
      Name:
        type: string
      UnitName:
        type: string
      UnitPrice:
        format: double
        type: number
      hasUnitPrice:
        type: boolean
    type: object
  ExpenseCategoryList:
    properties:
      Categories:
        items:
          $ref: "#/definitions/ExpenseCategoryDetails"
        type: array
    type: object
  ExpenseDeleteResult:
    properties:
      ErrorMessage:
        type: string
      ExpenseID:
        format: int64
        type: integer
      Success:
        type: boolean
    type: object
  ExpenseDeleteResultSet:
    properties:
      Results:
        items:
          $ref: "#/definitions/ExpenseDeleteResult"
        type: array
    type: object
  ExpenseDetails:
    properties:
      Amount:
        format: double
        type: number
      AttachmentPreviewURL:
        type: string
      AttachmentURL:
        type: string
      ChargeableStatusCode:
        type: string
      CurrencyCode:
        type: string
      CustomerIDFK:
        format: int32
        type: integer
      CustomerName:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Email:
        type: string
      ExchangeRate:
        format: double
        type: number
      ExpenseApprovalStatusCode:
        type: string
      ExpenseCategoryHasUnitPrice:
        type: boolean
      ExpenseCategoryIDFK:
        format: int32
        type: integer
      ExpenseCategoryName:
        type: string
      ExpenseCategoryUnitName:
        type: string
      ExpenseCategoryUnitPrice:
        format: double
        type: number
      ExpenseDate:
        format: date-time
        type: string
      ExpenseID:
        format: int64
        type: integer
      ExpensePaymentMethodIDFK:
        format: int32
        type: integer
      ExpensePaymentMethodName:
        type: string
      ExpenseReimbursementIDFK:
        format: int64
        type: integer
      ExpenseReimbursementStatusCode:
        type: string
      ExpenseReportIDFK:
        format: int64
        type: integer
      ExpenseReportName:
        type: string
      FileAttachmentIDFK:
        format: int64
        type: integer
      Firstname:
        type: string
      Lastname:
        type: string
      Merchant:
        type: string
      MerchantTaxNumber:
        type: string
      Notes:
        type: string
      ProjectCode:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      Quantity:
        format: double
        type: number
      TaskIDFK:
        format: int32
        type: integer
      TaskTitle:
        type: string
      TaxAmount:
        format: double
        type: number
      TaxIDFK:
        format: int32
        type: integer
      TaxName:
        type: string
      TransactionTaxConfigCode:
        type: string
      TransactionTaxConfigName:
        type: string
      UserIDFK:
        format: int32
        type: integer
      isChargeable:
        type: boolean
      isOfficialExchangeRate:
        type: boolean
      isReimbursable:
        type: boolean
    type: object
  ExpenseGroupDropdownList:
    properties:
      ExpenseGroups:
        items:
          $ref: "#/definitions/ExpenseGroupMinimal"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  ExpenseGroupMinimal:
    properties:
      ExpenseGroupID:
        format: int64
        type: integer
      Name:
        type: string
    type: object
  ExpenseList:
    properties:
      Expenses:
        items:
          $ref: "#/definitions/ExpenseDetails"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  ExpenseMerchantDropdownList:
    properties:
      ExpenseMerchants:
        items:
          $ref: "#/definitions/ExpenseMerchantMinimal"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  ExpenseMerchantMinimal:
    properties:
      MerchantName:
        type: string
    type: object
  ExpensePaymentMethodDropdownList:
    properties:
      ExpensePaymentMethods:
        items:
          $ref: "#/definitions/ExpensePaymentMethodMinimal"
        type: array
    type: object
  ExpensePaymentMethodMinimal:
    properties:
      ExpensePaymentMethodID:
        format: int64
        type: integer
      Name:
        type: string
    type: object
  ExpenseSummaryGroup:
    properties:
      GroupData:
        items:
          $ref: "#/definitions/ExpenseSummaryGroup"
        type: array
      GroupID:
        type: string
      GroupName:
        type: string
      TotalAmount:
        format: double
        type: number
    type: object
  ExpenseSummaryRequest:
    properties:
      ExpenseDateFrom:
        description: (Required) Filter for expenses with expense dates greater or equal to the specified date. e.g. 2019-01-25.
        format: date-time
        type: string
      ExpenseDateTo:
        description: (Required) Filter for expenses with an expense date smaller or equal to the specified  date. e.g. 2019-01-25.
        format: date-time
        type: string
      GroupBy:
        description: '(Optional) Combine one, two or three levels of Grouping. Combine these possible grouping values: "Category", "ChargeableStatus", "Merchant", "ApprovalStatus", "ReimbursementStatus", "Customer", "Project", "User", "Task", "Year", "Month", "Day", "Week".'
        items:
          type: string
        type: array
      ProjectID:
        description: (Optional) Filter by Project
        format: int32
        type: integer
      UserID:
        description: (Optional) Defaults to the current user. Provide one or more UserIDs of Users whose expenses should be retrieved. If the current user doesn't have impersonation rights, then they will only see their own data.
        items:
          format: int32
          type: integer
        type: array
    type: object
  ExpenseSummaryResult:
    properties:
      ExpenseDateFrom:
        format: date-time
        type: string
      ExpenseDateTo:
        format: date-time
        type: string
      GroupData:
        items:
          $ref: "#/definitions/ExpenseSummaryGroup"
        type: array
      GroupingLevels:
        items:
          type: string
        type: array
      TotalAmount:
        format: double
        type: number
      UserID:
        items:
          format: int32
          type: integer
        type: array
    type: object
  FileAttachmentDetails:
    properties:
      FileAttachmentID:
        format: int64
        type: integer
      OriginalFilename:
        type: string
      PreviewBaseURL:
        type: string
      PublicFileURL:
        type: string
      SizeBytes:
        format: int64
        type: integer
    type: object
  FixedAmountDetails:
    properties:
      Amount:
        format: double
        type: number
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      FixedAmountID:
        format: int32
        type: integer
      InventoryItemIDFK:
        format: int64
        type: integer
      InventoryItemName:
        type: string
      Notes:
        type: string
      ProjectCode:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      TaskIDFK:
        format: int32
        type: integer
      TaskTitle:
        type: string
      UpdatedByUserIDFK:
        format: int32
        type: integer
      isInvoiced:
        type: boolean
    type: object
  FixedAmountList:
    properties:
      FixedAmounts:
        items:
          $ref: "#/definitions/FixedAmountDetails"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  InventoryItem:
    properties:
      CostPrice:
        format: double
        type: number
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Description:
        type: string
      InventoryItemID:
        format: int64
        type: integer
      Name:
        type: string
      SKU:
        type: string
      SalePrice:
        format: double
        type: number
      SaleTaxIDFK:
        format: int32
        type: integer
      isHidden:
        type: boolean
    type: object
  InventoryList:
    properties:
      Inventory:
        items:
          $ref: "#/definitions/InventoryItem"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  Invoice:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      Balance:
        format: double
        type: number
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      CurrencyCode:
        type: string
      CustomerPONumber:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateIssued:
        format: date-time
        type: string
      DateSent:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      DueDate:
        format: date-time
        type: string
      ExchangeRate:
        format: double
        type: number
      InvoiceNumber:
        type: string
      Issuer:
        $ref: "#/definitions/IssuerDetails"
      LineItems:
        items:
          $ref: "#/definitions/InvoiceLineItem"
        type: array
      Links:
        $ref: "#/definitions/InvoiceLinks"
      Notes:
        type: string
      Recipient:
        $ref: "#/definitions/RecipientDetails"
      Subject:
        type: string
      TaxAmount:
        format: double
        type: number
      TotalAmount:
        format: double
        type: number
      TransactionID:
        format: int64
        type: integer
      TransactionPrefix:
        type: string
      TransactionStatusCode:
        type: string
      TransactionTaxConfigCode:
        type: string
    type: object
  InvoiceLineItem:
    properties:
      Amount:
        format: double
        type: number
      Description:
        type: string
      Discount:
        format: double
        type: number
      InventoryItemIDFK:
        format: int64
        type: integer
      InventoryItemName:
        type: string
      InventoryItemSKU:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      Quantity:
        format: double
        type: number
      TaxAmount:
        format: double
        type: number
      TaxCode:
        type: string
      TaxIDFK:
        format: int32
        type: integer
      TaxName:
        type: string
      TransactionLineItemID:
        format: int64
        type: integer
      UnitPrice:
        format: double
        type: number
    type: object
  InvoiceLinks:
    properties:
      ClientView:
        type: string
      Edit:
        type: string
      View:
        type: string
    type: object
  InvoiceList:
    properties:
      Invoices:
        items:
          $ref: "#/definitions/Invoice"
        type: array
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      TotalCount:
        format: int32
        type: integer
    type: object
  IssuerDetails:
    properties:
      BillingAddress:
        type: string
      BillingAddressCity:
        type: string
      BillingAddressLine:
        type: string
      BillingAddressPostCode:
        type: string
      BillingAddressState:
        type: string
      BillingCountryCode:
        type: string
      TaxNumber:
        type: string
    type: object
  NewBill:
    description: New Bill to be created
    properties:
      BillNumber:
        description: Pass any string. If left blank it will use the next number in the auto incrementing sequence. If an integer is passed then the largest integer will be use as the seed to auto generate the next invoice number in the sequence.
        type: string
      BillTemplateIDFK:
        description: If left blank the account default invoice template will be used.
        format: int32
        type: integer
      CompanyIDFK:
        description: If left blank then you must specify Company Name.
        format: int32
        type: integer
      CompanyName:
        description: If left blank then you must specify Company ID. Specified Name will be used to match existing customer record. If not matched then it will be used to create a new customer. First Name, Last Name and Email will only be used if it is a new company. If the Company name appears multiple times we will check the email address to find a matching company. If email address doesn't identify a matching company then the invoice creation will be rejected.
        type: string
      CurrencyCode:
        description: Expects ISO Standard 3 character currency code. If left blank the currency will default to account's currency in general setting. For existing companies this field will be ignored and the invoice will use the currency of the customer. For new customers if the currency is not specified then account currency will be used otherwise the specified currency will be used.
        type: string
      DateIssued:
        description: If not specified it will use today's date. The date should be specified as local date.
        format: date-time
        type: string
      DueDate:
        description: It will be auto calculated based on the payment term and issue date. Due Date must be greater than or equal to Issue Date. If the Due Date is specified then Payment Terms will be set to -1 (Custom)
        format: date-time
        type: string
      Email:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      ExchangeRate:
        description: Exchange rate is only valid for invoices in currency other than default account currency. If not specified it will get the market rate based on the Date Issued.
        format: double
        type: number
      Firstname:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      Lastname:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      LineItems:
        items:
          $ref: "#/definitions/NewBillLineItem"
        type: array
      Notes:
        description: Plain UTF8 text. (no HTML). Max 2000 characters
        type: string
      PaymentTerms:
        description: " \"If left blank we will set it to customer default. If specified then it must match one of your existing pre configured payment term periods. Your account starts with:\r

          (-1 --- Custom, 0 --- Upon Receipt, 7 --- 7 Days, 15 --- 15 Days, 30 --- 30 Days, 45 --- 45 Days, 60 --- 60 Days)"
        format: int32
        type: integer
      Subject:
        description: Plain UTF8 text. (no HTML). 255 characters max
        type: string
      SupplierPONumber:
        description: Plain UTF8 text. 100 characters max
        type: string
      TransactionPrefix:
        description: A prefix for the Invoice number. e.g. 'INV'. If left blank it will be set to the account default. Max length 20 characters.
        type: string
      TransactionTaxConfigCode:
        description: Possible values are (EX --- Tax Exclusive, INC --- Tax Inclusive). If left empty it will use the account default.
        type: string
    type: object
  NewBillLineItem:
    description: Line item to be added to new invoice
    properties:
      Description:
        description: Plain UTF8 text. (no HTML)
        type: string
      Discount:
        description: Enter 10.5 to give a 10.5% discount
        format: double
        type: number
      InventoryItemIDFK:
        description: If not specified then Inventory Item Name must be specified.
        format: int32
        type: integer
      InventoryItemName:
        description: If not specified then Inventory item ID must be specified. If specified and not matched to any existing inventory items then a new inventory item will be created. Max 200 characters.
        type: string
      ProjectIDFK:
        description: Optional. Project ID of an Avaza Project that belongs to this customer, so line item is attributed to that Project for reporting.
        format: int32
        type: integer
      Quantity:
        description: The quantity for the line item
        format: double
        type: number
      TaxIDFK:
        description: If specified then it must match an existing Tax ID. If not specified then Tax Name and Tax Percent must be specified.
        format: int32
        type: integer
      TaxName:
        description: Must be specified if the Tax ID is blank. If the Tax Name is specified it will be matched to an existing Tax Name or else a new Tax will be created.
        type: string
      TaxPercent:
        description: The Tax Percent will only be used if a new tax is being created.
        format: double
        type: number
      UnitPrice:
        description: The unit price for the lineitem.
        format: double
        type: number
    required:
      - Quantity
      - UnitPrice
    type: object
  NewBillPayment:
    properties:
      Amount:
        format: double
        type: number
      CompanyIDFK:
        description: Only required if no invoice allocations specified.
        format: int32
        type: integer
      CurrencyCode:
        description: Optional for specifying the Bill Payment's Currency (3 letter ISO Currency Code).
        type: string
      DateIssued:
        description: Date of Payment. If not specified, assumes today.
        format: date-time
        type: string
      ExchangeRate:
        description: Optional. Only used when the Company's currency is different from the Avaza account's base currency. Specifies the exchange rate that should apply between the Company currency and base currency. If not provided we will obtain an up to date exchange rate for the Payment Issue Date.
        format: double
        type: number
      Notes:
        type: string
      PaymentAllocations:
        description: List of amounts within this payment that are allocated to invoices. The sum of these be less than or equal to the payment amount.
        items:
          $ref: "#/definitions/NewBillPaymentAllocation"
        type: array
      PaymentNumber:
        description: Optional. If not specified will be automatically generated
        type: string
      PaymentProviderCode:
        description: Optional for storing the payment provider who was the source of funds.
        type: string
      TransactionPrefix:
        description: Optional to override the default prefix added to Payment Numbers
        type: string
      TransactionReference:
        description: "Optional for storing the reference # of the payment method."
        type: string
    type: object
  NewBillPaymentAllocation:
    properties:
      AllocationAmount:
        description: The Amount being allocated to the bill. Expects same currency as bill currency
        format: double
        type: number
      AllocationDate:
        description: Optional. Defaults to the current time in the Avaza account's timezone. The date the allocation is applied to the bill. Can be different from the Payment Date when doing prepayments etc.
        format: date-time
        type: string
      BillTransactionIDFK:
        description: The Avaza Bill TransactionID that is having a payment amount allocated to it.
        format: int64
        type: integer
    type: object
  NewCompany:
    properties:
      BillingAddress:
        type: string
      BillingAddressCity:
        type: string
      BillingAddressLine:
        type: string
      BillingAddressPostCode:
        type: string
      BillingAddressState:
        type: string
      BillingCountryCode:
        type: string
      Comments:
        type: string
      CompanyName:
        type: string
      CurrencyCode:
        type: string
      Fax:
        type: string
      Phone:
        type: string
      TaxNumber:
        type: string
      website:
        type: string
    required:
      - CompanyName
    type: object
  NewCompanyContact:
    properties:
      CompanyBillingAddress:
        type: string
      CompanyBillingAddressCity:
        type: string
      CompanyBillingAddressCountryCode:
        type: string
      CompanyBillingAddressLine:
        type: string
      CompanyBillingAddressPostCode:
        type: string
      CompanyBillingAddressState:
        type: string
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      ContactEmail:
        type: string
      CurrencyCode:
        type: string
      Firstname:
        type: string
      Lastname:
        type: string
      Mobile:
        type: string
      Phone:
        type: string
      PositionTitle:
        type: string
      UpdateExisting:
        type: boolean
    required:
      - ContactEmail
      - Firstname
      - Lastname
    type: object
  NewEstimate:
    description: New Estimate to be created
    properties:
      CompanyIDFK:
        description: If left blank then you must specify Company Name.
        format: int32
        type: integer
      CompanyName:
        description: If left blank then you must specify Company ID. Specified Name will be used to match existing customer record. If not matched then it will be used to create a new customer. First Name, Last Name and Email will only be used if it is a new company. If the Company name appears multiple times we will check the email address to find a matching company. If email address doesn't identify a matching company then the Estimate creation will be rejected.
        type: string
      CurrencyCode:
        description: Expects ISO Standard 3 character currency code. If left blank the currency will default to account's currency in general setting. For existing companies this field will be ignored and the Estimate will use the currency of the customer. For new customers if the currency is not specified then account currency will be used otherwise the specified currency will be used.
        type: string
      CustomerPONumber:
        description: Plain UTF8 text. 100 characters max
        type: string
      DateIssued:
        description: If not specified it will use today's date. The date should be specified as local date.
        format: date-time
        type: string
      DueDate:
        description: It will be auto calculated based on the payment term and issue date. Due Date must be greater than or equal to Issue Date. If the Due Date is specified then Payment Terms will be set to -1 (Custom)
        format: date-time
        type: string
      Email:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      EstimateNumber:
        description: Pass any string. If left blank it will use the next number in the auto incrementing sequence. If an integer is passed then the largest integer will be use as the seed to auto generate the next Estimate number in the sequence.
        type: string
      EstimatePrefix:
        description: A prefix for the Estimate number. e.g. 'INV'. If left blank it will be set to the account default. Max length 20 characters.
        type: string
      EstimateTaxConfigCode:
        description: Possible values are (EX --- Tax Exclusive, INC --- Tax Inclusive). If left empty it will use the account default.
        type: string
      ExchangeRate:
        description: Exchange rate is only valid for Estimates in currency other than default account currency. If not specified it will get the market rate based on the Date Issued.
        format: double
        type: number
      Firstname:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      InvoiceTemplateIDFK:
        description: If left blank the account default Estimate template will be used.
        format: int32
        type: integer
      Lastname:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      LineItems:
        items:
          $ref: "#/definitions/NewEstimateLineItem"
        type: array
      Notes:
        description: Plain UTF8 text. (no HTML). Max 2000 characters
        type: string
      Subject:
        description: Plain UTF8 text. (no HTML). 255 characters max
        type: string
    type: object
  NewEstimateLineItem:
    description: Line item to be added to new Estimate
    properties:
      Description:
        description: Plain UTF8 text. (no HTML)
        type: string
      Discount:
        description: Enter 10.5 to give a 10.5% discount
        format: double
        type: number
      InventoryItemIDFK:
        description: If not specified then Inventory Item Name must be specified.
        format: int32
        type: integer
      InventoryItemName:
        description: If not specified then Inventory item ID must be specified. If specified and not matched to any existing inventory items then a new inventory item will be created. Max 200 characters.
        type: string
      Quantity:
        description: The quantity for the line item
        format: double
        type: number
      TaxIDFK:
        description: If specified then it must match an existing Tax ID. If not specified then Tax Name and Tax Percent must be specified.
        format: int32
        type: integer
      TaxName:
        description: Must be specified if the Tax ID is blank. If the Tax Name is specified it will be matched to an existing Tax Name or else a new Tax will be created.
        type: string
      TaxPercent:
        description: The Tax Percent will only be used if a new tax is being created.
        format: double
        type: number
      UnitPrice:
        description: The unit price for the lineitem.
        format: double
        type: number
    required:
      - Quantity
      - UnitPrice
    type: object
  NewExpense:
    properties:
      Amount:
        description: Expense Amount (Required). Must be &gt;= 0
        format: double
        type: number
      CurrencyCode:
        description: A 3-letter ISO CurrencyCode for the expense currency. (e.g. USD). If not provided, defaults to the Account base currency.
        type: string
      CustomerIDFK:
        description: The Avaza Customer ID to associate the Expense with. Either this field or CustomerName can be provided.
        format: int32
        type: integer
      CustomerName:
        description: The name of an existing customer in Avaza. Must be an exact (case insensitive) match.
        type: string
      ExchangeRate:
        description: Optional (Only relevant if the expense currency is different to your account currency. If not provided we will look up the market exchange rate for you based on the expense date.) Exchange Rate = Expense Currency Amount / Base Currency Amount (e.g. if Expense currency is in AUD, and Base Currency is in USD, Exchange Rate = AUD $140 / USD $100 = 1.4)
        format: double
        type: number
      ExpenseCategoryIDFK:
        description: The expense category to link the Expense to. If not provided, ExpenseCategoryName must be provided
        format: int32
        type: integer
      ExpenseCategoryName:
        description: Must match an existing expense category name otherwise a new category will be created. If left blank Expense Category ID must be provided.
        type: string
      ExpenseDate:
        description: The date of the expense entry (Required)
        format: date-time
        type: string
      ExpensePaymentMethodIDFK:
        description: (Optional) ID of Expense Payment Method.
        format: int32
        type: integer
      FileAttachmentIDs:
        description: Array of File Attachment IDs to associate with this expense. The files need to have already been uploaded. Currently only accepts a single file.
        items:
          format: int64
          type: integer
        type: array
      GroupTripName:
        description: Links the expense to a Grouping/Trip report. If no matching name found, creates a new Group/Trip Report name.
        type: string
      Merchant:
        description: The name of the merchant.
        type: string
      MerchantTaxNumber:
        description: A Tax number identifier for the merchant.
        type: string
      Notes:
        description: Expense Notes
        type: string
      ProjectIDFK:
        description: The Avaza project ID to associate the Expense with.
        format: int32
        type: integer
      ProjectName:
        description: Can work for matching an expense to a project, but only if it's an exact match for a single project under the customer.
        type: string
      Quantity:
        description: Conditional - available for expenses that are assigned a unit priced based expense category. e.g Mileage
        format: double
        type: number
      TaskIDFK:
        description: (optional) TaskID of a Task to link the new Expense to. A Customer and Project must be provided also.
        format: int32
        type: integer
      TaxIDFK:
        description: Avaza Tax ID the expense belongs to. If left blank then Tax Name must be provided.
        format: int32
        type: integer
      TaxName:
        description: Must exactly match an existing Tax Name that you have configured in Avaza Tax settings. If left blank then Tax ID must be provided.
        type: string
      TransactionTaxConfigCode:
        description: Optional - Enter "INC" if the tax amount is included in the expense amount otherwise enter "EX" when the amount exlcudes the tax. Defaults to "Ex". The tax amount on the expense will be autocalculated.
        type: string
      UserEmail:
        description: The email address of a Timesheet/Expense user in Avaza. If not provided, UserIDFK field must be provided.
        type: string
      UserIDFK:
        description: UserID for a Timesheet/Expense user in Avaza. If not provided, UserEmail field must be provided
        format: int32
        type: integer
      VerifyAndSave:
        description: Pass false if creating a draft expense. True otherwise.
        type: boolean
      isChargeable:
        description: aka Billable. Defaults to false if not provided. If set to true, a CustomerIDFK or CustomerName must be provided.
        type: boolean
      isReimbursable:
        description: Defaults to false if not provided.
        type: boolean
    type: object
  NewInvoice:
    description: New invoice to be created
    properties:
      CompanyIDFK:
        description: If left blank then you must specify Company Name.
        format: int32
        type: integer
      CompanyName:
        description: If left blank then you must specify Company ID. Specified Name will be used to match existing customer record. If not matched then it will be used to create a new customer. First Name, Last Name and Email will only be used if it is a new company. If the Company name appears multiple times we will check the email address to find a matching company. If email address doesn't identify a matching company then the invoice creation will be rejected.
        type: string
      CurrencyCode:
        description: Expects ISO Standard 3 character currency code. If left blank the currency will default to account's currency in general setting. For existing companies this field will be ignored and the invoice will use the currency of the customer. For new customers if the currency is not specified then account currency will be used otherwise the specified currency will be used.
        type: string
      CustomerPONumber:
        description: Plain UTF8 text. 100 characters max
        type: string
      DateIssued:
        description: If not specified it will use today's date. The date should be specified as local date.
        format: date-time
        type: string
      DueDate:
        description: It will be auto calculated based on the payment term and issue date. Due Date must be greater than or equal to Issue Date. If the Due Date is specified then Payment Terms will be set to -1 (Custom)
        format: date-time
        type: string
      Email:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      ExchangeRate:
        description: Exchange rate is only valid for invoices in currency other than default account currency. If not specified it will get the market rate based on the Date Issued.
        format: double
        type: number
      Firstname:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      InvoiceNumber:
        description: Pass any string. If left blank it will use the next number in the auto incrementing sequence. If an integer is passed then the largest integer will be use as the seed to auto generate the next invoice number in the sequence.
        type: string
      InvoiceTemplateIDFK:
        description: If left blank the account default invoice template will be used.
        format: int32
        type: integer
      Lastname:
        description: Specified value will be used to create a new customer contact only if a new customer is being created.
        type: string
      LineItems:
        items:
          $ref: "#/definitions/NewInvoiceLineItem"
        type: array
      Notes:
        description: Plain UTF8 text. (no HTML). Max 2000 characters
        type: string
      PaymentTerms:
        description: " \"If left blank we will set it to customer default. If specified then it must match one of your existing pre configured payment term periods. Your account starts with:\r

          (-1 --- Custom, 0 --- Upon Receipt, 7 --- 7 Days, 15 --- 15 Days, 30 --- 30 Days, 45 --- 45 Days, 60 --- 60 Days)"
        format: int32
        type: integer
      Subject:
        description: Plain UTF8 text. (no HTML). 255 characters max
        type: string
      TransactionPrefix:
        description: A prefix for the Invoice number. e.g. 'INV'. If left blank it will be set to the account default. Max length 20 characters.
        type: string
      TransactionTaxConfigCode:
        description: Possible values are (EX --- Tax Exclusive, INC --- Tax Inclusive). If left empty it will use the account default.
        type: string
    type: object
  NewInvoiceLineItem:
    description: Line item to be added to new invoice
    properties:
      Description:
        description: Plain UTF8 text. (no HTML)
        type: string
      Discount:
        description: Enter 10.5 to give a 10.5% discount
        format: double
        type: number
      InventoryItemIDFK:
        description: If not specified then Inventory Item Name must be specified.
        format: int32
        type: integer
      InventoryItemName:
        description: If not specified then Inventory item ID must be specified. If specified and not matched to any existing inventory items then a new inventory item will be created. Max 200 characters.
        type: string
      ProjectIDFK:
        description: Optional. Project ID of an Avaza Project that belongs to this customer, so line item is attributed to that Project for reporting.
        format: int32
        type: integer
      Quantity:
        description: The quantity for the line item
        format: double
        type: number
      TaxIDFK:
        description: If specified then it must match an existing Tax ID. If not specified then Tax Name and Tax Percent must be specified.
        format: int32
        type: integer
      TaxName:
        description: Must be specified if the Tax ID is blank. If the Tax Name is specified it will be matched to an existing Tax Name or else a new Tax will be created.
        type: string
      TaxPercent:
        description: The Tax Percent will only be used if a new tax is being created.
        format: double
        type: number
      UnitPrice:
        description: The unit price for the lineitem.
        format: double
        type: number
    required:
      - Quantity
      - UnitPrice
    type: object
  NewPayment:
    properties:
      Amount:
        format: double
        type: number
      CustomerIDFK:
        description: Only required if no invoice allocations specified.
        format: int32
        type: integer
      DateIssued:
        description: Date of Payment. If not specified, assumes today.
        format: date-time
        type: string
      ExchangeRate:
        description: Optional. Only used when the Customer's currecy is different from the Avaza account's base currency. Specifies the exchange rate that should apply between the customer currency and base currency. If not provided we will obtain an up to date exchange rate for the Payment Issue Date.
        format: double
        type: number
      Notes:
        type: string
      PaymentAllocations:
        description: List of amounts within this payment that are allocated to invoices. The sum of these be less than or equal to the payment amount.
        items:
          $ref: "#/definitions/NewPaymentAllocation"
        type: array
      PaymentNumber:
        description: Optional. If not specified will be automatically generated
        type: string
      PaymentProviderCode:
        description: Optional for storing the payment provider who was the source of funds.
        type: string
      TransactionPrefix:
        description: Optional to override the default prefix added to Payment Numbers
        type: string
      TransactionReference:
        description: "Optional for storing the reference # of the payment method."
        type: string
    type: object
  NewPaymentAllocation:
    properties:
      AllocationAmount:
        description: The Amount being allocated to the invoice. Expects same currency as invoice currency
        format: double
        type: number
      AllocationDate:
        description: Optional. Defaults to the current time in the Avaza account's timezone. The date the allocation is applied to the invoice. Can be difference from the Payment Date when doing prepayments etc.
        format: date-time
        type: string
      InvoiceTransactionIDFK:
        description: The Avaza Invoice TransactionID that is having a payment amount allocated to it.
        format: int64
        type: integer
    type: object
  NewProjectMember:
    properties:
      BudgetAmount:
        description: Optional
        format: double
        type: number
      CostAmount:
        description: Optional. If not provided, defaults to the User's default Cost Amount.
        format: double
        type: number
      ProjectIDFK:
        description: Required. The ProjectID
        format: int32
        type: integer
      RateAmount:
        description: Optional. If not provided, defaults to the User's default Rate Amount.
        format: double
        type: number
      UserIDFK:
        description: Required. The UserID to assign
        format: int32
        type: integer
      canCommentOnTasks:
        type: boolean
      canCreateTasks:
        type: boolean
      canDeleteTasks:
        type: boolean
      canUpdateTasks:
        type: boolean
      isTimesheetAllowed:
        type: boolean
      isTimesheetApprovalRequired:
        type: boolean
      isTimesheetApprover:
        type: boolean
    type: object
  NewProjectModel:
    properties:
      BudgetAmount:
        format: double
        type: number
      BudgetHours:
        format: double
        type: number
      CompanyIDFK:
        description: An ID of a company in Avaza to create the Project under. You must provide either a CompanyID, or a CompanyName
        format: int32
        type: integer
      CompanyName:
        description: The name for a Company to create the project under. Will create company unless it matches an existing company name
        type: string
      CurrencyCode:
        description: The ISO 3 letter currency code to use when creating a new Company. If not provided, the account's default currency will be used.
        type: string
      EndDate:
        format: date-time
        type: string
      PopulateDefaultProjectMembers:
        description: Defaults to true.
        type: boolean
      ProjectCategoryIDFK:
        format: int32
        type: integer
      ProjectCode:
        description: Used when Manual Project Codes are enabled
        type: string
      ProjectNotes:
        description: Any descriptive notes about the project. (2000 characters max)
        type: string
      ProjectStatusCode:
        type: string
      ProjectTitle:
        description: The title of the new project. (255 characters max)
        type: string
      StartDate:
        format: date-time
        type: string
      TimesheetApprovalRequiredbyDefault:
        type: boolean
      isTaskRequiredOnTimesheet:
        type: boolean
    required:
      - ProjectTitle
    type: object
  NewSection:
    properties:
      EndDateUTC:
        format: date-time
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      StartDateUTC:
        format: date-time
        type: string
      Title:
        type: string
    type: object
  NewTag:
    properties:
      Color:
        description: "Hex color code in format #000000"
        type: string
      Name:
        type: string
    type: object
  NewTask:
    properties:
      AccountTaskTypeIDFK:
        format: int32
        type: integer
      AssignedToUserIDFKs:
        items:
          format: int32
          type: integer
        type: array
      DateDue:
        format: date-time
        type: string
      DateStart:
        format: date-time
        type: string
      Description:
        type: string
      EstimatedEffort:
        description: Decimal hours
        format: double
        type: number
      ProjectIDFK:
        format: int32
        type: integer
      SectionIDFK:
        format: int32
        type: integer
      Tags:
        description: Collection of tags specifying Name and Color (Hex)
        items:
          $ref: "#/definitions/NewTag"
        type: array
      TaskPriorityCode:
        type: string
      Title:
        type: string
    required:
      - ProjectIDFK
      - SectionIDFK
      - Title
    type: object
  NewTimesheet:
    properties:
      CustomMetadata:
        description: Optional. free nvarchar field available via Api to store any additional metadata against a timesheet. We suggest you use Json or your preferred serialisation format. 1000 characters max.
        type: string
      Duration:
        description: The duration of the timesheet, in decimal hours. If null or 0, a timer will be started.
        format: double
        type: number
      EntryDate:
        description: The date of the timesheet entry, with an optional start time component.
        format: date-time
        type: string
      Notes:
        description: Timesheet Notes
        type: string
      ProjectIDFK:
        description: The project to associate the timesheet with.
        format: int32
        type: integer
      TaskIDFK:
        description: Optional. Link the timesheet to a specific task
        format: int32
        type: integer
      TimesheetCategoryIDFK:
        description: The Project timesheet category to link the timesheet to
        format: int32
        type: integer
      UserIDFK:
        description: UserID for a Timesheet user in Avaza
        format: int32
        type: integer
      hasStartEndTime:
        description: If true, the start time will be take from the time component of the Entry Date field, and the end time will be calculated by adding the Duration to the StartDate
        type: boolean
      isInvoiced:
        description: Optional. False by default. Allows you to mark the timesheet as invoiced in an external system.
        type: boolean
    type: object
  Payment:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      Balance:
        format: double
        type: number
      CurrencyCode:
        type: string
      CustomerIDFK:
        format: int32
        type: integer
      DateCreated:
        format: date-time
        type: string
      DateIssued:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      ExchangeRate:
        format: double
        type: number
      Notes:
        type: string
      PaymentAllocations:
        items:
          $ref: "#/definitions/PaymentAllocation"
        type: array
      PaymentNumber:
        type: string
      PaymentProviderCode:
        type: string
      TotalAmount:
        format: double
        type: number
      TransactionID:
        format: int64
        type: integer
      TransactionPrefix:
        type: string
      TransactionReference:
        type: string
      TransactionStatusCode:
        type: string
    type: object
  PaymentAllocation:
    properties:
      AllocationAmount:
        format: double
        type: number
      AllocationDate:
        format: date-time
        type: string
      InvoiceTransactionIDFK:
        format: int64
        type: integer
      PaymentTransactionIDFK:
        format: int64
        type: integer
      TransactionAllocationID:
        format: int64
        type: integer
    type: object
  PaymentList:
    properties:
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      Payments:
        items:
          $ref: "#/definitions/Payment"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  ProjectCompanyGroup:
    properties:
      CompanyID:
        format: int64
        type: integer
      CompanyName:
        type: string
      projects:
        items:
          $ref: "#/definitions/ProjectDropdownSelection"
        type: array
    type: object
  ProjectDetails:
    properties:
      BudgetAmount:
        format: double
        type: number
      BudgetHours:
        format: double
        type: number
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      DefaultAccountTaskTypeIDFK:
        format: int32
        type: integer
      DefaultAccountTaskTypeName:
        type: string
      EndDate:
        format: date-time
        type: string
      Members:
        items:
          $ref: "#/definitions/ProjectMemberDetails"
        type: array
      Notes:
        type: string
      ProjectBillableTypeCode:
        description: "Possible values: CategoryHourly, NoRate, NotBillable, PersonHourly, ProjectHourly"
        type: string
      ProjectBudgetTypeCode:
        description: "Possible Values: CategoryHours, NoBudget, PersonHours, ProjectFees, ProjectHours"
        type: string
      ProjectCategoryColor:
        description: "Html Hex Color Code starting with #"
        type: string
      ProjectCategoryIDFK:
        format: int32
        type: integer
      ProjectCategoryName:
        type: string
      ProjectCode:
        type: string
      ProjectHourlyRate:
        format: double
        type: number
      ProjectID:
        format: int32
        type: integer
      ProjectOwnerUserIDFK:
        format: int32
        type: integer
      ProjectStatusCode:
        description: "Possible values: NotStarted, InProgress, Complete"
        type: string
      ProjectTags:
        items:
          $ref: "#/definitions/ProjectTagItem"
        type: array
      Sections:
        items:
          $ref: "#/definitions/ProjectSectionDetails"
        type: array
      StartDate:
        format: date-time
        type: string
      Title:
        type: string
      isArchived:
        type: boolean
      isTaskRequiredOnTimesheet:
        type: boolean
    type: object
  ProjectDropdownList:
    properties:
      PageSize:
        description: Current page size
        format: int32
        type: integer
      companies:
        description: List of Projects grouped by Customer Name
        items:
          $ref: "#/definitions/ProjectCompanyGroup"
        type: array
      hasMore:
        description: More records probably exist
        type: boolean
      pageNumber:
        description: Current page number (1 based)
        format: int32
        type: integer
    type: object
  ProjectDropdownSelection:
    properties:
      ProjectCode:
        type: string
      ProjectID:
        format: int64
        type: integer
      Title:
        type: string
    type: object
  ProjectList:
    properties:
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      Projects:
        items:
          $ref: "#/definitions/ProjectListDetails"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  ProjectListDetails:
    properties:
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      DefaultAccountTaskTypeIDFK:
        format: int32
        type: integer
      DefaultAccountTaskTypeName:
        type: string
      Notes:
        type: string
      ProjectCategoryIDFK:
        format: int64
        type: integer
      ProjectCategoryName:
        type: string
      ProjectCode:
        type: string
      ProjectID:
        format: int32
        type: integer
      ProjectOwnerUserIDFK:
        format: int64
        type: integer
      Title:
        type: string
      isArchived:
        type: boolean
      isTaskRequiredOnTimesheet:
        type: boolean
    type: object
  ProjectMemberDetails:
    properties:
      BudgetAmount:
        format: double
        type: number
      CostAmount:
        format: double
        type: number
      Email:
        type: string
      Firstname:
        type: string
      Fullname:
        type: string
      Lastname:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      RateAmount:
        format: double
        type: number
      UserIDFK:
        format: int32
        type: integer
      canCommentOnTasks:
        type: boolean
      canCreateTasks:
        type: boolean
      canDeleteTasks:
        type: boolean
      canUpdateTasks:
        type: boolean
      isMemberDisabled:
        type: boolean
      isTimesheetAllowed:
        type: boolean
      isTimesheetApprovalRequired:
        type: boolean
      isTimesheetApprover:
        type: boolean
    type: object
  ProjectMemberList:
    properties:
      ProjectMembers:
        items:
          $ref: "#/definitions/ProjectMemberDetails"
        type: array
    type: object
  ProjectSectionDetails:
    properties:
      DisplayOrder:
        format: int32
        type: integer
      EndDate:
        format: date-time
        type: string
      SectionID:
        format: int32
        type: integer
      StartDate:
        format: date-time
        type: string
      Title:
        type: string
    type: object
  ProjectTagItem:
    properties:
      Name:
        type: string
      ProjectTagID:
        format: int32
        type: integer
    type: object
  ProjectTimesheetCategoryDetails:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      BudgetHours:
        format: double
        type: number
      CostAmount:
        format: double
        type: number
      Name:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      RateAmount:
        format: double
        type: number
      TimeSheetCategoryIDFK:
        format: int32
        type: integer
      isBillable:
        type: boolean
      isDisabled:
        type: boolean
      isPayable:
        type: boolean
    type: object
  ProjectTimesheetCategoryList:
    properties:
      Categories:
        items:
          $ref: "#/definitions/ProjectTimesheetCategoryDetails"
        type: array
    type: object
  RecipientDetails:
    properties:
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      RecipientBillingAddressCity:
        type: string
      RecipientBillingAddressCountryCode:
        type: string
      RecipientBillingAddressLine:
        type: string
      RecipientBillingAddressPostCode:
        type: string
      RecipientBillingAddressState:
        type: string
      RecipientFormattedBillingAddress:
        type: string
    type: object
  RoleDetails:
    properties:
      RoleCode:
        type: string
      RoleName:
        type: string
    type: object
  ScheduleAssignmentDetails:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Duration:
        format: double
        type: number
      ScheduleAssignmentID:
        format: int64
        type: integer
      ScheduleDate:
        format: date-time
        type: string
      ScheduleSeriesIDFK:
        format: int64
        type: integer
      UserIDFK:
        format: int32
        type: integer
    type: object
  ScheduleAssignmentList:
    properties:
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      ScheduleAssignments:
        items:
          $ref: "#/definitions/ScheduleAssignmentDetails"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  ScheduleSeriesDetails:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      EndDate:
        format: date-time
        type: string
      Firstname:
        type: string
      HoursPerDay:
        format: double
        type: number
      Lastname:
        type: string
      LeaveTypeIDFK:
        format: int32
        type: integer
      LeaveTypeName:
        type: string
      Notes:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      ScheduleOnDaysOff:
        type: boolean
      ScheduleSeriesID:
        format: int64
        type: integer
      StartDate:
        format: date-time
        type: string
      TaskIDFK:
        format: int32
        type: integer
      TaskTitle:
        type: string
      TimeSheetCategoryIDFK:
        format: int32
        type: integer
      TimeSheetCategoryName:
        type: string
      TotalDuration:
        format: double
        type: number
      UpdatedByUserIDFK:
        format: int32
        type: integer
      UserIDFK:
        format: int32
        type: integer
    type: object
  ScheduleSeriesList:
    properties:
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      ScheduleSeries:
        items:
          $ref: "#/definitions/ScheduleSeriesDetails"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  SectionDetails:
    properties:
      DisplayOrder:
        format: int32
        type: integer
      EndDate:
        format: date-time
        type: string
      EndDateUTC:
        format: date-time
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      SectionID:
        format: int32
        type: integer
      StartDate:
        format: date-time
        type: string
      StartDateUTC:
        format: date-time
        type: string
      Title:
        type: string
    type: object
  SectionList:
    properties:
      Sections:
        items:
          $ref: "#/definitions/SectionDetails"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  SubscribeResult:
    properties:
      ID:
        format: int32
        type: integer
    type: object
  TagItem:
    properties:
      Color:
        type: string
      Name:
        type: string
      TagID:
        format: int64
        type: integer
    type: object
  TaskDetails:
    properties:
      AccountTaskTypeIDFK:
        format: int32
        type: integer
      ActualTime:
        format: double
        type: number
      AssignedToUsers:
        items:
          $ref: "#/definitions/AssignedToUser"
        type: array
      DateCompleted:
        format: date-time
        type: string
      DateCreated:
        format: date-time
        type: string
      DateDue:
        format: date-time
        type: string
      DateStart:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Description:
        type: string
      DescriptionNoHTML:
        type: string
      EstimatedEffort:
        format: double
        type: number
      PercentComplete:
        format: double
        type: number
      ProjectCode:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      SectionIDFK:
        format: int32
        type: integer
      SectionTitle:
        type: string
      Tags:
        items:
          $ref: "#/definitions/TagItem"
        type: array
      TaskID:
        format: int32
        type: integer
      TaskPriorityCode:
        type: string
      TaskPriorityName:
        type: string
      TaskStatusCode:
        type: string
      TaskStatusName:
        type: string
      Title:
        type: string
      isCompleteStatus:
        type: boolean
    type: object
  TaskDropdownList:
    properties:
      PageSize:
        description: Current page size
        format: int32
        type: integer
      hasMore:
        description: More records probably exist
        type: boolean
      pageNumber:
        description: Current page number (1 based)
        format: int32
        type: integer
      sections:
        description: List of Task grouped by Section
        items:
          $ref: "#/definitions/TaskSectionGroup"
        type: array
    type: object
  TaskDropdownSelection:
    properties:
      TaskID:
        type: string
      Title:
        type: string
    type: object
  TaskList:
    properties:
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      Tasks:
        items:
          $ref: "#/definitions/TaskDetails"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  TaskSectionGroup:
    properties:
      SectionTitle:
        type: string
      tasks:
        items:
          $ref: "#/definitions/TaskDropdownSelection"
        type: array
    type: object
  TaskStatusDetails:
    properties:
      AccountTaskTypeIDFK:
        format: int32
        type: integer
      Color:
        type: string
      DisplayOrder:
        format: int32
        type: integer
      Name:
        type: string
      TaskStatusCode:
        type: string
      TaskTypeName:
        type: string
      isComplete:
        type: boolean
    type: object
  TaskStatusList:
    properties:
      statuses:
        items:
          $ref: "#/definitions/TaskStatusDetails"
        type: array
    type: object
  TaskTypeList:
    properties:
      tasktypes:
        items:
          $ref: "#/definitions/AccountTaskTypeDetails"
        type: array
    type: object
  TaxComponent:
    properties:
      ComponentTaxCode:
        type: string
      Name:
        type: string
      Percentage:
        format: double
        type: number
      TaxComponentID:
        format: int32
        type: integer
      TaxIDFK:
        format: int32
        type: integer
      isCompound:
        type: boolean
    type: object
  TaxItem:
    properties:
      CalculatedPercent:
        format: double
        type: number
      Name:
        type: string
      TaxCode:
        type: string
      TaxComponents:
        items:
          $ref: "#/definitions/TaxComponent"
        type: array
      TaxID:
        format: int32
        type: integer
    type: object
  TaxList:
    properties:
      Taxes:
        items:
          $ref: "#/definitions/TaxItem"
        type: array
    type: object
  TimesheetDetails:
    properties:
      ApprovedBy:
        type: string
      CategoryName:
        type: string
      CustomMetadata:
        type: string
      CustomerIDFK:
        format: int32
        type: integer
      CustomerName:
        type: string
      DateApproved:
        format: date-time
        type: string
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Duration:
        format: double
        type: number
      Email:
        type: string
      EndTimeLocal:
        format: date-time
        type: string
      EndTimeUTC:
        format: date-time
        type: string
      EntryDate:
        format: date-time
        type: string
      Firstname:
        type: string
      HasTimer:
        type: boolean
      InvoiceIDFK:
        format: int64
        type: integer
      InvoiceLineItemIDFK:
        format: int64
        type: integer
      Lastname:
        type: string
      Notes:
        type: string
      ProjectCode:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      StartTimeLocal:
        format: date-time
        type: string
      StartTimeUTC:
        format: date-time
        type: string
      TaskIDFK:
        format: int32
        type: integer
      TaskTitle:
        type: string
      TimerStartedAtUTC:
        format: date-time
        type: string
      TimesheetCategoryIDFK:
        format: int32
        type: integer
      TimesheetEntryApprovalStatusCode:
        type: string
      TimesheetEntryID:
        format: int64
        type: integer
      TimesheetUserTimeZone:
        type: string
      UserIDFK:
        format: int32
        type: integer
      isBillable:
        type: boolean
      isInvoiced:
        type: boolean
    type: object
  TimesheetList:
    properties:
      PageNumber:
        format: int32
        type: integer
      PageSize:
        format: int32
        type: integer
      Timesheets:
        items:
          $ref: "#/definitions/TimesheetListDetails"
        type: array
      TotalCount:
        format: int32
        type: integer
    type: object
  TimesheetListDetails:
    properties:
      ApprovedBy:
        type: string
      CategoryName:
        type: string
      CustomMetadata:
        type: string
      CustomerIDFK:
        format: int32
        type: integer
      CustomerName:
        type: string
      DateApproved:
        format: date-time
        type: string
      DateCreated:
        format: date-time
        type: string
      DateUpdated:
        format: date-time
        type: string
      Duration:
        format: double
        type: number
      Email:
        type: string
      EndTimeLocal:
        format: date-time
        type: string
      EndTimeUTC:
        format: date-time
        type: string
      EntryDate:
        format: date-time
        type: string
      Firstname:
        type: string
      HasTimer:
        type: boolean
      InvoiceIDFK:
        description: This InvoiceIDFK is only included when the api get parameter includeInvoiceDetails==true
        format: int64
        type: integer
      InvoiceLineItemIDFK:
        format: int64
        type: integer
      Lastname:
        type: string
      Notes:
        type: string
      ProjectCode:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      ProjectTitle:
        type: string
      StartTimeLocal:
        format: date-time
        type: string
      StartTimeUTC:
        format: date-time
        type: string
      TaskIDFK:
        format: int32
        type: integer
      TaskTitle:
        type: string
      TimerStartedAtUTC:
        format: date-time
        type: string
      TimesheetCategoryIDFK:
        format: int32
        type: integer
      TimesheetEntryApprovalStatusCode:
        type: string
      TimesheetEntryID:
        format: int64
        type: integer
      TimesheetUserTimeZone:
        type: string
      UserIDFK:
        format: int32
        type: integer
      isBillable:
        type: boolean
      isInvoiced:
        type: boolean
    type: object
  TimesheetSummaryGroup:
    properties:
      BillableHours:
        format: double
        type: number
      GroupData:
        items:
          $ref: "#/definitions/TimesheetSummaryGroup"
        type: array
      GroupID:
        type: string
      GroupName:
        type: string
      TotalHours:
        format: double
        type: number
    type: object
  TimesheetSummaryRequest:
    properties:
      EntryDateFrom:
        description: (Required) Filter for timesheets greater or equal to the specified date. e.g. 2019-01-25. You can optionally include a time component, otherwise it assumes 00:00
        format: date-time
        type: string
      EntryDateTo:
        description: (Required) Filter for timesheets with an entry date smaller or equal to the specified  date. e.g. 2019-01-25. You can optionally include a time component, otherwise it assumes 00:00
        format: date-time
        type: string
      GroupBy:
        description: '(Optional) Combine one, two or three levels of Grouping. Combine these possible grouping values: "Customer", "Project", "Category", "User", "Task", "Year", "Month", "Day", "Week".'
        items:
          type: string
        type: array
      ProjectID:
        description: (Optional) Filter by Project
        format: int32
        type: integer
      UserID:
        description: (Optional) Defaults to the current user. Provide one or more UserIDs of Users whose timesheets should be retrieved. If the current user doesn't have impersonation rights, then they will only see their own data.
        items:
          format: int32
          type: integer
        type: array
      isBillable:
        description: (Optional) Filter by the billable status of Timesheets.
        type: boolean
      isInvoiced:
        description: (Optional) Filter for timesheets by whether they have been Invoiced or not.
        type: boolean
    type: object
  TimesheetSummaryResult:
    properties:
      BillableHours:
        format: double
        type: number
      EntryDateFrom:
        format: date-time
        type: string
      EntryDateTo:
        format: date-time
        type: string
      GroupData:
        items:
          $ref: "#/definitions/TimesheetSummaryGroup"
        type: array
      GroupingLevels:
        items:
          type: string
        type: array
      TotalHours:
        format: double
        type: number
      UserID:
        items:
          format: int32
          type: integer
        type: array
    type: object
  UpdateCompany:
    properties:
      BillingAddress:
        type: string
      BillingAddressCity:
        type: string
      BillingAddressLine:
        type: string
      BillingAddressPostCode:
        type: string
      BillingAddressState:
        type: string
      BillingCountryCode:
        type: string
      Comments:
        type: string
      CompanyID:
        format: int32
        type: integer
      CompanyName:
        type: string
      Fax:
        type: string
      FieldsToUpdate:
        items:
          type: string
        type: array
      Phone:
        type: string
      TaxNumber:
        type: string
      website:
        type: string
    type: object
  UpdateExpense:
    properties:
      Amount:
        description: Expense Amount (Required). Must be &gt;= 0
        format: double
        type: number
      CurrencyCode:
        description: A 3-letter ISO CurrencyCode for the expense currency. (e.g. USD). If not provided, defaults to the Account base currency.
        type: string
      CustomerIDFK:
        description: The Avaza Customer ID to associate the Expense with.
        format: int32
        type: integer
      ExchangeRate:
        description: Optional (Only relevant if the expense currency is different to your account currency. If not provided we will look up the market exchange rate for you based on the expense date.) Exchange Rate = Expense Currency Amount / Base Currency Amount (e.g. if Expense currency is in AUD, and Base Currency is in USD, Exchange Rate = AUD $140 / USD $100 = 1.4)
        format: double
        type: number
      ExpenseCategoryIDFK:
        description: The expense category to link the Expense to.
        format: int32
        type: integer
      ExpenseDate:
        description: The date of the expense entry
        format: date-time
        type: string
      ExpenseID:
        format: int64
        type: integer
      ExpensePaymentMethodIDFK:
        description: (Optional) ID of Expense Payment Method.
        format: int32
        type: integer
      FieldsToUpdate:
        items:
          type: string
        type: array
      FileAttachmentIDs:
        description: Array of File Attachment IDs to associate with this expense. The files need to have already been uploaded. Currently only accepts a single file.
        items:
          format: int64
          type: integer
        type: array
      GroupTripName:
        description: Links the expense to a Grouping/Trip report. If no matching name found, creates a new Group/Trip Report name.
        type: string
      Merchant:
        description: The name of the merchant.
        type: string
      MerchantTaxNumber:
        description: A Tax number identifier for the merchant.
        type: string
      Notes:
        description: Expense Notes
        type: string
      ProjectIDFK:
        description: The Avaza project ID to associate the Expense with.
        format: int32
        type: integer
      Quantity:
        description: Conditional - available for expenses that are assigned a unit priced based expense category. e.g Mileage
        format: double
        type: number
      TaskIDFK:
        description: (optional) TaskID of a Task to link the new Expense to. A Customer and Project must be provided also.
        format: int32
        type: integer
      TaxIDFK:
        description: Avaza Tax ID the expense belongs to.
        format: int32
        type: integer
      TransactionTaxConfigCode:
        description: Optional - Enter "INC" if the tax amount is included in the expense amount otherwise enter "EX" when the amount exlcudes the tax. Defaults to "Ex". The tax amount on the expense will be autocalculated.
        type: string
      VerifyAndSave:
        description: Pass false if creating a draft expense. True otherwise.
        type: boolean
      isChargeable:
        description: aka Billable. Defaults to false if not provided. If set to true, a CustomerIDFK or CustomerName must be provided.
        type: boolean
      isReimbursable:
        description: Defaults to false if not provided.
        type: boolean
    required:
      - ExpenseID
      - FieldsToUpdate
    type: object
  UpdateProjectMember:
    properties:
      BudgetAmount:
        description: A new Budget Amount. Defaults to null.
        format: double
        type: number
      CostAmount:
        description: A new Cost Amount. Defaults to null.
        format: double
        type: number
      FieldsToUpdate:
        description: A string array of field names to be updated.
        items:
          type: string
        type: array
      ProjectIDFK:
        description: Required. The ProjectID
        format: int32
        type: integer
      RateAmount:
        description: A new Rate Amount. Defaults to null.
        format: double
        type: number
      UserIDFK:
        description: Required. The UserID
        format: int32
        type: integer
      canCommentOnTasks:
        type: boolean
      canCreateTasks:
        type: boolean
      canDeleteTasks:
        type: boolean
      canUpdateTasks:
        type: boolean
      isTimesheetAllowed:
        type: boolean
      isTimesheetApprovalRequired:
        type: boolean
      isTimesheetApprover:
        type: boolean
    required:
      - ProjectIDFK
      - UserIDFK
      - FieldsToUpdate
    type: object
  UpdateProjectModel:
    properties:
      BudgetAmount:
        format: double
        type: number
      BudgetHours:
        format: double
        type: number
      EndDate:
        format: date-time
        type: string
      FieldsToUpdate:
        description: ""
        items:
          type: string
        type: array
      ProjectBillableTypeCode:
        description: "The billing method of the project. (string, optional) Possible values: CategoryHourly, NoRate, NotBillable, PersonHourly, ProjectHourly"
        type: string
      ProjectBudgetTypeCode:
        description: "The project budgeting type. (string, optional) Possible values: NoBudget, PersonHours, ProjectFees, ProjectHours, CategoryHours"
        type: string
      ProjectCategoryIDFK:
        format: int32
        type: integer
      ProjectID:
        description: The ID of the Project to update
        format: int32
        type: integer
      ProjectNotes:
        description: (optional) Any descriptive notes about the project. (2000 characters max)
        type: string
      ProjectStatusCode:
        description: "Update the project status (string, optional): (Possible values: NotStarted, InProgress, Complete, OnHold)"
        type: string
      ProjectTitle:
        description: (optional) An updated project title. (255 characters max)
        type: string
      StartDate:
        format: date-time
        type: string
      TimesheetApprovalRequiredbyDefault:
        description: Whether timesheet approval should be required by default for newly added project members.
        type: boolean
      isTaskRequiredOnTimesheet:
        description: Whether timesheets entered against this project require a task to be selected.
        type: boolean
    type: object
  UpdateTask:
    properties:
      AssignedToUserIDFK:
        items:
          format: int32
          type: integer
        type: array
      DateDue:
        format: date-time
        type: string
      DateStart:
        format: date-time
        type: string
      Description:
        type: string
      EstimatedEffort:
        description: Decimal hours
        format: double
        type: number
      FieldsToUpdate:
        items:
          type: string
        type: array
      PercentComplete:
        format: int32
        type: integer
      SectionIDFK:
        format: int32
        type: integer
      Tags:
        items:
          $ref: "#/definitions/NewTag"
        type: array
      TaskID:
        format: int32
        type: integer
      TaskPriorityCode:
        type: string
      TaskStatusCode:
        type: string
      Title:
        type: string
    required:
      - TaskID
      - FieldsToUpdate
    type: object
  UpdateTimesheetModel:
    properties:
      CustomMetadata:
        description: Optional. free nvarchar field available via Api to store any additional metadata against a timesheet. We suggest you use Json or your preferred serialisation format. 1000 characters max.
        type: string
      Duration:
        format: double
        type: number
      EntryDate:
        format: date-time
        type: string
      FieldsToUpdate:
        items:
          type: string
        type: array
      Notes:
        type: string
      ProjectIDFK:
        format: int32
        type: integer
      TaskIDFK:
        format: int32
        type: integer
      TimeSheetEntryID:
        format: int64
        type: integer
      TimesheetCategoryIDFK:
        format: int32
        type: integer
      hasStartEndTime:
        type: boolean
    required:
      - TimeSheetEntryID
      - FieldsToUpdate
      - ProjectIDFK
    type: object
  UserDetails:
    properties:
      AccountIDFK:
        format: int32
        type: integer
      CompanyIDFK:
        format: int32
        type: integer
      CompanyName:
        type: string
      DefaultBillableRate:
        format: double
        type: number
      DefaultCostRate:
        format: double
        type: number
      Email:
        type: string
      Firstname:
        type: string
      FridayAvailableHours:
        format: double
        type: number
      IANATimezone:
        description: IANA tz database timezone name
        type: string
      Lastname:
        type: string
      Mobile:
        type: string
      MondayAvailableHours:
        format: double
        type: number
      Phone:
        type: string
      PositionTitle:
        type: string
      Roles:
        items:
          $ref: "#/definitions/RoleDetails"
        type: array
      SaturdayAvailableHours:
        format: double
        type: number
      SundayAvailableHours:
        format: double
        type: number
      Tags:
        items:
          $ref: "#/definitions/UserTagDetails"
        type: array
      ThursdayAvailableHours:
        format: double
        type: number
      TimeZone:
        description: Windows Timezone ID
        type: string
      TuesdayAvailableHours:
        format: double
        type: number
      UserID:
        format: int32
        type: integer
      WednesdayAvailableHours:
        format: double
        type: number
      isTeamMember:
        type: boolean
    type: object
  UserList:
    properties:
      Users:
        items:
          $ref: "#/definitions/UserDetails"
        type: array
    type: object
  UserTagDetails:
    properties:
      UserTagID:
        format: int32
        type: integer
      UserTagName:
        type: string
    type: object
  WebhookDetails:
    properties:
      EventCode:
        type: string
      NotificationURL:
        type: string
      SubscriptionID:
        format: int32
        type: integer
      UserIDFK:
        format: int32
        type: integer
    type: object
  WebhookList:
    properties:
      Webhooks:
        items:
          $ref: "#/definitions/WebhookDetails"
        type: array
    type: object
