openapi: 3.0.1
info:
  title: 'Invoice Ninja API Reference.'
  description: |
          ---
          
          ![Invoice Ninja](https://invoicing.co/images/new_logo.png)
          
          ## Introduction
          Welcome to the Invoice Ninja API documentation, your comprehensive guide to integrating Invoice Ninja's powerful features into your applications. Whether you're building a custom client, automating workflows, or integrating with other systems, our API provides the tools you need to streamline your invoicing and billing processes.
          
          ---
        
          ### What is Invoice Ninja?
          Invoice Ninja is a robust source-available platform designed to simplify invoicing, billing, and payment management for freelancers, small businesses, and enterprises alike. With a user-friendly interface, customizable templates, and a suite of powerful features, Invoice Ninja empowers businesses to create professional invoices, track expenses, manage clients, and get paid faster.

          ---
          
          ### Client Libraries
          PHP SDK can be found [here](https://github.com/invoiceninja/sdk-php)
          Go SDK can be found [here](https://github.com/AshkanYarmoradi/go-invoice-ninja)
          
          ---

          ### Why use the Invoice Ninja API?
          The Invoice Ninja API allows developers to extend the functionality of Invoice Ninja by programmatically accessing and manipulating data within their Invoice Ninja accounts. With the API, you can automate repetitive tasks, integrate with third-party services, and build custom solutions tailored to your specific business needs.
          
          ---

          ### Getting Started
          To get started with the Invoice Ninja API, you'll need an active Invoice Ninja account (or your own self hosted installation) and API credentials. If you haven't already done so, sign up for an account at Invoice Ninja and generate your API keys from the settings section.

          Once you have your API credentials, you can start exploring the API endpoints, authentication methods, request and response formats, and more using the documentation provided here.
          
          ---

          ### Explore the Documentation  
          This documentation is organized into sections to help you navigate and understand the various aspects of the Invoice Ninja API:

          - Authentication: Learn how to authenticate your requests to the API using API tokens.
          - Endpoints: Explore the available API endpoints for managing invoices, clients, payments, expenses, and more.
          - Request and Response Formats: Understand the structure of API requests and responses, including parameters, headers, and payloads.
          - Error Handling: Learn about error codes, status messages, and best practices for handling errors gracefully.
          - Code Examples: Find code examples and tutorials to help you get started with integrating the Invoice Ninja API into your applications.      
          
          ---

          ### Need Help?     

          If you have any questions, encounter any issues, or need assistance with using the Invoice Ninja API, don't hesitate to reach out to our support team or join our community forums. We're here to help you succeed with Invoice Ninja and make the most of our API.    

          Let's start building together!

          ---

          ### Endpoints
          
          <div style="background-color: #2D394E; color: #fff padding: 20px; border-radius: 5px; border: 4px solid #212A3B; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);">
              <p style="padding:10px; color: #DBDBDB;"">Production: https://invoicing.co</p>
              <p style="padding:10px; color: #DBDBDB;">Demo: https://demo.invoiceninja.com</p>
          </div>

          ---
          
          ### Client Libraries

          PHP SDK can be found [here](https://github.com/invoiceninja/sdk-php)
          Go SDK can be found [here](https://github.com/AshkanYarmoradi/go-invoice-ninja)

          ---

          ### Authentication:

          Invoice Ninja uses API tokens to authenticate requests. You can view and manage your API keys in Settings > Account Management > Integrations > API tokens

          API requests must be made over HTTPS. Calls made to HTTP will fail.

          ---

          ### Errors:

          Invoice Ninja uses standard HTTP response codes to indicate the success or failure of a request. below is a table of standard status codes and responses

          | Status Code | Explanation                                                                 |
          |-------------|-----------------------------------------------------------------------------|
          | 200         | OK: The request has succeeded. The information returned with the response is dependent on the method used in the request. |
          | 301         | Moved Permanently: This and all future requests should be directed to the given URI. |
          | 303         | See Other: The response to the request can be found under another URI using the GET method. |
          | 400         | Bad Request: The server cannot or will not process the request due to an apparent client error. |
          | 401         | Unauthorized: Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided. |
          | 403         | Forbidden: The request was valid, but the server is refusing action. |
          | 404         | Not Found: The requested resource could not be found but may be available in the future. |
          | 405         | Method Not Allowed: A request method is not supported for the requested resource. |
          | 409         | Conflict: Indicates that the request could not be processed because of conflict in the request. |
          | 422         | Unprocessable Entity: The request was well-formed but was unable to be followed due to semantic errors. |
          | 429         | Too Many Requests: The user has sent too many requests in a given amount of time ("rate limiting"). |
          | 500         | Internal Server Error: A generic error message, given when an unexpected condition was encountered and no more specific message is suitable. |

          ---

          ### Pagination

          When using index routes to retrieve lists of data, by default we limit the number of records returned to 20. You can using standard pagination to paginate results, ie: ?per_page=50
  termsOfService: 'https://invoiceninja.github.io/docs/legal/terms_of_service/#page-content'
  contact:
    email: contact@invoiceninja.com
    name: Invoice Ninja Support
    url: 'https://www.invoiceninja.com'
  license:
    name: 'Elastic License'
    url: 'https://www.elastic.co/licensing/elastic-license'
  version: 5.12.55

servers:
  - url: 'https://demo.invoiceninja.com'
    description: |
      ## Demo API endpoint 
      You can use the demo API key `TOKEN` to test the endpoints from within this API spec
  - url: 'https://invoicing.co'
    description: |
      ## Production API endpoint
paths:
  /api/v1/activities:
    get:
      tags:
        - activities
      summary: "Returns a list of activities"
      description: "Lists all activities related to this company"
      operationId: getActivities
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/activity_include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
      responses:
        200:
          description: "Returns the list of activities"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Activity'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/activities/download_entity/{activity_id}":
    get:
      tags:
        - activities
      summary: "Returns a PDF for the given activity"
      description: "Returns a PDF for the given activity"
      operationId: getActivityHistoricalEntityPdf
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/activity_include"
        - name: activity_id
          in: path
          description: "The Activity Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "PDF File"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        404:
          description: "No file exists for the given record"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/activities/entity:
    post:
      tags:
        - activities
      summary: "Entity activity"
      description: "Returns activity for a given entity"
      operationId: postActivitiesEntity
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: "Entity activity response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/activities/notes:
    post:
      tags:
        - activities
      summary: "Activity note"
      description: "Creates or updates an activity note"
      operationId: postActivitiesNotes
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: "Activity note response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"

  /api/v1/login:
    post:
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          
      - lang: curl
        label: curl
        source: |
          curl --request POST \
            --url 'https://demo.invoiceninja.com/api/v1/login?include=company,token' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'X-Requested-With: XMLHttpRequest' \
            --header 'Accept: application/json'
      tags:
        - auth
      summary: "Login"
      description: |

      operationId: postLogin
      parameters:
        - $ref: "#/components/parameters/X-API-SECRET"
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/login_include"
        - $ref: "#/components/parameters/include_static"
        - $ref: "#/components/parameters/clear_cache"
      requestBody:
        description: |
          User credentials

          ```json
          {
            "email" : "fred@flintstonze.com",
            "password" : "magicpassword123",
            "one_time_password" : "12345",
          }
          ```
        required: true
        content:
          application/json:
            schema:
              properties:
                email:
                  description: "The users email address."
                  type: string
                  example: "demo@invoiceninja.com"
                password:
                  description: "The user password. Must meet minimum criteria ~ > 6 characters"
                  type: string
                  example: "Password0"
                one_time_password:
                  description: "The one time password if 2FA is enabled"
                  type: string
                  example: "123456"
              required:
                - email
                - password
              type: object
      responses:
        200:
          description: "Returns the company user object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyUser"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/refresh:
    post:
      tags:
        - refresh
      summary: "Refresh data by timestamp"
      description: |
        Refreshes the dataset.  

        This endpoint can be used if you only need to access the most recent data from a certain point in time. For example, if you only want to retrieve The
        most recent data from the last time you accessed the system, you would pass the query parameter ?updated_at=1676173763. (unix timestamp)
      operationId: refresh
      parameters:
        - name: updated_at
          in: query
          description: "The unix timestamp from which the refreshed data should be sent from, if no value is passed the system will assume you require all data."
          required: true
          schema:
            type: number
            format: integer
          example: 1676173763
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/include_static"
        - $ref: "#/components/parameters/clear_cache"
      responses:
        200:
          description: "The Company User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyUser"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/yodlee/refresh:
    post:
      tags:
        - yodlee
      summary: "Yodlee Webhook"
      description: "Webhook endpoint for Yodlee. Used to notify the system that a data point can be updated."
      operationId: yodleeRefreshWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: ""
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Credit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_integrations:
    get:
      tags:
        - bank_integrations
      summary: "Returns a list of Bank Integrations"
      description: "Lists all bank integrations"
      operationId: getBankIntegrations
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/bank_integration_include"
        - $ref: "#/components/parameters/index"
        - name: rows
          in: query
          description: "The number of bank integrations to return"
          required: false
          schema:
            type: number
            format: integer
          example: 50
      responses:
        200:
          description: "A list of bank integrations"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/BankIntegration'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - bank_integrations
      summary: "Adds a bank_integration"
      description: "Adds an bank_integration to a company"
      operationId: storeBankIntegration
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved bank_integration object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/bank_integrations/{id}":
    get:
      tags:
        - bank_integrations
      summary: "Shows a bank_integration"
      description: "Displays a bank_integration by id"
      operationId: showBankIntegration
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankIntegration Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_integration object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - bank_integrations
      summary: "Updates a bank_integration"
      description: "Handles the updating of a bank_integration by id"
      operationId: updateBankIntegration
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankIntegration Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_integration object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - bank_integrations
      summary: "Deletes a bank_integration"
      description: "Handles the deletion of a bank_integration by id"
      operationId: deleteBankIntegration
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankIntegration Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/bank_integrations/{id}/edit":
    get:
      tags:
        - bank_integrations
      summary: "Shows a bank_integration for editing"
      description: "Displays a bank_integration by id"
      operationId: editBankIntegration
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankIntegration Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_integration object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_integrations/create:
    get:
      tags:
        - bank_integrations
      summary: "Gets a new blank bank_integration object"
      description: "Returns a blank object with default values"
      operationId: getBankIntegrationsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank bank_integration object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_integrations/bulk:
    post:
      tags:
        - bank_integrations
      summary: "Performs bulk actions on an array of bank_integrations"
      description: ""
      operationId: bulkBankIntegrations
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Action paramters"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_integrations/refresh_accounts:
    post:
      tags:
        - bank_integrations
      summary: "Gets the list of accounts from the remote server"
      description: "Adds an bank_integration to a company"
      operationId: getRefreshAccounts
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved bank_integration object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_integrations/remove_account/account_id:
    post:
      tags:
        - bank_integrations
      summary: "Removes an account from the integration"
      description: "Removes an account from the integration"
      operationId: getRemoveAccount
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the bank_integration object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_integrations/get_transactions/account_id:
    post:
      tags:
        - bank_integrations
      summary: "Retrieve transactions for a account"
      description: "Retrieve transactions for a account"
      operationId: getAccountTransactions
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Retrieve transactions for a account"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankIntegration"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_transactions:
    get:
      tags:
        - bank_transactions
      summary: "Gets a list of bank_transactions"
      description: "Lists all bank integrations"
      operationId: getBankTransactions
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - name: rows
          in: query
          description: "The number of bank integrations to return"
          required: false
          schema:
            type: number
            format: integer
          example: 50
      responses:
        200:
          description: "A list of bank integrations"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/BankTransaction'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - bank_transactions
      summary: "Adds a bank_transaction"
      description: "Adds an bank_transaction to a company"
      operationId: storeBankTransaction
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved bank_transaction object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransaction"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/bank_transactions/{id}":
    get:
      tags:
        - bank_transactions
      summary: "Shows a bank_transaction"
      description: "Displays a bank_transaction by id"
      operationId: showBankTransaction
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankTransaction Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_transaction object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransaction"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - bank_transactions
      summary: "Updates a bank_transaction"
      description: "Handles the updating of a bank_transaction by id"
      operationId: updateBankTransaction
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankTransaction Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_transaction object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransaction"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - bank_transactions
      summary: "Deletes a bank_transaction"
      description: "Handles the deletion of a bank_transaction by id"
      operationId: deleteBankTransaction
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankTransaction Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/bank_transactions/{id}/edit":
    get:
      tags:
        - bank_transactions
      summary: "Shows a bank_transaction for editing"
      description: "Displays a bank_transaction by id"
      operationId: editBankTransaction
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The BankTransaction Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_transaction object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransaction"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_transactions/create:
    get:
      tags:
        - bank_transactions
      summary: "Gets a new blank bank_transaction object"
      description: "Returns a blank object with default values"
      operationId: getBankTransactionsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank bank_transaction object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransaction"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_transactions/bulk:
    post:
      tags:
        - bank_transactions
      summary: "Bulk actions"
      description: ""
      operationId: bulkBankTransactions
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Action paramters"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_transactions/match:
    post:
      tags:
        - bank_transactions
      summary: "Match transactions"
      description: |
        Matching invoices or a payment to a bank transactions.
        
        The API expects the id of the transaction along with either a comma separated list of invoice ids OR the payment id to associate the transaction to.

        Example for matching a transaction to two invoices:

        {"transactions":[{"id":"olejRl5ejN","invoice_ids":"JxboYBLegw,JxboYBLeXX"}]}

        Example for matching a transaction and a paymente:

        {"transactions":[{"id":"olejRl5ejN","payment_id":"JxboYBLeXf"}]}

        Matching expenses.

        You can match an existing expense within Invoice Ninja - or - create a new expense using the following:

        {"transactions":[{"id":"open5pld7A","vendor_id":"gl9avJnaG1","ninja_category_id":""}]}

        To match to an existing expense:

        {"transactions":[{"id":"Jxbo2qKagw","expense_id":"7N1aMM1aWm"}]}

      operationId: matchBankTransactions
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Action paramters"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_transaction_rules:
    get:
      tags:
        - bank_transaction_rules
      summary: "Gets a list of bank_transaction_rules"
      description: "Lists all bank transaction rules"
      operationId: getBankTransactionRules
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - name: rows
          in: query
          description: "The number of bank integrations to return"
          required: false
          schema:
            type: number
            format: integer
          example: 50
      responses:
        200:
          description: "A list of bank integrations"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/BankTransactionRule'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - bank_transaction_rules
      summary: "Adds a bank_transaction rule"
      description: "Adds an bank_transaction to a company"
      operationId: storeBankTransactionRule
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved bank_transaction rule object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransactionRule"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/bank_transaction_rules/{id}":
    get:
      tags:
        - bank_transaction_rules
      summary: "Shows a bank_transaction"
      description: "Displays a bank_transaction by id"
      operationId: showBankTransactionRule
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Bank Transaction RuleHashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_transaction rule object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransactionRule"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - bank_transaction_rules
      summary: "Updates a bank_transaction Rule"
      description: "Handles the updating of a bank_transaction rule by id"
      operationId: updateBankTransactionRule
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Bank Transaction Rule Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_transaction rule object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransactionRule"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - bank_transaction_rules
      summary: "Deletes a bank_transaction rule"
      description: "Handles the deletion of a bank_transaction rule by id"
      operationId: deleteBankTransactionRule
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Bank Transaction Rule Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/bank_transaction_rules/{id}/edit":
    get:
      tags:
        - bank_transaction_rules
      summary: "Shows a bank_transaction for editing"
      description: "Displays a bank_transaction by id"
      operationId: editBankTransactionRule
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Bank Transaction Rule Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the bank_transaction rule object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransactionRule"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_transaction_rules/create:
    get:
      tags:
        - bank_transaction_rules
      summary: "Gets a new blank bank_transaction rule object"
      description: "Returns a blank object with default values"
      operationId: getBankTransactionRulesCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank bank_transaction rule object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BankTransactionRule"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/bank_transaction_rules/bulk:
    post:
      tags:
        - bank_transaction_rules
      summary: "Performs bulk actions on an array of bank_transaction rules"
      description: ""
      operationId: bulkBankTransactionRules
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Action paramters"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/charts/totals:
    post:
      tags:
        - charts
      summary: "Get chart data"
      description: "Get chart data"
      operationId: getChartTotals
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - name: rows
          in: query
          description: "The chart"
          required: false
          schema:
            type: number
            format: integer
          example: 50
      responses:
        200:
          description: "json dataset of chart data"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/charts/totals_v2:
    post:
      tags:
        - charts
      summary: "Get chart data v2"
      description: "Get chart data (v2)"
      operationId: getChartTotalsV2
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: "json dataset of chart data"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        default:
          $ref: "#/components/responses/default"
  /api/v1/charts/chart_summary_v2:
    post:
      tags:
        - charts
      summary: "Get chart summary v2"
      description: "Get chart summary (v2)"
      operationId: getChartSummaryV2
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: "json dataset of chart summary"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        default:
          $ref: "#/components/responses/default"
  /api/v1/charts/calculated_fields:
    post:
      tags:
        - charts
      summary: "Get calculated fields"
      description: "Get chart calculated fields"
      operationId: getChartCalculatedFields
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: "json dataset of calculated fields"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        default:
          $ref: "#/components/responses/default"

  /api/v1/client_gateway_tokens:
    get:
      tags:
        - client_gateway_tokens
      summary: "List of client payment tokens"
      description: "Lists client_gateway_tokens, search and filters allow fine grained lists to be generated.\n\n    Query parameters can be added to performed more fine grained filtering of the client_gateway_tokens, these are handled by the ClientGatewayTokenFilters class which defines the methods available"
      operationId: getClientGatewayTokens
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of client_gateway_tokens"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/ClientGatewayToken'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - client_gateway_tokens
      summary: "Adds a client payment token"
      description: "Adds a client payment token to a company"
      operationId: storeClientGatewayToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved client payment token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ClientGatewayToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/client_gateway_tokens/{id}":
    get:
      tags:
        - client_gateway_tokens
      summary: "Shows a client payment token"
      description: "Displays a client payment token by id"
      operationId: showClientGatewayToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The ClientGatewayToken Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the client payment token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ClientGatewayToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - client_gateway_tokens
      summary: "Updates a client payment token"
      description: "Handles the updating of a client payment token by id"
      operationId: updateClientGatewayToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The ClientGatewayToken Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the client payment token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ClientGatewayToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - client_gateway_tokens
      summary: "Deletes a client"
      description: "Handles the deletion of a client payment token by id"
      operationId: deleteClientGatewayToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The ClientGatewayToken Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/client_gateway_tokens/{id}/edit":
    get:
      tags:
        - client_gateway_tokens
      summary: "Shows a client payment token for editting"
      description: "Displays a client by id"
      operationId: editClientGatewayToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The ClientGatewayToken Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the client payment token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ClientGatewayToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/client_gateway_tokens/create:
    get:
      tags:
        - client_gateway_tokens
      summary: "Gets a new blank client payment token object"
      description: "Returns a blank object with default values"
      operationId: getClientGatewayTokensCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank client payment token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ClientGatewayToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"

  /api/v1/companies:
    get:
      tags:
        - companies
      summary: "Gets a list of companies"
      description: "Lists companies, search and filters allow fine grained lists to be generated.\n\n        Query parameters can be added to performed more fine grained filtering of the companies, these are handled by the CompanyFilters class which defines the methods available"
      operationId: getCompanies
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of companies"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Company'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - companies
      summary: "Adds a company"
      description: "Adds an company to the system"
      operationId: storeCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved company object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/companies/create:
    get:
      tags:
        - companies
      summary: "Gets a new blank company object"
      description: "Returns a blank object with default values"
      operationId: getCompaniesCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank company object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/companies/{id}":
    get:
      tags:
        - companies
      summary: "Shows an company"
      description: "Displays an company by id"
      operationId: showCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the company object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - companies
      summary: "Updates an company"
      description: "Handles the updating of an company by id"
      operationId: updateCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the company object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - companies
      summary: "Deletes a company"
      description: "Handles the deletion of an company by id"
      operationId: deleteCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/companies/{id}/edit":
    get:
      tags:
        - companies
      summary: "Shows an company for editting"
      description: "Displays an company by id"
      operationId: editCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the company object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/companies/{id}/upload":
    post:
      tags:
        - companies
      summary: "Uploads a document to a company"
      description: "Handles the uploading of a document to a company"
      operationId: uploadCompanies
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the client object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/companies/{company}/default":
    post:
      tags:
        - companies
      summary: "Sets the company as the default company."
      description: "Sets the company as the default company."
      operationId: setDefaultCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: company
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the company object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/companies/current":
    post:
      tags:
        - companies
      summary: "Returns the current comapny"
      description: "Returns the current company based on the API token passed in"
      operationId: showCurrentCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the company object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Company"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/company_gateways:
    get:
      tags:
        - company_gateways
      summary: "Gets a list of company_gateways"
      description: "Lists company_gateways, search and filters allow fine grained lists to be generated.\n\n        Query parameters can be added to performed more fine grained filtering of the company_gateways, these are handled by the CompanyGatewayFilters class which defines the methods available"
      operationId: getCompanyGateways
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of company_gateways"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/CompanyGateway'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - company_gateways
      summary: "Adds a CompanyGateway"
      description: "Adds an CompanyGateway to the system"
      operationId: storeCompanyGateway
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved CompanyGateway object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyGateway"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        429:
          $ref: "#/components/responses/429"
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/company_gateways/create:
    get:
      tags:
        - company_gateways
      summary: "Gets a new blank CompanyGateway object"
      description: "Returns a blank object with default values"
      operationId: getCompanyGatewaysCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank CompanyGateway object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyGateway"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/company_gateways/{id}":
    get:
      tags:
        - company_gateways
      summary: "Shows an CompanyGateway"
      description: "Displays an CompanyGateway by id"
      operationId: showCompanyGateway
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The CompanyGateway Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the CompanyGateway object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyGateway"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - company_gateways
      summary: "Updates an CompanyGateway"
      description: "Handles the updating of an CompanyGateway by id"
      operationId: updateCompanyGateway
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The CompanyGateway Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the CompanyGateway object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyGateway"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - company_gateways
      summary: "Deletes a CompanyGateway"
      description: "Handles the deletion of an CompanyGateway by id"
      operationId: deleteCompanyGateway
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The CompanyGateway Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/company_gateways/{id}/edit":
    get:
      tags:
        - company_gateways
      summary: "Shows an CompanyGateway for editting"
      description: "Displays an CompanyGateway by id"
      operationId: editCompanyGateway
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The CompanyGateway Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the CompanyGateway object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyGateway"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/company_gateways/bulk:
    post:
      tags:
        - company_gateways
      summary: "Performs bulk actions on an array of company_gateways"
      description: ""
      operationId: bulkCompanyGateways
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Array of company gateway IDs"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Company Gateways response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyGateway"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/company_ledger:
    get:
      tags:
        - company_ledger
      summary: "Gets a list of company_ledger"
      description: "Lists the company_ledger."
      operationId: getCompanyLedger
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of company_ledger"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/CompanyLedger'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/company_users:
    post:
      tags:
        - company_user
      summary: "Update a company user record"
      description: "Attempts to update a company user record. A company user can modify only their settings fields. Full access for Admin users"
      operationId: updateCompanyUser
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "The Company User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyUser"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/connected_account:
    post:
      tags:
        - connected_account
      summary: "Connect an oauth user to an existing user"
      description: "Refreshes the dataset"
      operationId: connected_account
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/include_static"
        - $ref: "#/components/parameters/clear_cache"
      responses:
        200:
          description: "The Company User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/designs:
    get:
      tags:
        - designs
      summary: "Gets a list of designs"
      description: "Lists designs"
      operationId: getDesigns
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of designs"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Design'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - designs
      summary: "Adds a design"
      description: "Adds an design to a company"
      operationId: storeDesign
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved design object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Design"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/designs/{id}":
    get:
      tags:
        - designs
      summary: "Shows a design"
      description: "Displays a design by id"
      operationId: showDesign
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Design Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Design"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - designs
      summary: "Updates a design"
      description: "Handles the updating of a design by id"
      operationId: updateDesign
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Design Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the design object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Design"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - designs
      summary: "Deletes a design"
      description: "Handles the deletion of a design by id"
      operationId: deleteDesign
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Design Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/designs/{id}/edit":
    get:
      tags:
        - designs
      summary: "Shows a design for editting"
      description: "Displays a design by id"
      operationId: editDesign
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Design Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the design object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Design"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/designs/create:
    get:
      tags:
        - designs
      summary: "Gets a new blank design object"
      description: "Returns a blank object with default values"
      operationId: getDesignsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank design object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Design"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/designs/bulk:
    post:
      tags:
        - designs
      summary: "Performs bulk actions on an array of designs"
      description: ""
      operationId: bulkDesigns
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Design User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Design"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/documents:
    get:
      tags:
        - documents
      summary: "Gets a list of documents"
      description: "Lists documents, search and filters allow fine grained lists to be generated.\n\n    Query parameters can be added to performed more fine grained filtering of the documents, these are handled by the DocumentsFilters class which defines the methods available"
      operationId: getDocuments
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of documents"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Document'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/emails:
    post:
      tags:
        - emails
      summary: "Sends an email for an entity"
      description: "Sends an email for an entity"
      operationId: sendEmailTemplate
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        description: "Required fields to send an email"
        required: true
        content:
          application/json:
            schema:
              required:
                - entity
                - entity_id
                - template
              properties:
                subject:
                  description: "The email subject"
                  type: string
                body:
                  description: "The email body"
                  type: string
                entity:
                  description: "The entity name"
                  type: string
                entity_id:
                  description: "The entity_id"
                  type: string
                cc_email:
                  description: "The email address of a user to be CC'd on the email"
                  type: string
                template:
                  description: "The template required"
                  type: string
                  enum:
                    - email_template_invoice
                    - email_template_quote
                    - email_template_credit
                    - email_template_payment
                    - email_template_payment_partial
                    - email_template_statement
                    - email_template_reminder1
                    - email_template_reminder2
                    - email_template_reminder3
                    - email_template_reminder_endless
                    - email_template_custom1
                    - email_template_custom2
                    - email_template_custom3
                    - email_template_purchase_order
                    - email_quote_template_reminder1
                  example: email_template_invoice
              type: object
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Template"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/expense_categories:
    get:
      tags:
        - expense_categories
      summary: "Gets a list of expense_categories"
      description: "Lists tax rates"
      operationId: getExpenseCategorys
      parameters:
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of expense_categories"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/ExpenseCategory'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - expense_categories
      summary: "Adds a expense category"
      description: "Adds an expense category to the system"
      operationId: storeExpenseCategory
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExpenseCategory"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/expense_categories/create:
    get:
      tags:
        - expense_categories
      summary: "Gets a new blank Expens Category object"
      description: "Returns a blank object with default values"
      operationId: getExpenseCategoryCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "A blank Expens Category object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExpenseCategory"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/expense_categories/{id}":
    get:
      tags:
        - expense_categories
      summary: "Shows a Expens Category"
      description: "Displays an ExpenseCategory by id"
      operationId: showExpenseCategory
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The ExpenseCategory Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Expens Category object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExpenseCategory"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - expense_categories
      summary: "Updates a tax rate"
      description: "Handles the updating of a tax rate by id"
      operationId: updateExpenseCategory
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The ExpenseCategory Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the ExpenseCategory object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExpenseCategory"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - expense_categories
      summary: "Deletes a ExpenseCategory"
      description: "Handles the deletion of an ExpenseCategory by id"
      operationId: deleteExpenseCategory
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The ExpenseCategory Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/expense_categories/{id}/edit":
    get:
      tags:
        - expense_categories
      summary: "Shows a Expens Category for editting"
      description: "Displays a Expens Category by id"
      operationId: editExpenseCategory
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The ExpenseCategory Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Expens Category object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExpenseCategory"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/expense_categories/bulk:
    post:
      tags:
        - expense_categories
      summary: "Performs bulk actions on an array of ExpenseCategorys"
      description: ""
      operationId: bulkExpenseCategorys
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Expens Categorys"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The ExpenseCategory List response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/expenses:
    get:
      tags:
        - expenses
      summary: "Gets a list of expenses"
      description: "Lists expenses, search and filters allow fine grained lists to be generated.\n\n    Query parameters can be added to performed more fine grained filtering of the expenses, these are handled by the ExpenseFilters class which defines the methods available"
      operationId: getExpenses
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of expenses"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Expense'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - expenses
      summary: "Adds an expense"
      description: "Adds a expense to a company"
      operationId: storeExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/expenses/{id}":
    get:
      tags:
        - expenses
      summary: "Shows a expense"
      description: "Displays a expense by id"
      operationId: showExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Expense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - expenses
      summary: "Updates a expense"
      description: "Handles the updating of a expense by id"
      operationId: updateExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Expense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - expenses
      summary: "Deletes a expense"
      description: "Handles the deletion of a expense by id"
      operationId: deleteExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Expense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/expenses/{id}/edit":
    get:
      tags:
        - expenses
      summary: "Shows a expense for editing"
      description: "Displays a client by id"
      operationId: editExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Expense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/expenses/create:
    get:
      tags:
        - expenses
      summary: "Gets a new blank expense object"
      description: "Returns a blank object with default values"
      operationId: getExpensesCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/expenses/bulk:
    post:
      tags:
        - expenses
      summary: "Performs bulk actions on an array of expenses"
      description: ""
      operationId: bulkExpenses
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Expense User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/expenses/{id}/upload":
    post:
      tags:
        - expense
      summary: "Uploads a document to a expense"
      description: "Handles the uploading of a document to a expense"
      operationId: uploadExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Expense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/export:
    post:
      tags:
        - export
      summary: "Export data from the system"
      description: "Export data from the system"
      operationId: getExport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/group_settings:
    get:
      tags:
        - group_settings
      summary: "Gets a list of group_settings"
      description: "Lists group_settings, search and filters allow fine grained lists to be generated.\n\n        Query parameters can be added to performed more fine grained filtering of the group_settings, these are handled by the GroupSettingFilters class which defines the methods available"
      operationId: getGroupSettings
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of group_settings"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/GroupSetting'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - group_settings
      summary: "Adds a GroupSetting"
      description: "Adds an GroupSetting to the system"
      operationId: storeGroupSetting
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved GroupSetting object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupSetting"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/group_settings/create:
    get:
      tags:
        - group_settings
      summary: "Gets a new blank GroupSetting object"
      description: "Returns a blank object with default values"
      operationId: getGroupSettingsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank GroupSetting object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupSetting"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/group_settings/{id}":
    get:
      tags:
        - group_settings
      summary: "Shows an GroupSetting"
      description: "Displays an GroupSetting by id"
      operationId: showGroupSetting
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The GroupSetting Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the GroupSetting object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupSetting"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - group_settings
      summary: "Updates an GroupSetting"
      description: "Handles the updating of an GroupSetting by id"
      operationId: updateGroupSetting
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The GroupSetting Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the GroupSetting object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupSetting"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - group_settings
      summary: "Deletes a GroupSetting"
      description: "Handles the deletion of an GroupSetting by id"
      operationId: deleteGroupSetting
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The GroupSetting Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/group_settings/{id}/edit":
    get:
      tags:
        - group_settings
      summary: "Shows an GroupSetting for editting"
      description: "Displays an GroupSetting by id"
      operationId: editGroupSetting
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The GroupSetting Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the GroupSetting object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/GroupSetting"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/group_settings/bulk:
    post:
      tags:
        - group_settings
      summary: "Performs bulk actions on an array of group_settings"
      description: ""
      operationId: bulkGroupSettings
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "An array of group_settings ids"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/group_settings/{id}/upload":
    post:
      tags:
        - group_settings
      summary: "Uploads a document to a group setting"
      description: "Handles the uploading of a document to a group setting"
      operationId: uploadGroupSetting
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Group Setting Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Group Setting object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/preimport:
    post:
      tags:
        - imports
      summary: "Pre Import checks - returns a reference to the job and the headers of the CSV"
      description: "Pre Import checks - returns a reference to the job and the headers of the CSV"
      operationId: preimport
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: "The CSV file"
        required: true
        content:
          multipart/form-data:
            schema:
              type: string
              format: binary
      responses:
        200:
          description: "Returns a reference to the file"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/import_json:
    post:
      tags:
        - import
      summary: "Import data from the system"
      description: "Import data from the system"
      operationId: getImportJson
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/apple/confirm_purchase:
    post:
      tags:
        - postmark
      summary: "Processing webhooks from Apple for in app purchases"
      description: "Adds an credit to the system"
      operationId: confirmApplePurchase
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/apple/process_webhook:
    post:
      tags:
        - postmark
      summary: "Processing event webhooks from Apple for in purchase / subscription status update"
      description: "Adds an credit to the system"
      operationId: processAppleWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/claim_license:
    get:
      tags:
        - claim_license
      summary: "Attempts to claim a white label license"
      description: "Attempts to claim a white label license"
      operationId: getClaimLicense
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
        - name: license_key
          in: query
          description: "The license hash"
          required: true
          schema:
            type: string
            format: string
          example: d87sh-s755s-s7d76-sdsd8
        - name: product_id
          in: query
          description: "The ID of the product purchased."
          required: true
          schema:
            type: string
            format: string
          example: "1"
      responses:
        200:
          description: Success!
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/logout:
    post:
      tags:
        - logout
      summary: "Logs the user out of their current session"
      description: "Logs the user out of their current session"
      operationId: getLogout
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "Success message"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/migration/purge/{company}":
    post:
      tags:
        - migration
      summary: "Attempts to purge a company record and all its child records"
      description: "Attempts to purge a company record and all its child records"
      operationId: postPurgeCompany
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: company
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: Success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/migration/purge_save_settings/{company}":
    post:
      tags:
        - migration
      summary: "Attempts to purge a companies child records but save the company record and its settings"
      description: "Attempts to purge a companies child records but save the company record and its settings"
      operationId: postPurgeCompanySaveSettings
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: company
          in: path
          description: "The Company Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: Success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/migration/start:
    post:
      tags:
        - migration
      summary: "Starts the migration from previous version of Invoice Ninja"
      description: "Starts the migration from previous version of Invoice Ninja"
      operationId: postStartMigration
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/X-API-PASSWORD"
        - name: migration
          in: query
          description: "The migraton file"
          required: true
          schema:
            type: object
            format: file
      responses:
        200:
          description: Success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/one_time_token:
    post:
      tags:
        - one_time_token
      summary: "Attempts to create a one time token"
      description: "Attempts to create a one time token"
      operationId: oneTimeToken
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "The Company User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/payment_terms:
    get:
      tags:
        - payment_terms
      summary: "Gets a list of payment terms"
      description: "Lists payment terms"
      operationId: getPaymentTerms
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of payment terms"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/PaymentTerm'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - payment_terms
      summary: "Adds a Payment"
      description: "Adds a Payment Term to the system"
      operationId: storePaymentTerm
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: "The payment_terms request"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PaymentTerm"
      responses:
        200:
          description: "Returns the saved Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentTerm"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/payment_terms/create:
    get:
      tags:
        - payment_terms
      summary: "Gets a new blank PaymentTerm object"
      description: "Returns a blank object with default values"
      operationId: getPaymentTermsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank PaymentTerm object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/payment_terms/{id}":
    get:
      tags:
        - payment_terms
      summary: "Shows a Payment Term"
      description: "Displays an Payment Term by id"
      operationId: showPaymentTerm
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Term Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Payment Term object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentTerm"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - payment_terms
      summary: "Updates a Payment Term"
      description: "Handles the updating of an Payment Termby id"
      operationId: updatePaymentTerm
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Term Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Payment Term object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentTerm"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - payment_termss
      summary: "Deletes a Payment Term"
      description: "Handles the deletion of an PaymentTerm by id"
      operationId: deletePaymentTerm
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Term Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/payment_terms/{id}/edit":
    get:
      tags:
        - payment_terms
      summary: "Shows an Payment Term for editting"
      description: "Displays an Payment Term by id"
      operationId: editPaymentTerms
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Term Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentTerm"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/payment_terms/bulk:
    post:
      tags:
        - payment_terms
      summary: "Performs bulk actions on an array of payment terms"
      description: ""
      operationId: bulkPaymentTerms
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Payment Ter,s"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Payment Terms response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentTerm"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/ping:
    get:
      tags:
        - ping
      summary: "Attempts to ping the API"
      description: "Attempts to ping the API"
      operationId: getPing
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "The company and user name"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
  /api/v1/health_check:
    get:
      tags:
        - health_check
      summary: "Attempts to get a health check from the API"
      description: "Attempts to get a health check from the API"
      operationId: getHealthCheck
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "A key/value map of the system health"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
  /api/v1/last_error:
    get:
      tags:
        - ping
      summary: "Returns the last error"
      description: "Returns the last error from the API"
      operationId: getLastError
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "Last error response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        default:
          $ref: "#/components/responses/default"
  /api/v1/postmark_webhook:
    post:
      tags:
        - postmark
      summary: "Processing webhooks from PostMark"
      description: "Adds an credit to the system"
      operationId: postmarkWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Credit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/preview:
    post:
      tags:
        - preview
      summary: "Returns a pdf preview"
      description: "Returns a pdf preview."
      operationId: getPreview
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "The pdf response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/preview/purchase_order:
    post:
      tags:
        - preview
      summary: "Returns a pdf preview for purchase order"
      description: "Returns a pdf preview for purchase order."
      operationId: getPreviewPurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "The pdf response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"

  /api/v1/recurring_expenses:
    get:
      tags:
        - recurring_expenses
      summary: "Gets a list of recurring_expenses"
      description: "Lists recurring_expenses, search and filters allow fine grained lists to be generated.\n\n    Query parameters can be added to performed more fine grained filtering of the recurring_expenses, these are handled by the RecurringExpenseFilters class which defines the methods available"
      operationId: getRecurringExpenses
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of recurring_expenses"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/RecurringExpense'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - recurring_expenses
      summary: "Adds a recurring expense"
      description: "Adds a recurring expense to a company"
      operationId: storeRecurringExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved recurring expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringExpense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_expenses/{id}":
    get:
      tags:
        - recurring_expenses
      summary: "Shows a recurring expense"
      description: "Displays a recurring expense by id"
      operationId: showRecurringExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringExpense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the recurring_expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringExpense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - recurring_expenses
      summary: "Updates a recurring expense"
      description: "Handles the updating of a recurring expense by id"
      operationId: updateRecurringExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringExpense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the recurring expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringExpense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - recurring_expenses
      summary: "Deletes a recurring expense"
      description: "Handles the deletion of a recurring expense by id"
      operationId: deleteRecurringExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringExpense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_expenses/{id}/edit":
    get:
      tags:
        - recurring_expenses
      summary: "Shows a recurring expense for editting"
      description: "Displays a recurring expense by id"
      operationId: editRecurringExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringExpense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the recurring expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringExpense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/recurring_expenses/create:
    get:
      tags:
        - recurring_expenses
      summary: "Gets a new blank recurring expense object"
      description: "Returns a blank object with default values"
      operationId: getRecurringExpensesCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank recurring expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringExpense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/recurring_expenses/bulk:
    post:
      tags:
        - recurring_expenses
      summary: "Performs bulk actions on an array of recurring_expenses"
      description: ""
      operationId: bulkRecurringExpenses
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The RecurringExpense User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringExpense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_expenses/{id}/upload":
    post:
      tags:
        - recurring_expense
      summary: "Uploads a document to a recurring_expense"
      description: "Handles the uploading of a document to a recurring_expense"
      operationId: uploadRecurringExpense
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringExpense Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the RecurringExpense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringExpense"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/recurring_quotes:
    get:
      tags:
        - recurring_quotes
      summary: "Gets a list of recurring_quotes"
      description: "Lists recurring_quotes, search and filters allow fine grained lists to be generated.\n\n        Query parameters can be added to performed more fine grained filtering of the recurring_quotes, these are handled by the RecurringQuoteFilters class which defines the methods available"
      operationId: getRecurringQuotes
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of recurring_quotes"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/RecurringQuote'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - recurring_quotes
      summary: "Adds a RecurringQuote"
      description: "Adds an RecurringQuote to the system"
      operationId: storeRecurringQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved RecurringQuote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringQuote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/recurring_quotes/create:
    get:
      tags:
        - recurring_quotes
      summary: "Gets a new blank RecurringQuote object"
      description: "Returns a blank object with default values"
      operationId: getRecurringQuotesCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank RecurringQuote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringQuote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_quotes/{id}":
    get:
      tags:
        - recurring_quotes
      summary: "Shows an RecurringQuote"
      description: "Displays an RecurringQuote by id"
      operationId: showRecurringQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringQuote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the RecurringQuote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringQuote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - recurring_quotes
      summary: "Updates an RecurringQuote"
      description: "Handles the updating of an RecurringQuote by id"
      operationId: updateRecurringQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringQuote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the RecurringQuote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringQuote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - recurring_quotes
      summary: "Deletes a RecurringQuote"
      description: "Handles the deletion of an RecurringQuote by id"
      operationId: deleteRecurringQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringQuote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_quotes/{id}/edit":
    get:
      tags:
        - recurring_quotes
      summary: "Shows an RecurringQuote for editting"
      description: "Displays an RecurringQuote by id"
      operationId: editRecurringQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringQuote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the RecurringQuote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringQuote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/recurring_quotes/bulk:
    post:
      tags:
        - recurring_quotes
      summary: "Performs bulk actions on an array of recurring_quotes"
      description: ""
      operationId: bulkRecurringQuotes
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Hashed ids"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The RecurringQuote response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringQuote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_quotes/{id}/{action}":
    get:
      tags:
        - recurring_quotes
      summary: "Performs a custom action on an RecurringQuote"
      description: "Performs a custom action on an RecurringQuote.\n\n    The current range of actions are as follows\n    - clone_to_RecurringQuote\n    - clone_to_quote\n    - history\n    - delivery_note\n    - mark_paid\n    - download\n    - archive\n    - delete\n    - email"
      operationId: actionRecurringQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringQuote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
        - name: action
          in: path
          description: "The action string to be performed"
          required: true
          schema:
            type: string
            format: string
          example: clone_to_quote
      responses:
        200:
          description: "Returns the RecurringQuote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringQuote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/contacts:
    post:
      tags:
        - reports
      summary: "Contact reports"
      description: "Export contact reports"
      operationId: getContactReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/clients:
    post:
      tags:
        - reports
      summary: "Client reports"
      description: "Export client reports"
      operationId: getClientReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/credits:
    post:
      tags:
        - reports
      summary: "Credit reports"
      description: "Export credit reports"
      operationId: getCreditReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/documents:
    post:
      tags:
        - reports
      summary: "Document reports"
      description: "Export document reports"
      operationId: getDocumentReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/expenses:
    post:
      tags:
        - reports
      summary: "Expense reports"
      description: "Export expense reports"
      operationId: getExpenseReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/invoice_items:
    post:
      tags:
        - reports
      summary: "Invoice item reports"
      description: "Export invoice item reports"
      operationId: getInvoiceItemReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/invoices:
    post:
      tags:
        - reports
      summary: "Invoice reports"
      description: "Export invoice reports"
      operationId: getInvoiceReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/payments:
    post:
      tags:
        - reports
      summary: "Payment reports"
      description: "Export payment reports"
      operationId: getPaymentReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/products:
    post:
      tags:
        - reports
      summary: "Product reports"
      description: "Export product reports"
      operationId: getProductReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/product_sales:
    post:
      tags:
        - reports
      summary: "Product Salesreports"
      description: "Export product sales reports"
      operationId: getProductSalesReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/profitloss:
    post:
      tags:
        - reports
      summary: "Profit loss reports"
      description: "Profit loss report"
      operationId: getProfitLossReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/quote_items:
    post:
      tags:
        - reports
      summary: "Quote item reports"
      description: "Export Quote item reports"
      operationId: getQuoteItemReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/quotes:
    post:
      tags:
        - reports
      summary: "Quote reports"
      description: "Export quote reports"
      operationId: getQuoteReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/recurring_invoices:
    post:
      tags:
        - reports
      summary: "Recurring Invoice reports"
      description: "Export recurring invoice reports"
      operationId: getRecurringInvoiceReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/tasks:
    post:
      tags:
        - reports
      summary: "Task reports"
      description: "Export task reports"
      operationId: getTaskReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/activities:
    post:
      tags:
        - reports
      summary: "Activity reports"
      description: "Export activity reports"
      operationId: getActivityReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/client_contacts:
    post:
      tags:
        - reports
      summary: "Client contact reports"
      description: "Export client contact reports"
      operationId: getClientContactReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/ar_detail_report:
    post:
      tags:
        - reports
      summary: "AR detail report"
      description: "Export AR detail report"
      operationId: getARDetailReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/ar_summary_report:
    post:
      tags:
        - reports
      summary: "AR summary report"
      description: "Export AR summary report"
      operationId: getARSummaryReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/client_balance_report:
    post:
      tags:
        - reports
      summary: "Client balance report"
      description: "Export client balance report"
      operationId: getClientBalanceReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/client_sales_report:
    post:
      tags:
        - reports
      summary: "Client sales report"
      description: "Export client sales report"
      operationId: getClientSalesReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/tax_summary_report:
    post:
      tags:
        - reports
      summary: "Tax summary report"
      description: "Export tax summary report"
      operationId: getTaxSummaryReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/tax_period_report:
    post:
      tags:
        - reports
      summary: "Tax period report"
      description: "Export tax period report"
      operationId: getTaxPeriodReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/user_sales_report:
    post:
      tags:
        - reports
      summary: "User sales report"
      description: "Export user sales report"
      operationId: getUserSalesReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/reports/projects:
    post:
      tags:
        - reports
      summary: "Project reports"
      description: "Export project reports"
      operationId: getProjectReport
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/GenericReportSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/reports/preview/{hash}":
    post:
      tags:
        - reports
      summary: "Report preview"
      description: "Preview a report by hash"
      operationId: getReportPreview
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: hash
          in: path
          description: "The report hash"
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/exports/preview/{hash}":
    post:
      tags:
        - reports
      summary: "Export preview"
      description: "Preview an export by hash"
      operationId: getExportPreview
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: hash
          in: path
          description: "The export hash"
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/self-update:
    post:
      tags:
        - update
      summary: "Performs a system update"
      description: "Performs a system update"
      operationId: selfUpdate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-API-PASSWORD"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Success/failure response"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/self-update/check_version:
    post:
      tags:
        - update
      summary: "Check for available update"
      description: "Checks for an available system update"
      operationId: selfUpdateCheckVersion
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "Version check response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        default:
          $ref: "#/components/responses/default"
  /api/v1/statics:
    get:
      tags:
        - statics
      summary: "Gets a list of statics"
      description: "Lists all statics"
      operationId: getStatics
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of static data"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/subscriptions:
    get:
      tags:
        - subscriptions
      summary: "Gets a list of subscriptions"
      description: "Lists subscriptions."
      operationId: getSubscriptions
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of subscriptions"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Subscription'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - subscriptions
      summary: "Adds a subscriptions"
      description: "Adds an subscriptions to the system"
      operationId: storeSubscription
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved subscriptions object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/subscriptions/create:
    get:
      tags:
        - subscriptions
      summary: "Gets a new blank subscriptions object"
      description: "Returns a blank object with default values"
      operationId: getSubscriptionsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank subscriptions object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/subscriptions/{id}":
    get:
      tags:
        - subscriptions
      summary: "Shows an subscriptions"
      description: "Displays an subscriptions by id"
      operationId: showSubscription
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Subscription Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Subscription object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - subscriptions
      summary: "Updates an subscriptions"
      description: "Handles the updating of an subscriptions by id"
      operationId: updateSubscription
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Subscription Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the subscriptions object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - subscriptions
      summary: "Deletes a subscriptions"
      description: "Handles the deletion of an subscriptions by id"
      operationId: deleteSubscription
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Subscription Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/subscriptions/{id}/edit":
    get:
      tags:
        - subscriptions
      summary: "Shows an subscriptions for editting"
      description: "Displays an subscriptions by id"
      operationId: editSubscription
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Subscription Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/subscriptions/bulk:
    post:
      tags:
        - subscriptions
      summary: "Performs bulk actions on an array of subscriptions"
      description: ""
      operationId: bulkSubscriptions
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Subscription response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Subscription"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/scheduler:
    get:
      tags:
        - scheduler
      summary: "Get scheduler status"
      description: "Returns the task scheduler status and job list"
      operationId: getScheduler
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "Scheduler status response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        default:
          $ref: "#/components/responses/default"
  /api/v1/support/messages/send:
    post:
      tags:
        - support
      summary: "Sends a support message to Invoice Ninja team"
      description: "Allows a user to send a support message to the Invoice Ninja Team"
      operationId: supportMessage
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        description: "The message"
        required: true
        content:
          application/json:
            schema:
              properties:
                message:
                  description: "The support message"
                  type: string
              type: string
      responses:
        200:
          description: Success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                type: array
                items:
                  description: "Server response"
                  type: string
                  example: "success"
        400:
          $ref: "#/components/responses/400"
        401:
          $ref: "#/components/responses/401"
        default:
          $ref: "#/components/responses/default"
  /api/v1/system_logs:
    get:
      tags:
        - system_logs
      summary: "Gets a list of system logs"
      description: "Lists system logs, search and filters allow fine grained lists to be generated.\n     *\n     *      Query parameters can be added to performed more fine grained filtering of the system logs, these are handled by the SystemLogFilters class which defines the methods available"
      operationId: getSystemLogs
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of system logs"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/SystemLog'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/system_logs/{id}":
    get:
      tags:
        - system_logs
      summary: "Shows a system_logs"
      description: "Displays a system_logs by id"
      operationId: showSystemLogs
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The system_logs Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the system_logs object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SystemLog"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/task_schedulers:
    get:
      tags:
        - task_schedulers
      summary: "Task Scheduler Index"
      description: "Get all schedulers with associated jobs"
      operationId: getTaskSchedulers
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - task_schedulers
      summary: "Create task scheduler with job "
      description: "Create task scheduler with a job (action(job) request should be sent via request also. Example: We want client report to be job which will be run\n     * multiple times, we should send the same parameters in the request as we would send if we wanted to get report, see example"
      operationId: createTaskScheduler
      parameters:
        - $ref: "#/components/parameters/X-API-SECRET"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TaskSchedulerSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/task_schedulers/create:
    get:
      tags:
        - task_schedulers
      summary: "Gets a new blank scheduler object"
      description: "Returns a blank object with default values"
      operationId: getTaskScheduler
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank scheduler object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskSchedulerSchema"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/task_schedulers/{id}":
    get:
      tags:
        - task_schedulers
      summary: "Show given scheduler"
      description: "Get scheduler with associated job"
      operationId: showTaskScheduler
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The Scheduler Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - task_schedulers
      summary: "Update task scheduler "
      description: "Update task scheduler"
      operationId: updateTaskScheduler
      parameters:
        - $ref: "#/components/parameters/X-API-SECRET"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The Scheduler Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TaskSchedulerSchema"
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - task_schedulers
      summary: "Destroy Task Scheduler"
      description: "Destroy task scheduler and its associated job"
      operationId: destroyTaskScheduler
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The Scheduler Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: success
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        default:
          $ref: "#/components/responses/default"
  /api/v1/task_schedulers/bulk:
    post:
      tags:
        - task_schedulers
      summary: "Performs bulk actions on an array of task_schedulers"
      description: ""
      operationId: bulkTaskSchedulerActions
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "array of ids"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The TaskSchedule response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskSchedulerSchema"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/task_statuses:
    get:
      tags:
        - task_status
      summary: "Gets a list of task statuses"
      description: "Lists task statuses"
      operationId: getTaskStatuses
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of task statuses"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/TaskStatus'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - task_status
      summary: "Adds a TaskStatus"
      description: "Adds a TaskStatusto the system"
      operationId: storeTaskStatus
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: "The task_status request"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TaskStatus"
      responses:
        200:
          description: "Returns the saved TaskStatus object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskStatus"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/task_statuses/create:
    get:
      tags:
        - task_status
      summary: "Gets a new blank TaskStatus object"
      description: "Returns a blank object with default values"
      operationId: getTaskStatussCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank TaskStatus object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskStatus"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/task_statuses/{id}":
    get:
      tags:
        - task_status
      summary: "Shows a TaskStatus Term"
      description: "Displays an TaskStatusby id"
      operationId: showTaskStatus
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The TaskStatusHashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the TaskStatusobject"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskStatus"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - task_status
      summary: "Updates a TaskStatus Term"
      description: "Handles the updating of an TaskStatus Termby id"
      operationId: updateTaskStatus
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The TaskStatusHashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the TaskStatusobject"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskStatus"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - task_statuss
      summary: "Deletes a TaskStatus Term"
      description: "Handles the deletion of an TaskStatus by id"
      operationId: deleteTaskStatus
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The TaskStatusHashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/task_statuses/{id}/edit":
    get:
      tags:
        - task_status
      summary: "Shows an TaskStatusfor editting"
      description: "Displays an TaskStatusby id"
      operationId: editTaskStatuss
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The TaskStatusHashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the TaskStatus object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskStatus"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/task_statuses/bulk:
    post:
      tags:
        - task_status
      summary: "Performs bulk actions on an array of task statuses"
      description: ""
      operationId: bulkTaskStatuss
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "TaskStatus Ter,s"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The TaskStatus Terms response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaskStatus"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/tax_rates:
    get:
      tags:
        - tax_rates
      summary: "Gets a list of tax_rates"
      description: "Lists tax rates"
      operationId: getTaxRates
      parameters:
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of tax_rates"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/TaxRate'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/tax_rates/create:
    get:
      tags:
        - tax_rates
      summary: "Gets a new blank Tax Rate object"
      description: "Returns a blank object with default values"
      operationId: getTaxRateCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "A blank Tax Rate object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaxRate"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/tax_rates/{id}":
    get:
      tags:
        - tax_rates
      summary: "Shows a Tax Rate"
      description: "Displays an TaxRate by id"
      operationId: showTaxRate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The TaxRate Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Tax Rate object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaxRate"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - tax_rates
      summary: "Updates a tax rate"
      description: "Handles the updating of a tax rate by id"
      operationId: updateTaxRate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The TaxRate Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the TaxRate object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaxRate"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - tax_rates
      summary: "Deletes a TaxRate"
      description: "Handles the deletion of an TaxRate by id"
      operationId: deleteTaxRate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The TaxRate Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/tax_rates/{id}/edit":
    get:
      tags:
        - tax_rates
      summary: "Shows a Tax Rate for editting"
      description: "Displays a Tax Rate by id"
      operationId: editTaxRate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: id
          in: path
          description: "The TaxRate Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Tax Rate object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaxRate"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/tax_rates/bulk:
    post:
      tags:
        - tax_rates
      summary: "Performs bulk actions on an array of TaxRates"
      description: ""
      operationId: bulkTaxRates
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Tax Rates"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The TaxRate List response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/templates:
    post:
      tags:
        - templates
      summary: "Returns a entity template with the template variables replaced with the Entities"
      description: "Returns a entity template with the template variables replaced with the Entities"
      operationId: getShowTemplate
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        description: "The template subject and body"
        required: true
        content:
          application/json:
            schema:
              properties:
                subject:
                  description: "The email template subject"
                  type: string
                body:
                  description: "The email template body"
                  type: string
              type: object
      responses:
        200:
          description: "The template response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Template"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/templates/preview/{hash}":
    post:
      tags:
        - templates
      summary: "Preview template by hash"
      description: "Returns a template preview for the given hash"
      operationId: getTemplatePreview
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - name: hash
          in: path
          description: "The template hash"
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: "Template preview response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/search:
    post:
      tags:
        - search
      summary: "Search"
      description: "Performs a search across entities"
      operationId: postSearch
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        200:
          description: "Search results"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/tokens:
    get:
      tags:
        - tokens
      summary: "Gets a list of company tokens"
      description: "Lists company tokens.\n     *\n     *   Query parameters can be added to performed more fine grained filtering of the tokens, these are handled by the TokenFilters class which defines the methods available"
      operationId: getTokens
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of tokens"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/CompanyToken'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - tokens
      summary: "Adds a token"
      description: "Adds an token to a company"
      operationId: storeToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/tokens/{id}":
    get:
      tags:
        - tokens
      summary: "Shows a token"
      description: "Displays a token by id"
      operationId: showToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Token Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - tokens
      summary: "Updates a token"
      description: "Handles the updating of a token by id"
      operationId: updateToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Token Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - tokens
      summary: "Deletes a token"
      description: "Handles the deletion of a token by id"
      operationId: deleteToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Token Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/tokens/{id}/edit":
    get:
      tags:
        - tokens
      summary: "Shows a token for editting"
      description: "Displays a token by id"
      operationId: editToken
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Token Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/tokens/create:
    get:
      tags:
        - tokens
      summary: "Gets a new blank token object"
      description: "Returns a blank object with default values"
      operationId: getTokensCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank token object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/tokens/bulk:
    post:
      tags:
        - tokens
      summary: "Performs bulk actions on an array of tokens"
      description: ""
      operationId: bulkTokens
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Token ids"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Token response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompanyToken"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/users:
    get:
      tags:
        - users
      summary: "Gets a list of users"
      description: "Lists users, search and filters allow fine grained lists to be generated.\n\n    Query parameters can be added to performed more fine grained filtering of the users, these are handled by the UserFilters class which defines the methods available"
      operationId: getUsers
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A list of users"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - users
      summary: "Adds a User"
      description: "Adds an User to the system"
      operationId: storeUser
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved User object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/users/create:
    get:
      tags:
        - users
      summary: "Gets a new blank User object"
      description: "Returns a blank object with default values"
      operationId: getUsersCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank User object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/users/{id}":
    get:
      tags:
        - users
      summary: "Shows an User"
      description: "Displays an User by id"
      operationId: showUser
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The User Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the User object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - users
      summary: "Updates an User"
      description: "Handles the updating of an User by id"
      operationId: updateUser
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The User Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the User object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - users
      summary: "Deletes a User"
      description: "Handles the deletion of an User by id"
      operationId: deleteUser
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: token_name
          in: query
          description: "Customized name for the Users API Token"
          required: false
          schema:
            type: string
            format: string
          example: "iOS Device 11 iPad"
        - name: id
          in: path
          description: "The User Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/users/{id}/edit":
    get:
      tags:
        - users
      summary: "Shows an User for editting"
      description: "Displays an User by id"
      operationId: editUser
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The User Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the User object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/users/bulk:
    post:
      tags:
        - users
      summary: "Performs bulk actions on an array of users"
      description: ""
      operationId: bulkUsers
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Hashed ids"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/User"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/users/{user}/detach_from_company":
    delete:
      tags:
        - users
      summary: "Detach an existing user to a company"
      description: "Detach an existing user from a company"
      operationId: detachUser
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: user
          in: path
          description: "The user hashed_id"
          required: true
          schema:
            type: string
            format: string
          example: FD767dfd7
      responses:
        200:
          description: "Success response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/users/{user}/invite":
    post:
      tags:
        - users
      summary: "Reconfirm an existing user to a company"
      description: "Reconfirm an existing user from a company"
      operationId: inviteUser
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: user
          in: path
          description: "The user hashed_id"
          required: true
          schema:
            type: string
            format: string
          example: FD767dfd7
      responses:
        200:
          description: "Success response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/users/{user}/reconfirm":
    post:
      tags:
        - users
      summary: "Reconfirm an existing user to a company"
      description: "Reconfirm an existing user from a company"
      operationId: inviteUserReconfirm
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: user
          in: path
          description: "The user hashed_id"
          required: true
          schema:
            type: string
            format: string
          example: FD767dfd7
      responses:
        200:
          description: "Success response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/webcron:
    get:
      tags:
        - webcron
      summary: "Executes the task scheduler via a webcron service"
      description: "Executes the task scheduler via a webcron service"
      operationId: webcron
      parameters:
        - $ref: "#/components/parameters/X-Requested-With"
      responses:
        200:
          description: "Success response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/webhooks:
    get:
      tags:
        - webhooks
      summary: "Gets a list of Webhooks"
      description: "Lists Webhooks, search and filters allow fine grained lists to be generated.\n     *\n     *      Query parameters can be added to performed more fine grained filtering of the Webhooks, these are handled by the WebhookFilters class which defines the methods available"
      operationId: getWebhooks
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
      responses:
        200:
          description: "A list of Webhooks"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Webhook'
                  meta:
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - webhooks
      summary: "Adds a Webhook"
      description: "Adds an Webhook to a company"
      operationId: storeWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "Returns the saved Webhook object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/webhooks/{id}":
    get:
      tags:
        - webhooks
      summary: "Shows a Webhook"
      description: "Displays a Webhook by id"
      operationId: showWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Webhook Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Webhook object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - webhooks
      summary: "Updates a Webhook"
      description: "Handles the updating of a Webhook by id"
      operationId: updateWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Webhook Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Webhook object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - Webhooks
      summary: "Deletes a Webhook"
      description: "Handles the deletion of a Webhook by id"
      operationId: deleteWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Webhook Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  "/api/v1/webhooks/{id}/edit":
    get:
      tags:
        - webhooks
      summary: "Shows a Webhook for editting"
      description: "Displays a Webhook by id"
      operationId: editWebhook
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Webhook Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Webhook object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/webhooks/create:
    get:
      tags:
        - webhooks
      summary: "Gets a new blank Webhook object"
      description: "Returns a blank object with default values"
      operationId: getWebhooksCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank Webhook object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"
  /api/v1/webhooks/bulk:
    post:
      tags:
        - webhooks
      summary: "Performs bulk actions on an array of Webhooks"
      description: ""
      operationId: bulkWebhooks
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Webhook User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: "#/components/responses/422"
        default:
          $ref: "#/components/responses/default"

  /api/v1/credits:
    get:
      tags:
        - credits
      summary: "List credits"
      description: "Lists credits, search and filters allow fine grained lists to be generated.\n     *\n     *      Query parameters can be added to performed more fine grained filtering of the credits, these are handled by the CreditFilters class which defines the methods available"
      operationId: getCredits
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $credits = $ninja->credits->all([
              'per_page' => 10,
              'page' => 1
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/credits \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
      responses:
        200:
          description: "A list of credits"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Credit'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - credits
      summary: "Create credit"
      description: "Adds an credit to the system"
      operationId: storeCredit
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreditRequest"
      responses:
        200:
          description: "Returns the saved credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Credit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  
  "/api/v1/credits/{id}":
    get:
      tags:
        - credits
      summary: "Show credit"
      description: "Displays an credit by id"
      operationId: showCredit
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $credit = $ninja->credits->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/credits/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Credit Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Credit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - Credits
      summary: "Update credit"
      description: "Handles the updating of an Credit by id"
      operationId: updateCredit
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Credit Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Credit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - credits
      summary: "Delete credit"
      description: "Handles the deletion of an credit by id"
      operationId: deleteCredit
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->credits->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X DELETE https://demo.invoiceninja.com/api/v1/credits/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Credit Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/credits/{id}/edit":
    get:
      tags:
        - credits
      summary: "Edit credit"
      description: "Displays an credit by id"
      operationId: editCredit
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/credits/create:
    get:
      tags:
        - credits
      summary: "Blank credit"
      description: "Returns a blank object with default values"
      operationId: getCreditsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Credit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/credits/bulk:
    post:
      tags:
        - credits
      summary: "Bulk credit actions"
      description: ""
      operationId: bulkCredits
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: string
                example: '[D2J234DFA,D2J234DFA,D2J234DFA]'
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/credit/{invitation_key}/download":
    get:
      tags:
        - quotes
      summary: "Download quote PDF"
      description: "Downloads a specific quote"
      operationId: downloadCredit
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: invitation_key
          in: path
          description: "The Credit Invitation Key"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the credit pdf"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"

        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/credits/{id}/upload":
    post:
      tags:
        - credits
      summary: "Upload a credit document"
      description: "Handles the uploading of a document to a credit"
      operationId: uploadCredits
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Credit Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Credit object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Credit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/locations:
    get:
      tags:
        - locations
      summary: 'List locations'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoices = $ninja->locations->all([]);
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://demo.invoiceninja.com/api/v1/locations?per_page=10&page=1&sort=name&sort_dir=asc' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      description: |
        ##  GET /api/v1/locations

        Locations are additional addresses that are applicable to a client. This is useful when a client has multiple addresses for shipping, billing, etc.

        When retrieving a list of locations you can chain query parameters to filter the dataset. For example:
        
        ```html
        /api/v1/locations?name=warehouse*
        ```
        
        You can also sort the results:
        
        ```html
        /api/v1/locations?sort=name|desc
        ```

        For pagination, use per_page and page parameters:
        
        ```html
        /api/v1/locations?per_page=15&page=2
        ```

        The default per_page value is 20.
      operationId: getLocations
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/per_page_meta'
        - $ref: '#/components/parameters/page_meta'
        - name: name
          in: query
          description: |
            Filter by location name
            
            ```html
            ?name=warehouse
            ```
          required: false
          schema:
            type: string
          example: warehouse
        - name: sort
          in: query
          description: |
            Returns the list sorted by column in ascending or descending order.
            
            ```html
              ?sort=name|desc
            ```
          required: false
          schema:
            type: string
          example: name|desc
      responses:
        200:
          description: 'A list of locations'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Location'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'

    post:
      tags:
        - locations
      summary: 'Create location'
      description: |
        ##  POST /api/v1/locations

        Adds a location to a company
      x-codeSamples:
        - lang: php
          label: php
          source: |
            $ninja = new InvoiceNinja("YOUR-TOKEN");
            
            $client = $ninja->locations->create([
                'name' => 'A unique client location name',
                'address1' => '123 Main St',
                'address2' => 'Apt 1',
                'city' => 'New York',
                'state' => 'NY',
                'postal_code' => '10001',
                'country_id' => '1',
                'custom_value1' => 'Custom field value 1',
                'custom_value2' => 'Custom field value 2',
                'custom_value3' => 'Custom field value 3',
                'custom_value4' => 'Custom field value 4',
                'is_deleted' => false,
                'is_shipping_location' => true,
                'client_id' => 'x2fd23',
                'vendor_id' => 'jd78Dhjs'
            ]);
        - lang: curl
          label: curl
          source: |
            curl -X POST https://demo.invoiceninja.com/api/v1/locations \
              -H "X-API-TOKEN: YOUR-TOKEN" \
              -H "Content-Type: application/json" \
              -H "X-Requested-With: XMLHttpRequest" \
              -d '{
                "name": "A unique location name",
                "address1": "123 Main St",
                "address2": "Apt 1",
                "city": "New York",
                "state": "NY",
                "postal_code": "10001",
                "country_id": "1",
                "custom_value1": "Custom field value 1",
                "custom_value2": "Custom field value 2",
                "custom_value3": "Custom field value 3",
                "custom_value4": "Custom field value 4",
                "is_deleted": false,
                "is_shipping_location": true,
                "client_id": "x2fd23",
                "vendor_id": "jd78Dhjs"
              }'
      operationId: storeLocation
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
      requestBody:
        description: Location object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LocationRequest'
      responses:
        200:
          description: 'Returns the saved location object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Location'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'

  '/api/v1/locations/{id}':
    get:
      tags:
        - locations
      summary: 'Show location'
      description: |
        ##  GET /api/v1/locations/{id}

        Displays a location by id
      operationId: showLocation
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - name: id
          in: path
          description: 'The Location Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: 'Returns the location object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Location'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $location = $ninja->locations->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://demo.invoiceninja.com/api/v1/locations/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR-TOKEN' \
            --header 'Accept: application/json'

    put:
      tags:
        - locations
      summary: 'Update location'
      description: |
        ##  PUT /api/v1/locations/{id}

        Handles the updating of a location by id
      operationId: updateLocation
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - name: id
          in: path
          description: 'The Location Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Location object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LocationRequest'
      responses:
        200:
          description: 'Returns the location object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Location'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $location = $ninja->locations->update("D2J234DFA", [
              'name' => 'Updated Location Name',
              'address1' => '456 New Street',
              'city' => 'Los Angeles'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X PUT https://demo.invoiceninja.com/api/v1/locations/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "name": "Updated Location Name",
              "address1": "456 New Street",
              "city": "Los Angeles"
            }'

    delete:
      tags:
        - locations
      summary: 'Delete location'
      description: |
        ##  DELETE /api/v1/locations/{id}

        Handles the deletion of a location by id
      operationId: deleteLocation
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - name: id
          in: path
          description: 'The Location Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: 'Returns a HTTP status'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->locations->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X DELETE \
            --url 'https://demo.invoiceninja.com/api/v1/locations/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR-TOKEN' \
            --header 'Accept: application/json'

  /api/v1/locations/create:
    get:
      tags:
        - locations
      summary: 'Blank Location'
      description: |
        ##  GET /api/v1/locations/create

        Returns a blank object with default values
      operationId: getLocationsCreate
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
      responses:
        200:
          description: 'A blank location object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Location'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $location = $ninja->locations->model();
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://demo.invoiceninja.com/api/v1/locations/create' \
            --header 'X-API-TOKEN: YOUR-TOKEN' \
            --header 'Accept: application/json'

  /api/v1/locations/bulk:
    post:
      tags:
        - locations
      summary: 'Bulk location actions'
      description: |
        ##  POST /api/v1/locations/bulk

        Bulk actions allow to make changes to multiple locations in a single request. The following actions are supported:
        
        - archive
        - restore
        - delete

        All of these actions require an array of location ids to perform the requested action on ie.

        "ids":['id1','id2']
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->locations->bulk([
              'action' => 'archive',
              'ids' => ['locationId1', 'locationId2']
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/locations/bulk \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "action": "archive",
              "ids": ["locationId1", "locationId2"]
            }'
      operationId: bulkLocations
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
      requestBody:
        description: 'Bulk action array'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenericBulkAction'
      responses:
        200:
          description: 'The Location list Response of the updated locations that were bulk updated'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Location'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
    
  /api/v1/recurring_invoices:
    get:
      tags:
        - Recurring Invoices
      summary: "List recurring invoices"
      description: |
        ## GET /api/v1/recurring_invoices

        Lists invoices with the option to chain multiple query parameters allowing fine grained filtering of the list.  
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoices = $ninja->recurring_invoices->all([
            'per_page' => 10,
            'page' => 1,
            'sort' => 'number|asc'
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/recurring_invoices?per_page=10&page=1&sort=number&sort_dir=asc' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: getRecurringInvoices
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
        - $ref: "#/components/parameters/client_id"
        - $ref: "#/components/parameters/created_at"
        - $ref: "#/components/parameters/updated_at"
        - $ref: "#/components/parameters/is_deleted"
        - $ref: "#/components/parameters/filter_deleted_clients"
        - $ref: "#/components/parameters/vendor_id"
        - name: filter
          in: query
          description: |
            Searches across a range of columns including:  
            - custom_value1  
            - custom_value2  
            - custom_value3  
            - custom_value4
          required: false
          schema:
            type: string
          example: ?filter=bob
        - name: client_status
          in: query
          description: |
            A comma separated list of invoice status strings. Valid options include:  
            - all
            - active  
            - paused  
            - completed  
          required: false
          schema:
            type: string
          example: ?client_status=active,paused
        - name: sort
          in: query
          description: Returns the list sorted by column in ascending or descending order.
          required: false
          schema:
            type: string
          example: id|desc number|desc balance|asc 
        - name: number
          in: query
          description: |
            Filters the list by number.
          required: false
          schema:
            type: string
          example: ?number=123
        - name: product_key
          in: query
          description: |
            Filters the list by product_key.
          required: false
          schema:
            type: string
          example: ?product_key=123
        - name: next_send_between
          in: query
          description: |
            Filters the list by next_send_between.
          required: false
          schema:
            type: string
          example: ?next_send_between=2025-01-01|2025-01-31
        - name: frequency_id
          in: query
          description: |
            Filters the list by frequency_id.
          required: false
          schema:
            type: string
          example: ?frequency_id=1,2,3
      responses:
        200:
          description: "A list of recurring_invoices"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/RecurringInvoice'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - Recurring Invoices
      summary: "Create recurring invoice"
      description: |
        ## POST /api/v1/recurring_invoices

        Adds a Recurring Invoice to the system
      operationId: storeRecurringInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Recurring invoice object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RecurringInvoiceRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoices = $ninja->recurring_invoices->create([
            'client_id' => 'AxP7K9nY5z',
            'date' => '2022-01-01',
            'due_date' => '2022-01-31',
            'private_notes' => 'super secret',
            'public_notes' => 'public notes',
            'custom_value1' => 'custom value 1',
            'custom_value2' => 'custom value 2',
            'line_items' => [
              [
                    'quantity' => 1,
                    'cost' => 14,
                    'product_key' => 'sku_4_u',
                    'notes' => 'The actual product description',
                    'discount' => 0,
                    'is_amount_discount' => true,
                    'tax_name1' => '',
                    'tax_rate1' => 0,
                    'tax_name2' => '',
                    'tax_rate2' => 0,
                    'tax_name3' => '',
                    'tax_rate3' => 0,
                    'sort_id' => '0',
                    'custom_value1' => 'https://picsum.photos/200',
                    'custom_value2' => '94',
                    'custom_value3' => 'Alias vel eveniet.',
                    'custom_value4' => 'Iusto aut quis qui.',
                    'type_id' => '1',
                    'tax_id' => '1'
              ]
            ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request POST \
            --url 'https://invoicing.co/api/v1/recurring_invoices' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data '{
              "client_id": "AxP7K9nY5z",
              "date": "2022-01-01",
              "due_date": "2022-01-31",
              "private_notes": "super secret",
              "public_notes": "public notes",
              "custom_value1": "custom value 1",
              "custom_value2": "custom value 2",
              "line_items": [
                {
                  "quantity": 1,
                  "cost": 14,
                  "product_key": "sku_4_u",
                  "notes": "The actual product description",
                  "discount": 0,
                  "is_amount_discount": true,
                  "tax_name1": "",
                  "tax_rate1": 0,
                  "tax_name2": "",
                  "tax_rate2": 0,
                  "tax_name3": "",
                  "tax_rate3": 0,
                  "sort_id": "0",
                  "custom_value1": "https://picsum.photos/200",
                  "custom_value2": "94",
                  "custom_value3": "Alias vel eveniet.",
                  "custom_value4": "Iusto aut quis qui.",
                  "type_id": "1",
                  "tax_id": "1"
                }
              ]
            }'
      responses:
        200:
          description: "Returns the saved RecurringInvoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  
  "/api/v1/recurring_invoices/{id}":
    get:
      tags:
        - Recurring Invoices
      summary: "Show recurring invoice"
      description: "Displays an RecurringInvoice by id"
      operationId: showRecurringInvoice
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $recurringInvoice = $ninja->recurringInvoices->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/recurring_invoices/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringInvoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the RecurringInvoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - Recurring Invoices
      summary: "Update recurring invoice"
      description: "Handles the updating of an RecurringInvoice by id"
      operationId: updateRecurringInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringInvoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the RecurringInvoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - Recurring Invoices
      summary: "Delete recurring invoice"
      description: "Handles the deletion of an RecurringInvoice by id"
      operationId: deleteRecurringInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringInvoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_invoices/{id}/edit":
    get:
      tags:
        - Recurring Invoices
      summary: "Edit recurring invoice"
      description: "Displays an RecurringInvoice by id"
      operationId: editRecurringInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringInvoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the RecurringInvoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/recurring_invoices/create:
    get:
      tags:
        - Recurring Invoices
      summary: "Blank recurring invoice"
      description: "Returns a blank object with default values"
      operationId: getRecurringInvoicesCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank RecurringInvoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/recurring_invoices/bulk:
    post:
      tags:
        - Recurring Invoices
      summary: "Bulk recurring invoice actions"
      description: |
        There are multiple actions that are available including:

      operationId: bulkRecurringInvoices
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Bulk action details"
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  description: |
                    The action to be performed, options include:  
                    - `start`  
                      Starts (or restarts) the recurring invoice. **note** if the recurring invoice has been stopped for a long time, it will attempt to catch back up firing a new Invoice every hour per interval that has been missed.  
                      If you do not wish to have the recurring invoice catch up, you should set the next_send_date to the correct date you wish the recurring invoice to commence from.
                    - `stop`  
                      Stops the recurring invoice. 
                    - `send_now`  
                      Force sends the recurring invoice - this option is only available when the recurring invoice is in a draft state.  
                    - `restore`  
                      Restores the recurring invoice from an archived or deleted state.
                    - `archive`  
                      Archives the recurring invoice. The recurring invoice will not fire in this state.
                    - `delete`  
                      Deletes a recurring invoice.  
                ids:
                  type: array
                  items:
                    description: "Array of hashed IDs to be bulk 'actioned - ['D2J234DFA','D2J234DFA','D2J234DFA']"
                    type: string
              example:
                action: start
                ids: ['D2J234DFA','D2J234DFA','D2J234DFA']
      responses:
        200:
          description: "The RecurringInvoice response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_invoices/{id}/{action}":
    get:
      deprecated: true
      tags:
        - Recurring Invoices
      summary: "Custom recurring invoice action"
      description: "Performs a custom action on an RecurringInvoice.\n\n    The current range of actions are as follows\n    - clone_to_RecurringInvoice\n    - clone_to_quote\n    - history\n    - delivery_note\n    - mark_paid\n    - download\n    - archive\n    - delete\n    - email"
      operationId: actionRecurringInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringInvoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
        - name: action
          in: path
          description: "The action string to be performed"
          required: true
          schema:
            type: string
            format: string
          example: clone_to_quote
      responses:
        200:
          description: "Returns the RecurringInvoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_invoice/{invitation_key}/download":
    get:
      tags:
        - Recurring Invoices
      summary: "Download recurring invoice PDF"
      description: "Downloads a specific invoice"
      operationId: downloadRecurringInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: invitation_key
          in: path
          description: "The Recurring Invoice Invitation Key"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the recurring invoice pdf"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/recurring_invoices/{id}/upload":
    post:
      tags:
        - Recurring Invoices
      summary: "Add recurring invoice document"
      description: "Handles the uploading of a document to a recurring_invoice"
      operationId: uploadRecurringInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The RecurringInvoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the RecurringInvoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RecurringInvoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/tasks:
    get:
      tags:
        - tasks
      summary: "List tasks"
      description: "Lists tasks, search and filters allow fine grained lists to be generated.\n     *\n     *   Query parameters can be added to performed more fine grained filtering of the tasks, these are handled by the TaskFilters class which defines the methods available"
      operationId: getTasks
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $tasks = $ninja->tasks->all([
              'per_page' => 10,
              'page' => 1,
              'client_id' => 'D2J234DFA'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/tasks \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
      responses:
        200:
          description: "A list of tasks"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Task'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - tasks
      summary: "Create task"
      description: "Adds an task to a company"
      operationId: storeTask
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Task object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          
          $task = $ninja->tasks->create([
              'description' => 'Complete project documentation',
              'client_id' => 'D2J234DFA',
              'project_id' => 'P2J234DFA',
              'time_log' => '2.5',
              'status_id' => 1,
              'due_date' => '2024-01-31',
              'priority' => 1
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/tasks \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "description": "Complete project documentation",
              "client_id": "D2J234DFA",
              "project_id": "P2J234DFA",
              "time_log": "2.5",
              "status_id": 1,
              "due_date": "2024-01-31",
              "priority": 1
            }'
      responses:
        200:
          description: "Returns the saved task object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/tasks/{id}":
    get:
      tags:
        - tasks
      summary: "Show task"
      description: "Displays a task by id"
      operationId: showTask
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $task = $ninja->tasks->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/tasks/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Task Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the task object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - tasks
      summary: "Update task"
      description: "Handles the updating of a task by id"
      operationId: updateTask
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The task Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Task object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $task = $ninja->tasks->update("D2J234DFA", [
              'description' => 'Updated task description',
              'time_log' => '3.5',
              'status_id' => 2,
              'due_date' => '2024-02-15'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X PUT https://demo.invoiceninja.com/api/v1/tasks/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "description": "Updated task description",
              "time_log": "3.5",
              "status_id": 2,
              "due_date": "2024-02-15"
            }'
      responses:
        200:
          description: "Returns the task object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - tasks
      summary: "Delete task"
      description: "Handles the deletion of a task by id"
      operationId: deleteTask
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->tasks->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X DELETE https://demo.invoiceninja.com/api/v1/tasks/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Task Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/tasks/{id}/edit":
    get:
      tags:
        - tasks
      summary: "Edit task"
      description: "Displays a task by id"
      operationId: editTask
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $task = $ninja->tasks->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/tasks/D2J234DFA/edit \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Task Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the client object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/tasks/create:
    get:
      tags:
        - tasks
      summary: "Blank task"
      description: "Returns a blank task with default values"
      operationId: getTasksCreate
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $task = $ninja->tasks->model();
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/tasks/create \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank task object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/tasks/bulk:
    post:
      tags:
        - tasks
      summary: "Bulk task actions"
      description: ""
      operationId: bulkTasks
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Task User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/tasks/{id}/upload":
    post:
      tags:
        - tasks
      summary: "Uploads a task document"
      description: "Handles the uploading of a document to a task"
      operationId: uploadTask
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Task Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Task object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Task"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/tasks/sort:
    post:
      tags:
        - tasks
      summary: "Sort tasks on KanBan"
      description: "Sorts tasks after drag and drop on the KanBan."
      operationId: sortTasks
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Task sort order data
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskSortRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->tasks->sort([
              'task_ids' => ['D2J234DFA', 'E3K345EFB', 'F4L456FGC'],
              'status_id' => 1,
              'sort_order' => ['F4L456FGC', 'D2J234DFA', 'E3K345EFB']
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/tasks/sort \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "task_ids": ["D2J234DFA", "E3K345EFB", "F4L456FGC"],
              "status_id": 1,
              "sort_order": ["F4L456FGC", "D2J234DFA", "E3K345EFB"]
            }'
      responses:
        200:
          description: "Returns an Ok, 200 HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/quotes:
    get:
      tags:
        - quotes
      summary: "List quotes"
      description: |
        ## GET /api/v1/quotes

        Lists quotes, search and filters allow fine grained lists to be generated.
        
        Query parameters can be added to performed more fine grained filtering of the quotes, these are handled by the QuoteFilters class which defines the methods available
      
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $quotes = $ninja->quotes->all([
            'per_page' => 10,
            'page' => 1,
            'sort' => 'number|asc'
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/quotes?per_page=10&page=1&sort=number&sort_dir=asc' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: getQuotes
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
        - $ref: "#/components/parameters/status"
        - $ref: "#/components/parameters/client_id"
        - $ref: "#/components/parameters/created_at"
        - $ref: "#/components/parameters/updated_at"
        - $ref: "#/components/parameters/is_deleted"
        - $ref: "#/components/parameters/filter_deleted_clients"
        - $ref: "#/components/parameters/vendor_id"
        - name: filter
          in: query
          description: |
            Searches across a range of columns including:  
            - number  
            - custom_value1  
            - custom_value2  
            - custom_value3  
            - custom_value4
          required: false
          schema:
            type: string
          example: ?filter=bob
        - name: client_status
          in: query
          description: |
            A comma separated list of quote status strings. Valid options include:  
            - all
            - draft  
            - sent  
            - approved
            - expired
            - upcoming   
          required: false
          schema:
            type: string
          example: ?client_status=paid,unpaid
        - name: number
          in: query
          description: |
            Search quote by quote number 
          required: false
          schema:
            type: string
          example: ?number=Q-001
        - name: sort
          in: query
          description: Returns the list sorted by column in ascending or descending order.
          required: false
          schema:
            type: string
          example: id|desc number|desc balance|asc 
      responses:
        200:
          description: "A list of quotes"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Quote'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - quotes
      summary: "Create quote"
      description: |
        ## POST /api/v1/quotes
        Creates an quote for a client.

        Triggered actions are available when updating or creating an quote.

        These are query parameters that can be chained in order to perform additional actions on the entity, these include:
        
        ```
        ?send_email=true [Saves and sends the quote]
        ?mark_sent=true [Saves and marks the quote as sent]
        ?approve=true [Saves and approves the quote]
        ?convert=true [Saves and converts the quote to an invoice]
        ?save_default_footer=true [Saves the current footer as the default footer]
        ?save_default_terms=true [Saves the current terms as the default terms]
        
        ```
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoices = $ninja->quotes->create([
            'client_id' => 'AxP7K9nY5z',
            'date' => '2022-01-01',
            'due_date' => '2022-01-31',
            'frequency_id' => '1',
            'remaining_cycles' => '5',
            'private_notes' => 'super secret',
            'public_notes' => 'public notes',
            'custom_value1' => 'custom value 1',
            'custom_value2' => 'custom value 2',
            'line_items' => [
              [
                    'quantity' => 1,
                    'cost' => 14,
                    'product_key' => 'sku_4_u',
                    'notes' => 'The actual product description',
                    'discount' => 0,
                    'is_amount_discount' => true,
                    'tax_name1' => '',
                    'tax_rate1' => 0,
                    'tax_name2' => '',
                    'tax_rate2' => 0,
                    'tax_name3' => '',
                    'tax_rate3' => 0,
                    'sort_id' => '0',
                    'custom_value1' => 'https://picsum.photos/200',
                    'custom_value2' => '94',
                    'custom_value3' => 'Alias vel eveniet.',
                    'custom_value4' => 'Iusto aut quis qui.',
                    'type_id' => '1',
                    'tax_id' => '1'
              ]
            ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request POST \
            --url 'https://invoicing.co/api/v1/quotes' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data '{
              "client_id": "AxP7K9nY5z",
              "date": "2022-01-01",
              "due_date": "2022-01-31",
              "private_notes": "super secret",
              "public_notes": "public notes",
              "custom_value1": "custom value 1",
              "custom_value2": "custom value 2",
              "frequency_id": "1",
              "remaining_cycles": "5",
              "line_items": [
                {
                  "quantity": 1,
                  "cost": 14,
                  "product_key": "sku_4_u",
                  "notes": "The actual product description",
                  "discount": 0,
                  "is_amount_discount": true,
                  "tax_name1": "",
                  "tax_rate1": 0,
                  "tax_name2": "",
                  "tax_rate2": 0,
                  "tax_name3": "",
                  "tax_rate3": 0,
                  "sort_id": "0",
                  "custom_value1": "https://picsum.photos/200",
                  "custom_value2": "94",
                  "custom_value3": "Alias vel eveniet.",
                  "custom_value4": "Iusto aut quis qui.",
                  "type_id": "1",
                  "tax_id": "1"
                }
              ]
            }'
      operationId: storeQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Quote object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteRequest'
      responses:
        200:
          description: "Returns the saved Quote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/quotes/{id}":
    get:
      tags:
        - quotes
      summary: "Show quote"
      description: |
        ## GET /api/v1/quotes/{id}

        Displays an Quote by id

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $quote = $ninja->quotes->get("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/quotes/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: showQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Quote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Quote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - quotes
      summary: "Update quote"
      description: |
        ## PUT /api/v1/quotes/{id}

        Handles the updating of an Quote by id.

        Triggered actions are available when updating or creating an quote.

        These are query parameters that can be chained in order to perform additional actions on the entity, these include:
        
        ```
        ?send_email=true [Saves and sends the quote]
        ?mark_sent=true [Saves and marks the quote as sent]
        ?approve=true [Saves and approves the quote]
        ?convert=true [Saves and converts the quote to an invoice]
        ?save_default_footer=true [Saves the current footer as the default footer]
        ?save_default_terms=true [Saves the current terms as the default terms]
        
        ```
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->update("D2J234DFA", [
            'date' => '2022-01-01',
            'due_date' => '2022-01-31',
            'private_notes' => 'super secret',
            'public_notes' => 'public notes',
            'line_items' => [
              [
                'product_key' => 'sku_4_u',
                'notes' => 'The actual product description',
              ]
            ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request PUT \
            --url 'https://invoicing.co/api/v1/quotes/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data '{
              "date": "2022-01-01",
              "due_date": "2022-01-31",
              "private_notes": "super secret",
              "public_notes": "public notes",
              "line_items": [
                {
                  "product_key": "sku_4_u",
                  "notes": "The actual product description"
                }
              ]
            }'
      operationId: updateQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Quote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Quote object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QuoteRequest'
      responses:
        200:
          description: "Returns the Quote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - quotes
      summary: "Delete quote"
      description:  |
        ## DELETE /api/v1/quotes/{id}

        Handles the deletion of an Quote by id.

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $ninja->quotes->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request DELETE \
            --url 'https://invoicing.co/api/v1/quotes/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE'
      operationId: deleteQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Quote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/quotes/{id}/edit":
    get:
      tags:
        - quotes
      summary: "Edit quote"
      description: |
        ## GET /api/v1/quotes/{id}/edit

        Displays an Quote by id for editting

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $quote = $ninja->quotes->edit("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/quotes/D2J234DFA/edit' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: editQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Quote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Quote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/quotes/create:
    get:
      tags:
        - quotes
      summary: "Blank quote"
      description: |
        ## GET /api/v1/quotes/create

        Returns a blank object with default values

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $quote = $ninja->quotes->create();
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/quotes/create' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: getQuotesCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank Quote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/quotes/bulk:
    post:
      tags:
        - quotes
      summary: "Bulk quote actions"
      description: |
        ## POST /api/v1/quotes/bulk

        Performs bulk actions on an array of quotes

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $response = $ninja->quotes->bulk([
            'action' => 'approve',
            'ids' => ['D2J234DFA','D2J234DFA','D2J234DFA']
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request POST \
            --url 'https://invoicing.co/api/v1/quotes/bulk' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data '{
              "action": "approve",
              "ids": ["D2J234DFA","D2J234DFA","D2J234DFA"]
            }'
      operationId: bulkQuotes
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Bulk action details"
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: string
                  description: |
                    The action to be performed, options include:  
                    - `approve`  
                      Bulk approve an array of quotes  
                    - `convert`  
                      Bulk convert an array of quotes to invoices  
                    - `send_email`  
                      Bulk send an array of quotes as emails  
                    - `mark_sent`  
                      Bulk mark an array of quotes as sent  
                    - `restore`  
                      Restores an array of quotes  
                    - `delete`  
                      Deletes an array of invoices  
                    - `archive`  
                      Archives an array of invoices  
                ids:
                  type: array
                  items:
                    description: "Array of hashed IDs to be bulk 'actioned - ['D2J234DFA','D2J234DFA','D2J234DFA']"
                    type: string
              example:
                action: convert
                ids: ['D2J234DFA','D2J234DFA','D2J234DFA']
      responses:
        200:
          description: "The Quote response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/quotes/{id}/{action}":
    get:
      deprecated: true
      tags:
        - quotes
      summary: "Performs a custom action on an Quote"
      description: "Performs a custom action on an Quote.\n\n    The current range of actions are as follows\n    - clone_to_quote\n    - history\n    - delivery_note\n    - mark_paid\n    - download\n    - archive\n    - delete\n    - convert\n    - convert_to_invoice\n    - email"
      operationId: actionQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Quote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
        - name: action
          in: path
          description: "The action string to be performed"
          required: true
          schema:
            type: string
            format: string
          example: clone_to_quote
      responses:
        200:
          description: "Returns the Quote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/quote/{invitation_key}/download":
    get:
      tags:
        - quotes
      summary: "Download quote PDF"
      description: "Downloads a specific quote"
      operationId: downloadQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: invitation_key
          in: path
          description: "The Quote Invitation Key"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the quote pdf"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/quotes/{id}/upload":
    post:
      tags:
        - quotes
      summary: "Upload a quote document"
      description: "Handles the uploading of a document to a quote"
      operationId: uploadQuote
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Quote Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Quote object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Quote"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/invoices:
    get:
      tags:
        - invoices
      summary: "List invoices"
      description: |
        ##  GET /api/v1/invoices

        Lists invoices with the option to chain multiple query parameters allowing fine grained filtering of the list.  
      
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoices = $ninja->invoices->all([
            'per_page' => 10,
            'page' => 1,
            'sort' => 'number|asc'
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/invoices?per_page=10&page=1&sort=number&sort_dir=asc' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: getInvoices
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
        - $ref: "#/components/parameters/status"
        - $ref: "#/components/parameters/client_id"
        - $ref: "#/components/parameters/created_at"
        - $ref: "#/components/parameters/updated_at"
        - $ref: "#/components/parameters/is_deleted"
        - $ref: "#/components/parameters/filter_deleted_clients"
        - $ref: "#/components/parameters/vendor_id"
        - name: client_status
          in: query
          description: |
            A comma separated list of invoice status strings. Valid options include:  
            - all
            - paid  
            - unpaid  
            - overdue   
          required: false
          schema:
            type: string
          example: ?client_status=paid,unpaid
        - name: number
          in: query
          description: |
            Search invoices by invoice number 
          required: false
          schema:
            type: string
          example: ?number=INV-001
        - name: filter
          in: query
          description: |
            Searches across a range of columns including:  
            - number  
            - po_number  
            - date  
            - amount  
            - balance  
            - custom_value1  
            - custom_value2  
            - custom_value3  
            - custom_value4
            - client.name
            - client.contacts.[first_name, last_name, email]
            - line_items.[product_key, notes]
          required: false
          schema:
            type: string
          example: ?filter=bob
        - name: without_deleted_clients
          in: query
          description: |
            Returns the invoice list without the invoices of deleted clients.
          required: false
          schema:
            type: string
          example: ?without_deleted_clients=
        - name: overdue
          in: query
          description: |
            Returns the list of invoices that are overdue
          required: false
          schema:
            type: string
          example: ?overdue=
        - name: payable
          in: query
          description: |
            Returns the invoice list that are payable for a defined client. Please note, you must pass the client_id as the value for this query parameter
          required: false
          schema:
            type: string
          example: ?payable={client_id}
        - name: sort
          in: query
          description: Returns the list sorted by column in ascending or descending order.
          required: false
          schema:
            type: string
          example: id|desc number|desc balance|asc 
        - name: private_notes
          in: query
          description: |
            Searches on the private_notes field of the invoices
          required: false
          schema:
            type: string
          example: ?private_notes=super secret
        - name: date
          in: query
          description: |
            Filters the invoices by invoice date returns a list of invoices after (and including) the date
          required: false
          schema:
            type: string
          example: ?date=2022-01-01
        - name: date_range
          in: query
          description: |
            Filters the invoices by invoice date returns a list of invoices between two dates
          required: false
          schema:
            type: string
          example: ?date_range=2022-01-01,2022-01-31
        - name: status_id
          in: query
          description: |
            Filters the invoices by status id

            ```html
              STATUS_DRAFT = 1;
              STATUS_SENT = 2;
              STATUS_PARTIAL = 3;
              STATUS_PAID = 4;
              STATUS_CANCELLED = 5;
              STATUS_REVERSED = 6;
            ```
          required: false
          schema:
            type: integer
          example: 1
      responses:
        200:
          description: "A list of invoices"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Invoice'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - invoices
      summary: "Create invoice"
      description: | 
        ## POST /api/v1/invoices
        Creates an invoice for a client.

        Triggered actions are available when updating or creating an invoice.

        These are query parameters that can be chained in order to perform additional actions on the entity, these include:

          ```
          ?send_email=true [Saves and sends the invoice]
          ?mark_sent=true [Saves and marks the invoice as sent]
          ?paid=true [Saves and marks the invoice as paid]
          ?amount_paid=100 [Saves and marks the invoice as paid with the given amount]
          ?cancel=true [Saves and marks the invoice as cancelled]
          ?save_default_footer=true [Saves the current footer as the default footer]
          ?save_default_terms=true [Saves the current terms as the default terms]
          ?retry_e_send=true [Saves and retries the e-send for the invoice]
          ?redirect=https://example.com [Saves and redirects to the given url]
          ```
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoices = $ninja->invoices->create([
            'client_id' => 'AxP7K9nY5z',
            'date' => '2022-01-01',
            'due_date' => '2022-01-31',
            'frequency_id' => '1',
            'remaining_cycles' => '5',
            'private_notes' => 'super secret',
            'public_notes' => 'public notes',
            'custom_value1' => 'custom value 1',
            'custom_value2' => 'custom value 2',
            'line_items' => [
              [
                    'quantity' => 1,
                    'cost' => 14,
                    'product_key' => 'sku_4_u',
                    'notes' => 'The actual product description',
                    'discount' => 0,
                    'is_amount_discount' => true,
                    'tax_name1' => '',
                    'tax_rate1' => 0,
                    'tax_name2' => '',
                    'tax_rate2' => 0,
                    'tax_name3' => '',
                    'tax_rate3' => 0,
                    'sort_id' => '0',
                    'custom_value1' => 'https://picsum.photos/200',
                    'custom_value2' => '94',
                    'custom_value3' => 'Alias vel eveniet.',
                    'custom_value4' => 'Iusto aut quis qui.',
                    'type_id' => '1',
                    'tax_id' => '1'
              ]
            ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request POST \
            --url 'https://invoicing.co/api/v1/invoices' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data '{
              "client_id": "AxP7K9nY5z",
              "date": "2022-01-01",
              "due_date": "2022-01-31",
              "private_notes": "super secret",
              "public_notes": "public notes",
              "custom_value1": "custom value 1",
              "custom_value2": "custom value 2",
              "frequency_id": "1",
              "remaining_cycles": "5",
              "line_items": [
                {
                  "quantity": 1,
                  "cost": 14,
                  "product_key": "sku_4_u",
                  "notes": "The actual product description",
                  "discount": 0,
                  "is_amount_discount": true,
                  "tax_name1": "",
                  "tax_rate1": 0,
                  "tax_name2": "",
                  "tax_rate2": 0,
                  "tax_name3": "",
                  "tax_rate3": 0,
                  "sort_id": "0",
                  "custom_value1": "https://picsum.photos/200",
                  "custom_value2": "94",
                  "custom_value3": "Alias vel eveniet.",
                  "custom_value4": "Iusto aut quis qui.",
                  "type_id": "1",
                  "tax_id": "1"
                }
              ]
            }'
      operationId: storeInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/InvoiceRequest"
      responses:
        200:
          description: "Returns the saved invoice entity"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"

  "/api/v1/invoices/{id}":
    get:
      tags:
        - invoices
      summary: "Show invoice"
      description: |
        ## GET /api/v1/invoices/{id}

        Displays an invoice by id
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->get("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/invoices/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: showInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"

    put:
      tags:
        - invoices
      summary: "Update invoice"
      description: |
        ## PUT /api/v1/invoices/{id}
        Handles the updating of an invoice by id.

        Triggered actions are available when updating or creating an invoice.  
        These are query parameters that can be chained in order to perform additional actions on the entity, these include:

          ```
          ?send_email=true [Saves and sends the invoice]
          ?mark_sent=true [Saves and marks the invoice as sent]
          ?paid=true [Saves and marks the invoice as paid]
          ?amount_paid=100 [Saves and marks the invoice as paid with the given amount]
          ?cancel=true [Saves and marks the invoice as cancelled]
          ?save_default_footer=true [Saves the current footer as the default footer]
          ?save_default_terms=true [Saves the current terms as the default terms]
          ?retry_e_send=true [Saves and retries the e-send for the invoice]
          ?redirect=https://example.com [Saves and redirects to the given url]
          ```

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->update("D2J234DFA", [
            'date' => '2022-01-01',
            'due_date' => '2022-01-31',
            'private_notes' => 'super secret',
            'public_notes' => 'public notes',
            'line_items' => [
              [
                'product_key' => 'sku_4_u',
                'notes' => 'The actual product description',
              ]
            ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request PUT \
            --url 'https://invoicing.co/api/v1/invoices/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data '{
              "date": "2022-01-01",
              "due_date": "2022-01-31",
              "private_notes": "super secret",
              "public_notes": "public notes",
              "line_items": [
                {
                  "product_key": "sku_4_u",
                  "notes": "The actual product description"
                }
              ]
            }'
      operationId: updateInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"  
    delete:
      tags:
        - invoices
      summary: "Delete invoice"
      description: |
        ## DELETE /api/v1/invoices/{id}

        Handles the deletion of an invoice by id.

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $ninja->invoices->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request DELETE \
            --url 'https://invoicing.co/api/v1/invoices/D2J234DFA' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: deleteInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/invoices/{id}/edit":
    get:
      tags:
        - invoices
      summary: "Edit invoice"
      description: |
        ## GET /api/v1/invoices/{id}/edit

        Displays an invoice by id for editting

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/invoices/D2J234DFA/edit' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      operationId: editInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"

  /api/v1/invoices/create:
    get:
      operationId: getInvoiceCreate
      tags:
        - invoices
      summary: "Blank invoice"
      description: |
        ## GET /api/v1/invoices/create

        Returns a blank object with default values

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->model();
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/invoices/create' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      responses:
        200:
          description: "A blank invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"

  /api/v1/invoices/bulk:
    post:
      tags:
        - invoices
      summary: "Bulk invoice actions"
      description: |
        ## POST /api/v1/invoices/bulk

        There are multiple actions that are available including:  

      operationId: bulkInvoices
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $response = $ninja->invoices->bulk([
            'action' => 'bulk_download',
            'ids' => ['D2J234DFA','D2J234DFA','D2J234DFA']
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request POST \
            --url 'https://invoicing.co/api/v1/invoices/bulk' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json' \
            --header 'Content-Type: application/json' \
            --data '{
              "action": "bulk_download",
              "ids": ["D2J234DFA","D2J234DFA","D2J234DFA"]
            }'
      requestBody:
        description: "Bulk action details"
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email_type:
                  type: string
                  description: |
                    The email type to be sent, when bulk emailing invoices options include:
                    - `invoice` (default)
                    - `quote`
                    - `credit`
                    - `payment`
                    - `payment_partial`
                    - `statement`
                    - `reminder1`
                    - `reminder2`
                    - `reminder3`
                    - `reminder_endless`
                    - `custom1`
                    - `custom2`
                    - `custom3`
                    - `purchase_order`
                    - `email_quote_template_reminder1`
                action:
                  type: string
                  description: |
                    The action to be performed, options include:  
                    - `bulk_download`  
                      Bulk download an array of invoice PDFs (These are sent to the admin via email.)  
                    - `download`  
                      Download a single PDF. (Returns a single PDF object)  
                    - `bulk_print`  
                      Merges an array of Invoice PDFs for easy one click printing.  
                    - `auto_bill`  
                      Attempts to automatically bill the invoices with the payment method on file.  
                    - `clone_to_invoice`  
                      Returns a clone of the invoice.  
                    - `clone_to_quote`  
                      Returns a quote cloned using the properties of the given invoice.  
                    - `mark_paid`  
                      Marks an array of invoices as paid.  
                    - `mark_sent`  
                      Marks an array of invoices as sent.  
                    - `restore`  
                      Restores an array of invoices  
                    - `delete`  
                      Deletes an array of invoices  
                    - `archive`  
                      Archives an array of invoices  
                    - `cancel`  
                      Cancels an array of invoices  
                    - `email`  
                      Emails an array of invoices  
                    - `send_email`  
                      Emails an array of invoices. Requires additional properties to be sent. `email_type`  
                ids:
                  type: array
                  items:
                    description: "Array of hashed IDs to be bulk 'actioned - ['D2J234DFA','D2J234DFA','D2J234DFA']"
                    type: string
              example:
                action: bulk_download
                ids: ['D2J234DFA','D2J234DFA','D2J234DFA']
              
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"

  "/api/v1/invoices/{id}/{action}":
    get:
      deprecated: true
      tags:
        - invoices
      summary: "Custom invoice action"
      description: |
        Performs a custom action on an invoice.  
        The current range of actions are as follows  
        - clone_to_invoice  
        - clone_to_quote  
        - history  
        - delivery_note  
        - mark_paid  
        - download  
        - archive  
        - delete  
        - email  
      operationId: actionInvoice
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
        - name: action
          in: path
          description: "The action string to be performed"
          required: true
          schema:
            type: string
            format: string
          example: clone_to_quote
      responses:
        200:
          description: "Returns the invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/invoice/{invitation_key}/download":
    get:
      operationId: downloadInvoiceByInvitation
      tags:
        - invoices
      summary: "Download invoice PDF"
      description: |
        ## GET /api/v1/invoice/{invitation_key}/download

        Downloads a specific invoice

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->download("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/invoice/D2J234DFA/download' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: invitation_key
          in: path
          description: "The Invoice Invitation Key"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the invoice pdf"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/invoices/{id}/delivery_note":
    get:
      operationId: getInvoiceDeliveryNote
      tags:
        - invoices
      summary: "Download delivery note"
      description: |
        ## GET /api/v1/invoices/{id}/delivery_note

        Downloads a specific invoice delivery notes

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->deliveryNote("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/invoices/D2J234DFA/delivery_note' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hahsed Id"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the invoice delivery note pdf"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/invoices/{id}/upload":
    post:
      operationId: uploadInvoiceDocument
      tags:
        - invoices
      summary: "Add invoice document"
      description: |
        ## POST /api/v1/invoices/{id}/upload

        Handles the uploading of a document to a invoice

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoice = $ninja->invoices->upload("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl --request POST \
            --url 'https://invoicing.co/api/v1/invoices/D2J234DFA/upload' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Invoice Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Invoice object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Invoice"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/projects:
    get:
      tags:
        - projects
      summary: "List projects"
      description: "Lists projects"
      operationId: getProjects
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $projects = $ninja->projects->all([
              'per_page' => 10,
              'page' => 1
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/projects \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
      responses:
        200:
          description: "A list of projects"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Project'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - projects
      summary: "Create project"
      description: "Adds an project to a company"
      operationId: storeProject
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Project object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          
          $project = $ninja->projects->create([
              'name' => 'Website Redesign Project',
              'client_id' => 'D2J234DFA',
              'description' => 'Complete redesign of company website',
              'budgeted_hours' => 120.5,
              'task_rate' => 75.00,
              'due_date' => '2024-03-31',
              'color' => '#FF5733'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/projects \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "name": "Website Redesign Project",
              "client_id": "D2J234DFA",
              "description": "Complete redesign of company website",
              "budgeted_hours": 120.5,
              "task_rate": 75.00,
              "due_date": "2024-03-31",
              "color": "#FF5733"
            }'
      responses:
        200:
          description: "Returns the saved project object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/projects/{id}":
    get:
      tags:
        - projects
      summary: "Show project"
      description: "Displays a project by id"
      operationId: showProject
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $project = $ninja->projects->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/projects/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Project Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the expense object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - projects
      summary: "Update project"
      description: "Handles the updating of a project by id"
      operationId: updateProject
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Project Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Project object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $project = $ninja->projects->update("D2J234DFA", [
              'name' => 'Updated Project Name',
              'description' => 'Updated project description',
              'budgeted_hours' => 150.0,
              'due_date' => '2024-04-30'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X PUT https://demo.invoiceninja.com/api/v1/projects/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "name": "Updated Project Name",
              "description": "Updated project description",
              "budgeted_hours": 150.0,
              "due_date": "2024-04-30"
            }'
      responses:
        200:
          description: "Returns the project object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - projects
      summary: "Delete project"
      description: "Handles the deletion of a project by id"
      operationId: deleteProject
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->projects->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X DELETE https://demo.invoiceninja.com/api/v1/projects/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Project Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/projects/{id}/edit":
    get:
      tags:
        - projects
      summary: "Edit project"
      description: "Displays a project by id"
      operationId: editProject
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $project = $ninja->projects->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/projects/D2J234DFA/edit \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Project Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the project object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/projects/create:
    get:
      tags:
        - projects
      summary: "Blank project"
      description: "Returns a blank object with default values"
      operationId: getProjectsCreate
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $project = $ninja->projects->model();
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/projects/create \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank project object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/projects/bulk:
    post:
      tags:
        - projects
      summary: "Bulk project actions"
      description: ""
      operationId: bulkProjects
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Project User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/projects/{id}/upload":
    post:
      tags:
        - projects
      summary: "Uploads a project document"
      description: "Handles the uploading of a document to a project"
      operationId: uploadProject
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Project Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Project object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Project"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/vendors:
    get:
      tags:
        - vendors
      summary: "List vendors"
      description: "Lists vendors, search and filters allow fine grained lists to be generated.\n\n    Query parameters can be added to performed more fine grained filtering of the vendors, these are handled by the VendorFilters class which defines the methods available"
      operationId: getVendors
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $vendors = $ninja->vendors->all([
              'per_page' => 10,
              'page' => 1
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/vendors \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
      responses:
        200:
          description: "A list of vendors"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Vendor'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - vendors
      summary: "Create vendor"
      description: "Adds a vendor to a company"
      operationId: storeVendor
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Vendor object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VendorRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          
          $vendor = $ninja->vendors->create([
              'name' => 'ABC Supply Company',
              'address1' => '123 Main Street',
              'address2' => 'Suite 100',
              'city' => 'New York',
              'state' => 'NY',
              'postal_code' => '10001',
              'country_id' => '1',
              'phone' => '+1-555-123-4567',
              'email' => 'contact@abcsupply.com',
              'website' => 'https://www.abcsupply.com',
              'contacts' => [
                  [
                      'first_name' => 'John',
                      'last_name' => 'Doe',
                      'email' => 'john.doe@abcsupply.com',
                      'phone' => '+1-555-123-4567',
                      'send_email' => true
                  ]
              ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/vendors \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "name": "ABC Supply Company",
              "address1": "123 Main Street",
              "address2": "Suite 100",
              "city": "New York",
              "state": "NY",
              "postal_code": "10001",
              "country_id": "1",
              "phone": "+1-555-123-4567",
              "email": "contact@abcsupply.com",
              "website": "https://www.abcsupply.com",
              "contacts": [
                {
                  "first_name": "John",
                  "last_name": "Doe",
                  "email": "john.doe@abcsupply.com",
                  "phone": "+1-555-123-4567",
                  "send_email": true
                }
              ]
            }'
      responses:
        200:
          description: "Returns the saved vendor object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Vendor"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/vendors/{id}":
    get:
      tags:
        - vendors
      summary: "Show vendor"
      description: "Displays a vendor by id"
      operationId: showVendor
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $vendor = $ninja->vendors->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/vendors/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The vendor Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the vendor object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Vendor"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - vendors
      summary: "Update vendor"
      description: "Handles the updating of a vendor by id"
      operationId: updateVendor
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Vendor Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Vendor object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VendorRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $vendor = $ninja->vendors->update("D2J234DFA", [
              'name' => 'Updated Vendor Name',
              'address1' => '456 New Street',
              'city' => 'Los Angeles',
              'state' => 'CA',
              'postal_code' => '90210'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X PUT https://demo.invoiceninja.com/api/v1/vendors/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "name": "Updated Vendor Name",
              "address1": "456 New Street",
              "city": "Los Angeles",
              "state": "CA",
              "postal_code": "90210"
            }'
      responses:
        200:
          description: "Returns the vendor object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Vendor"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - vendors
      summary: "Delete vendor"
      description: "Handles the deletion of a vendor by id"
      operationId: deleteVendor
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->vendors->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X DELETE https://demo.invoiceninja.com/api/v1/vendors/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Vendor Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/vendors/{id}/edit":
    get:
      tags:
        - vendors
      summary: "Edit vendor"
      description: "Displays a vendor by id"
      operationId: editVendor
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $vendor = $ninja->vendors->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/vendors/D2J234DFA/edit \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Vendor Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the vendor object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Vendor"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/vendors/create:
    get:
      tags:
        - vendors
      summary: "Blank vendor"
      description: "Returns a blank vendor with default values"
      operationId: getVendorsCreate
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $vendor = $ninja->vendors->model();
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/vendors/create \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank vendor object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Vendor"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/vendors/bulk:
    post:
      tags:
        - vendors
      summary: "Bulk vendor actions"
      description: ""
      operationId: bulkVendors
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Vendor User response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Vendor"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/vendors/{id}/upload":
    post:
      tags:
        - vendors
      summary: "Uploads a vendor document"
      description: "Handles the uploading of a document to a vendor"
      operationId: uploadVendor
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Vendor Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Vendor object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Vendor"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/payments:
    get:
      tags:
        - payments
      summary: "List payments"
      description: "Lists payments, search and filters allow fine grained lists to be generated.\n\n        Query parameters can be added to performed more fine grained filtering of the payments, these are handled by the PaymentFilters class which defines the methods available"
      operationId: getPayments
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $payments = $ninja->payments->all([
              'per_page' => 10,
              'page' => 1
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/payments \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
        - $ref: "#/components/parameters/status"
        - $ref: "#/components/parameters/client_id"
        - $ref: "#/components/parameters/created_at"
        - $ref: "#/components/parameters/updated_at"
        - $ref: "#/components/parameters/is_deleted"
        - $ref: "#/components/parameters/filter_deleted_clients"
        - $ref: "#/components/parameters/vendor_id"
        - name: filter
          in: query
          description: |
            Searches across a range of columns including:  
            - amount  
            - date  
            - custom_value1  
            - custom_value2  
            - custom_value3  
            - custom_value4
          required: false
          schema:
            type: string
          example: ?filter=10
        - name: number
          in: query
          description: |
            Search payments by payment number 
          required: false
          schema:
            type: string
          example: ?number=0001
        - name: sort
          in: query
          description: Returns the list sorted by column in ascending or descending order.
          required: false
          schema:
            type: string
          example: id|desc number|desc balance|asc 
      responses:
        200:
          description: "A list of payments"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Payment'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - payments
      summary: "Create payment"
      description: "Adds an Payment to the system"
      x-codeSamples:
        - lang: php
          label: php
          source: |
            $ninja = new InvoiceNinja("YOUR-TOKEN");
            
            $payment = $ninja->payments->create([
                'client_id' => 'x2fd23',
                'amount' => 100,
                'date' => '2021-01-01',
                'transaction_reference' => '1234567890',
                'type_id' => 1,
                'invoices' => [
                    [
                        'invoice_id' => 'jd78Dhjs',
                        'amount' => 100,
                    ]
                ]
            ]);
      operationId: storePayment
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: email_receipt
          in: query
          description: |
            If true, the payment will be emailed to the client. If false, no email will be sent. This will override any other email settings for payments.
          required: false
          schema:
            type: boolean
      requestBody:
        description: "The payment request can be as simple as a client id and amount, or as complex as a full payment with invoices and associated credits that should be applied."
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PaymentRequest"
      responses:
        200:
          description: "Returns the saved Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  
  "/api/v1/payments/{id}":
    get:
      tags:
        - payments
      summary: "Show payment"
      description: "Displays an Payment by id"
      operationId: showPayment
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $payment = $ninja->payments->show("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/payments/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    put:
      tags:
        - payments
      summary: "Update payment"
      description: "Handles the updating of an Payment by id"
      operationId: updatePayment
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - payments
      summary: "Delete payment"
      description: "Handles the deletion of an Payment by id"
      operationId: deletePayment
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->payments->delete("D2J234DFA");
      - lang: curl
        label: curl
        source: |
          curl -X DELETE https://demo.invoiceninja.com/api/v1/payments/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/payments/{id}/edit":
    get:
      tags:
        - payments
      summary: "Edit payment"
      description: "Displays an Payment by id"
      operationId: editPayment
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/payments/create:
    get:
      tags:
        - payments
      summary: "Blank payment"
      description: "Returns a blank object with default values"
      operationId: getPaymentsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/payments/refund:
    post:
      tags:
        - payments
      summary: "Refund payment"
      description: "Adds an Refund to the system"
      operationId: storeRefund
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: "The refund request"
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Payment"
      responses:
        200:
          description: "Returns the saved Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/payments/bulk:
    post:
      tags:
        - payments
      summary: "Bulk payment actions"
      description: ""
      operationId: bulkPayments
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "User credentials"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Payment response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/payments/{id}/{action}":
    get:
      deprecated: true
      tags:
        - payments
      summary: "Custom payment actions"
      description: "Performs a custom action on an Payment.\n\n    The current range of actions are as follows\n    - clone_to_Payment\n    - clone_to_quote\n    - history\n    - delivery_note\n    - mark_paid\n    - download\n    - archive\n    - delete\n    - email"
      operationId: actionPayment
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
        - name: action
          in: path
          description: "The action string to be performed"
          required: true
          schema:
            type: string
            format: string
          example: clone_to_quote
      responses:
        200:
          description: "Returns the Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  
  "/api/v1/payments/{id}/upload":
    post:
      tags:
        - payments
      summary: "Upload a payment document"
      description: "Handles the uploading of a document to a payment"
      operationId: uploadPayment
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Payment Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Payment object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Payment"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/clients:
    get:
      tags:
        - clients
      summary: |
        List clients
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("your_token");
          $invoices = $ninja->clients->all([
              'balance' => 'lt:10', // get all clients with a balance less than 10
              'per_page' => 10, // return 10 results per page
              'page' => 2, // paginate to page 2
              'include' => 'documents', // include the documents relationship
          ]);
      - lang: curl
        label: curl
        source: |
          curl --request GET \
            --url 'https://invoicing.co/api/v1/clients?per_page=10&page=1&sort=name&sort_dir=asc' \
            --header 'X-API-TOKEN: YOUR_API_TOKEN_HERE' \
            --header 'Accept: application/json'
      description: |
            ###  GET /api/v1/clients  
            When retrieving a list of clients you can also chain query parameters in order to filter the dataset that is returned. For example, you can send a request to the following URL to retrieve clients that have a balance greater than 1000
              
            ```
            /api/v1/clients?balance=gt:1000
            ``` 
            
            You can also sort the results by adding a sort parameter. The following example will sort the results by the client name in descending order
            
            ```
            /api/v1/clients?sort=name|desc
            ```

            You can also combine multiple filters together. The following example will return clients that have a balance greater than 1000 and are not deleted and have a name that starts with "Bob"
            
            ```
            /api/v1/clients?balance=gt:1000&name=Bob*
            ```

            If you wish to retrieve child relations, you can also combine the query parameter `?include=` with a comma separated list of relationships
            
            ```
            /api/v1/clients?include=activities,ledger,system_logs'
            ```

            The per_page and page variables allow pagination of the list of clients. The following example will return the second page of clients with 15 clients per page
            
            ```
            /api/v1/clients?per_page=15&page=2
            ```

            The default per_page value is 20.

      operationId: getClients
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/client_include'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/per_page_meta'
        - $ref: '#/components/parameters/page_meta'
        - $ref: "#/components/parameters/status"
        - $ref: "#/components/parameters/created_at"
        - $ref: "#/components/parameters/updated_at"
        - $ref: "#/components/parameters/is_deleted"
        - $ref: "#/components/parameters/filter_deleted_clients"
        - name: name
          in: query
          description: |
            Filter by client name  

            ```html
            ?name=bob
            ```
          required: false
          schema:
            type: string
          example: bob
        - name: balance
          in: query
          description: |
            Filter by client balance, format uses an operator and value separated by a colon. lt,lte, gt, gte, eq

            ```html
            ?balance=lt:10
            ```

            ie all clients whose balance is less than 10
          required: false
          schema:
            type: string
          example: lt:10
        - name: between_balance
          in: query
          description: |
            Filter between client balances, format uses two values separated by a colon

            ```html
            ?between_balance=10:100
            ```
          required: false
          schema:
            type: string
          example: 10:100
        - name: email
          in: query
          description: |
            Filter by client email

            ```html
            ?email=bob@gmail.com
            ```
          required: false
          schema:
            type: string
          example: bob@gmail.com
        - name: id_number
          in: query
          description: |
            Filter by client id_number

            ```html
            ?id_number=0001
            ```
          required: false
          schema:
            type: string
          example: a1039883
        - name: number
          in: query
          description: |
            Filter by client number

            ```html
            ?number=0002
            ```
          required: false
          schema:
            type: string
          example: a1039883
        - name: filter
          in: query
          description: |
            Broad filter which targets multiple client columns:
              
              ```html
                name, 
                id_number, 
                contact.first_name 
                contact.last_name, 
                contact.email, 
                contact.phone
                custom_value1,
                custom_value2,
                custom_value3,
                custom_value4,
              ```

              ```html
              ?filter=Bobby
              ```
          required: false
          schema:
            type: string
          example: a1039883
        - name: sort
          in: query
          description: |
            Returns the list sorted by column in ascending or descending order.

            Ensure you use column | direction, ie.

            ```html
              ?sort=id|desc
            ```
          required: false
          schema:
            type: string
          example: id|desc name|desc balance|asc 

        - name: group
          in: query
          description: |
            Returns the list of clients assigned to {group_id}

            ```html
              ?group=X89sjd8
            ```
          required: false
          schema:
            type: string
          example: X89sjd8

        - name: client_id
          in: query
          description: |
            Returns the list of clients with {client_id} - proxy call to retrieve a client_id wrapped in an array

            ```html
              ?client_id=X89sjd8
            ```
          required: false
          schema:
            type: string
          example: X89sjd8

      responses:
        200:
          description: 'A list of clients'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Client'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
    post:
      tags:
        - clients
      summary: 'Create client'
      description: |

        ##  POST /api/v1/clients  
        Adds a client to a company
          
        > 🚨 Important    
        When creating (or updating) a client you must include the child contacts with all mutating requests. Client contacts cannot be modified in isolation.
      x-codeSamples:
        - lang: php
          label: php
          source: |
            $ninja = new InvoiceNinja("YOUR-TOKEN");
            
            $client = $ninja->clients->create([
                'name' => 'Client Name',
                'contacts' => [
                    [
                        'first_name' => 'John',
                        'last_name' => 'Smith',
                        'email' => 'john@example.com',
                        'phone' => '555-0123'
                    ]
                ],
                'address1' => '123 Main St',
                'city' => 'New York',
                'state' => 'NY',
                'postal_code' => '10001',
                'country_id' => '1'
            ]);
        - lang: curl
          label: curl
          source: |
            curl -X POST https://demo.invoiceninja.com/api/v1/clients \
              -H "X-API-TOKEN: YOUR-TOKEN" \
              -H "Content-Type: application/json" \
              -H "X-Requested-With: XMLHttpRequest" \
              -d '{
                "name": "Client Name",
                "contacts": [
                  {
                    "first_name": "John",
                    "last_name": "Smith",
                    "email": "john@example.com",
                    "phone": "555-0123",
                    "send_email": true
                  }
                ],
                "address1": "123 Main St",
                "city": "New York",
                "state": "NY",
                "postal_code": "10001",
                "country_id": "1"
              }'
      operationId: storeClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientRequest'
      responses:
        200:
          description: 'Returns the saved client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  '/api/v1/clients/{id}':
    get:
      tags:
        - clients
      summary: 'Show client'
      description: |
        ##  GET /api/v1/clients/{id}

        Displays a client by id

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $client = $ninja->clients->show('clientId123');
      - lang: curl
        label: php
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/clients/clientId123 \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"

      operationId: showClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: id
          in: path
          description: 'The Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: 'Returns the client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
    put:
      tags:
        - clients
      summary: 'Update client'
      description: |
        ##  PUT /api/v1/clients/{id}

        Handles the updating of a client by id

        > 🚨 Important    
        When creating (or updating) a client you must include the child contacts with all mutating requests. Client contacts cannot be modified in isolation.
      
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $client = $ninja->clients->update('clientId123', [
              'name' => 'Updated Name',
              'contacts' => [
                  [
                      'first_name' => 'John',
                      'last_name' => 'Smith',
                      'email' => 'john@example.com'
                  ]
              ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X PUT https://demo.invoiceninja.com/api/v1/clients/clientId123 \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "name": "Updated Name",
              "contacts": [
                {
                  "first_name": "John",
                  "last_name": "Smith",
                  "email": "john@example.com"
                }
              ]
            }'

      operationId: updateClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: id
          in: path
          description: 'The Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Client object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientRequest'
      responses:
        200:
          description: 'Returns the client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
    delete:
      tags:
        - clients
      summary: 'Delete client'
      description: |
        ##  DELETE /api/v1/clients/{id}

        Handles the deletion of a client by id

        > ❗ Note
        Deleting a client does not purge the client from the system. The delete action will remove the clients data from all 
        views in the application but keep it on file in case it needs to be restored.
        
        A Client can be later restored reversing this action.  
        
        To permanently wipe a client and all of their records from the system, use the [/purge route](/#tag/clients/POST/api/v1/clients/{id}/purge)

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->clients->delete('clientId123');
      - lang: curl
        label: curl
        source: |
          curl -X DELETE https://demo.invoiceninja.com/api/v1/clients/clientId123 \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"

      operationId: deleteClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: id
          in: path
          description: 'The Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: 'Returns a HTTP status'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  '/api/v1/clients/{id}/edit':
    get:
      tags:
        - clients
      summary: 'Edit Client'
      description: |
        ##  GET /api/v1/clients/{id}/edit
        Displays a client by id, essentially an alias of the show route
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $client = $ninja->clients->show('clientId123');
      - lang: curl
        label: php
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/clients/clientId123 \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      operationId: editClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: id
          in: path
          description: 'The Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: 'Returns the client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  /api/v1/clients/create:
    get:
      tags:
        - clients
      summary: 'Blank Client'
      description: |
        ##  GET /api/v1/clients/create  

        Returns a blank object with default values

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $client = $ninja->clients->model();
      - lang: curl
        label: php
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/clients/create \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      operationId: getClientsCreate
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
      responses:
        200:
          description: 'A blank client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  /api/v1/clients/bulk:
    post:
      tags:
        - clients
      summary: 'Bulk client actions'
      description: |
        ##  POST /api/v1/clients/bulk

        Bulk actions allow to make changes to multiple clients in a single request the following actions are supported
        
        - archive
        - restore
        - delete
        - template _requires template,template_id properties also_
        - assign_group _requires group_settings_id also_
        - bulk_update _requires column,new_value also_

        All of these actions require an array of client ids to perform the requested action on ie.

        "ids":['id1','id2']

        actions such as template, assign_group and bulk_update also require additional properties to be passed in the request

        - template

        The template bulk action allows the creation of a custom template using the provided template_id to be run against the array of clients provided.

        - assign_group
        
        Allows setting multiple clients to a single group

        - bulk_update

        Allows updating certain columns on the client model in bulk. the current list of supported columns that can be updated archived_at:

        - public_notes
        - industry_id
        - size_id
        - country_id
        - custom_value1
        - custom_value2
        - custom_value3
        - custom_value4
      
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->clients->bulk([
              'action' => 'archive',
              'ids' => ['clientId1', 'clientId2']
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/clients/bulk \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "action": "archive",
              "ids": ["clientId1", "clientId2"]
            }'
      operationId: bulkClients
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
      requestBody:
        description: 'Bulk action array'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GenericBulkAction'
              
      responses:
        200:
          description: 'The Client list Response of the updated clients that were bulk updated'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  '/api/v1/clients/{id}/upload':
    post:
      tags:
        - clients
      summary: 'Add client document'
      description: |
        ##  POST /api/v1/clients/{id}/upload

        Handles the uploading of a document to a client, please note due to a quirk in REST you will need to use a _method parameter with value of POST

      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->clients->upload('clientId123', '/path/to/document.pdf');
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/clients/clientId123/upload \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest" \
            -F "_method=POST" \
            -F "documents[]=@/path/to/document.pdf"

      operationId: uploadClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: id
          in: path
          description: 'The Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: POST
                documents[]:
                  type: array
                  description: |
                    Array of files to upload. The files should be sent with the key name 'documents[]'.
                    
                    Supported file types:
                    - PDF (.pdf)
                    - Word (.doc, .docx)
                    - Excel (.xls, .xlsx)
                    - Images (.jpg, .jpeg, .png)
                    - Text (.txt)
                    
                    Maximum file size: 20MB per file
                  items:
                    type: string
                    format: binary
                    description: The file contents
                  example: ["@/path/to/document.pdf"]
      responses:
        200:
          description: 'Returns the client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  '/api/v1/clients/{id}/purge':
    post:
      tags:
        - clients
      summary: 'Purge client'
      description: |
        ##  POST /api/v1/clients/{id}/purge

        Handles purging a client.

        > ❗ Note
        This is a destructive action.
        This action will remove all data associated with the client and cannot be undone.
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->clients->purge('clientId123');
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/clients/clientId123/purge \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest" \
            -H "X-API-PASSWORD: YOUR-PASSWORD"

      operationId: purgeClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/X-API-PASSWORD'
        - name: id
          in: path
          description: 'The Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: 'Returns the client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  '/api/v1/clients/{id}/{mergeable_client_hashed_id}/merge':
    post:
      tags:
        - clients
      summary: 'Merge client'
      description: |
        ##  POST /api/v1/clients/{id}/{mergeable_client_hashed_id}/merge

        Handles merging 2 clients

        The id parameter is the client that will be the primary client after the merge has completed. 

        The mergeable_client_hashed_id is the client that will be merged into the primary client, this clients records will be updated and associated with the primary client.

        > 🚨 **Important**    
        This action requires elevated permissions, please note the X-API-PASSWORD header requirements for this route.
        
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->clients->merge('primaryClientId', 'mergeableClientId');
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/clients/primaryClientId/mergeableClientId/merge \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"

      operationId: mergeClient
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/X-API-PASSWORD'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: id
          in: path
          description: 'The Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
        - name: mergeable_client_hashed_id
          in: path
          description: 'The Mergeable Client Hashed ID'
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: 'Returns the client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        default:
          $ref: '#/components/responses/default'
  /api/v1/client_statement:
    post:
      tags:
        - clients
      summary: 'Client statement PDF'
      description: |
        ##  POST /api/v1/client_statement

        Return a PDF of the client statement

      operationId: clientStatement
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $statement = $ninja->clients->statement([
              'client_id' => 'clientId123',
              'start_date' => '2024-01-01',
              'end_date' => '2024-12-31',
              'show_payments_table' => true,
              'show_aging_table' => true
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/client_statement \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "client_id": "clientId123",
              "start_date": "2024-01-01",
              "end_date": "2024-12-31",
              "show_payments_table": true,
              "show_aging_table": true
            }'
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
      requestBody:
        description: 'Statement Options'
        required: true
        content:
          application/json:
            schema:
              properties:
                start_date:
                  description: 'The start date of the statement period - format Y-m-d'
                  type: string
                end_date:
                  description: 'The start date of the statement period - format Y-m-d'
                  type: string
                client_id:
                  description: 'The hashed ID of the client'
                  type: string
                show_payments_table:
                  description: 'Flag which determines if the payments table is shown'
                  type: boolean
                show_credits_table:
                  description: 'Flag which determines if the credits table is shown'
                  type: boolean
                show_aging_table:
                  description: 'Flag which determines if the aging table is shown'
                  type: boolean
              type: object
      responses:
        200:
          description: 'Returns the client object'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Client'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
  /api/v1/reactivate_email/{bounce_id}:
    post:
      tags:
        - clients
      summary: 'Removes email suppression of a user in the system'
      description: |
        ##  POST /api/v1/reactivate_email/{bounce_id}

        Emails are suppressed by PostMark, when they receive a Hard bounce / Spam Complaint. This endpoint allows you to remove the suppression and send emails to the user again.

      operationId: reactivateEmail
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->clients->reactivateEmail("bounce_id_123");
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/reactivate_email/bounce_id_123 \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: bounce_id
          in: path
          description: 'The postmark Bounce ID reference'
          required: true
          schema:
            type: string
            format: string
          example: "123243"
      responses:
        200:
          description: 'Success'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
        400:
          description: 'Postmark exception - generated if the suppression cannot be removed for any reason'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
  /api/v1/clients/{client}/updateTaxData:
    post:
      tags:
        - clients
      summary: 'Update tax data'
      description: |
        ##  POST /api/v1/clients/{client}/updateTaxData

        Updates the clients tax data - if their address has changed

      operationId: updateClientTaxData
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $ninja->clients->updateTaxData("D2J234DFA", [
              'address1' => '123 New Street',
              'city' => 'New York',
              'state' => 'NY',
              'postal_code' => '10001',
              'country_id' => '1'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/clients/D2J234DFA/updateTaxData \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "address1": "123 New Street",
              "city": "New York",
              "state": "NY",
              "postal_code": "10001",
              "country_id": "1"
            }'
      parameters:
        - $ref: '#/components/parameters/X-API-TOKEN'
        - $ref: '#/components/parameters/X-Requested-With'
        - $ref: '#/components/parameters/index'
        - $ref: '#/components/parameters/client_include'
        - name: client
          in: path
          description: 'The Client Hashed ID reference'
          required: true
          schema:
            type: string
            format: string
          example: V2J234DFA
      responses:
        200:
          description: 'Success'
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: '#/components/headers/X-MINIMUM-CLIENT-VERSION'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
        400:
          description: 'Postmark exception - generated if the suppression cannot be removed for any reason'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
  /api/v1/purchase_orders:
    get:
      tags:
        - Purchase Orders
      summary: "List purchase orders"
      description: "Lists purchase orders, search and filters allow fine grained lists to be generated.\n     *\n     *      Query parameters can be added to performed more fine grained filtering of the purchase orders, these are handled by the PurchaseOrderFilters class which defines the methods available"
      operationId: getPurchaseOrders
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $purchaseOrders = $ninja->purchaseOrders->all([
              'per_page' => 10,
              'page' => 1
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X GET https://demo.invoiceninja.com/api/v1/purchase_orders \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "X-Requested-With: XMLHttpRequest"
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
      responses:
        200:
          description: "A list of purchase orders"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/PurchaseOrder'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    post:
      tags:
        - Purchase Orders
      summary: "Create purchase order"
      description: "Adds a purchase order to the system"
      operationId: storePurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Purchase order object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseOrderRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          
          $purchaseOrder = $ninja->purchase_orders->create([
              'vendor_id' => 'D2J234DFA',
              'date' => '2024-01-01',
              'due_date' => '2024-01-31',
              'private_notes' => 'Internal notes about this purchase order',
              'public_notes' => 'Please deliver to our warehouse',
              'line_items' => [
                  [
                      'quantity' => 10,
                      'cost' => 25.00,
                      'product_key' => 'PROD_001',
                      'notes' => 'Office supplies',
                      'discount' => 0,
                      'is_amount_discount' => true,
                      'tax_name1' => 'Sales Tax',
                      'tax_rate1' => 8.5
                  ]
              ]
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X POST https://demo.invoiceninja.com/api/v1/purchase_orders \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "vendor_id": "D2J234DFA",
              "date": "2024-01-01",
              "due_date": "2024-01-31",
              "private_notes": "Internal notes about this purchase order",
              "public_notes": "Please deliver to our warehouse",
              "line_items": [
                {
                  "quantity": 10,
                  "cost": 25.00,
                  "product_key": "PROD_001",
                  "notes": "Office supplies",
                  "discount": 0,
                  "is_amount_discount": true,
                  "tax_name1": "Sales Tax",
                  "tax_rate1": 8.5
                }
              ]
            }'
      responses:
        200:
          description: "Returns the saved purchase order object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PurchaseOrder"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  
  "/api/v1/purchase_orders/{id}":
    get:
      tags:
        - Purchase Orders
      summary: "Show purchase order"
      description: "Displays an purchase order by id"
      operationId: showPurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Purchase order Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the purchase order object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PurchaseOrder"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/purchase_order/{id}":
    put:
      tags:
        - Purchase Orders
      summary: "Update purchase order"
      description: "Handles the updating of a purchase order by id"
      operationId: updatePurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The purchase order Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Purchase order object that needs to be updated
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseOrderRequest'
      x-codeSamples:
      - lang: php
        label: php
        source: |
          $ninja = new InvoiceNinja("YOUR-TOKEN");
          $purchaseOrder = $ninja->purchase_orders->update("D2J234DFA", [
              'date' => '2024-02-01',
              'due_date' => '2024-02-28',
              'private_notes' => 'Updated internal notes',
              'public_notes' => 'Updated delivery instructions'
          ]);
      - lang: curl
        label: curl
        source: |
          curl -X PUT https://demo.invoiceninja.com/api/v1/purchase_order/D2J234DFA \
            -H "X-API-TOKEN: YOUR-TOKEN" \
            -H "Content-Type: application/json" \
            -H "X-Requested-With: XMLHttpRequest" \
            -d '{
              "date": "2024-02-01",
              "due_date": "2024-02-28",
              "private_notes": "Updated internal notes",
              "public_notes": "Updated delivery instructions"
            }'
      responses:
        200:
          description: "Returns the purchase order object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PurchaseOrder"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
    delete:
      tags:
        - Purchase Orders
      summary: "Delete purchase order"
      description: "Handles the deletion of an purchase orders by id"
      operationId: deletePurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The purhcase order Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/purchase_orders/{id}/edit":
    get:
      tags:
        - Purchase Orders
      summary: "Edit purchase order"
      description: "Displays an purchase order by id"
      operationId: editPurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The purchase order Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the purchase order object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PurchaseOrder"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  
  /api/v1/purchase_orders/create:
    get:
      tags:
        - Purchase Orders
      summary: "Blank purchase order"
      description: "Returns a blank object with default values"
      operationId: getPurchaseOrderCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank purchase order object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PurchaseOrder"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/purchase_orders/bulk:
    post:
      tags:
        - Purchase Orders
      summary: "Bulk purchase order action"
      description: ""
      operationId: bulkPurchaseOrderss
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: "Purchase Order IDS"
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                description: "Array of hashed IDs to be bulk 'actioned"
                type: integer
                example: 0
      responses:
        200:
          description: "The Bulk Action response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/purchase_orders/{id}/{action}":
    get:
      deprecated: true
      tags:
        - Purchase Orders
      summary: "Custom purchase order actions"
      description: "Performs a custom action on an purchase order.\n     *\n     *        The current range of actions are as follows\n     *        - mark_paid\n     *        - download\n     *        - archive\n     *        - delete\n     *        - email"
      operationId: actionPurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Purchase Order Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
        - name: action
          in: path
          description: "The action string to be performed"
          required: true
          schema:
            type: string
            format: string
          example: clone_to_quote
      responses:
        200:
          description: "Returns the purchase order object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PurchaseOrder"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/purchase_orders/{id}/upload":
    post:
      tags:
        - Purchase Orders
      summary: "Uploads a purchase order document"
      description: "Handles the uploading of a document to a purchase_order"
      operationId: uploadPurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Purchase Order Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: "File Upload Body"
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: PUT
                documents:
                  type: array
                  items:
                    description: "Array of binary documents for upload"
                    type: string
                    format: binary
      responses:
        200:
          description: "Returns the Purchase Order object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PurchaseOrder"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  "/api/v1/purchase_order/{invitation_key}/download":
    get:
      tags:
        - Purchase Orders
      summary: "Download a purchase order PDF"
      description: "Downloads a specific purchase order"
      operationId: downloadPurchaseOrder
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: invitation_key
          in: path
          description: "The Purchase Order Invitation Key"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Purchase Order pdf"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: "#/components/responses/401"
        403:
          $ref: "#/components/responses/403"
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: "#/components/responses/default"
  /api/v1/products:
    get:
      tags:
        - products
      summary: "List products"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $products = $ninja->products->all([
            'filter' => 'search',
            'per_page' => 20,
            'page' => 1,
            'include' => 'documents'
          ]);
      - lang: curl
        label: Curl
        source: |
          curl -X GET 'https://invoicing.co/api/v1/products?filter=search&per_page=20&page=1&include=documents' \
          -H "X-API-TOKEN:company-token-test" \
          -H "X-Requested-With: XMLHttpRequest";
      
      description: |
        ##  GET /api/v1/products
        Lists products within your company.
        
        You can search and filter the result set using query parameters. These can be chained together allowing fine grained lists to be generated.    

      operationId: getProducts
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - $ref: "#/components/parameters/index"
        - $ref: "#/components/parameters/per_page_meta"
        - $ref: "#/components/parameters/page_meta"
        - $ref: "#/components/parameters/status"
        - $ref: "#/components/parameters/client_id"
        - $ref: "#/components/parameters/created_at"
        - $ref: "#/components/parameters/updated_at"
        - $ref: "#/components/parameters/is_deleted"
        - $ref: "#/components/parameters/filter_deleted_clients"
        - $ref: "#/components/parameters/vendor_id"
        - name: filter
          in: query
          description: Filter by product name
          required: false
          schema:
            type: string
          example: bob
        - name: product_key
          in: query
          description: Filter by product key
          required: false
          schema:
            type: string
          example: bob
        - name: sort
          in: query
          description: Returns the list sorted by column in ascending or descending order.
          required: false
          schema:
            type: string
          example: id|desc product_key|desc  
      responses:
        200:
          description: "A list of products"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:  
                type: object
                properties:
                  data: 
                    type: array
                    items:
                      $ref: '#/components/schemas/Product'
                  meta:
                    type: object
                    $ref: '#/components/schemas/Meta'
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
    post:
      tags:
        - products
      summary: "Create Product"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $products = $ninja->products->create([
            'product_key' => "sku_1",
            'notes' => "product description",
            'cost' => 1,
            'price' => 10
          ]);
      - lang: curl
        label: Curl
        source: |
          curl -X POST 'https://invoicing.co/api/v1/products' \
          -H "X-API-TOKEN:company-token-test" \
          -H "Content-Type:application/json" \
          -d '{"product_key":"sku_1","notes":"product description","cost":1,"price":10}' \
          -H "X-Requested-With: XMLHttpRequest";
      
      description: |
        ##  POST /api/v1/products
        Adds a product to a company
      operationId: storeProduct
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      requestBody:
        description: Product object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductRequest'
      responses:
        200:
          description: "Returns the saved product object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
  "/api/v1/products/{id}":
    get:
      tags:
        - products
      summary: "Show product"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $product = $ninja->products->show("{id}");
      - lang: curl
        label: Curl
        source: |
          curl -X GET 'https://invoicing.co/api/v1/products/{id}' \
          -H "X-API-TOKEN:company-token-test" \
          -H "X-Requested-With: XMLHttpRequest";
      
      description: |
        ##  GET /api/v1/products/{id}
        Displays a product by id
      operationId: showProduct
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Product Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the product object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
    put:
      tags:
        - products
      summary: "Update product"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $product = $ninja->products->update("id", [
            "name" => "Updated Product",
            "price" => 150.0,
            "description" => "An updated description of the product"
          ]);
      - lang: curl
        label: Curl
        source: |
          curl -X PUT 'https://invoicing.co/api/v1/products/{id}' \
          -H "X-API-TOKEN:company-token-test" \
          -H "Content-Type: application/json" \
          -d '{
            "product_key": "Updated Product",
            "price": 150.0,
            "notes": "An updated description of the product"
          }'
      
      description: |
        ##  PUT /api/v1/products/{id}
        Handles the updating of a product by id
      operationId: updateProduct
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Product Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        description: Product object that needs to be added to the company
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductRequest'
      responses:
        200:
          description: "Returns the Product object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
    delete:
      tags:
        - products
      summary: "Delete product"
      description: |
        ##  DELETE /api/v1/products/{id}
        Handles the deletion of a product by id
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $ninja->products->bulk([
              'action' => 'delete',
              'ids' => ['productId1', 'productId2']
          ]);
      - lang: curl
        label: Curl
        source: |
          curl -X DELETE 'https://invoicing.co/api/v1/products/{id}' \
          -H "X-API-TOKEN:company-token-test" \
          -H "X-Requested-With: XMLHttpRequest";
      
      operationId: deleteProduct
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Product Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns a HTTP status"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
  "/api/v1/products/{id}/edit":
    get:
      tags:
        - products
      summary: "Edit product"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $product = $ninja->products->show("{id}");
      - lang: curl
        label: Curl
        source: |
          curl -X GET 'https://invoicing.co/api/v1/products/{id}/edit' \
          -H "X-API-TOKEN:company-token-test" \
          -H "X-Requested-With: XMLHttpRequest";
      
      description: |
        ##  GET /api/v1/products/{id}/edit
        Displays an Product by id
      operationId: editProduct
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
        - name: id
          in: path
          description: "The Product Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      responses:
        200:
          description: "Returns the Product object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'
  "/api/v1/products/create":
    get:
      tags:
        - products
      summary: "Blank product"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $product = $ninja->products->model();
      - lang: curl
        label: Curl
        source: |
          curl -X GET 'https://invoicing.co/api/v1/products/create' \
          -H "X-API-TOKEN:company-token-test" \
          -H "X-Requested-With: XMLHttpRequest";
      
      description: |
        ##  GET /api/v1/products/create
        Returns a blank product object with default values
      operationId: getProductsCreate
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/include"
      responses:
        200:
          description: "A blank Product object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'

  /api/v1/products/bulk:
    post:
      tags:
        - products
      summary: "Bulk product actions"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $product = $ninja->products->bulk([
              'action' => 'archive',
              'ids' => ['productId1', 'productId2']
          ]);
      - lang: curl
        label: Curl
        source: |
          curl -X GET 'https://invoicing.co/api/v1/products/bulk' \
          -H "Content-Type:application/json" \
          -d '{"action":"archive","ids":["id","id2"]}' \
          -H "X-API-TOKEN:company-token-test" \
          -H "X-Requested-With: XMLHttpRequest";
      
      description: |
        ##  POST /api/v1/products/bulk
        Archive / Restore / Delete  / Set tax id in bulk
      operationId: bulkProducts
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/index"
      requestBody:
        description: 'Bulk action array'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductBulkAction'
      responses:
        200:
          description: "The Product response"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'

  "/api/v1/products/{id}/upload":
    post:
      tags:
        - products
      summary: "Add product document"
      x-codeSamples:
      - lang: php
        label: PHP
        source: |
          $ninja = new InvoiceNinja("your_token");
          $product = $ninja->products->upload("id", "document");
      - lang: curl
        label: Curl
        source: |
          curl -X POST 'https://invoicing.co/api/v1/products/{id}/upload' \
          -H "X-API-TOKEN:company-token-test" \
          -H "X-Requested-With: XMLHttpRequest";
      description: |
        ##  POST /api/v1/products/{id}/upload
        Handles the uploading of a document to a product"
      operationId: uploadProduct
      parameters:
        - $ref: "#/components/parameters/X-API-TOKEN"
        - $ref: "#/components/parameters/X-Requested-With"
        - $ref: "#/components/parameters/client_include"
        - name: id
          in: path
          description: "The Product Hashed ID"
          required: true
          schema:
            type: string
            format: string
          example: D2J234DFA
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                _method:
                  type: string
                  example: POST
                documents:
                  type: array
                  items:
                    format: binary
      responses:
        200:
          description: "Returns the Product object"
          headers:
            X-MINIMUM-CLIENT-VERSION:
              $ref: "#/components/headers/X-MINIMUM-CLIENT-VERSION"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/X-RateLimit-Remaining"
            X-RateLimit-Limit:
              $ref: "#/components/headers/X-RateLimit-Limit"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Product"
        401:
          $ref: '#/components/responses/401'
        403:
          $ref: '#/components/responses/403'
        422:
          $ref: '#/components/responses/422'
        429:
          $ref: '#/components/responses/429'
        5XX:
          description: 'Server error'
        default:
          $ref: '#/components/responses/default'

components:
  headers:
    X-MINIMUM-CLIENT-VERSION:
      description: 'The API version'
      schema:
        type: number
    X-RateLimit-Remaining:
      description: 'The number of requests left for the time window.'
      schema:
        type: integer
    X-RateLimit-Limit:
      description: 'The total number of requests in a given time window.'
      schema:
        type: integer
  securitySchemes:
    ApiKeyAuth:        
      type: apiKey
      in: header       
      name: X-API-TOKEN 
  #examples:
   # Client:
   #   $ref: '#/components/schemas/Client'

    # Client:
    #     id: Opnel5aKBz
    #     user_id: Ua6Rw4pVbS
    #     assigned_user_id: Ua6Rw4pVbS
    #     name: "Jim's Housekeeping"
    #     website: https://www.jims-housekeeping.com
    #     private_notes: Client prefers email communication over phone calls
    #     client_hash: asdfkjhk342hjhbfdvmnfb1
    #     industry_id: 5
    #     size_id: 2
    #     address1: 123 Main St
    #     address2: Apt 4B
    #     city: Beverly Hills
    #     state: California
    #     postal_code: 90210
    #     phone: 555-3434-3434
    #     country_id: 1
    #     custom_value1: Email
    #     custom_value2: John Doe
    #     custom_value3: Yes
    #     custom_value4: $50,000
    #     vat_number: VAT123456
    #     id_number: ID123456
    #     number: CL-0001
    #     shipping_address1: 5 Wallaby Way
    #     shipping_address2: Suite 5
    #     shipping_city: Perth
    #     shipping_state: Western Australia
    #     shipping_postal_code: 6110
    #     shipping_country_id: 4
    #     is_deleted: false
    #     balance: 500.00
    #     paid_to_date: 2000.00
    #     credit_balance: 100.00
    #     last_login: 1628686031
    #     created_at: 1617629031
    #     updated_at: 1628445631
    #     group_settings_id: Opnel5aKBz
    #     routing_id: Opnel5aKBz3489-dfkiu-2239-sdsd
    #     is_tax_exempt: false
    #     has_valid_vat_number: false
    #     payment_balance: 100
    #     contacts:
    #         id: Opnel5aKBz
    #         first_name: John
    #         last_name: Doe
    #         email: jim@gmail.com
    #         phone: 555-3434-3434
    #         send_invoice: true
    #         custom_value1: Email
    #         custom_value2: John Doe
    #         custom_value3: Yes
    #         custom_value4: $50,000
    #         is_primary: true
    #         created_at: 1617629031
    #         updated_at: 1628445631
    #         deleted_at: 1628445631
    # Meta:
    #   value:
    #     pagination:
    #       total: 1
    #       count: 1
    #       per_page: 20
    #       current_page: 1
    #       total_pages: 1
    #       links:
    #         - first: https://invoicing.co/api/v1/invoices?page=1
    #         - last: https://invoicing.co/api/v1/invoices?page=1
    #         - prev: null
    #         - next: null
  responses:
    default:
      description: 'Unexpected Error'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    429:
      description: 'Rate Limit Exceeded'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimiterError'
    400:      
      description: 'Invalid user input'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvalidInputError'

    401:      
      description: 'Authentication error'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AuthenticationError'
    403:
      description: 'Authorization error'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AuthorizationError'
    422:
      description: 'Validation error'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationError'
  parameters:
    X-API-SECRET:
      name: X-API-SECRET
      in: header
      description: 'The API secret as defined by the .env variable API_SECRET. Only needed for self hosted users, and only applicable on the login route.'
      required: false
      schema:
        type: string
        example: password
    X-Requested-With:
      name: X-Requested-With
      in: header
      description: 'Used to send the XMLHttpRequest header'
      required: true
      schema:
        type: string
        example: XMLHttpRequest
    X-API-TOKEN:
      name: X-API-TOKEN
      in: header
      description: 'The API token to be used for authentication'
      required: true
      schema:
        type: string
        example: TOKEN
    X-API-PASSWORD:
      name: X-API-PASSWORD
      in: header
      description: 'The login password when challenged on certain protected routes'
      required: true
      schema:
        type: string
        example: supersecretpassword
    bank_integration_include:
      name: include
      in: query
      description: Include child relations of the BankIntegration object. Format is comma separated. 
      required: false
      schema:
        type: string
      examples:
        company:
          value: company
          summary: The associated Company
        account:
          value: account
          summary: The associated Account
        bank_transactions:
          value: bank_transactions
          summary: The associated Bank Transactions
    client_include:
      name: include
      in: query
      description: |
        Include child relationships of the Client Object. ie ?include=documents,system_logs

        ```html
        Available includes:

        contacts [All contacts related to the client]
        documents [All documents related to the client]
        gateway_tokens [All payment tokens related to the client]
        activities [All activities related to the client]
        ledger [The client ledger]
        system_logs [System logs related to the client]
        group_settings [The group settings object the client is assigned to]
        
        ```

        Usage:

        ```html
        /api/v1/clients?include=contacts,documents,activities
        ```
      required: false
      schema:
        type: string
      examples:
        activities:
          value: activities
          summary: include=activities will include the activities object in the response
        ledger:
          value: ledger
          summary: include=ledger will include the ledger object in the response
        system_logs:
          value: system_logs
          summary: include=system_logs will include the system_logs object in the response
    activity_include:
      name: include
      in: query
      description: Include child relations of the Activity object, format is comma separated. **Note** it is possible to chain multiple includes together, ie. include=account,token
      required: false
      schema:
        type: string
      examples:
        history:
          value: history
          summary: include=history will include the history object in the response (This could include references to the backup HTML of the entity)
        user:
          value: user
          summary: include=user will include the user object in the response
        client:
          value: client
          summary: include=client will include the client object in the response
        recurring_invoice:
          value: recurring_invoice
          summary: include=recurring_invoice will include the recurring_invoice object in the response
        invoice:
          value: invoice
          summary: include=invoice will include the invoice object in the response
        credit:
          value: credit
          summary: include=credit will include the credit object in the response
        quote:
          value: quote
          summary: include=quote will include the quote object in the response
        payment:
          value: payment
          summary: include=payment will include the payment object in the response
        expense:
          value: expense
          summary: include=expense will include the expense object in the response           
        vendor_contact:
          value: vendor_contact
          summary: include=vendor_contact will include the vendor_contact object in the response
        vendor:
          value: vendor
          summary: include=vendor will include the vendor object in the response
        purchase_order:
          value: purchase_order
          summary: include=purchase_order will include the purchase_order object in the response
        task:
          value: task
          summary: include=task will include the task object in the response        
    login_include:
      name: include
      in: query
      description: |
        Include child relations of the CompanyUser object, format is comma separated.    

        <br />
        
        > ### **Note**: it is possible to chain multiple includes together, ie. include=account,token

        <br />

        ```html
        
        Available includes:

          user
          company
          token
          account
        ```
      required: false
      schema:
        type: string
      examples:
        user:
          value: user
          summary: include=user will include the Cser object in the response
        company:
          value: company
          summary: include=company will include the Company object in the response
        token:
          value: token
          summary: include=token will include the Company Token object in the response
        account:
          value: account
          summary: include=account will include the Account object in the response
    per_page_meta:
      name: per_page
      in: query
      description: The number of records to return for each request, default is 20
      required: false
      schema:
        type: integer
        example: 20
    page_meta:
      name: page
      in: query
      description: The page number to return for this request (when performing pagination), default is 1
      required: false
      schema:
        type: integer
        example: 1
    include:
      name: include
      in: query
      description: 'Includes child relationships in the response, format is comma separated. Check each model for the list of associated includes'
      required: false
      schema:
        type: string
        example: 'first_load'
    include_static:
      name: include_static
      in: query
      description: |
        This include will return the full set of static variables used in the application including:
          - Currencies
          - Countries 
          - Languages
          - Payment Types
          - Email Templatees
          - Industries

      required: false
      schema:
        type: string
        example: include_static=true
    clear_cache:
      name: clear_cache
      in: query
      description: |
        Clears cache

        Clears (and rebuilds) the static variable cache.  

      required: false
      schema:
        type: string
        example: clear_cache=true
    index:
      name: index
      in: query
      description: |
        Replaces the default response index from data to a user specific string

        ie.

        ```html
          ?index=new_index
        ```

        response is wrapped

        ```json
          {
            'new_index' : [
              .....  
            ]
          }
        ```
      required: false
      schema:
        type: string
        example: user
    api_version:
      name: api_version
      in: query
      description: 'The API version'
      required: false
      schema:
        type: number
        example: 1
   
########################### Generic filters available across all filter ##################################
    status:
      name: status
      in: query
      description: |
        Filter the entity based on their status. ie active / archived / deleted. Format is a comma separated string with any of the following options:  
        - active
        - archived
        - deleted  

        ```html
        GET /api/v1/invoices?status=archived,deleted
        Returns only archived and deleted invoices
        ```
      required: false
      schema:
        type: string
      example: ?status=archived,deleted
    client_id:
      name: client_id
      in: query
      description: |
        Filters the entity list by client_id. Suitable when you only want the entities of a specific client.

        ```html
        GET /api/v1/invoices?client_id=AxB7Hjk9
        Returns only invoices for the specified client
        ```
      required: false
      schema:
        type: string
      example: ?client_id={client_id}
    created_at:
      name: created_at
      in: query
      description: |
        Filters the entity list by the created at timestamp. Parameter value can be a datetime string or unix timestamp

        ```html
        GET /api/v1/invoices?created_at=2022-01-10
        Returns entities created on January 10th, 2022
        ```
      required: false
      schema:
        type: integer
      example: 1641772800
    updated_at:
      name: updated_at
      in: query
      description: |
        Filters the entity list by the updated at timestamp. Parameter value can be a datetime string or unix timestamp

        ```html
        GET /api/v1/invoices?updated_at=2022-01-10
        Returns entities last updated on January 10th, 2022
        ```
      required: false
      schema:
        type: integer
      example: 1641772800
    is_deleted:
      name: is_deleted
      in: query
      description: |
        Filters the entity list by entities that have been deleted.

        ```html
        GET /api/v1/invoices?is_deleted=true
        Returns only soft-deleted entities
        ```
      required: false
      schema:
        type: boolean
      example: true
    vendor_id:
      name: vendor_id
      in: query
      description: |
        Filters the entity list by an associated vendor

        ```html
        GET /api/v1/purchases?vendor_id=AxB7Hjk9
        Returns only purchases for the specified vendor
        ```
      required: false
      schema:
        type: string
      example: ?vendor_id={vendor_id}
    filter_deleted_clients:
      name: filter_deleted_clients
      in: query
      description: |
        Filters the entity list and only returns entities for clients that have not been deleted

        ```html
        GET /api/v1/invoices?filter_deleted_clients=true
        Returns only invoices for active (non-deleted) clients
        ```
      required: false
      schema:
        type: string
      example: ?filter_deleted_clients=true
  ########################### Generic filters available across all filter ##################################
  schemas:
    CreditPaymentable:
      properties:
        credit_id:
          description: 'The credit hashed id'
          type: string
          example: Opnel5aKBz
        amount:
          description: 'The credit amount'
          type: string
          example: '2'
      type: object
    GenericReportSchema:
      properties:
        date_range:
          description: 'The string representation of the date range of data to be returned'
          type: string
          example: last7
        date_key:
          description: 'The date column to search between.'
          type: string
          example: created_at
        start_date:
          description: 'The start date to search between'
          type: string
          example: '2000-10-31'
        end_date:
          description: 'The end date to search between'
          type: string
          example: '2'
        report_keys:
          type: array
          items:
            description: 'Array of Keys to export'
            type: string
            example: '[''name'',''date'']'
      type: object
    GroupSetting:
      properties:
        id:
          description: 'The group setting hashed id'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
        name:
          description: 'The name of the group'
          type: string
          example: 'A groupies group'
        settings:
          description: 'The settings object'
          type: object
          example: {}
      type: object
    InvoicePaymentable:
      properties:
        invoice_id:
          description: ______
          type: string
          example: Opnel5aKBz
        amount:
          description: ______
          type: string
          example: '2'
      type: object
    
    




    TaskSchedulerSchema:
      properties:
        paused:
          description: 'The scheduler paused state'
          type: boolean
          example: false
        repeat_every:
          description: 'Accepted values (DAY,WEEK,MONTH,3MONTHS,YEAR)'
          type: string
          example: DAY
        start_from:
          description: 'Timestamp when we should start the scheduler, default is today'
          type: integer
          example: 1652898504
        job:
          description: 'Job, we can find list of available jobs in Scheduler model'
          type: string
          example: create_credit_report
        date_range:
          description: 'The string representation of the date range of data to be returned'
          type: string
          example: last7
        date_key:
          description: 'The date column to search between.'
          type: string
          example: created_at
        start_date:
          description: 'The start date to search between'
          type: string
          example: '2022-10-31'
        end_date:
          description: 'The end date to search between'
          type: string
          example: '2022-10-31'
        report_keys:
          type: array
          items:
            description: 'Array of Keys to export'
            type: string
            example: '[''name'',''date'']'
      type: object
    UpdateTaskSchedulerSchema:
      properties:
        paused:
          description: 'The scheduler paused state'
          type: boolean
          example: false
        repeat_every:
          description: 'Accepted values (DAY,WEEK,MONTH,3MONTHS,YEAR)'
          type: string
          example: DAY
        start_from:
          description: 'Timestamp when we should start the scheduler, default is today'
          type: integer
          example: 1652898504
        job:
          description: 'Job, we can find list of available jobs in Scheduler model'
          type: string
          example: create_credit_report
        date_range:
          description: 'The string representation of the date range of data to be returned'
          type: string
          example: last7
        date_key:
          description: 'The date column to search between.'
          type: string
          example: created_at
        start_date:
          description: 'The start date to search between'
          type: string
          example: '2022-10-31'
        end_date:
          description: 'The end date to search between'
          type: string
          example: '2022-10-31'
      type: object
    UpdateJobForASchedulerSchema:
      properties:
        job:
          description: 'Set action name, action names can be found in Scheduler Model'
          type: string
          example: create_client_report
      type: object
    
    TaskStatus:
      properties:
        id:
          description: 'The task status hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        name:
          description: 'The task status name'
          type: string
          example: Backlog
        color:
          description: 'The task status color - hex value'
          type: string
          example: '#000000'
        task_status_order:
          description: 'The order of the task status'
          type: integer
          example: 4
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        is_deleted:
          description: 'A boolean flag determining if the task status has been deleted'
          type: boolean
          example: true
          readOnly: true
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
      type: object
    TaxRate:
      properties:
        id:
          description: 'Thie hashed id of the tax'
          type: string
          example: Opnel5aKBz
          readOnly: true
        name:
          description: 'The tax name'
          type: string
          example: GST
        rate:
          description: 'The tax rate'
          type: number
          example: 10
        is_deleted:
          description: 'Boolean flag determining if the tax has been deleted'
          type: boolean
          example: true
      type: object
    Template:
      properties:
        html:
          description: 'The template HTML'
          type: string
          example: '<HTML></HTML>'
      type: object
    
    AuthenticationError:
      type: object  
      properties:
        message:
          description: 'These credentials do not match our records / Invalid Token'
          type: string
          example: 'These credentials do not match our records / Invalid Token'
    ValidationError:
      properties:
        message:
          description: 'The error message'
          type: string
          example: 'The given data was invalid.'
        errors:
          properties:
            value:
              type: array
              items:
                type: string
          type: object
      type: object
    AuthorizationError:
      properties:
        message:
          description: 'Insufficient permissions for this resource.'
          type: string
          example: 'Insufficient permissions for this resource.'
        errors:
          properties:
            value:
              type: array
              items:
                type: string
          type: object
      type: object
    RateLimiterError:
      properties:
        message:
          description: 'Rate limit exceeded.'
          type: string
          example: 'Rate limit exceeded.'
        errors:
          properties:
            value:
              type: array
              items:
                type: string
          type: object
      type: object
    InvalidInputError:
      properties:
        message:
          description: 'Invalid input'
          type: string
          example: 'Invalid input'
        errors:
          properties:
            value:
              type: array
              items:
                type: string
          type: object
      type: object
    Webhook:
      properties:
        id:
          description: 'The subscription hashed id'
          type: string
          example: AS3df3A
        event_id:
          description: 'The subscription event id'
          type: string
          example: AS3df3A
        target_url:
          description: 'The api endpoint'
          type: string
          example: AS3df3A
        format:
          description: 'JSON or UBL'
          type: string
          example: JSON
      type: object

    PaymentType:
      type: string
      description: The payment type used to complete this payment
      example: "1"
      enum:
        - "1"
        - "2"
        - "3"
        - "4"
        - "5"
        - "6"
        - "7"
        - "8"
        - "9"
        - "10"
        - "11"
        - "12"
        - "13"
        - "14"
        - "15"
        - "16"
        - "17"
        - "18"
        - "19"
        - "20"
        - "21"
        - "22"
        - "23"
        - "24"
        - "25"
        - "26"
        - "27"
        - "28"
        - "29"
        - "30"
        - "31"
        - "32"
        - "33"
      x-enumDescriptions:
        "1": Bank Transfer
        "2": Cash
        "3": Debit
        "4": ACH
        "5": Visa Card
        "6": MasterCard
        "7": American Express
        "8": Discover Card
        "9": Diners Card
        "10": EuroCard
        "11": Nova
        "12": Credit Card Other
        "13": PayPal
        "14": Google Wallet
        "15": Check
        "16": Carte Blanche
        "17": UnionPay
        "18": JCB
        "19": Laser
        "20": Maestro
        "21": Solo
        "22": Switch
        "23": iZettle
        "24": Swish
        "25": Venmo
        "26": Money Order
        "27": Alipay
        "28": Sofort
        "29": SEPA Direct Debit
        "30": GoCardless
        "31": Cryptocurrency
        "32": Credit
        "33": Zelle

    CurrencyType:
      oneOf:
        - type: integer
          title: "Currency Types"
          description: |
            Available currency types:
            - 1: US Dollar
            - 2: British Pound
            - 3: Euro
            - 4: South African Rand
            - 5: Danish Krone
            - 6: Israeli Shekel
            - 7: Swedish Krona
            - 8: Kenyan Shilling
            - 9: Canadian Dollar
            - 10: Philippine Peso
            - 11: Indian Rupee
            - 12: Australian Dollar
            - 13: Singapore Dollar
            - 14: Norske Kroner
            - 15: New Zealand Dollar
            - 16: Vietnamese Dong
            - 17: Swiss Franc
            - 18: Guatemalan Quetzal
            - 19: Malaysian Ringgit
            - 20: Brazilian Real
            - 21: Thai Baht
            - 22: Nigerian Naira
            - 23: Argentine Peso
            - 24: Bangladeshi Taka
            - 25: United Arab Emirates Dirham
            - 26: Hong Kong Dollar
            - 27: Indonesian Rupiah
            - 28: Mexican Peso
            - 29: Egyptian Pound
            - 30: Colombian Peso
            - 31: West African Franc
            - 32: Chinese Renminbi
            - 33: Rwandan Franc
            - 34: Tanzanian Shilling
            - 35: Netherlands Antillean Guilder
            - 36: Trinidad and Tobago Dollar
            - 37: East Caribbean Dollar
            - 38: Ghanaian Cedi
            - 39: Bulgarian Lev
            - 40: Aruban Florin
            - 41: Turkish Lira
            - 42: Romanian New Leu
            - 43: Croatian Kuna
            - 44: Saudi Riyal
            - 45: Japanese Yen
            - 46: Maldivian Rufiyaa
            - 47: Costa Rican Colón
            - 48: Pakistani Rupee
            - 49: Polish Zloty
            - 50: Sri Lankan Rupee
            - 51: Czech Koruna
            - 52: Uruguayan Peso
            - 53: Namibian Dollar
            - 54: Tunisian Dinar
            - 55: Russian Ruble
            - 56: Mozambican Metical
            - 57: Omani Rial
            - 58: Ukrainian Hryvnia
            - 59: Macanese Pataca
            - 60: Taiwan New Dollar
            - 61: Dominican Peso
            - 62: Chilean Peso
            - 63: Icelandic Króna
            - 64: Papua New Guinean Kina
            - 65: Jordanian Dinar
            - 66: Myanmar Kyat
            - 67: Peruvian Sol
            - 68: Botswana Pula
            - 69: Hungarian Forint
            - 70: Ugandan Shilling
            - 71: Barbadian Dollar
            - 72: Brunei Dollar
            - 73: Georgian Lari
            - 74: Qatari Riyal
            - 75: Honduran Lempira
            - 76: Surinamese Dollar
            - 77: Bahraini Dinar
            - 78: Venezuelan Bolivars
            - 79: South Korean Won
            - 80: Moroccan Dirham
            - 81: Jamaican Dollar
            - 82: Angolan Kwanza
            - 83: Haitian Gourde
            - 84: Zambian Kwacha
            - 85: Nepalese Rupee
            - 86: CFP Franc
            - 87: Mauritian Rupee
            - 88: Cape Verdean Escudo
            - 89: Kuwaiti Dinar
            - 90: Algerian Dinar
            - 91: Macedonian Denar
            - 92: Fijian Dollar
            - 93: Bolivian Boliviano
            - 94: Albanian Lek
            - 95: Serbian Dinar
            - 96: Lebanese Pound
            - 97: Armenian Dram
            - 98: Azerbaijan Manat
            - 99: Bosnia and Herzegovina Convertible Mark
            - 100: Belarusian Ruble
            - 101: Gibraltar Pound
            - 102: Moldovan Leu
            - 103: Kazakhstani Tenge
            - 104: Ethiopian Birr
            - 105: Gambia Dalasi
            - 106: Paraguayan Guarani
            - 107: Malawi Kwacha
            - 108: Zimbabwean Dollar
            - 109: Cambodian Riel
            - 110: Vanuatu Vatu
            - 111: Cuban Peso
            - 112: Cayman Island Dollar
            - 113: Swazi lilangeni
            - 114: BZ Dollar
            - 115: Libyan Dinar
            - 116: Silver Troy Ounce
            - 117: Gold Troy Ounce
            - 118: Nicaraguan Córdoba
            - 119: Malagasy ariary
            - 120: Tongan Pa anga
            - 121: Lao kip
            - 122: Bhutan Ngultrum
            - 123: Mauritanian Ouguiya
            - 124: Bermudian Dollar
            - 125: Central African CFA Franc
            - 126: Congolese Franc
            - 127: Djiboutian Franc
            - 128: Eritrean Nakfa
            - 129: Falkland Islands Pound
            - 130: Guinean Franc
            - 131: Iraqi Dinar
            - 132: Lesotho Loti
            - 133: Mongolian Tugrik
            - 134: Seychellois Rupee
            - 135: Solomon Islands Dollar
            - 136: Somali Shilling
            - 137: South Sudanese Pound
            - 138: Sudanese Pound
            - 139: Tajikistani Somoni
            - 140: Turkmenistani Manat
            - 141: Uzbekistani Som
            - 142: Samoan Tala

    LanguageType:
      oneOf:
        - type: integer
          title: "Language Types"
          description: |
            Available language types:
            - 1: English - United States
            - 2: Italian
            - 3: German
            - 4: French
            - 5: Portuguese - Brazilian
            - 6: Dutch
            - 7: Spanish
            - 8: Norwegian
            - 9: Danish
            - 10: Japanese
            - 11: Swedish
            - 12: Spanish - Spain
            - 13: French - Canada
            - 14: Lithuanian
            - 15: Polish
            - 16: Czech
            - 17: Croatian
            - 18: Albanian
            - 19: Greek
            - 20: English - United Kingdom
            - 21: Portuguese - Portugal
            - 22: Slovenian
            - 23: Finnish
            - 24: Romanian
            - 25: Turkish - Turkey
            - 26: Thai
            - 27: Macedonian
            - 28: Chinese - Taiwan
            - 29: Russian (Russia)
            - 30: Arabic
            - 31: Persian
            - 32: Latvian
            - 33: Serbian
            - 34: Slovak
            - 35: Estonian
            - 36: Bulgarian
            - 37: Hebrew
            - 38: Khmer
            - 39: Hungarian
            - 40: French - Swiss
            - 41: Lao
            - 42: Vietnamese

    TimezoneType:
      oneOf:
        - type: integer
          title: "Timezone Types"
          description: |
            Available timezone types:
            - 1: Pacific/Midway
            - 2: Pacific/Pago_Pago
            - 3: Pacific/Honolulu
            - 4: America/Anchorage
            - 5: America/Los_Angeles
            - 6: America/Tijuana
            - 7: America/Phoenix
            - 8: America/Denver
            - 9: America/Chihuahua
            - 10: America/Mazatlan
            - 11: America/Mexico_City
            - 12: America/Monterrey
            - 13: America/Regina
            - 14: America/Chicago
            - 15: America/New_York
            - 16: America/Indiana/Indianapolis
            - 17: America/Bogota
            - 18: America/Lima
            - 19: America/Caracas
            - 20: America/Halifax
            - 21: America/La_Paz
            - 22: America/Santiago
            - 23: America/St_Johns
            - 24: America/Argentina/Buenos_Aires
            - 25: America/Godthab
            - 26: America/Sao_Paulo
            - 27: Atlantic/Stanley
            - 28: Atlantic/Azores
            - 29: Atlantic/Cape_Verde
            - 30: Africa/Casablanca
            - 31: Europe/Dublin
            - 32: Europe/Lisbon
            - 33: Europe/London
            - 34: Africa/Monrovia
            - 35: Europe/Amsterdam
            - 36: Europe/Belgrade
            - 37: Europe/Berlin
            - 38: Europe/Bratislava
            - 39: Europe/Brussels
            - 40: Europe/Budapest
            - 41: Europe/Copenhagen
            - 42: Europe/Ljubljana
            - 43: Europe/Madrid
            - 44: Europe/Paris
            - 45: Europe/Prague
            - 46: Europe/Rome
            - 47: Europe/Sarajevo
            - 48: Europe/Skopje
            - 49: Europe/Stockholm
            - 50: Europe/Vienna
            - 51: Europe/Warsaw
            - 52: Europe/Zagreb
            - 53: Europe/Athens
            - 54: Europe/Bucharest
            - 55: Africa/Cairo
            - 56: Africa/Harare
            - 57: Europe/Helsinki
            - 58: Asia/Jerusalem
            - 59: Europe/Kyiv
            - 60: Europe/Minsk
            - 61: Europe/Riga
            - 62: Europe/Sofia
            - 63: Europe/Tallinn
            - 64: Europe/Vilnius
            - 65: Europe/Istanbul
            - 66: Asia/Baghdad
            - 67: Asia/Kuwait
            - 68: Africa/Nairobi
            - 69: Asia/Riyadh
            - 70: Asia/Tehran
            - 71: Europe/Moscow
            - 72: Asia/Baku
            - 73: Europe/Volgograd
            - 74: Asia/Muscat
            - 75: Asia/Tbilisi
            - 76: Asia/Yerevan
            - 77: Asia/Kabul
            - 78: Asia/Karachi
            - 79: Asia/Tashkent
            - 80: Asia/Kolkata
            - 81: Asia/Kathmandu
            - 82: Asia/Yekaterinburg
            - 83: Asia/Almaty
            - 84: Asia/Dhaka
            - 85: Asia/Novosibirsk
            - 86: Asia/Bangkok
            - 87: Asia/Ho_Chi_Minh
            - 88: Asia/Jakarta
            - 89: Asia/Krasnoyarsk
            - 90: Asia/Chongqing
            - 91: Asia/Hong_Kong
            - 92: Asia/Kuala_Lumpur
            - 93: Australia/Perth
            - 94: Asia/Singapore
            - 95: Asia/Taipei
            - 96: Asia/Ulaanbaatar
            - 97: Asia/Urumqi
            - 98: Asia/Irkutsk
            - 99: Asia/Seoul
            - 100: Asia/Tokyo
            - 101: Australia/Adelaide
            - 102: Australia/Darwin
            - 103: Asia/Yakutsk
            - 104: Australia/Brisbane
            - 110: Australia/Sydney
            - 106: Pacific/Guam
            - 107: Australia/Hobart
            - 108: Australia/Melbourne
            - 109: Pacific/Port_Moresby
            - 111: Asia/Vladivostok
            - 112: Asia/Magadan
            - 113: Pacific/Auckland
            - 114: Pacific/Fiji
            - 115: Asia/Dubai

    CountryType:
      oneOf:
        - type: integer
          title: "Country Types"
          description: |
            Available country types:
            - 4: Afghanistan (AF/AFG)
            - 8: Albania (AL/ALB)
            - 10: Antarctica (AQ/ATA)
            - 12: Algeria (DZ/DZA)
            - 16: American Samoa (AS/ASM)
            - 20: Andorra (AD/AND)
            - 24: Angola (AO/AGO)
            - 28: Antigua and Barbuda (AG/ATG)
            - 31: Azerbaijan (AZ/AZE)
            - 32: Argentina (AR/ARG)
            - 36: Australia (AU/AUS)
            - 40: Austria (AT/AUT)
            - 44: Bahamas (BS/BHS)
            - 48: Bahrain (BH/BHR)
            - 50: Bangladesh (BD/BGD)
            - 51: Armenia (AM/ARM)
            - 52: Barbados (BB/BRB)
            - 56: Belgium (BE/BEL)
            - 60: Bermuda (BM/BMU)
            - 64: Bhutan (BT/BTN)
            - 68: Bolivia, Plurinational State of (BO/BOL)
            - 70: Bosnia and Herzegovina (BA/BIH)
            - 72: Botswana (BW/BWA)
            - 74: Bouvet Island (BV/BVT)
            - 76: Brazil (BR/BRA)
            - 84: Belize (BZ/BLZ)
            - 86: British Indian Ocean Territory (IO/IOT)
            - 90: Solomon Islands (SB/SLB)
            - 92: Virgin Islands, British (VG/VGB)
            - 96: Brunei Darussalam (BN/BRN)
            - 100: Bulgaria (BG/BGR)
            - 104: Myanmar (MM/MMR)
            - 108: Burundi (BI/BDI)
            - 112: Belarus (BY/BLR)
            - 116: Cambodia (KH/KHM)
            - 120: Cameroon (CM/CMR)
            - 124: Canada (CA/CAN)
            - 132: Cape Verde (CV/CPV)
            - 136: Cayman Islands (KY/CYM)
            - 140: Central African Republic (CF/CAF)
            - 144: Sri Lanka (LK/LKA)
            - 148: Chad (TD/TCD)
            - 152: Chile (CL/CHL)
            - 156: China (CN/CHN)
            - 158: Taiwan (TW/TWN)
            - 162: Christmas Island (CX/CXR)
            - 166: Cocos (Keeling) Islands (CC/CCK)
            - 170: Colombia (CO/COL)
            - 174: Comoros (KM/COM)
            - 175: Mayotte (YT/MYT)
            - 178: Congo (CG/COG)
            - 180: Congo, the Democratic Republic of the (CD/COD)
            - 184: Cook Islands (CK/COK)
            - 188: Costa Rica (CR/CRI)
            - 191: Croatia (HR/HRV)
            - 192: Cuba (CU/CUB)
            - 196: Cyprus (CY/CYP)
            - 203: Czech Republic (CZ/CZE)
            - 204: Benin (BJ/BEN)
            - 208: Denmark (DK/DNK)
            - 212: Dominica (DM/DMA)
            - 214: Dominican Republic (DO/DOM)
            - 218: Ecuador (EC/ECU)
            - 222: El Salvador (SV/SLV)
            - 226: Equatorial Guinea (GQ/GNQ)
            - 231: Ethiopia (ET/ETH)
            - 232: Eritrea (ER/ERI)
            - 233: Estonia (EE/EST)
            - 234: Faroe Islands (FO/FRO)
            - 238: Falkland Islands (Malvinas) (FK/FLK)
            - 239: South Georgia and the South Sandwich Islands (GS/SGS)
            - 242: Fiji (FJ/FJI)
            - 246: Finland (FI/FIN)
            - 248: Åland Islands (AX/ALA)
            - 250: France (FR/FRA)
            - 254: French Guiana (GF/GUF)
            - 258: French Polynesia (PF/PYF)
            - 260: French Southern Territories (TF/ATF)
            - 262: Djibouti (DJ/DJI)
            - 266: Gabon (GA/GAB)
            - 268: Georgia (GE/GEO)
            - 270: Gambia (GM/GMB)
            - 275: Palestine (PS/PSE)
            - 276: Germany (DE/DEU)
            - 288: Ghana (GH/GHA)
            - 292: Gibraltar (GI/GIB)
            - 296: Kiribati (KI/KIR)
            - 300: Greece (GR/GRC)
            - 304: Greenland (GL/GRL)
            - 308: Grenada (GD/GRD)
            - 312: Guadeloupe (GP/GLP)
            - 316: Guam (GU/GUM)
            - 320: Guatemala (GT/GTM)
            - 324: Guinea (GN/GIN)
            - 328: Guyana (GY/GUY)
            - 332: Haiti (HT/HTI)
            - 334: Heard Island and McDonald Islands (HM/HMD)
            - 336: Holy See (Vatican City State) (VA/VAT)
            - 340: Honduras (HN/HND)
            - 344: Hong Kong (HK/HKG)
            - 348: Hungary (HU/HUN)
            - 352: Iceland (IS/ISL)
            - 356: India (IN/IND)
            - 360: Indonesia (ID/IDN)
            - 364: Iran, Islamic Republic of (IR/IRN)
            - 368: Iraq (IQ/IRQ)
            - 372: Ireland (IE/IRL)
            - 376: Israel (IL/ISR)
            - 380: Italy (IT/ITA)
            - 384: Côte d'Ivoire (CI/CIV)
            - 388: Jamaica (JM/JAM)
            - 392: Japan (JP/JPN)
            - 398: Kazakhstan (KZ/KAZ)
            - 400: Jordan (JO/JOR)
            - 404: Kenya (KE/KEN)
            - 408: Korea, Democratic People's Republic of (KP/PRK)
            - 410: Korea, Republic of (KR/KOR)
            - 414: Kuwait (KW/KWT)
            - 417: Kyrgyzstan (KG/KGZ)
            - 418: Lao People's Democratic Republic (LA/LAO)
            - 422: Lebanon (LB/LBN)
            - 426: Lesotho (LS/LSO)
            - 428: Latvia (LV/LVA)
            - 430: Liberia (LR/LBR)
            - 434: Libya (LY/LBY)
            - 438: Liechtenstein (LI/LIE)
            - 440: Lithuania (LT/LTU)
            - 442: Luxembourg (LU/LUX)
            - 446: Macao (MO/MAC)
            - 450: Madagascar (MG/MDG)
            - 454: Malawi (MW/MWI)
            - 458: Malaysia (MY/MYS)
            - 462: Maldives (MV/MDV)
            - 466: Mali (ML/MLI)
            - 470: Malta (MT/MLT)
            - 474: Martinique (MQ/MTQ)
            - 478: Mauritania (MR/MRT)
            - 480: Mauritius (MU/MUS)
            - 484: Mexico (MX/MEX)
            - 492: Monaco (MC/MCO)
            - 496: Mongolia (MN/MNG)
            - 498: Moldova, Republic of (MD/MDA)
            - 499: Montenegro (ME/MNE)
            - 500: Montserrat (MS/MSR)
            - 504: Morocco (MA/MAR)
            - 508: Mozambique (MZ/MOZ)
            - 512: Oman (OM/OMN)
            - 516: Namibia (NA/NAM)
            - 520: Nauru (NR/NRU)
            - 524: Nepal (NP/NPL)
            - 528: Netherlands (NL/NLD)
            - 531: Curaçao (CW/CUW)
            - 533: Aruba (AW/ABW)
            - 534: Sint Maarten (Dutch part) (SX/SXM)
            - 535: Bonaire, Sint Eustatius and Saba (BQ/BES)
            - 540: New Caledonia (NC/NCL)
            - 548: Vanuatu (VU/VUT)
            - 554: New Zealand (NZ/NZL)
            - 558: Nicaragua (NI/NIC)
            - 562: Niger (NE/NER)
            - 566: Nigeria (NG/NGA)
            - 570: Niue (NU/NIU)
            - 574: Norfolk Island (NF/NFK)
            - 578: Norway (NO/NOR)
            - 580: Northern Mariana Islands (MP/MNP)
            - 581: United States Minor Outlying Islands (UM/UMI)
            - 583: Micronesia, Federated States of (FM/FSM)
            - 584: Marshall Islands (MH/MHL)
            - 585: Palau (PW/PLW)
            - 586: Pakistan (PK/PAK)
            - 591: Panama (PA/PAN)
            - 598: Papua New Guinea (PG/PNG)
            - 600: Paraguay (PY/PRY)
            - 604: Peru (PE/PER)
            - 608: Philippines (PH/PHL)
            - 612: Pitcairn (PN/PCN)
            - 616: Poland (PL/POL)
            - 620: Portugal (PT/PRT)
            - 624: Guinea-Bissau (GW/GNB)
            - 626: Timor-Leste (TL/TLS)
            - 630: Puerto Rico (PR/PRI)
            - 634: Qatar (QA/QAT)
            - 638: Réunion (RE/REU)
            - 642: Romania (RO/ROU)
            - 643: Russian Federation (RU/RUS)
            - 646: Rwanda (RW/RWA)
            - 652: Saint Barthélemy (BL/BLM)
            - 654: Saint Helena, Ascension and Tristan da Cunha (SH/SHN)
            - 659: Saint Kitts and Nevis (KN/KNA)
            - 660: Anguilla (AI/AIA)
            - 662: Saint Lucia (LC/LCA)
            - 663: Saint Martin (French part) (MF/MAF)
            - 666: Saint Pierre and Miquelon (PM/SPM)
            - 670: Saint Vincent and the Grenadines (VC/VCT)
            - 674: San Marino (SM/SMR)
            - 678: Sao Tome and Principe (ST/STP)
            - 682: Saudi Arabia (SA/SAU)
            - 686: Senegal (SN/SEN)
            - 688: Serbia (RS/SRB)
            - 690: Seychelles (SC/SYC)
            - 694: Sierra Leone (SL/SLE)
            - 702: Singapore (SG/SGP)
            - 703: Slovakia (SK/SVK)
            - 704: Viet Nam (VN/VNM)
            - 705: Slovenia (SI/SVN)
            - 706: Somalia (SO/SOM)
            - 710: South Africa (ZA/ZAF)
            - 716: Zimbabwe (ZW/ZWE)
            - 724: Spain (ES/ESP)
            - 728: South Sudan (SS/SSD)
            - 729: Sudan (SD/SDN)
            - 732: Western Sahara (EH/ESH)
            - 740: Suriname (SR/SUR)
            - 744: Svalbard and Jan Mayen (SJ/SJM)
            - 748: Swaziland (SZ/SWZ)
            - 752: Sweden (SE/SWE)
            - 756: Switzerland (CH/CHE)
            - 760: Syrian Arab Republic (SY/SYR)
            - 762: Tajikistan (TJ/TJK)
            - 764: Thailand (TH/THA)
            - 768: Togo (TG/TGO)
            - 772: Tokelau (TK/TKL)
            - 776: Tonga (TO/TON)
            - 780: Trinidad and Tobago (TT/TTO)
            - 784: United Arab Emirates (AE/ARE)
            - 788: Tunisia (TN/TUN)
            - 792: Turkey (TR/TUR)
            - 795: Turkmenistan (TM/TKM)
            - 796: Turks and Caicos Islands (TC/TCA)
            - 798: Tuvalu (TV/TUV)
            - 800: Uganda (UG/UGA)
            - 804: Ukraine (UA/UKR)
            - 807: Macedonia, the former Yugoslav Republic of (MK/MKD)
            - 818: Egypt (EG/EGY)
            - 826: United Kingdom (GB/GBR)
            - 831: Guernsey (GG/GGY)
            - 832: Jersey (JE/JEY)
            - 833: Isle of Man (IM/IMN)
            - 834: Tanzania, United Republic of (TZ/TZA)
            - 840: United States (US/USA)
            - 850: Virgin Islands, U.S. (VI/VIR)
            - 854: Burkina Faso (BF/BFA)
            - 858: Uruguay (UY/URY)
            - 860: Uzbekistan (UZ/UZB)
            - 862: Venezuela, Bolivarian Republic of (VE/VEN)
            - 876: Wallis and Futuna (WF/WLF)
            - 882: Samoa (WS/WSM)
            - 887: Yemen (YE/YEM)
            - 894: Zambia (ZM/ZMB)
    Meta:
      properties:
        pagination:
          $ref: '#/components/schemas/Pagination'
    Pagination:
      type: object
      properties:
        total:
          type: integer
          description: 'The total number of items'
          example: 1
          readOnly: true
        count:
          type: integer
          description: 'The number of items per page'
          example: 1
          readOnly: true
        per_page:
          type: integer
          description: 'The number of items per page'
          example: 1
          readOnly: true
        current_page:
          type: integer
          description: 'The current page number'
          example: 1
          readOnly: true
        total_pages:
          type: integer
          description: 'The total number of pages'
          example: 1
          readOnly: true
        links:
          type: object
          description: 'The pagination links'
          readOnly: true
    TaskRequest:
      required:
        - description
      properties:
        description:
          description: 'Task description'
          type: string
          example: 'Complete project documentation'
        client_id:
          description: 'The hashed ID of the client'
          type: string
          example: 'D2J234DFA'
        project_id:
          description: 'The hashed ID of the project'
          type: string
          example: 'P2J234DFA'
        time_log:
          description: 'Time logged for the task'
          type: string
          example: '2.5'
        status_id:
          description: 'Status ID of the task'
          type: integer
          example: 1
        custom_value1:
          description: 'Custom field value 1'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'Custom field value 2'
          type: string
          example: 'Custom value 2'
        custom_value3:
          description: 'Custom field value 3'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'Custom field value 4'
          type: string
          example: 'Custom value 4'
        is_deleted:
          description: 'Whether the task is deleted'
          type: boolean
          example: false
        archived_at:
          description: 'Timestamp when task was archived'
          type: integer
          example: 1640995200
        due_date:
          description: 'Due date for the task'
          type: string
          format: date
          example: '2024-01-31'
        priority:
          description: 'Priority level of the task'
          type: integer
          example: 1
      type: object
    LocationRequest:
      properties:
        name:
          description: 'The location name'
          type: string
          example: 'Warehouse A'
        address1:
          description: 'The first line of the address'
          type: string
          example: '123 Business Street'
        address2:
          description: 'The second line of the address'
          type: string
          example: 'Suite 100'
        city:
          description: 'The city name'
          type: string
          example: 'San Francisco'
        state:
          description: 'The state or region'
          type: string
          example: 'CA'
        postal_code:
          description: 'The postal or zip code'
          type: string
          example: '94107'
        country_id:
          description: 'The ID of the associated country'
          type: string
          example: '840'
        custom_value1:
          description: 'Custom field value 1'
          type: string
          nullable: true
        custom_value2:
          description: 'Custom field value 2'
          type: string
          nullable: true
        custom_value3:
          description: 'Custom field value 3'
          type: string
          nullable: true
        custom_value4:
          description: 'Custom field value 4'
          type: string
          nullable: true
        is_shipping_location:
          description: 'Indicates if this is a shipping location'
          type: boolean
          example: true
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        vendor_id:
          description: 'The vendor hashed id'
          type: string
          example: Opnel5aKBz
      type: object 
    QuoteRequest:
      required:
        - client_id
        - date
        - due_date
      properties:
        client_id:
          description: 'The hashed ID of the client'
          type: string
          example: 'D2J234DFA'
        date:
          description: 'Quote date'
          type: string
          format: date
          example: '2024-01-01'
        due_date:
          description: 'Due date for the quote'
          type: string
          format: date
          example: '2024-01-31'
        private_notes:
          description: 'Private notes for the quote'
          type: string
          example: 'Internal notes about this quote'
        public_notes:
          description: 'Public notes for the quote'
          type: string
          example: 'Thank you for your business!'
        custom_value1:
          description: 'Custom field value 1'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'Custom field value 2'
          type: string
          example: 'Custom value 2'
        custom_value3:
          description: 'Custom field value 3'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'Custom field value 4'
          type: string
          example: 'Custom value 4'
        line_items:
          type: array
          description: 'An array of objects which define the line items of the quote'
          items:
            $ref: '#/components/schemas/InvoiceItem'
    Document:
      properties:
        id:
          description: 'The document hashed id'
          type: string
          example: AS3df3A
        user_id:
          description: 'The user hashed id'
          type: string
          example: ''
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: ''
        project_id:
          description: 'The project associated with this document'
          type: string
          example: ''
        vendor_id:
          description: 'The vendor associated with this documents'
          type: string
          example: ''
        name:
          description: 'The document name'
          type: string
          example: Beauty
        url:
          description: 'The document url'
          type: string
          example: Beauty
        preview:
          description: 'The document preview url'
          type: string
          example: Beauty
        type:
          description: 'The document type'
          type: string
          example: Beauty
        disk:
          description: 'The document disk'
          type: string
          example: Beauty
        hash:
          description: 'The document hashed'
          type: string
          example: Beauty
        is_deleted:
          description: 'Flag to determine if the document is deleted'
          type: boolean
          example: true
        is_default:
          description: 'Flag to determine if the document is a default doc'
          type: boolean
          example: true
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
        deleted_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
      type: object
    Error:
      properties:
        message:
          description: 'Something terrible went wrong'
          type: string
          example: 'Unexpected error'
        code:
          description: 'The HTTP error code, ie 5xx 4xx'
          type: integer
          example: 500
      type: object
    InvoiceItem:
      type: object
      properties:
        quantity:
          type: number
          example: 1
          description: 'The quantity of the product offered for this line item'
        cost:
          type: number
          format: float
          example: 10.00
          description: 'The cost of the product offered for this line item'
        product_key:
          type: string
          example: 'Product key'
          description: 'The product key of the product offered for this line item (Referred to as Product in the product tab)'
        product_cost:
          type: number
          format: float
          example: 10.00
          description: 'The cost of the product offered for this line item (Referred to as Cost in the product tab)'
        notes:
          type: string
          example: 'Item notes'
          description: 'The notes/description for the product offered for this line item'
        discount:
          type: number
          format: float
          example: 5.00
          description: 'The discount applied to the product offered for this line item'
        is_amount_discount:
          type: boolean
          example: false
          description: 'Indicates whether the discount applied to the product offered for this line item is a fixed amount or a percentage'
        tax_name1:
          type: string
          example: 'GST'
          description: 'The name of the first tax applied to the product offered for this line item'
        tax_rate1:
          type: number
          format: float
          example: 10.00
          description: 'The rate of the first tax applied to the product offered for this line item'
        tax_name2:
          type: string
          example: 'VAT'
          description: 'The name of the second tax applied to the product offered for this line item'
        tax_rate2:
          type: number
          format: float
          example: 5.00
          description: 'The rate of the second tax applied to the product offered for this line item'
        tax_name3:
          type: string
          example: 'CA Sales Tax'
          description: 'The name of the third tax applied to the product offered for this line item'
        tax_rate3:
          type: number
          format: float
          example: 3.00
          description: 'The rate of the third tax applied to the product offered for this line item'
        sort_id:
          type: string
          example: '0'
          description: 'Deprecated'
          deprecated: true
        line_total:
          type: number
          format: float
          example: 10.00
          description: 'The total amount of the product offered for this line item'
          readOnly: true
        gross_line_total:
          type: number
          format: float
          example: 15.00
          description: 'The total amount of the product offered for this line item before discounts'
          readOnly: true
        tax_amount:
          type: number
          format: float
          example: 1.00
          description: 'The total amount of tax applied to the product offered for this line item'
          readOnly: true
        custom_value1:
          type: string
          example: 'Custom value 1'
          description: 'The first custom value of the product offered for this line item'
        custom_value2:
          type: string
          example: 'Custom value 2'
          description: 'The second custom value of the product offered for this line item'
        custom_value3:
          type: string
          example: 'Custom value 3'
          description: 'The third custom value of the product offered for this line item'
        custom_value4:
          type: string
          example: 'Custom value 4'
          description: 'The fourth custom value of the product offered for this line item'
        type_id:
          type: string
          example: '1'
          description: '1 = product, 2 = service, 3 unpaid gateway fee, 4 paid gateway fee, 5 late fee, 6 expense'
          default: '1'
        tax_id:
          type: string
          example: '1'
          default: '1'
          description: 'The tax ID of the product: 1 product, 2 service, 3 digital, 4 shipping, 5 exempt, 5 reduced tax, 7 override, 8 zero rate, 9 reverse tax'
    ExpenseCategory:
      properties:
        id:
          description: 'The expense hashed id'
          type: string
          example: Opnel5aKBz
        name:
          description: 'The expense category name'
          type: string
          example: Accounting
        user_id:
          description: 'The user hashed id'
          type: string
          example: XS987sD
        is_deleted:
          description: 'Flag determining whether the expense category has been deleted'
          type: boolean
          example: true
        updated_at:
          description: 'The updated at timestamp'
          type: integer
          example: 2
        created_at:
          description: 'The created at timestamp'
          type: integer
          example: 2
      type: object
    Client:
      properties:
        id:
          description: 'The unique identifier of the client'
          type: string
          example: Opnel5aKBz
          readOnly: true
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/ClientContact'
        user_id:
          description: 'The unique identifier of the user who created the client'
          type: string
          example: Ua6Rw4pVbS
          readOnly: true
        assigned_user_id:
          description: 'The unique identifier of the user who has been assigned the client'
          type: string
          example: Ua6Rw4pVbS
        name:
          description: 'The name of the client company or organization'
          type: string
          example: "Jim's Housekeeping"
        website:
          description: 'The website URL of the client company or organization'
          type: string
          example: 'https://www.jims-housekeeping.com'
        private_notes:
          description: 'Notes that are only visible to the user who created the client'
          type: string
          example: 'Client prefers email communication over phone calls'
        client_hash:
          description: 'A unique hash value for the client'
          type: string
          example: asdfkjhk342hjhbfdvmnfb1
          readOnly: true
        industry_id:
          description: 'The unique identifier of the industry the client operates in'
          type: number
          example: 5
        size_id:
          description: 'The unique identifier for the size category of the client company or organization'
          type: number
          example: 2
        address1:
          description: "First line of the client's address"
          type: string
          example: '123 Main St'
        address2:
          description: "Second line of the client's address, if needed"
          type: string
          example: 'Apt 4B'
        city:
          description: 'The city the client is located in'
          type: string
          example: 'Beverly Hills'
        state:
          description: 'The state, province, or locality the client is located in'
          type: string
          example: 'California'
        postal_code:
          description: 'The postal code or ZIP code of the client'
          type: string
          example: '90210'
        phone:
          description: "The client's phone number"
          type: string
          example: '555-3434-3434'
        country_id:
          description: "The unique identifier of the client's country"
          type: number
          format: integer
          example: '1'
          $ref: '#/components/schemas/CountryType'
        custom_value1:
          description: 'A custom field for storing additional information'
          type: string
          example: 'Preferred contact: Email'
        custom_value2:
          description: 'A custom field for storing additional information'
          type: string
          example: 'Account manager: John Doe'
        custom_value3:
          description: 'A custom field for storing additional information'
          type: string
          example: 'VIP client: Yes'
        custom_value4:
          description: 'A custom field for storing additional information'
          type: string
          example: 'Annual contract value: $50,000'
        vat_number:
          description: "The client's VAT (Value Added Tax) number, if applicable"
          type: string
          example: 'VAT123456'
        id_number:
          description: 'A unique identification number for the client, such as a tax ID or business registration number'
          type: string
        number:
          description: 'A system-assigned unique number for the client, typically used for invoicing purposes'
          type: string
          example: 'CL-0001'
        shipping_address1:
          description: "First line of the client's shipping address"
          type: string
          example: '5 Wallaby Way'
        shipping_address2:
          description: "Second line of the client's shipping address, if needed"
          type: string
          example: 'Suite 5'
        shipping_city:
          description: "The city of the client's shipping address"
          type: string
          example: 'Perth'
        shipping_state:
          description: "The state, province, or locality of the client's shipping address"
          type: string
          example: 'Western Australia'
        shipping_postal_code:
          description: "The postal code or ZIP code of the client's shipping address"
          type: string
          example: '6110'
        shipping_country_id:
          description: "The unique identifier of the country for the client's shipping address"
          type: number
          format: integer
          example: 4
        is_deleted:
          description: 'A boolean value indicating whether the client has been deleted or not'
          type: boolean
          example: false
          readOnly: true
        balance:
          description: 'The outstanding balance the client owes'
          type: number
          format: float
          example: 500.00
          readOnly: true
        paid_to_date:
          description: 'The total amount the client has paid to date'
          type: number
          format: float
          example: 2000.00
          readOnly: true
        credit_balance:
          description: 'The available credit balance for the client to use on future purchases'
          type: number
          format: float
          example: 100.00
          readOnly: true
        last_login:
          description: "The timestamp of the client's last login"
          type: number
          format: integer
          example: 1628686031
          readOnly: true
        created_at:
          description: 'The timestamp when the client was created'
          type: number
          format: integer
          example: 1617629031
          readOnly: true
        updated_at:
          description: 'The timestamp when the client was last updated'
          type: number
          format: integer
          example: 1628445631
          readOnly: true
        group_settings_id:
          description: 'The group settings assigned to the client'
          type: string
          example: Opnel5aKBz
        routing_id:
          description: 'The routing address id for e-invoicing for this client'
          type: string
          example: Opnel5aKBz3489-dfkiu-2239-sdsd
        is_tax_exempt:
          description: 'Flag which defines if the client is exempt from taxes'
          type: boolean
          example: false
        has_valid_vat_number:
          description: 'Flag which defines if the client has a valid VAT number'
          type: boolean
          example: false
          readOnly: true
        payment_balance:
          description: 'Defines the payment balance the client has on file (pre payments / over payments / unapplied amounts)'
          type: number
          example: 100
          readOnly: true
        settings:
          $ref: '#/components/schemas/ClientSettings'
        classification:
          description: 'Classification or category label for organizational purposes'
          type: string
          example: 'VIP'
        public_notes:
          description: 'Notes that are visible to the client'
          type: string
          example: 'These are public notes visible to clients'
      type: object

    Quote:
      properties:
        id:
          description: 'The unique hashed identifier for the quote'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The unique hashed identifier for the user who created the quote'
          type: string
          example: ''
        assigned_user_id:
          description: 'The unique hashed identifier for the user assigned to the quote'
          type: string
          example: ''
        client_id:
          description: 'The unique hashed identifier for the client associated with the quote'
          type: string
          example: ''
        status_id:
          description: 'The status of the quote represented by a unique identifier'
          type: string
          example: ''
        number:
          description: 'The unique alpha-numeric quote number for the quote per company'
          type: string
          example: QUOTE_101
        po_number:
          description: 'The purchase order number associated with the quote'
          type: string
          example: PO-1234
        terms:
          description: 'The terms and conditions for the quote'
          type: string
          example: 'These are some quote terms. Valid for 14 days.'
        public_notes:
          description: 'Publicly visible notes associated with the quote'
          type: string
          example: 'These are public notes which the client may see'
        private_notes:
          description: 'Privately visible notes associated with the quote, not disclosed to the client'
          type: string
          example: 'These are private notes, not to be disclosed to the client'
        footer:
          description: 'The footer text of the quote'
          type: string
          example: 'The text goes in the footer of the quote'
        custom_value1:
          description: 'First custom value field for additional information'
          type: string
          example: 'A custom value'
        custom_value2:
          description: 'Second custom value field for additional information'
          type: string
          example: 'A custom value'
        custom_value3:
          description: 'Third custom value field for additional information'
          type: string
          example: 'A custom value'
        custom_value4:
          description: 'Fourth custom value field for additional information'
          type: string
          example: 'A custom value'
        tax_name1:
          description: 'The name of the first tax applied to the quote'
          type: string
          example: GST
        tax_name2:
          description: 'The name of the second tax applied to the quote'
          type: string
          example: VAT
        tax_rate1:
          description: 'The rate of the first tax applied to the quote'
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: 'The rate of the second tax applied to the quote'
          type: number
          format: float
          example: 10.00
        tax_name3:
          description: 'The name of the third tax applied to the quote'
          type: string
          example: ''
        tax_rate3:
          description: 'The rate of the third tax applied to the quote'
          type: number
          format: float
          example: 10.00
        total_taxes:
          description: 'The total amount of taxes for the quote'
          type: number
          format: float
          example: 10.00
        line_items:
          type: array
          description: 'An array of objects which define the line items of the quote'
          items:
            $ref: '#/components/schemas/InvoiceItem'
        amount:
          description: 'The total amount of the quote before taxes and discounts'
          type: number
          format: float
          example: 10.00
        balance:
          description: 'The balance due for the quote after accounting for payments'
          type: number
          format: float
          example: 10.00
        paid_to_date:
          description: 'The total amount paid on the quote so far'
          type: number
          format: float
          example: 10.00
        discount:
          description: 'The discount amount or percentage applied to the quote'
          type: number
          format: float
          example: 10.00
        partial:
          description: 'The partial or deposit amount for the quote'
          type: number
          format: float
          example: 10.00
        is_amount_discount:
          description: 'Boolean flag indicating if the discount is a fixed amount or a percentage'
          type: boolean
          example: true
        is_deleted:
          description: 'Boolean flag indicating if the quote has been deleted'
          type: boolean
          example: false
        uses_inclusive_taxes:
          description: 'Boolean flag indicating if the taxes used are inclusive or exclusive'
          type: boolean
          example: true
        date:
          description: 'The date the quote was created'
          type: string
          format: date
          example: '1994-07-30'
        last_sent_date:
          description: 'The last date the quote was sent to the client'
          type: string
          format: date
          example: '1994-07-30'
        next_send_date:
          description: 'The next scheduled date for sending a reminder for the quote'
          type: string
          format: date
          example: '1994-07-30'
        partial_due_date:
          description: 'The due date for the partial or deposit amount'
          type: string
          format: date
          example: '1994-07-30'
        due_date:
          description: 'The due date for the total amount of the quote'
          type: string
          format: date
          example: '1994-07-30'
        settings:
          $ref: '#/components/schemas/CompanySettings'
        last_viewed:
          description: 'The timestamp of the last time the quote was viewed'
          type: number
          format: integer
          example: 1434342123
        updated_at:
          description: 'The timestamp of the last update to the quote'
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: 'The timestamp of when the quote was archived'
          type: number
          format: integer
          example: 1434342123
        custom_surcharge1:
          description: 'First custom surcharge amount for the quote'
          type: number
          format: float
          example: 10.00
        custom_surcharge2:
          description: 'Second custom surcharge amount for the quote'
          type: number
          format: float
          example: 10.00
        custom_surcharge3:
          description: 'Third custom surcharge amount for the quote'
          type: number
          format: float
          example: 10.00
        custom_surcharge4:
          description: 'Fourth custom surcharge amount for the quote'
          type: number
          format: float
          example: 10.00
        custom_surcharge_tax1:
          description: 'Boolean flag indicating if taxes are charged on the first custom surcharge amount'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Boolean flag indicating if taxes are charged on the second custom surcharge amount'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Boolean flag indicating if taxes are charged on the third custom surcharge amount'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Boolean flag indicating if taxes are charged on the fourth custom surcharge amount'
          type: boolean
          example: true
        location_id:
          description: 'The client location id that this invoice relates to'
          type: string
          example: Opnel5aKBz
        design_id:
          description: 'The unique identifier of the design template used for this quote'
          type: string
          example: Opnel5aKBz
        exchange_rate:
          description: 'The exchange rate used for currency conversion'
          type: number
          format: float
          example: 1.0
        project_id:
          description: 'The unique identifier of the project associated with this quote'
          type: string
          example: Opnel5aKBz
        subscription_id:
          description: 'The unique identifier of the subscription associated with this quote'
          type: string
          example: Opnel5aKBz
        vendor_id:
          description: 'The unique identifier of the vendor associated with this quote'
          type: string
          example: Opnel5aKBz
      type: object

    InvoiceRequest:
      required:
        - client_id        
      properties:
        user_id:
          description: 'The user hashed id'
          type: string
          example: 'AxP7K9nY5z'
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: 'Bw2M8vR4qL'
        client_id:
          description: 'The client hashed id'
          type: string
          example: 'Ht5N9cX3jK'
        location_id:
          description: 'The location id of the client this request related to'
          type: string
          example: Opnel5aKBz
        number:
          description: 'The invoice number - is a unique alpha numeric number per invoice per company'
          type: string
          example: 'INV-2024-0001'
        po_number:
          description: 'The purchase order associated with this invoice'
          type: string
          example: 'PO-2024-0123'
        terms:
          description: 'The invoice terms'
          type: string
          example: 'Net 30 - Payment is due within 30 days of invoice date'
        public_notes:
          description: 'The public notes of the invoice'
          type: string
          example: 'Thank you for your business. Please include invoice number with payment.'
        private_notes:
          description: 'The private notes of the invoice'
          type: string
          example: 'Client requested expedited delivery - premium rates apply'
        footer:
          description: 'The invoice footer notes'
          type: string
          example: 'Payment accepted via bank transfer or credit card'
        custom_value1:
          description: 'A custom field value'
          type: string
          example: 'Department: Sales'
        custom_value2:
          description: 'A custom field value'
          type: string
          example: 'Region: North America'
        custom_value3:
          description: 'A custom field value'
          type: string
          example: 'Contract: C-2024-156'
        custom_value4:
          description: 'A custom field value'
          type: string
          example: 'Priority: High'
        tax_name1:
          description: 'The tax name'
          type: string
          example: 'VAT'
        tax_name2:
          description: 'The tax name'
          type: string
          example: 'GST'
        tax_rate1:
          description: 'The tax rate'
          type: number
          format: float
          example: 20.00
        tax_rate2:
          description: 'The tax rate'
          type: number
          format: float
          example: 5.00
        tax_name3:
          description: 'The tax name'
          type: string
          example: 'State Tax'
        tax_rate3:
          description: 'The tax rate'
          type: number
          format: float
          example: 8.50
        line_items:
          type: array
          description: 'An array of objects which define the line items of the invoice'
          items:
            $ref: '#/components/schemas/InvoiceItem'
        invitations:
          type: array
          description: 'An array of objects which define the invitations of the invoice'
          items:
            $ref: '#/components/schemas/InvoiceInvitationRequest'
        discount:
          description: 'The invoice discount, can be an amount or a percentage'
          type: number
          format: float
          example: 15.00
        partial:
          description: 'The deposit/partial amount'
          type: number
          format: float
          example: 250.00
        is_amount_discount:
          description: 'Flag determining if the discount is an amount or a percentage'
          type: boolean
          example: true
        uses_inclusive_taxes:
          description: 'Defines the type of taxes used as either inclusive or exclusive'
          type: boolean
          example: true
        date:
          description: 'The Invoice Date'
          type: string
          format: date
          example: '2024-03-15'
        partial_due_date:
          description: 'The due date for the deposit/partial amount'
          type: string
          format: date
          example: '2024-03-29'
        due_date:
          description: 'The due date of the invoice'
          type: string
          format: date
          example: '2024-04-14'
        custom_surcharge1:
          description: 'First Custom Surcharge'
          type: number
          format: float
          example: 25.00
        custom_surcharge2:
          description: 'Second Custom Surcharge'
          type: number
          format: float
          example: 35.00
        custom_surcharge3:
          description: 'Third Custom Surcharge'
          type: number
          format: float
          example: 45.00
        custom_surcharge4:
          description: 'Fourth Custom Surcharge'
          type: number
          format: float
          example: 55.00
        custom_surcharge_tax1:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        project_id:
          description: 'The project associated with this invoice'
          type: string
          example: Opnel5aKBz
      type: object
    ProductRequest:
      type: object
      properties:
       
        assigned_user_id:
          type: string
          description: 'The hashed ID of the user assigned to this product.'
          example: pR0j3

        project_id:
          type: string
          description: 'The hashed ID of the project that this product is associated with.'
          example: pR0j3

        vendor_id:
          type: string
          description: 'The hashed ID of the vendor that this product is associated with.'
          example: pR0j3

        custom_value1:
          type: string
          description: 'Custom value field 1.'
          example: 'Custom value 1'

        custom_value2:
          type: string
          description: 'Custom value field 2.'
          example: 'Custom value 2'

        custom_value3:
          type: string
          description: 'Custom value field 3.'
          example: 'Custom value 3'

        custom_value4:
          type: string
          description: 'Custom value field 4.'
          example: 'Custom value 4'

        product_key:
          type: string
          description: 'The product key.'
          example: '1234'

        notes:
          type: string
          description: 'Notes about the product.'
          example: 'These are some notes about the product.'

        cost:
          type: number
          format: double
          description: 'The cost of the product.'
          example: 10.0

        price:
          type: number
          format: double
          description: 'The price of the product.'
          example: 20.0

        quantity:
          type: number
          format: double
          description: 'The quantity of the product.'
          example: 5.0

          default: 1
        tax_name1:
          type: string
          description: 'The default tax name associated with this product'
          example: 'Tax 1'

        tax_rate1:
          type: number
          format: double
          description: 'The default tax rate for this product'
          example: 10.0

        tax_name2:
          type: string
          description: 'The default tax name associated with this product'
          example: 'Tax 2'

        tax_rate2:
          type: number
          format: double
          description: 'The default tax rate for this product'
          example: 5.0

        tax_name3:
          type: string
          description: 'The default tax name associated with this product'
          example: 'Tax 3'

        tax_rate3:
          type: number
          format: double
          description: 'The default tax rate for this product'
          example: 0.0

        in_stock_quantity:
          type: integer
          format: int32
          description: |
                The quantity of the product that is currently in stock. 
                
                **note** this field is not mutable without passing an extra query parameter which will allow modification of this value.

                The query parameter ?update_in_stock_quantity=true **MUST** be passed if you wish to update this value manually.

          default: 0

        stock_notification:
          type: boolean
          description: Indicates whether stock notifications are enabled for this product
          default: true

        stock_notification_threshold:
          type: integer
          format: int32
          description: The minimum quantity threshold for which stock notifications will be triggered
          default: 0

        max_quantity:
          type: integer
          format: int32
          description: The maximum quantity that can be ordered for this product

        product_image:
          type: string
          description: The URL of the product image
          format: uri-reference

        tax_id:
          type: string
          default: '1'

          description: |
                The tax category id for this product.'

                The following constants are available (default = '1')
                
                ```
                PRODUCT_TYPE_PHYSICAL = '1'
                PRODUCT_TYPE_SERVICE = '2'
                PRODUCT_TYPE_DIGITAL = '3'
                PRODUCT_TYPE_SHIPPING = '4'
                PRODUCT_TYPE_EXEMPT = '5'
                PRODUCT_TYPE_REDUCED_TAX = '6'
                PRODUCT_TYPE_OVERRIDE_TAX = '7'
                PRODUCT_TYPE_ZERO_RATED = '8'
                PRODUCT_TYPE_REVERSE_TAX = '9'
                ```
          example: '1'

    InvoiceInvitationRequest:
      required:
        - client_contact_id
      properties:
        id:
          description: 'The entity invitation hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        client_contact_id: 
          description: 'The client contact hashed id'
          type: string
          example: Opnel5aKBz
        key:
          description: 'The invitation key'
          type: string
          example: Opnel5aKBz4343343566236gvbb
          readOnly: true
        link:
          description: 'The invitation link'
          type: string
          example: 'https://www.example.com/invitations/Opnel5aKBz4343343566236gvbb'
          readOnly: true
        sent_date:
          description: 'The invitation sent date'
          type: string
          format: date-time
          readOnly: true
        viewed_date:
          description: 'The invitation viewed date'
          type: string
          format: date-time
          readOnly: true
        opened_date:
          description: 'The invitation opened date'
          type: string
          format: date-time
          readOnly: true
        updated_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        archived_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        email_error:
          description: 'The email error'
          type: string
          example: 'The email error'
          readOnly: true
        email_status:
          description: 'The email status'
          type: string
          readOnly: true

    BankIntegration:
      properties:
        id:
          description: 'The bank integration hashed id'
          type: string
          example: AS3df3A
        user_id:
          description: 'The user hashed id'
          type: string
          example: AS3df3A
        provider_bank_name:
          description: 'The providers bank name'
          type: string
          example: 'Chase Bank'
        bank_account_id:
          description: 'The bank account id'
          type: integer
          example: 1233434
        bank_account_name:
          description: 'The name of the account'
          type: string
          example: 'My Checking Acc'
        bank_account_number:
          description: 'The account number'
          type: string
          example: '111 234 2332'
        bank_account_status:
          description: 'The status of the bank account'
          type: string
          example: ACTIVE
        bank_account_type:
          description: 'The type of account'
          type: string
          example: CREDITCARD
        balance:
          description: 'The current bank balance if available'
          type: number
          example: 1000000
        currency:
          description: 'iso_3166_3 code'
          type: string
          example: USD
      type: object
    CompanyToken:
      properties:
        name:
          description: 'The token name'
          type: string
          example: 'Token Name'
        token:
          description: 'The token value'
          type: string
          example: AS3df3jUUH765fhfd9KJuidj3JShjA
        is_system:
          description: 'Determines whether the token is created by the system rather than a user'
          type: boolean
          example: true
      type: object
    PurchaseOrder:
      properties:
        id:
          description: 'The unique hashed identifier for the purchase order'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The unique hashed identifier for the user who created the purchase order'
          type: string
          example: ''
        assigned_user_id:
          description: 'The unique hashed identifier for the user assigned to the purchase order'
          type: string
          example: ''
        vendor_id:
          description: 'The unique hashed identifier for the vendor associated with the purchase order'
          type: string
          example: ''
        status_id:
          description: 'The status of the purchase order represented by a unique identifier'
          type: string
          example: ''
        number:
          description: 'The unique alpha-numeric purchase order number per company'
          type: string
          example: PO_101
        quote_number:
          description: 'The quote number associated with this purchase order'
          type: string
          example: QUOTE_101
        terms:
          description: 'The terms and conditions for the purchase order'
          type: string
          example: 'These are some purchase order terms. Valid for 14 days.'
        public_notes:
          description: 'Publicly visible notes associated with the purchase order'
          type: string
          example: 'These are public notes which the vendor may see'
        private_notes:
          description: 'Privately visible notes associated with the purchase order, not disclosed to the vendor'
          type: string
          example: 'These are private notes, not to be disclosed to the vendor'
        footer:
          description: 'The footer text of the purchase order'
          type: string
          example: 'The text goes in the footer of the purchase order'
        custom_value1:
          description: 'First custom value field for additional information'
          type: string
          example: 'A custom value'
        custom_value2:
          description: 'Second custom value field for additional information'
          type: string
          example: 'A custom value'
        custom_value3:
          description: 'Third custom value field for additional information'
          type: string
          example: 'A custom value'
        custom_value4:
          description: 'Fourth custom value field for additional information'
          type: string
          example: 'A custom value'
        tax_name1:
          description: 'The name of the first tax applied to the purchase order'
          type: string
          example: GST
        tax_name2:
          description: 'The name of the second tax applied to the purchase order'
          type: string
          example: VAT
        tax_rate1:
          description: 'The rate of the first tax applied to the purchase order'
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: 'The rate of the second tax applied to the purchase order'
          type: number
          format: float
          example: 10.00
        tax_name3:
          description: 'The name of the third tax applied to the purchase order'
          type: string
          example: ''
        tax_rate3:
          description: 'The rate of the third tax applied to the purchase order'
          type: number
          format: float
          example: 10.00
        total_taxes:
          description: 'The total amount of taxes applied to the purchase order'
          type: number
          format: float
          example: 10.00
        line_items:
          type: array
          description: 'An array of objects which define the line items of the purchase order'
          items:
            $ref: '#/components/schemas/InvoiceItem'
        amount:
          description: 'The total amount of the purchase order before taxes and discounts'
          type: number
          format: float
          example: 10.00
        balance:
          description: 'The balance due for the purchase order after accounting for payments'
          type: number
          format: float
          example: 10.00
        paid_to_date:
          description: 'The total amount paid on the purchase order so far'
          type: number
          format: float
          example: 10.00
        discount:
          description: 'The discount amount or percentage applied to the purchase order'
          type: number
          format: float
          example: 10.00
        partial:
          description: 'The partial or deposit amount for the purchase order'
          type: number
          format: float
          example: 10.00
        is_amount_discount:
          description: 'Boolean flag indicating if the discount is a fixed amount or a percentage'
          type: boolean
          example: true
        is_deleted:
          description: 'Boolean flag indicating if the purchase order has been deleted'
          type: boolean
          example: false
        uses_inclusive_taxes:
          description: 'Boolean flag indicating if the taxes used are inclusive or exclusive'
          type: boolean
          example: true
        date:
          description: 'The date the purchase order was created'
          type: string
          format: date
          example: '1994-07-30'
        last_sent_date:
          description: 'The last date the purchase order was sent to the vendor'
          type: string
          format: date
          example: '1994-07-30'
        next_send_date:
          description: 'The next scheduled date for sending a reminder for the purchase order'
          type: string
          format: date
          example: '1994-07-30'
        partial_due_date:
          description: 'The due date for the partial or deposit amount'
          type: string
          format: date
          example: '1994-07-30'
        due_date:
          description: 'The due date for the total amount of the purchase order'
          type: string
          format: date
          example: '1994-07-30'
        settings:
          $ref: '#/components/schemas/CompanySettings'
        last_viewed:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        custom_surcharge1:
          description: 'First custom surcharge amount for the purchase order'
          type: number
          format: float
          example: 10.00
        custom_surcharge2:
          description: 'Second custom surcharge amount for the purchase order'
          type: number
          format: float
          example: 10.00
        custom_surcharge3:
          description: 'Third custom surcharge amount for the purchase order'
          type: number
          format: float
          example: 10.00
        custom_surcharge4:
          description: 'Fourth custom surcharge amount for the purchase order'
          type: number
          format: float
          example: 10.00
        custom_surcharge_tax1:
          description: 'Boolean flag indicating if taxes are charged on the first custom surcharge amount'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Boolean flag indicating if taxes are charged on the second custom surcharge amount'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Boolean flag indicating if taxes are charged on the third custom surcharge amount'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Boolean flag indicating if taxes are charged on the fourth custom surcharge amount'
          type: boolean
          example: true
        backup:
          description: 'Backup data or file reference for this purchase order'
          type: string
          example: 'backup_data.json'
        client_id:
          description: 'The unique identifier of the client associated with this purchase order'
          type: string
          example: Opnel5aKBz
        currency_id:
          description: 'The unique identifier of the currency'
          type: string
          example: '1'
        design_id:
          description: 'The unique identifier of the design template used for this purchase order'
          type: string
          example: Opnel5aKBz
        exchange_rate:
          description: 'The exchange rate used for currency conversion'
          type: number
          format: float
          example: 1.0
        invoice_id:
          description: 'The unique identifier of the related invoice'
          type: string
          example: Opnel5aKBz
        location_id:
          description: 'The unique identifier of the location'
          type: string
          example: Opnel5aKBz
        po_number:
          description: 'The purchase order number'
          type: string
          example: 'PO-2024-001'
        project_id:
          description: 'The unique identifier of the project associated with this purchase order'
          type: string
          example: Opnel5aKBz
        recurring_id:
          description: 'The unique identifier of the recurring schedule'
          type: string
          example: Opnel5aKBz
        reminder1_sent:
          description: 'Timestamp when the first reminder was sent'
          type: number
          format: integer
          example: 1234567890
        reminder2_sent:
          description: 'Timestamp when the second reminder was sent'
          type: number
          format: integer
          example: 1234567890
        reminder3_sent:
          description: 'Timestamp when the third reminder was sent'
          type: number
          format: integer
          example: 1234567890
        reminder_last_sent:
          description: 'Timestamp when the last reminder was sent'
          type: number
          format: integer
          example: 1234567890
      type: object

    InvoiceInvitation:
      properties:
        id:
          description: 'The entity invitation hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        client_contact_id: 
          description: 'The client contact hashed id'
          type: string
          example: Opnel5aKBz
        key:
          description: 'The invitation key'
          type: string
          example: Opnel5aKBz4343343566236gvbb
          readOnly: true
        link:
          description: 'The invitation link'
          type: string
          example: 'https://www.example.com/invitations/Opnel5aKBz4343343566236gvbb'
          readOnly: true
        sent_date:
          description: 'The invitation sent date'
          type: string
          format: date-time
          readOnly: true
        viewed_date:
          description: 'The invitation viewed date'
          type: string
          format: date-time
          readOnly: true
        opened_date:
          description: 'The invitation opened date'
          type: string
          format: date-time
          readOnly: true
        updated_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        archived_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        email_error:
          description: 'The email error'
          type: string
          example: 'The email error'
          readOnly: true
        email_status:
          description: 'The email status'
          type: string
          readOnly: true

    VendorContact:
      properties:
        id:
          description: 'The hashed id of the vendor contact'
          type: string
          example: Opnel5aKBz
          readOnly: true
        user_id:
          description: 'The hashed id of the user id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        vendor_id:
          description: 'The hashed id of the vendor'
          type: string
          example: Opnel5aKBz
          readOnly: true
        first_name:
          description: 'The first name of the contact'
          type: string
          example: Harry
        last_name:
          description: 'The last name of the contact'
          type: string
          example: Windsor
        contact_key:
          description: 'A unique identifier for the contact'
          type: string
          example: JD0X52bkfZlJRiroCJ0tcSiAjsJTntZ5uqKdiZ0a
          readOnly: true
        confirmation_code:
          description: 'The confirmation code used to authenticate the contacts email address'
          type: string
          example: 333-sdjkh34gbasd
          readOnly: true
        phone:
          description: 'The contacts phone number'
          type: string
          example: 555-123-1234
        custom_value1:
          description: 'A custom value'
          type: string
          example: '2022-10-10'
        custom_value2:
          description: 'A custom value'
          type: string
          example: $1000
        custom_value3:
          description: 'A custom value'
          type: string
          example: ''
        custom_value4:
          description: 'A custom value'
          type: string
          example: ''
        email:
          description: 'The contact email address'
          type: string
          example: harry@windsor.com
        email_verified_at:
          description: 'The date which the contact confirmed their email'
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        password:
          description: 'The hashed password of the contact'
          type: string
          example: '*****'
        is_primary:
          description: 'Boolean flag determining if the contact is the primary contact for the vendor'
          type: boolean
          example: true
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        deleted_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        send_email:
          description: 'Flag indicating whether to send emails to this contact'
          type: boolean
          example: true
      type: object

    ClientGatewayToken:
      properties:
        id:
          description: 'The hashed id of the client gateway token'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The hashed_id of the client'
          type: string
          example: '2'
        token:
          description: 'The payment token'
          type: string
          example: '2'
        routing_number:
          description: 'THe bank account routing number'
          type: string
          example: '2'
        company_gateway_id:
          description: 'The hashed id of the company gateway'
          type: string
          example: '2'
        is_default:
          description: 'Flag determining if the token is the default payment method'
          type: boolean
          example: true
      type: object
    VendorRequest:
      required:
        - name
      properties:
        name:
          description: 'Vendor name'
          type: string
          example: 'ABC Supply Company'
        address1:
          description: 'Primary address line'
          type: string
          example: '123 Main Street'
        address2:
          description: 'Secondary address line'
          type: string
          example: 'Suite 100'
        city:
          description: 'City'
          type: string
          example: 'New York'
        state:
          description: 'State or province'
          type: string
          example: 'NY'
        postal_code:
          description: 'Postal code'
          type: string
          example: '10001'
        country_id:
          description: 'Country ID'
          type: string
          example: '1'
        phone:
          description: 'Phone number'
          type: string
          example: '+1-555-123-4567'
        email:
          description: 'Email address'
          type: string
          format: email
          example: 'contact@abcsupply.com'
        website:
          description: 'Website URL'
          type: string
          format: uri
          example: 'https://www.abcsupply.com'
        custom_value1:
          description: 'Custom field value 1'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'Custom field value 2'
          type: string
          example: 'Custom value 2'
        custom_value3:
          description: 'Custom field value 3'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'Custom field value 4'
          type: string
          example: 'Custom value 4'
        is_deleted:
          description: 'Whether the vendor is deleted'
          type: boolean
          example: false
        archived_at:
          description: 'Timestamp when vendor was archived'
          type: integer
          example: 1640995200
        contacts:
          type: array
          description: 'Array of vendor contacts'
          items:
            type: object
            properties:
              first_name:
                type: string
                example: 'John'
              last_name:
                type: string
                example: 'Doe'
              email:
                type: string
                format: email
                example: 'john.doe@abcsupply.com'
              phone:
                type: string
                example: '+1-555-123-4567'
              send_email:
                type: boolean
                example: true
      type: object
    Company:
      properties:
        id:
          description: "The unique hashed identifier for the company"
          type: string
          example: WJxbojagwO
        size_id:
          description: "The unique identifier representing the company's size category"
          type: string
          example: '2'
        industry_id:
          description: "The unique identifier representing the company's industry category"
          type: string
          example: '5'
        slack_webhook_url:
          description: "The URL for the company's Slack webhook notifications"
          type: string
          example: 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
        google_analytics_key:
          description: "The company's Google Analytics tracking ID"
          type: string
          example: 'UA-123456789-1'
        portal_mode:
          description: "The mode determining how client-facing URLs are structured (e.g., subdomain, domain, or iframe)"
          type: string
          example: subdomain
        subdomain:
          description: "The subdomain prefix for the company's domain (e.g., 'acme' in acme.domain.com)"
          type: string
          example: acme
        portal_domain:
          description: "The fully qualified domain used for client-facing URLs"
          type: string
          example: 'https://subdomain.invoicing.co'
        enabled_tax_rates:
          description: "The number of tax rates used per entity"
          type: integer
          example: 2
        fill_products:
          description: "A flag determining whether to auto-fill product descriptions based on the product key"
          type: boolean
          example: true
        convert_products:
          description: "A flag determining whether to convert products between different types or units"
          type: boolean
          example: true
        update_products:
          description: "A flag determining whether to update product descriptions when the description changes"
          type: boolean
          example: true
        show_product_details:
          description: "A flag determining whether to display product details in the user interface"
          type: boolean
          example: true
        show_product_cost:
          description: "A flag determining whether to display product cost is shown in the user interface"
          type: boolean
          example: true
        custom_fields:
          description: |
            A mapping of custom fields for various objects within the company
            
            **note** 
            The custom fields object is formatted as follows

              key : value
              entity(integer) : label|type

              for example:
              "company1": "Number|single_line_text",

              This defines the first company custom field, with label Number which has a custom field type of a single text line

              Supported entity types

              invoice
              product
              client
              contact
              task
              user
              project
              vendor 
              expense
              payment     
      
              Supported input types values

              single_line_text
              date
              switch

              For text areas, you only need to supply the label ie "TextArea", the | and type values are not required.
              For the dropdown the data format is as follows:

              label|your,drop,down,values,in,comma,separated,format

          type: object
        enable_product_cost:
          description: "A flag determining whether to show or hide the product cost field in the user interface"
          type: boolean
          example: true
        enable_product_quantity:
          description: "A flag determining whether to show or hide the product quantity field in the user interface"
          type: boolean
          example: true
        default_quantity:
          description: "A flag determining whether to use a default quantity for products"
          type: boolean
          example: true
        custom_surcharge_taxes1:
          description: "A flag determining whether to apply taxes on custom surcharge amounts for the first custom surcharge field"
          type: boolean
          example: true
        custom_surcharge_taxes2:
          description: "A flag determining whether to apply taxes on custom surcharge amounts for the second custom surcharge field"
          type: boolean
          example: true
        custom_surcharge_taxes3:
          description: "A flag determining whether to apply taxes on custom surcharge amounts for the third custom surcharge field"
          type: boolean
          example: true
        custom_surcharge_taxes4:
          description: "A flag determining whether to apply taxes on custom surcharge amounts for the fourth custom"
        logo:
          description: "The company logo file in binary format"
          type: string
          format: binary
          example: logo.png
        company_key:
          description: "The static company key hash used to identify the Company"
          readOnly: true
          type: string
          example: "Vnb14bRlwiFjc5ckte6cfbygTRkn5IMQ"
        client_can_register:
          description: "A flag determining whether clients can register for the client portal"
          type: boolean
          example: true
        enabled_modules:
          type: integer
          description: |
                Bitmask representation of the modules that are enabled in the application

                ```
                self::ENTITY_RECURRING_INVOICE => 1,
                self::ENTITY_CREDIT => 2,
                self::ENTITY_QUOTE => 4,
                self::ENTITY_TASK => 8,
                self::ENTITY_EXPENSE => 16,
                self::ENTITY_PROJECT => 32,
                self::ENTITY_VENDOR => 64,
                self::ENTITY_TICKET => 128,
                self::ENTITY_PROPOSAL => 256,
                self::ENTITY_RECURRING_EXPENSE => 512,
                self::ENTITY_RECURRING_TASK => 1024,
                self::ENTITY_RECURRING_QUOTE => 2048,
                ```
                
                The default per_page value is 20.

          example: 2048
        db:
          readOnly: true
          type: string
          example: 'db-ninja-01'
        first_day_of_week:
          description: "The first day of the week for the company"
          type: string
          example: '1'
        first_month_of_year:
          description: "The first month for the company financial year"
          type: string
          example: '1' 
        enabled_item_tax_rates:  
          description: "The number of tax rates used per item"
          type: integer
          example: 2
        is_large:
          description: "A flag determining whether the company is considered large"
          type: boolean
          example: true
        default_auto_bill:
          type: string
          example: 'always'
          description: |
                A flag determining whether to auto-bill clients by default

                values:
                
                - always - Always auto bill
                - disabled - Never auto bill
                - optin - Allow the client to select their auto bill status with the default being disabled
                - optout -Allow the client to select their auto bill status with the default being enabled
        mark_expenses_invoiceable:
          description: "A flag determining whether to mark expenses as invoiceable by default"
          type: boolean
          example: true
        mark_expenses_paid:
          description: "A flag determining whether to mark expenses as paid by default"
          type: boolean
          example: true
        invoice_expense_documents:
          description: "A flag determining whether to include expense documents on invoices by default"
          type: boolean
          example: true
        auto_start_tasks:
          description: "A flag determining whether to auto-start tasks by default"
          type: boolean
          example: true
        invoice_task_timelog:
          description: "A flag determining whether to include task time logs on invoices by default"
          type: boolean
          example: true
        invoice_task_documents:
          description: "A flag determining whether to include task documents on invoices by default"
          type: boolean
          example: true
        show_tasks_table:
          description: "A flag determining whether to show the tasks table on invoices by default"
          type: boolean
          example: true
        is_disabled:
          description: "A flag determining whether the company is disabled"
          type: boolean
          example: true
        default_task_is_date_based:
          description: "A flag determining whether to default tasks to be date-based"
          type: boolean
          example: true
        enable_product_discount:
          description: "A flag determining whether to show or hide the product discount field in the user interface"
          type: boolean
          example: true
        calculate_expense_tax_by_amount:
          description: "A flag determining whether to calculate expense taxes by amount"
          type: boolean
          example: true
        expense_inclusive_taxes:
          description: "A flag determining whether to include taxes in the expense amount"
          type: boolean
          example: true
        session_timeout:
          description: "The session timeout for the company"
          type: integer
          example: 60
        oauth_password_required:
          description: "A flag determining whether to require a password for `dangerous` actions when using OAuth"
          type: boolean
          example: true
        invoice_task_datelog:
          description: "A flag determining whether to include task date logs on invoices by default"
          type: boolean
          example: true
        default_password_timeout:
          description: "The default password timeout for the company"
          type: integer
          example: 60
        show_task_end_date:
          description: "A flag determining whether to show the task end date on invoices by default"
          type: boolean
          example: true
        markdown_enabled:
          description: "A flag determining whether markdown is enabled for the company"
          type: boolean
          example: true
        report_include_drafts:
          description: "A flag determining whether to include draft invoices in reports"
          type: boolean
          example: true
        client_registration_fields:
          description: "The client registration fields for the company"
          type: object
        stop_on_unpaid_recurring:
          description: "A flag determining whether to stop recurring invoices when they are unpaid"
          type: boolean
          example: true
        use_quote_terms_on_conversion:
          description: "A flag determining whether to use quote terms on conversion to an invoice"
          type: boolean
          example: true
        enable_applying_payments:
          description: "A flag determining whether to enable applying payments to invoices"
          type: boolean
          example: true
        track_inventory:
          description: "A flag determining whether to track inventory for the company"
          type: boolean
          example: true
        inventory_notification_threshold:
          description: "The inventory notification threshold for the company"
          type: integer
          example: 60
        stock_notification:
          description: "A flag determining whether to send stock notifications for the company"
          type: boolean
          example: true
        matomo_url:
          description: "The Matomo URL for the company"
          type: string
          example: 'https://matomo.example.com'
        matomo_id:
          description: "The Matomo ID for the company"
          type: string
          example: '1'
        enabled_expense_tax_rates:
          description: "The number of tax rates used per expense"
          type: integer
          example: 2
        invoice_task_project:
          description: "A flag determining whether to include the project on invoices by default"
          type: boolean
          example: true
        report_include_deleted:
          description: "A flag determining whether to include deleted invoices in reports"
          type: boolean
          example: true
        invoice_task_lock:
          description: "A flag determining whether to lock tasks when invoiced"
          type: boolean
          example: true
        convert_payment_currency:
          description: "A flag determining whether to convert the payment currency"
          type: boolean
          example: true
        convert_expense_currency:
          description: "A flag determining whether to convert the expense currency"
          type: boolean
          example: true
        notify_vendor_when_paid:
          description: "A flag determining whether to notify the vendor when an expense is paid"
          type: boolean
          example: true
        invoice_task_hours:
          description: "A flag determining whether to include the task hours on invoices by default"
          type: boolean
          example: true
        calculate_taxes:
          description: "A flag determining whether to calculate taxes for the company"
          type: boolean
          example: true
        tax_data:
          description: "The tax data for the company"
          type: object
        e_invoice_certificate:
          description: "The e-invoice certificate for the company"
          type: string
          example: '-----BEGIN CERTIFICATE-----'
        e_invoice_certificate_passphrase:
          description: "The e-invoice certificate passphrase for the company"
          type: string
          example: 'secret'
        origin_tax_data:
          description: "The origin tax data for the company"
          type: object
        invoice_task_project_header:
          description: "A flag determining whether to include the project header on invoices by default"
          type: boolean
          example: true 
        invoice_task_item_description:
          description: "A flag determining whether to include the item description on invoices by default"
          type: boolean
          example: true
  
        expense_mailbox:
          description: "The email address for the expense mailbox"
          type: string
          example: "expenses@company.com"

        expense_mailbox_active:
          description: "Whether the expense mailbox is active"
          type: boolean
          example: true

        inbound_mailbox_allow_company_users:
          description: "Whether company users are allowed to use the inbound mailbox"
          type: boolean
          example: true

        inbound_mailbox_allow_vendors:
          description: "Whether vendors are allowed to use the inbound mailbox"
          type: boolean
          example: false

        inbound_mailbox_allow_clients:
          description: "Whether clients are allowed to use the inbound mailbox"
          type: boolean
          example: true

        inbound_mailbox_allow_unknown:
          description: "Whether unknown senders are allowed to use the inbound mailbox"
          type: boolean
          example: false

        inbound_mailbox_whitelist:
          description: "Comma-separated list of whitelisted email addresses for the inbound mailbox"
          type: string
          example: "user1@example.com,user2@example.com"

        inbound_mailbox_blacklist:
          description: "Comma-separated list of blacklisted email addresses for the inbound mailbox"
          type: string
          example: "spam@example.com,unwanted@example.com"

        smtp_host:
          description: "The SMTP host for sending emails"
          type: string
          example: "smtp.gmail.com"

        smtp_port:
          description: "The SMTP port for sending emails"
          type: integer
          example: 587

        smtp_encryption:
          description: "The encryption method for SMTP"
          type: string
          nullable: true
          enum: [tls, ssl]
          example: "tls"

        smtp_local_domain:
          description: "The local domain for SMTP"
          type: string
          example: "company.com"

        smtp_verify_peer:
          description: "Whether to verify the SMTP peer"
          type: boolean
          example: true

        e_invoice:
          description: "E-invoice settings for the company"
          type: object
          additionalProperties: true

        legal_entity_id:
          description: "The ID of the legal entity associated with the company"
          type: integer
          example: 1234
        convert_rate_to_client:
          description: 'Flag indicating whether to convert rates to the client currency'
          type: boolean
          example: true
        e_invoicing_token:
          description: 'Authentication token for e-invoicing services'
          type: string
          example: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9'
        enable_shop_api:
          description: 'Flag indicating whether the shop API is enabled'
          type: boolean
          example: true
        markdown_email_enabled:
          description: 'Flag indicating whether markdown formatting is enabled in emails'
          type: boolean
          example: true
        use_comma_as_decimal_place:
          description: 'Flag indicating whether to use comma as decimal separator instead of period'
          type: boolean
          example: true
        settings:
          $ref: '#/components/schemas/CompanySettings'
      type: object

    CompanyLedger:
      properties:
        entity_id:
          description: 'This field will reference one of the following entity hashed ID payment_id, invoice_id or credit_id'
          type: string
          example: AS3df3A
        notes:
          description: 'The notes which reference this entry of the ledger'
          type: string
          example: 'Credit note for invoice #3212'
        balance:
          description: 'The client balance'
          type: number
          format: float
          example: 10.00
        adjustment:
          description: 'The amount the client balance is adjusted by'
          type: number
          format: float
          example: 10.00
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
      type: object
    RecurringInvoice:
      properties:
        id:
          description: 'The hashed id of the recurring invoice'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        status_id:
          description: 'The invoice status variable'
          type: string
          example: '4'
        frequency_id:
          description: 'The recurring invoice frequency'
          type: number
          example: 4
        remaining_cycles:
          description: 'The number of invoices left to be generated'
          type: number
          example: 4
        number:
          description: 'The recurringinvoice number - is a unique alpha numeric number per invoice per company'
          type: string
          example: INV_101
        po_number:
          description: 'The purchase order associated with this recurring invoice'
          type: string
          example: PO-1234
        terms:
          description: 'The invoice terms'
          type: string
          example: 'These are invoice terms'
        public_notes:
          description: 'The public notes of the invoice'
          type: string
          example: 'These are some public notes'
        private_notes:
          description: 'The private notes of the invoice'
          type: string
          example: 'These are some private notes'
        footer:
          description: 'The invoice footer notes'
          type: string
          example: ''
        custom_value1:
          description: 'A custom field value'
          type: string
          example: '2022-10-01'
        custom_value2:
          description: 'A custom field value'
          type: string
          example: 'Something custom'
        custom_value3:
          description: 'A custom field value'
          type: string
          example: ''
        custom_value4:
          description: 'A custom field value'
          type: string
          example: ''
        tax_name1:
          description: 'The tax name'
          type: string
          example: ''
        tax_name2:
          description: 'The tax name'
          type: string
          example: ''
        tax_rate1:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_name3:
          description: 'The tax name'
          type: string
          example: ''
        tax_rate3:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        total_taxes:
          description: 'The total taxes for the invoice'
          type: number
          format: float
          example: 10.00
        line_items:
          description: 'An array of objects which define the line items of the invoice'
          type: object
          example: {}
        amount:
          description: 'The invoice amount'
          type: number
          format: float
          example: 10.00
        balance:
          description: 'The invoice balance'
          type: number
          format: float
          example: 10.00
        paid_to_date:
          description: 'The amount paid on the invoice to date'
          type: number
          format: float
          example: 10.00
        discount:
          description: 'The invoice discount, can be an amount or a percentage'
          type: number
          format: float
          example: 10.00
        partial:
          description: 'The deposit/partial amount'
          type: number
          format: float
          example: 10.00
        is_amount_discount:
          description: 'Flag determining if the discount is an amount or a percentage'
          type: boolean
          example: true
        is_deleted:
          description: 'Defines if the invoice has been deleted'
          type: boolean
          example: true
        uses_inclusive_taxes:
          description: 'Defines the type of taxes used as either inclusive or exclusive'
          type: boolean
          example: true
        date:
          description: 'The Invoice Date'
          type: string
          format: date
          example: '1994-07-30'
        last_sent_date:
          description: 'The last date the invoice was sent out'
          type: string
          format: date
          example: '1994-07-30'
        next_send_date:
          description: 'The Next date for a reminder to be sent'
          type: string
          format: date
          example: '1994-07-30'
        partial_due_date:
          description: 'The due date for the deposit/partial amount'
          type: string
          format: date
          example: '1994-07-30'
        due_date:
          description: 'The due date of the invoice'
          type: string
          format: date
          example: '1994-07-30'
        settings:
          $ref: '#/components/schemas/CompanySettings'
        last_viewed:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        custom_surcharge1:
          description: 'First Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge2:
          description: 'Second Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge3:
          description: 'Third Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge4:
          description: 'Fourth Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge_tax1:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        location_id:
          description: 'The client location id that this invoice relates to'
          type: string
          example: Opnel5aKBz
        auto_bill:
          description: 'Auto-billing configuration setting'
          type: string
          example: 'always'
        auto_bill_enabled:
          description: 'Flag indicating whether auto-billing is enabled'
          type: boolean
          example: true
        design_id:
          description: 'The unique identifier of the design template used for this recurring invoice'
          type: string
          example: Opnel5aKBz
        due_date_days:
          description: 'Number of days until the due date'
          type: integer
          example: 30
        e_invoice:
          description: 'E-invoice configuration and data'
          type: object
          additionalProperties: true
        exchange_rate:
          description: 'The exchange rate used for currency conversion'
          type: number
          format: float
          example: 1.0
        next_send_date_client:
          description: 'The next scheduled send date for the client'
          type: string
          format: date
          example: '2024-12-31'
        project_id:
          description: 'The unique identifier of the project associated with this recurring invoice'
          type: string
          example: Opnel5aKBz
        vendor_id:
          description: 'The unique identifier of the vendor associated with this recurring invoice'
          type: string
          example: Opnel5aKBz
      type: object
      

    PurchaseOrderRequest:
      required:
        - vendor_id
        - date
        - due_date
      properties:
        vendor_id:
          description: 'The hashed ID of the vendor'
          type: string
          example: 'D2J234DFA'
        date:
          description: 'Purchase order date'
          type: string
          format: date
          example: '2024-01-01'
        due_date:
          description: 'Due date for the purchase order'
          type: string
          format: date
          example: '2024-01-31'
        private_notes:
          description: 'Private notes for the purchase order'
          type: string
          example: 'Internal notes about this purchase order'
        public_notes:
          description: 'Public notes for the purchase order'
          type: string
          example: 'Please deliver to our warehouse'
        custom_value1:
          description: 'Custom field value 1'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'Custom field value 2'
          type: string
          example: 'Custom value 2'
        custom_value3:
          description: 'Custom field value 3'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'Custom field value 4'
          type: string
          example: 'Custom value 4'
        line_items:
          type: array
          description: 'Array of line items for the purchase order'
          items:
            type: object
            properties:
              quantity:
                type: number
                example: 10
              cost:
                type: number
                example: 25.00
              product_key:
                type: string
                example: 'PROD_001'
              notes:
                type: string
                example: 'Office supplies'
              discount:
                type: number
                example: 0
              is_amount_discount:
                type: boolean
                example: true
              tax_name1:
                type: string
                example: 'Sales Tax'
              tax_rate1:
                type: number
                example: 8.5
              tax_name2:
                type: string
                example: ''
              tax_rate2:
                type: number
                example: 0
              tax_name3:
                type: string
                example: ''
              tax_rate3:
                type: number
                example: 0
              sort_id:
                type: string
                example: '0'
              custom_value1:
                type: string
                example: 'Department: IT'
              custom_value2:
                type: string
                example: 'Priority: High'
              custom_value3:
                type: string
                example: 'Approved by Manager'
              custom_value4:
                type: string
                example: 'Budget Code: IT-2024'
              type_id:
                type: string
                example: '1'
              tax_id:
                type: string
                example: '1'
      type: object
    Payment:
      properties:
        id:
          description: 'The payment hashed id'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        invitation_id:
          description: 'The invitation hashed id'
          type: string
          example: Opnel5aKBz
        client_contact_id:
          description: 'The client contact hashed id'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
        type_id:
          $ref: '#/components/schemas/PaymentType'
        date:
          description: 'The Payment date'
          type: string
          example: 1-1-2014
        transaction_reference:
          description: 'The transaction reference as defined by the payment gateway'
          type: string
          example: xcsSxcs124asd
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: Opnel5aKBz
        private_notes:
          description: 'The private notes of the payment'
          type: string
          example: 'The payment was refunded due to error'
        is_manual:
          description: 'Flags whether the payment was made manually or processed via a gateway'
          type: boolean
          example: true
        is_deleted:
          description: 'Defines if the payment has been deleted'
          type: boolean
          example: true
        amount:
          description: 'The amount of this payment'
          type: number
          example: 10
        refunded:
          description: 'The refunded amount of this payment'
          type: number
          example: 10
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        company_gateway_id:
          description: 'The company gateway id'
          type: string
          example: "3"
        paymentables:
          $ref: '#/components/schemas/Paymentable'
        invoices:
          description: ''
          type: array
          items:
            $ref: '#/components/schemas/InvoicePaymentable'
        credits:
          description: ''
          type: array
          items:
            $ref: '#/components/schemas/CreditPaymentable'
        number:
          description: 'The payment number - is a unique alpha numeric number per payment per company'
          type: string
          example: PAY_101
        category_id:
          description: 'The unique identifier of the payment category'
          type: string
          example: Opnel5aKBz
        custom_value1:
          description: 'Custom field for storing additional information'
          type: string
          example: 'Payment reference 123'
        custom_value2:
          description: 'Custom field for storing additional information'
          type: string
          example: 'Approved by John'
        custom_value3:
          description: 'Custom field for storing additional information'
          type: string
          example: 'Urgent payment'
        custom_value4:
          description: 'Custom field for storing additional information'
          type: string
          example: 'Q1 2024'
        exchange_currency_id:
          description: 'The unique identifier of the exchange currency'
          type: string
          example: "2"
        exchange_rate:
          description: 'The exchange rate used for currency conversion'
          type: number
          format: float
          example: 1.0
        idempotency_key:
          description: 'Unique key to ensure idempotent payment processing'
          type: string
          example: 'key_1234567890abcdef'
      type: object
    

    Credit:
      properties:
        id:
          description: "The unique hashed ID of the credit"
          type: string
          example: Opnel5aKBz
        user_id:
          description: "The unique hashed ID of the user associated with the credit"
          type: string
          example: 1a2b3c4d5e
        assigned_user_id:
          description: "The unique hashed ID of the assigned user responsible for the credit"
          type: string
          example: 6f7g8h9i0j
        client_id:
          description: "The unique hashed ID of the client associated with the credit"
          type: string
          example: p1q2r3s4t5
        status_id:
          description: "The ID representing the current status of the credit"
          type: string
          example: "3"
        invoice_id:
          description: "The unique hashed ID of the linked invoice to which the credit is applied"
          type: string
          example: u1v2w3x4y5
        number:
          description: "The unique alphanumeric credit number per company"
          type: string
          example: QUOTE_101
        po_number:
          description: "The purchase order number referred to by the credit"
          type: string
          example: PO_12345
        terms:
          description: "The terms associated with the credit"
          type: string
          example: "Net 30"
        public_notes:
          description: "Public notes for the credit"
          type: string
          example: "Thank you for your business."
        private_notes:
          description: "Private notes for internal use, not visible to the client"
          type: string
          example: "Client is requesting a discount."
        footer:
          description: "The footer text for the credit"
          type: string
          example: "Footer text goes here."
        custom_value1:
          description: "Custom value 1 for additional credit information"
          type: string
          example: "Custom data 1"
        custom_value2:
          description: "Custom value 2 for additional credit information"
          type: string
          example: "Custom data 2"
        custom_value3:
          description: "Custom value 3 for additional credit information"
          type: string
          example: "Custom data 3"
        custom_value4:
          description: "Custom value 4 for additional credit information"
          type: string
          example: "Custom data 4"
        tax_name1:
          description: "The name of the first tax applied to the credit"
          type: string
          example: "VAT"
        tax_name2:
          description: "The name of the second tax applied to the credit"
          type: string
          example: "GST"
        tax_rate1:
          description: "The rate of the first tax applied to the credit"
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: "The rate of the second tax applied to the credit"
          type: number
          format: float
          example: 5.00
        tax_name3:
          description: "The name of the third tax applied to the credit"
          type: string
          example: "PST"
        tax_rate3:
          description: "The rate of the third tax applied to the credit"
          type: number
          format: float
          example: 8.00
        total_taxes:
          description: "The total amount of taxes for the credit"
          type: number
          format: float
          example: 23.00
        line_items:
          type: array
          description: 'An array of objects which define the line items of the credit'
          items:
            $ref: '#/components/schemas/InvoiceItem'
        invitations:
          type: array
          description: 'An array of objects which define the invitations of the credit'
          items:
            $ref: '#/components/schemas/CreditInvitation'
        amount:
          description: "The total amount of the credit"
          type: number
          format: float
          example: 100.00
        balance:
          description: "The outstanding balance of the credit"
          type: number
          format: float
          example: 50.00
        paid_to_date:
          description: "The total amount paid to date for the credit"
          type: number
          format: float
          example: 50.00
        discount:
          description: "The discount applied to the credit"
          type: number
          format: float
          example: 10.00
        partial:
          description: "The partial amount applied to the credit"
          type: number
          format: float
          example: 20.00
        is_amount_discount:
          description: "Indicates whether the discount applied is a fixed amount or a percentage"
          type: boolean
          example: true
        is_deleted:
          description: "Indicates whether the credit has been deleted"
          type: boolean
          example: false
        uses_inclusive_taxes:
          description: "Indicates whether the tax rates applied to the credit are inclusive or exclusive"
          type: boolean
          example: true
        date:
          description: "The date the credit was issued"
          type: string
          format: date
          example: "1994-07-30"
        last_sent_date:
          description: "The date the credit was last sent out"
          type: string
          format: date
          example: "1994-07-30"
        next_send_date:
          description: "The next scheduled date for sending a credit reminder"
          type: string
          format: date
          example: "1994-07-30"
        partial_due_date:
          description: "The due date for the partial amount of the credit"
          type: string
          format: date
          example: "1994-07-30"
        due_date:
          description: "The due date for the total amount of the credit"
          type: string
          format: date
          example: "1994-07-30"
        settings:
          $ref: "#/components/schemas/CompanySettings"
        last_viewed:
          description: "The timestamp of the last time the credit was viewed"
          type: number
          format: integer
          example: 1434342123
        updated_at:
          description: "The timestamp of the last time the credit was updated"
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: "The timestamp of the last time the credit was archived"
          type: number
          format: integer
          example: 1434342123
        custom_surcharge1:
          description: "First custom surcharge amount"
          type: number
          format: float
          example: 10.00
        custom_surcharge2:
          description: 'Second Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge3:
          description: 'Third Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge4:
          description: 'Fourth Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge_tax1:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        location_id:
          description: 'The client location id that this invoice relates to'
          type: string
          example: Opnel5aKBz
        design_id:
          description: 'The unique identifier of the design template used for this credit'
          type: string
          example: Opnel5aKBz
        exchange_rate:
          description: 'The exchange rate used for currency conversion'
          type: number
          format: float
          example: 1.0
        project_id:
          description: 'The unique identifier of the project associated with this credit'
          type: string
          example: Opnel5aKBz
        subscription_id:
          description: 'The unique identifier of the subscription associated with this credit'
          type: string
          example: Opnel5aKBz
        vendor_id:
          description: 'The unique identifier of the vendor associated with this credit'
          type: string
          example: Opnel5aKBz
      type: object

    Subscription:
      properties:
        id:
          description: Unique identifier for the subscription
          type: string
          example: Opnel5aKBz
        user_id:
          description: Unique identifier for the user associated with the subscription
          type: string
          example: Ua6Rw4pVbS
        product_id:
          description: Unique identifier for the product associated with the subscription
          type: string
          example: Pr5Ft7yBmC
        recurring_invoice_id:
          description: Unique identifier for the recurring invoice associated with the subscription
          type: string
          example: Ri2Yt8zJkP
        is_recurring:
          description: Indicates whether the subscription is recurring
          type: boolean
          example: true
        frequency_id:
          description: 'integer const representation of the frequency'
          type: string
          example: '1'
        auto_bill:
          description: 'enum setting'
          type: string
          example: always
        promo_code:
          description: Promotional code applied to the subscription
          type: string
          example: PROMOCODE4U
        promo_discount:
          description: Discount percentage or amount applied to the subscription
          type: number
          example: 10
        is_amount_discount:
          description: Indicates whether the discount is a fixed amount
          type: boolean
          example: true
        allow_cancellation:
          description: Indicates whether the subscription can be cancelled
          type: boolean
          example: true
        per_seat_enabled:
          description: Indicates whether the subscription pricing is per seat
          type: boolean
          example: true
        currency_id:
          description: Unique identifier for the currency used in the subscription
          type: integer
          example: 1
        max_seats_limit:
          description: Maximum number of seats allowed for the subscription
          type: integer
          example: 100
        trial_enabled:
          description: Indicates whether the subscription has a trial period
          type: boolean
          example: true
        trial_duration:
          description: Duration of the trial period in days
          type: integer
          example: 14
        allow_query_overrides:
          description: Indicates whether query overrides are allowed for the subscription
          type: boolean
          example: true
        allow_plan_changes:
          description: Indicates whether plan changes are allowed for the subscription
          type: boolean
          example: true
        refund_period:
          description: Number of days within which refunds can be requested
          type: integer
          example: 30
        webhook_configuration:
          description: Webhook configuration for the subscription
          type: string
          example: 'expand reference for this'
        is_deleted:
          description: Indicates whether the subscription has been deleted
          type: boolean
          example: false
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
      type: object
    BulkAction:
      type: array
      items:
        type: integer
        example: 0
    Project:
      type: object
      properties:
        id:
          description: 'The project hashed id'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
        assigned_user_id:
          description: The assigned user identifier associated with the project
          type: string
          example: Opnel5aKBz
        client_id:
          type: string
          example: Opnel5aKBz
          description: The client identifier associated with the project
        name:
          type: string
          description: The name of the project
          example: 'New Project'
        task_rate:
          type: number
          format: float
          example: 10
          description: The default rate per task for the project
        due_date:
          type: string
          format: date
          example: '2019-01-01'
          description: The due date for the project
        private_notes:
          type: string
          description: Private notes associated with the project
        budgeted_hours:
          type: number
          format: float
          description: The number of budgeted hours for the project
        custom_value1:
          type: string
          description: Custom value field 1
        custom_value2:
          type: string
          description: Custom value field 2
        custom_value3:
          type: string
          description: Custom value field 3
        custom_value4:
          type: string
          description: Custom value field 4
        created_at:
          type: number
          format: integer
          example: 134341234234
          description: The timestamp of the project creation
        updated_at:
          type: number
          format: integer
          example: 134341234234
          description: The timestamp of the last project update
        archived_at:
          type: number
          format: integer
          example: 134341234234
          description: The timestamp of the project deletion
        public_notes:
          type: string
          description: Public notes associated with the project
        is_deleted:
          type: boolean
          description: A flag indicating if the project is deleted
        number:
          type: string
          description: The project number
        color:
          type: string
          description: The color associated with the project
      required:
        - id
        - user_id
        - name
        - task_rate
        - budgeted_hours
        - is_deleted
        - color

    CompanySettings:
      type: object
      required:
        - currency_id
      properties:
        currency_id:
          description: "The default currency id"
          type: string
          example: "1"
        timezone_id:
          description: "The timezone id"
          type: string
          example: "15"
        date_format_id:
          description: "The date format id"
          type: string
          example: "15"
        military_time:
          description: "Toggles 12/24 hour time"
          type: boolean
          example: true
        language_id:
          description: "The language id"
          type: string
          example: "1"
        show_currency_code:
          description: "Toggles whether the currency symbol or code is shown"
          type: boolean
          example: true
        payment_terms:
          description: "-1 sets no payment term, 0 sets payment due immediately, positive integers indicates payment terms in days"
          type: integer
          example: 1
        company_gateway_ids:
          description: "A commad separate list of available gateways"
          type: string
          example: "1,2,3,4"
        custom_value1:
          description: "A Custom Label"
          type: string
          example: "Custom Label"
        custom_value2:
          description: "A Custom Label"
          type: string
          example: "Custom Label"
        custom_value3:
          description: "A Custom Label"
          type: string
          example: "Custom Label"
        custom_value4:
          description: "A Custom Label"
          type: string
          example: "Custom Label"
        default_task_rate:
          description: "The default task rate"
          type: number
          format: float
          example: 10.00
        send_reminders:
          description: "Toggles whether reminders are sent"
          type: boolean
          example: true
        enable_client_portal_tasks:
          description: "Show/hide the tasks panel in the client portal"
          type: boolean
          example: true
        email_style:
          description: "options include plain,light,dark,custom"
          type: string
          enum: [plain, light, dark, custom]
          example: "light"
        reply_to_email:
          description: "The reply to email address"
          type: string
          format: email
          example: "email@gmail.com"
        bcc_email:
          description: "A comma separate list of BCC emails"
          type: string
          example: "email@gmail.com, contact@gmail.com"
        pdf_email_attachment:
          description: "Toggles whether to attach PDF as attachment"
          type: boolean
          example: true
        ubl_email_attachment:
          description: "Toggles whether to attach UBL as attachment"
          type: boolean
          example: true
        email_style_custom:
          description: "The custom template"
          type: string
          example: "<HTML></HTML>"
        counter_number_applied:
          description: "enum when the invoice number counter is set"
          type: string
          enum: [when_saved, when_sent, when_paid]
          example: "when_sent"
        quote_number_applied:
          description: "enum when the quote number counter is set"
          type: string
          enum: [when_saved, when_sent]
          example: "when_sent"
        custom_message_dashboard:
          description: "A custom message which is displayed on the dashboard"
          type: string
          example: "Please pay invoices immediately"
        custom_message_unpaid_invoice:
          description: "A custom message which is displayed in the client portal when a client is viewing a unpaid invoice."
          type: string
          example: "Please pay invoices immediately"
        custom_message_paid_invoice:
          description: "A custom message which is displayed in the client portal when a client is viewing a paid invoice."
          type: string
          example: "Thanks for paying this invoice!"
        custom_message_unapproved_quote:
          description: "A custom message which is displayed in the client portal when a client is viewing a unapproved quote."
          type: string
          example: "Please approve quote"
        lock_invoices:
          description: "Toggles whether invoices are locked once sent and cannot be modified further"
          type: string
          enum: [off, when_sent, when_paid, end_of_month]
          example: "off"
        auto_archive_invoice:
          description: "Toggles whether a invoice is archived immediately following payment"
          type: boolean
          example: true
        auto_archive_quote:
          description: "Toggles whether a quote is archived after being converted to a invoice"
          type: boolean
          example: true
        auto_convert_quote:
          description: "Toggles whether a quote is converted to a invoice when approved"
          type: boolean
          example: true
        inclusive_taxes:
          description: "Boolean flag determining whether inclusive or exclusive taxes are used"
          type: boolean
          example: true
        translations:
          description: "JSON payload of customized translations"
          type: object
          example: {}
        task_number_pattern:
          description: "Allows customisation of the task number pattern"
          type: string
          example: "{$year}-{$counter}"
        task_number_counter:
          description: "The incrementing counter for tasks"
          type: integer
          example: 1
        reminder_send_time:
          description: "Time from UTC +0 when the email will be sent to the client"
          type: integer
          example: 32400
        expense_number_pattern:
          description: "Allows customisation of the expense number pattern"
          type: string
          example: "{$year}-{$counter}"
        expense_number_counter:
          description: "The incrementing counter for expenses"
          type: integer
          example: 1
        vendor_number_pattern:
          description: "Allows customisation of the vendor number pattern"
          type: string
          example: "{$year}-{$counter}"
        vendor_number_counter:
          description: "The incrementing counter for vendors"
          type: integer
          example: 1
        ticket_number_pattern:
          description: "Allows customisation of the ticket number pattern"
          type: string
          example: "{$year}-{$counter}"
        ticket_number_counter:
          description: "The incrementing counter for tickets"
          type: integer
          example: 1
        payment_number_pattern:
          description: "Allows customisation of the payment number pattern"
          type: string
          example: "{$year}-{$counter}"
        payment_number_counter:
          description: "The incrementing counter for payments"
          type: integer
          example: 1
        invoice_number_pattern:
          description: "Allows customisation of the invoice number pattern"
          type: string
          example: "{$year}-{$counter}"
        invoice_number_counter:
          description: "The incrementing counter for invoices"
          type: integer
          example: 1
        quote_number_pattern:
          description: "Allows customisation of the quote number pattern"
          type: string
          example: "{$year}-{$counter}"
        quote_number_counter:
          description: "The incrementing counter for quotes"
          type: integer
          example: 1
        client_number_pattern:
          description: "Allows customisation of the client number pattern"
          type: string
          example: "{$year}-{$counter}"
        client_number_counter:
          description: "The incrementing counter for clients"
          type: integer
          example: 1
        credit_number_pattern:
          description: "Allows customisation of the credit number pattern"
          type: string
          example: "{$year}-{$counter}"
        credit_number_counter:
          description: "The incrementing counter for credits"
          type: integer
          example: 1
        recurring_invoice_number_prefix:
          description: "This string is prepended to the recurring invoice number"
          type: string
          example: "R"
        reset_counter_frequency_id:
          description: "CONSTANT which is used to apply the frequency which the counters are reset"
          type: integer
          example: 1
        reset_counter_date:
          description: "The explicit date which is used to reset counters"
          type: string
          format: date
          example: "2019-01-01"
        counter_padding:
          description: "Pads the counter with leading zeros"
          type: integer
          example: 1
        shared_invoice_quote_counter:
          description: "Flags whether to share the counter for invoices and quotes"
          type: boolean
          example: true
        update_products:
          description: "Determines if client fields are updated from third party APIs"
          type: boolean
          example: true
        convert_products:
          description: ""
          type: boolean
          example: true
        fill_products:
          description: "Automatically fill products based on product_key"
          type: boolean
          example: true
        invoice_terms:
          description: "The default invoice terms"
          type: string
          example: "Invoice Terms are..."
        quote_terms:
          description: "The default quote terms"
          type: string
          example: "Quote Terms are..."
        invoice_taxes:
          description: "The number of Taxes that can be applied to the invoice"
          type: integer
          example: 1
        invoice_design_id:
          description: "The default design id (invoice, quote etc)"
          type: string
          example: "1"
        quote_design_id:
          description: "The default design id (invoice, quote etc)"
          type: string
          example: "1"
        invoice_footer:
          description: "The default invoice footer"
          type: string
          example: "1"
        invoice_labels:
          description: "JSON string of invoice labels"
          type: string
          example: "1"
        tax_rate1:
          description: "The tax rate (float)"
          type: number
          format: float
          example: 10
        tax_name1:
          description: "The tax name"
          type: string
          example: "GST"
        tax_rate2:
          description: "The tax rate (float)"
          type: number
          format: float
          example: 10
        tax_name2:
          description: "The tax name"
          type: string
          example: "GST"
        tax_rate3:
          description: "The tax rate (float)"
          type: number
          format: float
          example: 10
        tax_name3:
          description: "The tax name"
          type: string
          example: "GST"
        payment_type_id:
          description: "The default payment type id"
          type: string
          example: "1"
        custom_fields:
          description: "JSON string of custom fields"
          type: string
          example: "{}"
        email_footer:
          description: "The default email footer"
          type: string
          example: "A default email footer"
        email_sending_method:
          description: "The email driver to use to send email"
          type: string
          enum: [default, gmail, office365, client_postmark, client_mailgun, mailgun, client_brevo]
          example: "default"
        gmail_sending_user_id:
          description: "The hashed_id of the user account to send email from"
          type: string
          example: "F76sd34D"
        email_subject_invoice:
          description: ""
          type: string
          example: "Your Invoice Subject"
        email_subject_quote:
          description: ""
          type: string
          example: "Your Quote Subject"
        email_subject_payment:
          description: ""
          type: string
          example: "Your Payment Subject"
        email_template_invoice:
          description: "The full template for invoice emails"
          type: string
          example: "<HTML></HTML>"
        email_template_quote:
          description: "The full template for quote emails"
          type: string
          example: "<HTML></HTML>"
        email_template_payment:
          description: "The full template for payment emails"
          type: string
          example: "<HTML></HTML>"
        email_subject_reminder1:
          description: "Email subject for Reminder"
          type: string
          example: "<HTML></HTML>"
        email_subject_reminder2:
          description: "Email subject for Reminder"
          type: string
          example: "<HTML></HTML>"
        email_subject_reminder3:
          description: "Email subject for Reminder"
          type: string
          example: "<HTML></HTML>"
        email_subject_reminder_endless:
          description: "Email subject for endless reminders"
          type: string
          example: "<HTML></HTML>"
        email_template_reminder1:
          description: "The full template for Reminder 1"
          type: string
          example: "<HTML></HTML>"
        email_template_reminder2:
          description: "The full template for Reminder 2"
          type: string
          example: "<HTML></HTML>"
        email_template_reminder3:
          description: "The full template for Reminder 3"
          type: string
          example: "<HTML></HTML>"
        email_template_reminder_endless:
          description: "The full template for enless reminders"
          type: string
          example: "<HTML></HTML>"
        enable_portal_password:
          description: "Toggles whether a password is required to log into the client portal"
          type: boolean
          example: true
        show_accept_invoice_terms:
          description: "Toggles whether the terms dialogue is shown to the client"
          type: boolean
          example: true
        show_accept_quote_terms:
          description: "Toggles whether the terms dialogue is shown to the client"
          type: boolean
          example: true
        require_invoice_signature:
          description: "Toggles whether a invoice signature is required"
          type: boolean
          example: true
        require_quote_signature:
          description: "Toggles whether a quote signature is required"
          type: boolean
          example: true
        name:
          description: "The company name"
          type: string
          example: "Acme Co"
        company_logo:
          description: "The company logo file"
          type: string
          example: "logo.png"
        website:
          description: "The company website URL"
          type: string
          format: uri
          example: "https://www.acme.com"
        address1:
          description: "The company address line 1"
          type: string
          example: "Suite 888"
        address2:
          description: "The company address line 2"
          type: string
          example: "5 Jimbo Way"
        city:
          description: "The company city"
          type: string
          example: "Sydney"
        state:
          description: "The company state"
          type: string
          example: "Florida"
        postal_code:
          description: "The company zip/postal code"
          type: string
          example: "90210"
        phone:
          description: "The company phone"
          type: string
          example: "555-213-3948"
        email:
          description: "The company email"
          type: string
          format: email
          example: "joe@acme.co"
        country_id:
          description: "The country ID"
          type: string
          example: "1"
        vat_number:
          description: "The company VAT/TAX ID number"
          type: string
          example: "32 120 377 720"
        page_size:
          description: "The default page size"
          type: string
          example: "A4"
        font_size:
          description: "The font size"
          type: number
          example: 9
        primary_font:
          description: "The primary font"
          type: string
          example: "roboto"
        secondary_font:
          description: "The secondary font"
          type: string
          example: "roboto"
        hide_paid_to_date:
          description: "Flags whether to hide the paid to date field"
          type: boolean
          example: false
        embed_documents:
          description: "Toggled whether to embed documents in the PDF"
          type: boolean
          example: false
        all_pages_header:
          description: "The header for the PDF"
          type: boolean
          example: false
        all_pages_footer:
          description: "The footer for the PDF"
          type: boolean
          example: false
        document_email_attachment:
          description: "Toggles whether to attach documents in the email"
          type: boolean
          example: false
        enable_client_portal_password:
          description: "Toggles password protection of the client portal"
          type: boolean
          example: false
        enable_email_markup:
          description: "Toggles the use of markdown in emails"
          type: boolean
          example: false
        enable_client_portal_dashboard:
          description: "Toggles whether the client dashboard is shown in the client portal"
          type: boolean
          example: false
        enable_client_portal:
          description: "Toggles whether the entire client portal is displayed to the client, or only the context"
          type: boolean
          example: false
        email_template_statement:
          description: "The body of the email for statements"
          type: string
          example: "template matter"
        email_subject_statement:
          description: "The subject of the email for statements"
          type: string
          example: "subject matter"
        signature_on_pdf:
          description: "Toggles whether the signature (if available) is displayed on the PDF"
          type: boolean
          example: false
        quote_footer:
          description: "The default quote footer"
          type: string
          example: "the quote footer"
        email_subject_custom1:
          description: "Custom reminder template subject"
          type: string
          example: "Custom Subject 1"
        email_subject_custom2:
          description: "Custom reminder template subject"
          type: string
          example: "Custom Subject 2"
        email_subject_custom3:
          description: "Custom reminder template subject"
          type: string
          example: "Custom Subject 3"
        email_template_custom1:
          description: "Custom reminder template body"
          type: string
          example: "<HTML></HTML>"
        email_template_custom2:
          description: "Custom reminder template body"
          type: string
          example: "<HTML></HTML>"
        email_template_custom3:
          description: "Custom reminder template body"
          type: string
          example: "<HTML></HTML>"
        enable_reminder1:
          description: "Toggles whether this reminder is enabled"
          type: boolean
          example: false
        enable_reminder2:
          description: "Toggles whether this reminder is enabled"
          type: boolean
          example: false
        enable_reminder3:
          description: "Toggles whether this reminder is enabled"
          type: boolean
          example: false
        num_days_reminder1:
          description: "The Reminder interval"
          type: integer
          example: 9
        num_days_reminder2:
          description: "The Reminder interval"
          type: integer
          example: 9
        num_days_reminder3:
          description: "The Reminder interval"
          type: integer
          example: 9
        schedule_reminder1:
          description: "(enum: after_invoice_date, before_due_date, after_due_date)"
          type: string
          enum: [after_invoice_date, before_due_date, after_due_date]
          example: "after_invoice_date"
        schedule_reminder2:
          description: "(enum: after_invoice_date, before_due_date, after_due_date)"
          type: string
          enum: [after_invoice_date, before_due_date, after_due_date]
          example: "after_invoice_date"
        schedule_reminder3:
          description: "(enum: after_invoice_date, before_due_date, after_due_date)"
          type: string
          enum: [after_invoice_date, before_due_date, after_due_date]
          example: "after_invoice_date"
        late_fee_amount1:
          description: "The late fee amount for reminder 1"
          type: number
          format: float
          example: 10
        late_fee_amount2:
          description: "The late fee amount for reminder 2"
          type: number
          format: float
          example: 20
        late_fee_amount3:
          description: "The late fee amount for reminder 2"
          type: number
          format: float
          example: 100
        endless_reminder_frequency_id:
          description: "The frequency id of the endless reminder"
          type: string
          example: "1"
        client_online_payment_notification:
          description: "Determines if a client should receive the notification for a online payment"
          type: boolean
          example: false
        client_manual_payment_notification:
          description: "Determines if a client should receive the notification for a manually entered payment"
          type: boolean
          example: false
        enable_e_invoice:
          description: "Determines if e-invoicing is enabled"
          type: boolean
          example: false
        default_expense_payment_type_id:
          description: "The default payment type for expenses"
          type: string
          example: "0"
        e_invoice_type:
          description: "The e-invoice type"
          type: string
          example: "EN16931"
        mailgun_endpoint:
          description: "The mailgun endpoint - used to determine whether US or EU endpoints are used"
          type: string
          enum: ["api.mailgun.net", "api.eu.mailgun.net"]
          example: "api.mailgun.net"
        client_initiated_payments:
          description: "Determines if clients can initiate payments directly from the client portal"
          type: boolean
          example: false
        client_initiated_payments_minimum:
          description: "The minimum amount a client can pay"
          type: number
          format: float
          example: 10
        sync_invoice_quote_columns:
          description: "Determines if invoice and quote columns are synced for the PDF rendering, or if they use their own columns"
          type: boolean
          example: false
        show_task_item_description:
          description: "Determines if the task item description is shown on the invoice"
          type: boolean
          example: false
        allow_billable_task_items:
          description: "Determines if task items can be marked as billable"
          type: boolean
          example: false
        accept_client_input_quote_approval:
          description: "Determines if clients can approve quotes and also pass through a PO Number reference"
          type: boolean
          example: false
        custom_sending_email:
          description: "When using Mailgun or Postmark, the FROM email address can be customized using this setting."
          type: string
          format: email
          example: "bob@gmail.com"
        show_paid_stamp:
          description: "Determines if the PAID stamp is shown on the invoice"
          type: boolean
          example: false
        show_shipping_address:
          description: "Determines if the shipping address is shown on the invoice"
          type: boolean
          example: false
        company_logo_size:
          description: "The size of the company logo on the PDF - percentage value between 0 and 100"
          type: integer
          minimum: 0
          maximum: 100
          example: 100
        show_email_footer:
          description: "Determines if the email footer is shown on emails"
          type: boolean
          example: false
        email_alignment:
          description: "The alignment of the email body text, options include left / center / right"
          type: string
          enum: [left, center, right]
          example: "left"
        auto_bill_standard_invoices:
          description: "Determines if standard invoices are automatically billed when they are created or due"
          type: boolean
          example: false
        postmark_secret:
          description: "The Postmark secret API key"
          type: string
          example: "123456"
        mailgun_secret:
          description: "The Mailgun secret API key"
          type: string
          example: "123456"
        mailgun_domain:
          description: "The Mailgun domain"
          type: string
          example: "sandbox123456.mailgun.org"
        send_email_on_mark_paid:
          description: "Determines if an email is sent when an invoice is marked as paid"
          type: boolean
          example: false
        vendor_portal_enable_uploads:
          description: "Determines if vendors can upload files to the portal"
          type: boolean
          example: false
        besr_id:
          description: "The BESR ID"
          type: string
          example: "123456"
        qr_iban:
          description: "The IBAN for the QR code"
          type: string
          example: "CH123456"
        email_subject_purchase_order:
          description: "The email subject for purchase orders"
          type: string
          example: "Purchase Order"
        email_template_purchase_order:
          description: "The email template for purchase orders"
          type: string
          example: "Please see attached your purchase order."
        require_purchase_order_signature:
          description: "Determines if a signature is required on purchase orders"
          type: boolean
          example: false
        purchase_order_public_notes:
          description: "The public notes for purchase orders"
          type: string
          example: "Please see attached your purchase order."
        purchase_order_terms:
          description: "The terms for purchase orders"
          type: string
          example: "Please see attached your purchase order."
        purchase_order_footer:
          description: "The footer for purchase orders"
          type: string
          example: "Please see attached your purchase order."
        purchase_order_design_id:
          description: "The design id for purchase orders"
          type: string
          example: "hd677df"
        purchase_order_number_pattern:
          description: "The pattern for purchase order numbers"
          type: string
          example: "PO-000000"
        purchase_order_number_counter:
          description: "The counter for purchase order numbers"
          type: integer
          example: 1
        page_numbering_alignment:
          description: "The alignment for page numbering: options include left / center / right"
          type: string
          enum: [left, center, right]
          example: "left"
        page_numbering:
          description: "Determines if page numbering is enabled on Document PDFs"
          type: boolean
          example: false
        auto_archive_invoice_cancelled:
          description: "Determines if invoices are automatically archived when they are cancelled"
          type: boolean
          example: false
        email_from_name:
          description: "The FROM name for emails when using Custom emailers"
          type: string
          example: "Bob Smith"
        show_all_tasks_client_portal:
          description: "Determines if all tasks are shown on the client portal"
          type: string
          enum: [all, uninvoiced, invoiced]
          example: "all"
        entity_send_time:
          description: "The time that emails are sent. The time is localized to the clients locale, integer values from 1 - 24"
          type: integer
          minimum: 1
          maximum: 24
          example: 9
        shared_invoice_credit_counter:
          description: "Determines if the invoice and credit counter are shared"
          type: boolean
          example: false
        reply_to_name:
          description: "The reply to name for emails"
          type: string
          example: "Bob Smith"
        hide_empty_columns_on_pdf:
          description: "Determines if empty columns are hidden on PDFs"
          type: boolean
          example: false
        enable_reminder_endless:
          description: "Determines if endless reminders are enabled"
          type: boolean
          example: false
        use_credits_payment:
          description: "Determines if credits can be used as a payment method"
          type: boolean
          example: false
        recurring_invoice_number_pattern:
          description: "The pattern for recurring invoice numbers"
          type: string
          example: "R-000000"
        recurring_invoice_number_counter:
          description: "The counter for recurring invoice numbers"
          type: integer
          example: 1
        client_portal_under_payment_minimum:
          description: "The minimum payment payment"
          type: number
          format: float
          example: 10
        auto_bill_date:
          description: "Determines when the invoices are auto billed"
          type: string
          enum: [on_send_date, on_due_date]
          example: "on_send_date"
        primary_color:
          description: "The primary color for the client portal / document highlights"
          type: string
          pattern: "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"
          example: "#ffffff"
        secondary_color:
          description: "The secondary color for the client portal / document highlights"
          type: string
          pattern: "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"
          example: "#ffffff"
        client_portal_allow_under_payment:
          description: "Determines if clients can pay invoices under the invoice amount due"
          type: boolean
          example: false
        client_portal_allow_over_payment:
          description: "Determines if clients can pay invoices over the invoice amount"
          type: boolean
          example: false
        auto_bill:
          description: "Determines how autobilling is applied for recurring invoices"
          type: string
          enum: [off, always, optin, optout]
          example: "off"
        client_portal_terms:
          description: "The terms which are displayed on the client portal"
          type: string
          example: "Please see attached your invoice."
        client_portal_privacy_policy:
          description: "The privacy policy which is displayed on the client portal"
          type: string
          example: "These are the terms of use for using the client portal."
        client_can_register:
          description: "Determines if clients can register on the client portal"
          type: boolean
          example: false
        portal_design_id:
          description: "The design id for the client portal"
          type: string
          example: "hd677df"
        late_fee_endless_percent:
          description: "The late fee percentage for endless late fees"
          type: number
          format: float
          example: 10
        late_fee_endless_amount:
          description: "The late fee amount for endless late fees"
          type: number
          format: float
          example: 10
        auto_email_invoice:
          description: "Determines if invoices are automatically emailed when they are created"
          type: boolean
          example: false
        email_signature:
          description: "The email signature for emails"
          type: string
          example: "Bob Smith"
        classification:
          description: "The classification for the company"
          type: string
          example: "individual"
        valid_until:
          description: "Default validity period for quotes"
          type: string
          example: "30 days"
        credit_terms:
          description: "Default terms for credit notes"
          type: string
          example: "Credit note terms"
        credit_footer:
          description: "Default footer for credit notes"
          type: string
          example: "Credit note footer"
    Design:
      properties:
        id:
          description: 'The design hashed id'
          type: string
          example: AS3df3A
        name:
          description: 'The design name'
          type: string
          example: Beauty
        design:
          description: 'The design HTML'
          type: string
          example: '<html></html>'
        is_custom:
          description: 'Flag to determine if the design is a custom user design'
          type: boolean
          example: true
        is_active:
          description: 'Flag to determine if the design is available for use'
          type: boolean
          example: true
        is_deleted:
          description: 'Flag to determine if the design is deleted'
          type: boolean
          example: true
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
        deleted_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
      type: object
    ClientSettings:
      required:
        - currency_id
      properties:
        currency_id:
          description: 'The default currency id'
          type: string
          example: "1"
        timezone_id:
          description: 'The timezone id'
          type: string
          example: '15'
        date_format_id:
          description: 'The date format id'
          type: string
          example: '15'
        military_time:
          description: 'Toggles 12/24 hour time'
          type: boolean
          example: true
        language_id:
          description: 'The language id'
          type: string
          example: '1'
        show_currency_code:
          description: 'Toggles whether the currency symbol or code is shown'
          type: boolean
          example: true
        payment_terms:
          description: '-1 sets no payment term, 0 sets payment due immediately, positive integers indicates payment terms in days'
          type: integer
          example: 1
        company_gateway_ids:
          description: 'A commad separate list of available gateways'
          type: string
          example: '1,2,3,4'
        custom_value1:
          description: 'A Custom Label'
          type: string
          example: 'Custom Label'
        custom_value2:
          description: 'A Custom Label'
          type: string
          example: 'Custom Label'
        custom_value3:
          description: 'A Custom Label'
          type: string
          example: 'Custom Label'
        custom_value4:
          description: 'A Custom Label'
          type: string
          example: 'Custom Label'
        default_task_rate:
          description: 'The default task rate'
          type: number
          format: float
          example: 10.00
        send_reminders:
          description: 'Toggles whether reminders are sent'
          type: boolean
          example: true
        enable_client_portal_tasks:
          description: 'Show/hide the tasks panel in the client portal'
          type: boolean
          example: true
        email_style:
          description: 'options include plain,light,dark,custom'
          type: string
          example: light
        reply_to_email:
          description: 'The reply to email address'
          type: string
          example: email@gmail.com
        bcc_email:
          description: 'A comma separate list of BCC emails'
          type: string
          example: 'email@gmail.com, contact@gmail.com'
        pdf_email_attachment:
          description: 'Toggles whether to attach PDF as attachment'
          type: boolean
          example: true
        ubl_email_attachment:
          description: 'Toggles whether to attach UBL as attachment'
          type: boolean
          example: true
        email_style_custom:
          description: 'The custom template'
          type: string
          example: '<HTML></HTML>'
        counter_number_applied:
          description: 'enum when the invoice number counter is set, ie when_saved, when_sent, when_paid'
          type: string
          example: when_sent
        quote_number_applied:
          description: 'enum when the quote number counter is set, ie when_saved, when_sent'
          type: string
          example: when_sent
        custom_message_dashboard:
          description: 'A custom message which is displayed on the dashboard'
          type: string
          example: 'Please pay invoices immediately'
        custom_message_unpaid_invoice:
          description: 'A custom message which is displayed in the client portal when a client is viewing a unpaid invoice.'
          type: string
          example: 'Please pay invoices immediately'
        custom_message_paid_invoice:
          description: 'A custom message which is displayed in the client portal when a client is viewing a paid invoice.'
          type: string
          example: 'Thanks for paying this invoice!'
        custom_message_unapproved_quote:
          description: 'A custom message which is displayed in the client portal when a client is viewing a unapproved quote.'
          type: string
          example: 'Please approve quote'
        lock_invoices:
          description: 'Toggles whether invoices are locked once sent and cannot be modified further'
          type: boolean
          example: true
        auto_archive_invoice:
          description: 'Toggles whether a invoice is archived immediately following payment'
          type: boolean
          example: true
        auto_archive_quote:
          description: 'Toggles whether a quote is archived after being converted to a invoice'
          type: boolean
          example: true
        auto_convert_quote:
          description: 'Toggles whether a quote is converted to a invoice when approved'
          type: boolean
          example: true
        inclusive_taxes:
          description: 'Boolean flag determining whether inclusive or exclusive taxes are used'
          type: boolean
          example: true
        task_number_pattern:
          description: 'Allows customisation of the task number pattern'
          type: string
          example: '{$year}-{$counter}'
        task_number_counter:
          description: 'The incrementing counter for tasks'
          type: integer
          example: 1
        reminder_send_time:
          description: 'Time from UTC +0 when the email will be sent to the client'
          type: integer
          example: 32400
        expense_number_pattern:
          description: 'Allows customisation of the expense number pattern'
          type: string
          example: '{$year}-{$counter}'
        expense_number_counter:
          description: 'The incrementing counter for expenses'
          type: integer
          example: 1
        vendor_number_pattern:
          description: 'Allows customisation of the vendor number pattern'
          type: string
          example: '{$year}-{$counter}'
        vendor_number_counter:
          description: 'The incrementing counter for vendors'
          type: integer
          example: 1
        ticket_number_pattern:
          description: 'Allows customisation of the ticket number pattern'
          type: string
          example: '{$year}-{$counter}'
        ticket_number_counter:
          description: 'The incrementing counter for tickets'
          type: integer
          example: 1
        payment_number_pattern:
          description: 'Allows customisation of the payment number pattern'
          type: string
          example: '{$year}-{$counter}'
        payment_number_counter:
          description: 'The incrementing counter for payments'
          type: integer
          example: 1
        invoice_number_pattern:
          description: 'Allows customisation of the invoice number pattern'
          type: string
          example: '{$year}-{$counter}'
        invoice_number_counter:
          description: 'The incrementing counter for invoices'
          type: integer
          example: 1
        quote_number_pattern:
          description: 'Allows customisation of the quote number pattern'
          type: string
          example: '{$year}-{$counter}'
        quote_number_counter:
          description: 'The incrementing counter for quotes'
          type: integer
          example: 1
        client_number_pattern:
          description: 'Allows customisation of the client number pattern'
          type: string
          example: '{$year}-{$counter}'
        client_number_counter:
          description: 'The incrementing counter for clients'
          type: integer
          example: 1
        credit_number_pattern:
          description: 'Allows customisation of the credit number pattern'
          type: string
          example: '{$year}-{$counter}'
        credit_number_counter:
          description: 'The incrementing counter for credits'
          type: integer
          example: 1
        recurring_invoice_number_prefix:
          description: 'This string is prepended to the recurring invoice number'
          type: string
          example: R
        reset_counter_frequency_id:
          description: 'CONSTANT which is used to apply the frequency which the counters are reset'
          type: integer
          example: 1
        reset_counter_date:
          description: 'The explicit date which is used to reset counters'
          type: string
          example: '2019-01-01'
        counter_padding:
          description: 'Pads the counter with leading zeros'
          type: integer
          example: 1
        shared_invoice_quote_counter:
          description: 'Flags whether to share the counter for invoices and quotes'
          type: boolean
          example: true
        update_products:
          description: 'Determines if client fields are updated from third party APIs'
          type: boolean
          example: true
        convert_products:
          description: ''
          type: boolean
          example: true
        fill_products:
          description: 'Automatically fill products based on product_key'
          type: boolean
          example: true
        invoice_terms:
          description: 'The default invoice terms'
          type: string
          example: 'Invoice Terms are...'
        quote_terms:
          description: 'The default quote terms'
          type: string
          example: 'Quote Terms are...'
        invoice_taxes:
          description: 'Taxes can be applied to the invoice'
          type: number
          example: 1
        invoice_design_id:
          description: 'The default design id (invoice, quote etc)'
          type: string
          example: '1'
        quote_design_id:
          description: 'The default design id (invoice, quote etc)'
          type: string
          example: '1'
        invoice_footer:
          description: 'The default invoice footer'
          type: string
          example: '1'
        invoice_labels:
          description: 'JSON string of invoice labels'
          type: string
          example: '1'
        tax_rate1:
          description: 'The tax rate (float)'
          type: number
          example: 10
        tax_name1:
          description: 'The tax name'
          type: string
          example: GST
        tax_rate2:
          description: 'The tax rate (float)'
          type: number
          example: 10
        tax_name2:
          description: 'The tax name'
          type: string
          example: GST
        tax_rate3:
          description: 'The tax rate (float)'
          type: number
          example: 10
        tax_name3:
          description: 'The tax name'
          type: string
          example: GST
        payment_type_id:
          description: 'The default payment type id'
          type: string
          example: '1'
        custom_fields:
          description: 'JSON string of custom fields'
          type: string
          example: '{}'
        email_footer:
          description: 'The default email footer'
          type: string
          example: 'A default email footer'
        email_sending_method:
          description: 'The email driver to use to send email, options include default, gmail'
          type: string
          example: default
        gmail_sending_user_id:
          description: 'The hashed_id of the user account to send email from'
          type: string
          example: F76sd34D
        email_subject_invoice:
          description: ''
          type: string
          example: 'Your Invoice Subject'
        email_subject_quote:
          description: ''
          type: string
          example: 'Your Quote Subject'
        email_subject_payment:
          description: ''
          type: string
          example: 'Your Payment Subject'
        email_template_invoice:
          description: 'The full template for invoice emails'
          type: string
          example: '<HTML></HTML>'
        email_template_quote:
          description: 'The full template for quote emails'
          type: string
          example: '<HTML></HTML>'
        email_template_payment:
          description: 'The full template for payment emails'
          type: string
          example: '<HTML></HTML>'
        email_subject_reminder1:
          description: 'Email subject for Reminder'
          type: string
          example: '<HTML></HTML>'
        email_subject_reminder2:
          description: 'Email subject for Reminder'
          type: string
          example: '<HTML></HTML>'
        email_subject_reminder3:
          description: 'Email subject for Reminder'
          type: string
          example: '<HTML></HTML>'
        email_subject_reminder_endless:
          description: 'Email subject for endless reminders'
          type: string
          example: '<HTML></HTML>'
        email_template_reminder1:
          description: 'The full template for Reminder 1'
          type: string
          example: '<HTML></HTML>'
        email_template_reminder2:
          description: 'The full template for Reminder 2'
          type: string
          example: '<HTML></HTML>'
        email_template_reminder3:
          description: 'The full template for Reminder 3'
          type: string
          example: '<HTML></HTML>'
        email_template_reminder_endless:
          description: 'The full template for enless reminders'
          type: string
          example: '<HTML></HTML>'
        enable_portal_password:
          description: 'Toggles whether a password is required to log into the client portal'
          type: boolean
          example: true
        show_accept_invoice_terms:
          description: 'Toggles whether the terms dialogue is shown to the client'
          type: boolean
          example: true
        show_accept_quote_terms:
          description: 'Toggles whether the terms dialogue is shown to the client'
          type: boolean
          example: true
        require_invoice_signature:
          description: 'Toggles whether a invoice signature is required'
          type: boolean
          example: true
        require_quote_signature:
          description: 'Toggles whether a quote signature is required'
          type: boolean
          example: true
        name:
          description: 'The company name'
          type: string
          example: 'Acme Co'
        company_logo:
          description: 'The company logo file'
          type: object
          example: {}
        website:
          description: 'The company website URL'
          type: string
          example: "https://www.acme.com"
        address1:
          description: 'The company address line 1'
          type: string
          example: 'Suite 888'
        address2:
          description: 'The company address line 2'
          type: string
          example: '5 Jimbo Way'
        city:
          description: 'The company city'
          type: string
          example: Sydney
        state:
          description: 'The company state'
          type: string
          example: Florisa
        postal_code:
          description: 'The company zip/postal code'
          type: string
          example: '90210'
        phone:
          description: 'The company phone'
          type: string
          example: 555-213-3948
        email:
          description: 'The company email'
          type: string
          example: joe@acme.co
        country_id:
          description: 'The country ID'
          type: string
          example: '1'
        vat_number:
          description: 'The company VAT/TAX ID number'
          type: string
          example: '32 120 377 720'
        page_size:
          description: 'The default page size'
          type: string
          example: A4
        font_size:
          description: 'The font size'
          type: number
          example: 9
        primary_font:
          description: 'The primary font'
          type: string
          example: roboto
        secondary_font:
          description: 'The secondary font'
          type: string
          example: roboto
        hide_paid_to_date:
          description: 'Flags whether to hide the paid to date field'
          type: boolean
          example: false
        embed_documents:
          description: 'Toggled whether to embed documents in the PDF'
          type: boolean
          example: false
        all_pages_header:
          description: 'The header for the PDF'
          type: boolean
          example: false
        all_pages_footer:
          description: 'The footer for the PDF'
          type: boolean
          example: false
        document_email_attachment:
          description: 'Toggles whether to attach documents in the email'
          type: boolean
          example: false
        enable_client_portal_password:
          description: 'Toggles password protection of the client portal'
          type: boolean
          example: false
        enable_email_markup:
          description: 'Toggles the use of markdown in emails'
          type: boolean
          example: false
        enable_client_portal_dashboard:
          description: 'Toggles whether the client dashboard is shown in the client portal'
          type: boolean
          example: false
        enable_client_portal:
          description: 'Toggles whether the entire client portal is displayed to the client, or only the context'
          type: boolean
          example: false
        email_template_statement:
          description: 'The body of the email for statements'
          type: string
          example: 'template matter'
        email_subject_statement:
          description: 'The subject of the email for statements'
          type: string
          example: 'subject matter'
        signature_on_pdf:
          description: 'Toggles whether the signature (if available) is displayed on the PDF'
          type: boolean
          example: false
        quote_footer:
          description: 'The default quote footer'
          type: string
          example: 'the quote footer'
        email_subject_custom1:
          description: 'Custom reminder template subject'
          type: string
          example: 'Custom Subject 1'
        email_subject_custom2:
          description: 'Custom reminder template subject'
          type: string
          example: 'Custom Subject 2'
        email_subject_custom3:
          description: 'Custom reminder template subject'
          type: string
          example: 'Custom Subject 3'
        email_template_custom1:
          description: 'Custom reminder template body'
          type: string
          example: '<HTML>'
        email_template_custom2:
          description: 'Custom reminder template body'
          type: string
          example: '<HTML>'
        email_template_custom3:
          description: 'Custom reminder template body'
          type: string
          example: '<HTML>'
        enable_reminder1:
          description: 'Toggles whether this reminder is enabled'
          type: boolean
          example: false
        enable_reminder2:
          description: 'Toggles whether this reminder is enabled'
          type: boolean
          example: false
        enable_reminder3:
          description: 'Toggles whether this reminder is enabled'
          type: boolean
          example: false
        num_days_reminder1:
          description: 'The Reminder interval'
          type: number
          example: 9
        num_days_reminder2:
          description: 'The Reminder interval'
          type: number
          example: 9
        num_days_reminder3:
          description: 'The Reminder interval'
          type: number
          example: 9
        schedule_reminder1:
          description: '(enum: after_invoice_date, before_due_date, after_due_date)'
          type: string
          example: after_invoice_date
        schedule_reminder2:
          description: '(enum: after_invoice_date, before_due_date, after_due_date)'
          type: string
          example: after_invoice_date
        schedule_reminder3:
          description: '(enum: after_invoice_date, before_due_date, after_due_date)'
          type: string
          example: after_invoice_date
        late_fee_amount1:
          description: 'The late fee amount for reminder 1'
          type: number
          example: 10
        late_fee_amount2:
          description: 'The late fee amount for reminder 2'
          type: number
          example: 20
        late_fee_amount3:
          description: 'The late fee amount for reminder 2'
          type: number
          example: 100
        endless_reminder_frequency_id:
          description: 'The frequency id of the endless reminder'
          type: string
          example: '1'
        client_online_payment_notification:
          description: 'Determines if a client should receive the notification for a online payment'
          type: boolean
          example: false
        client_manual_payment_notification:
          description: 'Determines if a client should receive the notification for a manually entered payment'
          type: boolean
          example: false
        enable_e_invoice:
          description: 'Determines if e-invoicing is enabled'
          type: boolean
          example: false
        default_expense_payment_type_id:
          description: 'The default payment type for expenses'
          type: string
          example: '0'
        e_invoice_type:
          description: 'The e-invoice type'
          type: string
          example: 'EN16931'
        mailgun_endpoint:
          description: 'The mailgun endpoint - used to determine whether US or EU endpoints are used'
          type: string
          example: 'api.mailgun.net or api.eu.mailgun.net'
        client_initiated_payments:
          description: 'Determines if clients can initiate payments directly from the client portal'
          type: boolean
          example: false
        client_initiated_payments_minimum:
          description: 'The minimum amount a client can pay'
          type: number
          example: 10
        sync_invoice_quote_columns:
          description: 'Determines if invoice and quote columns are synced for the PDF rendering, or if they use their own columns'
          type: boolean
          example: false
        show_task_item_description:
          description: 'Determines if the task item description is shown on the invoice'
          type: boolean
          example: false
        allow_billable_task_items:
          description: 'Determines if task items can be marked as billable'
          type: boolean
          example: false
        accept_client_input_quote_approval:
          description: 'Determines if clients can approve quotes and also pass through a PO Number reference'
          type: boolean
          example: false
        custom_sending_email:
          description: 'When using Mailgun or Postmark, the FROM email address can be customized using this setting.'
          type: string
          example: 'bob@gmail.com'
        show_paid_stamp:
          description: 'Determines if the PAID stamp is shown on the invoice'
          type: boolean
          example: false
        show_shipping_address:
          description: 'Determines if the shipping address is shown on the invoice'
          type: boolean
          example: false
        company_logo_size:
          description: 'The size of the company logo on the PDF - percentage value between 0 and 100'
          type: number
          example: 100
        show_email_footer:
          description: 'Determines if the email footer is shown on emails'
          type: boolean
          example: false
        email_alignment:
          description: 'The alignment of the email body text, options include left / center / right'
          type: string
          example: 'left'
        auto_bill_standard_invoices:
          description: 'Determines if standard invoices are automatically billed when they are created or due'
          type: boolean
          example: false
        postmark_secret:
          description: 'The Postmark secret API key'
          type: string
          example: '123456'
        mailgun_secret:
          description: 'The Mailgun secret API key'
          type: string
          example: '123456'
        mailgun_domain:
          description: 'The Mailgun domain'
          type: string
          example: 'sandbox123456.mailgun.org'
        send_email_on_mark_paid:
          description: 'Determines if an email is sent when an invoice is marked as paid'
          type: boolean
          example: false
        vendor_portal_enable_uploads:
          description: 'Determines if vendors can upload files to the portal'
          type: boolean
          example: false
        besr_id:
          description: 'The BESR ID'
          type: string
          example: '123456'
        qr_iban:
          description: 'The IBAN for the QR code'
          type: string
          example: 'CH123456'
        email_subject_purchase_order:
          description: 'The email subject for purchase orders'
          type: string
          example: 'Purchase Order'
        email_template_purchase_order:
          description: 'The email template for purchase orders'
          type: string
          example: 'Please see attached your purchase order.'
        require_purchase_order_signature:
          description: 'Determines if a signature is required on purchase orders'
          type: boolean
          example: false
        purchase_order_public_notes:
          description: 'The public notes for purchase orders'
          type: string
          example: 'Please see attached your purchase order.'
        purchase_order_terms:
          description: 'The terms for purchase orders'
          type: string
          example: 'Please see attached your purchase order.'
        purchase_order_footer:
          description: 'The footer for purchase orders'
          type: string
          example: 'Please see attached your purchase order.'
        purchase_order_design_id:
          description: 'The design id for purchase orders'
          type: string
          example: 'hd677df'
        purchase_order_number_pattern:
          description: 'The pattern for purchase order numbers'
          type: string
          example: 'PO-000000'
        purchase_order_number_counter:
          description: 'The counter for purchase order numbers'
          type: number
          example: 1
        page_numbering_alignment:
          description: 'The alignment for page numbering: options include left / center / right'
          type: string
          example: 'left'
        page_numbering:
          description: 'Determines if page numbering is enabled on Document PDFs'
          type: boolean
          example: false
        auto_archive_invoice_cancelled:
          description: 'Determines if invoices are automatically archived when they are cancelled'
          type: boolean
          example: false
        email_from_name:
          description: 'The FROM name for emails when using Custom emailers'
          type: string
          example: 'Bob Smith'
        show_all_tasks_client_portal:
          description: 'Determines if all tasks are shown on the client portal'
          type: boolean
          example: false
        entity_send_time:
          description: 'The time that emails are sent. The time is localized to the clients locale, integer values from 1 - 24'
          type: integer
          example: 9
        shared_invoice_credit_counter:
          description: 'Determines if the invoice and credit counter are shared'
          type: boolean
          example: false
        reply_to_name:
          description: 'The reply to name for emails'
          type: string
          example: 'Bob Smith'
        hide_empty_columns_on_pdf:
          description: 'Determines if empty columns are hidden on PDFs'
          type: boolean
          example: false
        enable_reminder_endless:
          description: 'Determines if endless reminders are enabled'
          type: boolean
          example: false
        use_credits_payment:
          description: 'Determines if credits can be used as a payment method'
          type: boolean
          example: false
        recurring_invoice_number_pattern:
          description: 'The pattern for recurring invoice numbers'
          type: string
          example: 'R-000000'
        recurring_invoice_number_counter:
          description: 'The counter for recurring invoice numbers'
          type: number
          example: 1
        client_portal_under_payment_minimum:
          description: 'The minimum payment payment'
          type: number
          example: 10
        auto_bill_date:
          description: 'Determines when the invoices are auto billed, options are on_send_date (when the invoice is sent) or on_due_date (when the invoice is due))'
          type: string
          example: 'on_send_date'
        primary_color:
          description: 'The primary color for the client portal / document highlights'
          type: string
          example: '#ffffff'
        secondary_color:
          description: 'The secondary color for the client portal / document highlights'
          type: string
          example: '#ffffff'
        client_portal_allow_under_payment:
          description: 'Determines if clients can pay invoices under the invoice amount due'
          type: boolean
          example: false
        client_portal_allow_over_payment:
          description: 'Determines if clients can pay invoices over the invoice amount'
          type: boolean
          example: false
        auto_bill:
          description: 'Determines how autobilling is applied for recurring invoices. off (no auto billed), always (always auto bill), optin (The user must opt in to auto billing), optout (The user must opt out of auto billing'
          type: string
          example: 'off'
        client_portal_terms:
          description: 'The terms which are displayed on the client portal'
          type: string
          example: 'Please see attached your invoice.'
        client_portal_privacy_policy:
          description: 'The privacy policy which is displayed on the client portal'
          type: string
          example: 'These are the terms of use for using the client portal.'
        client_can_register:
          description: 'Determines if clients can register on the client portal'
          type: boolean
          example: false
        portal_design_id:
          description: 'The design id for the client portal'
          type: string
          example: 'hd677df'
        late_fee_endless_percent:
          description: 'The late fee percentage for endless late fees'
          type: number
          example: 10
        late_fee_endless_amount:
          description: 'The late fee amount for endless late fees'
          type: number
          example: 10
        auto_email_invoice:
          description: 'Determines if invoices are automatically emailed when they are created'
          type: boolean
          example: false
        email_signature:
          description: 'The email signature for emails'
          type: string
          example: 'Bob Smith'
      type: object
    BTRules:
      properties:
        data_key:
          description: 'The key to search'
          type: string
          example: 'description,amount'
        operator:
          description: 'The operator flag of the search'
          type: string
          example: '>'
        value:
          description: 'The value to search for'
          type: string
          example: bob
      type: object
    Account:
      properties:
        id:
          description: 'The account hashed id'
          type: string
          example: AS3df3A
        account_sms_verified:
          description: 'Boolean flag if the account has been verified by sms'
          type: string
          example: "true"
      type: object
    Invoice:
      properties:
        id:
          description: 'The invoice hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        status_id:
          description: 'The invoice status variable'
          type: string
          example: '4'
        number:
          description: 'The invoice number - is a unique alpha numeric number per invoice per company'
          type: string
          example: INV_101
        po_number:
          description: 'The purchase order associated with this invoice'
          type: string
          example: PO-1234
        terms:
          description: 'The invoice terms'
          type: string
          example: 'These are invoice terms'
        public_notes:
          description: 'The public notes of the invoice'
          type: string
          example: 'These are some public notes'
        private_notes:
          description: 'The private notes of the invoice'
          type: string
          example: 'These are some private notes'
        footer:
          description: 'The invoice footer notes'
          type: string
          example: ''
        custom_value1:
          description: 'A custom field value'
          type: string
          example: '2022-10-01'
        custom_value2:
          description: 'A custom field value'
          type: string
          example: 'Something custom'
        custom_value3:
          description: 'A custom field value'
          type: string
          example: ''
        custom_value4:
          description: 'A custom field value'
          type: string
          example: ''
        tax_name1:
          description: 'The tax name'
          type: string
          example: ''
        tax_name2:
          description: 'The tax name'
          type: string
          example: ''
        tax_rate1:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_name3:
          description: 'The tax name'
          type: string
          example: ''
        tax_rate3:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        total_taxes:
          description: 'The total taxes for the invoice'
          type: number
          format: float
          example: 10.00
        line_items:
          type: array
          description: 'An array of objects which define the line items of the invoice'
          items:
            $ref: '#/components/schemas/InvoiceItem'
        invitations:
          type: array
          description: 'An array of objects which define the invitations of the invoice'
          items:
            $ref: '#/components/schemas/InvoiceInvitation'
        amount:
          description: 'The invoice amount'
          type: number
          format: float
          example: 10.00
        balance:
          description: 'The invoice balance'
          type: number
          format: float
          example: 10.00
        paid_to_date:
          description: 'The amount paid on the invoice to date'
          type: number
          format: float
          example: 10.00
        discount:
          description: 'The invoice discount, can be an amount or a percentage'
          type: number
          format: float
          example: 10.00
        partial:
          description: 'The deposit/partial amount'
          type: number
          format: float
          example: 10.00
        is_amount_discount:
          description: 'Flag determining if the discount is an amount or a percentage'
          type: boolean
          example: true
        is_deleted:
          description: 'Defines if the invoice has been deleted'
          type: boolean
          example: true
        uses_inclusive_taxes:
          description: 'Defines the type of taxes used as either inclusive or exclusive'
          type: boolean
          example: true
        date:
          description: 'The Invoice Date'
          type: string
          format: date
          example: '1994-07-30'
        last_sent_date:
          description: 'The last date the invoice was sent out'
          type: string
          format: date
          example: '1994-07-30'
        next_send_date:
          description: 'The Next date for a reminder to be sent'
          type: string
          format: date
          example: '1994-07-30'
        partial_due_date:
          description: 'The due date for the deposit/partial amount'
          type: string
          format: date
          example: '1994-07-30'
        due_date:
          description: 'The due date of the invoice'
          type: string
          format: date
          example: '1994-07-30'
        last_viewed:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        custom_surcharge1:
          description: 'First Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge2:
          description: 'Second Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge3:
          description: 'Third Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge4:
          description: 'Fourth Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge_tax1:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        project_id:
          description: 'The project associated with this invoice'
          type: string
          example: Opnel5aKBz
        auto_bill_tries:
          description: 'The number of times the invoice has attempted to be auto billed'
          type: integer
          example: 1
          readOnly: true
        auto_bill_enabled:
          description: 'Boolean flag determining if the invoice is set to auto bill'
          type: boolean
          example: true
        subscription_id:
          description: 'The subscription associated with this invoice'
          type: string
          example: Opnel5aKBz
        location_id:
          description: 'The client location id that this invoice relates to'
          type: string
          example: Opnel5aKBz
        design_id:
          description: 'The unique identifier of the design template used for this invoice'
          type: string
          example: Opnel5aKBz
        e_invoice:
          description: 'E-invoice configuration and data'
          type: object
          additionalProperties: true
        exchange_rate:
          description: 'The exchange rate used for currency conversion'
          type: number
          format: float
          example: 1.0
        vendor_id:
          description: 'The unique identifier of the vendor associated with this invoice'
          type: string
          example: Opnel5aKBz
      type: object

    ClientRequest:
      required:
        - contacts
        - country_id
      properties:
        id:
          description: 'The unique identifier of the client'
          type: string
          example: Opnel5aKBz
          readOnly: true
        contacts:
          type: array
          description: 'A list of contacts associated with the client'
          items:
            $ref: '#/components/schemas/ClientContactRequest'
        name:
          description: 'The name of the client company or organization'
          type: string
          example: "Bob & Co Housekeeping"
        website:
          description: 'The website URL of the client company or organization'
          type: string
          example: 'https://www.boandco-housekeeping.com'
        private_notes:
          description: 'Notes that are only visible to the user who created the client'
          type: string
          example: 'Client prefers email communication over phone calls'
        industry_id:
          description: 'The unique identifier of the industry the client operates in'
          type: number
          example: 5
        size_id:
          description: 'The unique identifier for the size category of the client company or organization'
          type: number
          example: 2
        address1:
          description: "First line of the client's address"
          type: string
          example: '123 Main St'
        address2:
          description: "Second line of the client's address, if needed"
          type: string
          example: 'Apt 4B'
        city:
          description: 'The city the client is located in'
          type: string
          example: 'Beverly Hills'
        state:
          description: 'The state, province, or locality the client is located in'
          type: string
          example: 'California'
        postal_code:
          description: 'The postal code or ZIP code of the client'
          type: string
          example: '90210'
        phone:
          description: "The client's phone number"
          type: string
          example: '555-3434-3434'
        country_id:
          description: |
            The unique identifier of the client's country expressed by the countries ISO number.

            Optionally, instead of the country_id you can pass either the iso_3166_2 or iso_3166_3 country code into the country_code property.
          type: number
          format: integer
          $ref: '#/components/schemas/CountryType'
          example: 1
        custom_value1:
          description: 'A custom field for storing additional information'
          type: string
          example: 'Preferred contact: Email'
        custom_value2:
          description: 'A custom field for storing additional information'
          type: string
          example: 'Account manager: John Doe'
        custom_value3:
          description: 'A custom field for storing additional information'
          type: string
          example: 'VIP client: Yes'
        custom_value4:
          description: 'A custom field for storing additional information'
          type: string
          example: 'Annual contract value: $50,000'
        vat_number:
          description: "The client's VAT (Value Added Tax) number, if applicable"
          type: string
          example: 'VAT123456'
        id_number:
          description: 'A unique identification number for the client, such as a tax ID or business registration number'
          type: string
        number:
          description: 'A system-assigned unique number for the client, typically used for invoicing purposes'
          type: string
          example: 'CL-0001'
        shipping_address1:
          description: "First line of the client's shipping address"
          type: string
          example: '5 Wallaby Way'
        shipping_address2:
          description: "Second line of the client's shipping address, if needed"
          type: string
          example: 'Suite 5'
        shipping_city:
          description: "The city of the client's shipping address"
          type: string
          example: 'Perth'
        shipping_state:
          description: "The state, province, or locality of the client's shipping address"
          type: string
          example: 'Western Australia'
        shipping_postal_code:
          description: "The postal code or ZIP code of the client's shipping address"
          type: string
          example: '6110'
        shipping_country_id:
          description: |
            The unique identifier of the client's shipping country expressed by the countries ISO number.

            Optionally, instead of the shipping_country_id you can pass either the iso_3166_2 or iso_3166_3 country code into the shipping_country_code property.
          type: number
          format: integer
          example: 4
        is_deleted:
          description: 'A boolean value indicating whether the client has been deleted or not'
          type: boolean
          example: false
          readOnly: true
        group_settings_id:
          description: 'The group settings assigned to the client'
          type: string
          example: Opnel5aKBz
        routing_id:
          description: 'The routing address id for e-invoicing for this client'
          type: string
          example: Opnel5aKBz3489-dfkiu-2239-sdsd
        is_tax_exempt:
          description: 'Flag which defines if the client is exempt from taxes'
          type: boolean
          example: false
        has_valid_vat_number:
          description: 'Flag which defines if the client has a valid VAT number'
          type: boolean
          example: false
        classification:
          description: 'The classification of the client'
          type: string
          example: 'individual'
        settings:
          $ref: '#/components/schemas/ClientSettings'
      type: object
    PaymentTerm:
      properties:
        num_days:
          description: 'The payment term length in days'
          type: integer
          example: 1
        name:
          description: 'The payment term length in string format'
          type: string
          example: 'NET 1'
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
      type: object
    ClientContactRequest:
      properties:
        first_name:
          description: 'The first name of the contact'
          type: string
          example: Sarah
        last_name:
          description: 'The last name of the contact'
          type: string
          example: Johnson
        phone:
          description: 'The phone number of the contact'
          type: string
          example: '+1-555-123-4567'
        custom_value1:
          description: 'A Custom field value'
          type: string
          example: 'Preferred Customer'
        custom_value2:
          description: 'A Custom field value'
          type: string
          example: 'West Region'
        custom_value3:
          description: 'A Custom field value'
          type: string
          example: 'Referral: Jane Smith'
        custom_value4:
          description: 'A Custom field value'
          type: string
          example: 'Account #12345'
        email:
          description: 'The email of the contact'
          type: string
          example: 'sarah.johnson@example.com'
        password:
          description: 'The hashed password of the contact'
          type: string
          example: '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi'
        send_email:
          description: 'Boolean flag that determines if this contact should receive emails'
          type: boolean
          example: true
      type: object

    GenericBulkAction:
      properties:
        action:
          type: string
          example: archive
          description: 'The action to perform ie. archive / restore / delete'
        ids:
          type: array
          items:
            format: string
            type: string
            example: 2J234DFA,D2J234DFA,D2J234DFA
            description: string array of client hashed ids
      type: object
    BankTransactionRule:
      properties:
        id:
          description: 'The bank transaction rules hashed id'
          type: string
          example: AS3df3A
        user_id:
          description: 'The user hashed id'
          type: string
          example: AS3df3A
        name:
          description: 'The name of the transaction'
          type: string
          example: 'Rule 1'
        rules:
          description: 'A mapped collection of the sub rules for the BankTransactionRule'
          type: array
          items:
            $ref: '#/components/schemas/BTRules'
        auto_convert:
          description: 'Flags whether the rule converts the transaction automatically'
          type: boolean
          example: true
        matches_on_all:
          description: 'Flags whether all subrules are required for the match'
          type: boolean
          example: true
        applies_to:
          description: 'Flags whether the rule applies to a CREDIT or DEBIT'
          type: string
          example: CREDIT
        client_id:
          description: 'The client hashed id'
          type: string
          example: AS3df3A
        vendor_id:
          description: 'The vendor hashed id'
          type: string
          example: AS3df3A
        category_id:
          description: 'The category hashed id'
          type: string
          example: AS3df3A
      type: object
    CreditInvitationRequest:
      required:
        - client_contact_id
      properties:
        id:
          description: 'The entity invitation hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        client_contact_id: 
          description: 'The client contact hashed id'
          type: string
          example: Opnel5aKBz
        key:
          description: 'The invitation key'
          type: string
          example: Opnel5aKBz4343343566236gvbb
          readOnly: true
        link:
          description: 'The invitation link'
          type: string
          example: 'https://www.example.com/invitations/Opnel5aKBz4343343566236gvbb'
          readOnly: true
        sent_date:
          description: 'The invitation sent date'
          type: string
          format: date-time
          readOnly: true
        viewed_date:
          description: 'The invitation viewed date'
          type: string
          format: date-time
          readOnly: true
        opened_date:
          description: 'The invitation opened date'
          type: string
          format: date-time
          readOnly: true
        updated_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        archived_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        email_error:
          description: 'The email error'
          type: string
          example: 'The email error'
          readOnly: true
        email_status:
          description: 'The email status'
          type: string
          readOnly: true

    RecurringInvoiceRequest:
      required:
        - client_id
        - date
        - due_date
        - frequency_id
      properties:
        client_id:
          description: 'The hashed ID of the client'
          type: string
          example: 'D2J234DFA'
        date:
          description: 'Recurring invoice date'
          type: string
          format: date
          example: '2024-01-01'
        due_date:
          description: 'Due date for the recurring invoice'
          type: string
          format: date
          example: '2024-01-31'
        frequency_id:
          description: 'Frequency ID for recurring invoice'
          type: string
          example: '1'
        remaining_cycles:
          description: 'Number of remaining cycles'
          type: string
          example: '5'
        private_notes:
          description: 'Private notes for the recurring invoice'
          type: string
          example: 'Internal notes about this recurring invoice'
        public_notes:
          description: 'Public notes for the recurring invoice'
          type: string
          example: 'Thank you for your business!'
        custom_value1:
          description: 'Custom field value 1'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'Custom field value 2'
          type: string
          example: 'Custom value 2'
        custom_value3:
          description: 'Custom field value 3'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'Custom field value 4'
          type: string
          example: 'Custom value 4'
        line_items:
          type: array
          description: 'An array of objects which define the line items of the invoice'
          items:
            $ref: '#/components/schemas/InvoiceItem'
    Product:
      type: object
      properties:
        id:
          type: string
          description: 'The hashed product ID.'
          example: eP01N
          readOnly: true
        user_id:
          type: string
          description: 'The hashed ID of the user that created this product.'
          example: n30m4
          readOnly: true
        assigned_user_id:
          type: string
          description: 'The hashed ID of the user assigned to this product.'
          example: pR0j3
        project_id:
          type: string
          description: 'The hashed ID of the project that this product is associated with.'
          example: pR0j3
        vendor_id:
          type: string
          description: 'The hashed ID of the vendor that this product is associated with.'
          example: pR0j3
        custom_value1:
          type: string
          description: 'Custom value field 1.'
          example: 'Custom value 1'
        custom_value2:
          type: string
          description: 'Custom value field 2.'
          example: 'Custom value 2'
        custom_value3:
          type: string
          description: 'Custom value field 3.'
          example: 'Custom value 3'
        custom_value4:
          type: string
          description: 'Custom value field 4.'
          example: 'Custom value 4'
        product_key:
          type: string
          description: 'The product key.'
          example: '1234'
        notes:
          type: string
          description: 'Notes about the product.'
          example: 'These are some notes about the product.'
        cost:
          type: number
          format: double
          description: 'The cost of the product. (Your purchase price for this product)'
          example: 10.0
        price:
          type: number
          format: double
          description: 'The price of the product that you are charging.'
          example: 20.0
        quantity:
          type: number
          format: double
          description: 'The quantity of the product. (used as a default)'
          example: 5.0
        tax_name1:
          type: string
          description: 'The name of tax 1.'
          example: 'Tax 1'
        tax_rate1:
          type: number
          format: double
          description: 'The rate of tax 1.'
          example: 10.0
        tax_name2:
          type: string
          description: 'The name of tax 2.'
          example: 'Tax 2'
        tax_rate2:
          type: number
          format: double
          description: 'The rate of tax 2.'
          example: 5.0
        tax_name3:
          type: string
          description: 'The name of tax 3.'
          example: 'Tax 3'
        tax_rate3:
          type: number
          format: double
          description: 'The rate of tax 3.'
          example: 0.0
        archived_at:
          type: integer
          format: timestamp
          description: 'The timestamp when the product was archived.'
          example: 1647604800
          readOnly: true
        created_at:
          type: integer
          format: timestamp
          description: 'The timestamp when the product was created.'
          example: 1647604800
          readOnly: true
        updated_at:
          description: Timestamp
          type: integer
          format: timestamp
          example: 1647691496
          readOnly: true
        is_deleted:
          type: boolean
          description: 'Boolean flag determining if the product has been deleted'
          example: false
          readOnly: true
        in_stock_quantity:
          type: integer
          format: int32
          description: The quantity of the product that is currently in stock
          default: 0
        stock_notification:
          type: boolean
          description: Indicates whether stock notifications are enabled for this product
          default: true
        stock_notification_threshold:
          type: integer
          format: int32
          description: The minimum quantity threshold for which stock notifications will be triggered
          default: 0
        max_quantity:
          type: integer
          format: int32
          description: The maximum quantity that can be ordered for this product
        product_image:
          type: string
          description: The URL of the product image
          format: uri-reference
        tax_id:
          type: string
          default: '1'
          description: |
                The tax category id for this product.'

                The following constants are available (default = '1')
                
                ```
                PRODUCT_TYPE_PHYSICAL = '1'
                PRODUCT_TYPE_SERVICE = '2'
                PRODUCT_TYPE_DIGITAL = '3'
                PRODUCT_TYPE_SHIPPING = '4'
                PRODUCT_TYPE_EXEMPT = '5'
                PRODUCT_TYPE_REDUCED_TAX = '6'
                PRODUCT_TYPE_OVERRIDE_TAX = '7'
                PRODUCT_TYPE_ZERO_RATED = '8'
                PRODUCT_TYPE_REVERSE_TAX = '9'
                ```
          example: '1'

    PaymentRequest:
      properties:
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        client_contact_id:
          description: 'The client contact hashed id'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
        type_id:
          $ref: '#/components/schemas/PaymentType'
        date:
          description: 'The Payment date'
          type: string
          example: 1-1-2014
        transaction_reference:
          description: 'The transaction reference as defined by the payment gateway'
          type: string
          example: xcsSxcs124asd
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: Opnel5aKBz
        private_notes:
          description: 'The private notes of the payment'
          type: string
          example: 'The payment was refunded due to error'
        amount:
          description: 'The amount of this payment'
          type: number
          example: 10
        invoices:
          description: ''
          type: array
          items:
            $ref: '#/components/schemas/InvoicePaymentable'
        credits:
          description: ''
          type: array
          items:
            $ref: '#/components/schemas/CreditPaymentable'
        number:
          description: 'The payment number - is a unique alpha numeric number per payment per company'
          type: string
          example: PAY_101
      type: object
    
    RecurringQuote:
      properties:
        id:
          description: 'The hashed id of the recurring quote'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        status_id:
          description: 'The quote status variable'
          type: string
          example: '4'
        frequency_id:
          description: 'The recurring quote frequency'
          type: number
          example: 4
        remaining_cycles:
          description: 'The number of quotes left to be generated'
          type: number
          example: 4
        number:
          description: 'The recurringquote number - is a unique alpha numeric number per quote per company'
          type: string
          example: INV_101
        po_number:
          description: 'The purchase order associated with this recurring quote'
          type: string
          example: PO-1234
        terms:
          description: 'The quote terms'
          type: string
          example: 'These are quote terms'
        public_notes:
          description: 'The public notes of the quote'
          type: string
          example: 'These are some public notes'
        private_notes:
          description: 'The private notes of the quote'
          type: string
          example: 'These are some private notes'
        footer:
          description: 'The quote footer notes'
          type: string
          example: ''
        custom_value1:
          description: 'A custom field value'
          type: string
          example: '2022-10-01'
        custom_value2:
          description: 'A custom field value'
          type: string
          example: 'Something custom'
        custom_value3:
          description: 'A custom field value'
          type: string
          example: ''
        custom_value4:
          description: 'A custom field value'
          type: string
          example: ''
        tax_name1:
          description: 'The tax name'
          type: string
          example: ''
        tax_name2:
          description: 'The tax name'
          type: string
          example: ''
        tax_rate1:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_name3:
          description: 'The tax name'
          type: string
          example: ''
        tax_rate3:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        total_taxes:
          description: 'The total taxes for the quote'
          type: number
          format: float
          example: 10.00
        line_items:
          description: 'An array of objects which define the line items of the quote'
          type: object
          example: {}
        amount:
          description: 'The quote amount'
          type: number
          format: float
          example: 10.00
        balance:
          description: 'The quote balance'
          type: number
          format: float
          example: 10.00
        paid_to_date:
          description: 'The amount paid on the quote to date'
          type: number
          format: float
          example: 10.00
        discount:
          description: 'The quote discount, can be an amount or a percentage'
          type: number
          format: float
          example: 10.00
        partial:
          description: 'The deposit/partial amount'
          type: number
          format: float
          example: 10.00
        is_amount_discount:
          description: 'Flag determining if the discount is an amount or a percentage'
          type: boolean
          example: true
        is_deleted:
          description: 'Defines if the quote has been deleted'
          type: boolean
          example: true
        uses_inclusive_taxes:
          description: 'Defines the type of taxes used as either inclusive or exclusive'
          type: boolean
          example: true
        date:
          description: 'The quote Date'
          type: string
          format: date
          example: '1994-07-30'
        last_sent_date:
          description: 'The last date the quote was sent out'
          type: string
          format: date
          example: '1994-07-30'
        next_send_date:
          description: 'The Next date for a reminder to be sent'
          type: string
          format: date
          example: '1994-07-30'
        partial_due_date:
          description: 'The due date for the deposit/partial amount'
          type: string
          format: date
          example: '1994-07-30'
        due_date:
          description: 'The due date of the quote'
          type: string
          format: date
          example: '1994-07-30'
        settings:
          $ref: '#/components/schemas/CompanySettings'
        last_viewed:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        custom_surcharge1:
          description: 'First Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge2:
          description: 'Second Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge3:
          description: 'Third Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge4:
          description: 'Fourth Custom Surcharge'
          type: number
          format: float
          example: 10.00
        custom_surcharge_tax1:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
      type: object
    Paymentable:
      properties:
        id:
          description: 'The paymentable hashed id'
          type: string
          example: AS3df3A
        invoice_id:
          description: 'The invoice hashed id'
          type: string
          example: AS3df3A
        credit_id:
          description: 'The credit hashed id'
          type: string
          example: AS3df3A
        refunded:
          description: 'The amount that has been refunded for this payment'
          type: number
          format: float
          example: 10.00
        amount:
          description: 'The amount that has been applied to the payment'
          type: number
          format: float
          example: 10.00
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
      type: object
    SystemLog:
      properties:
        id:
          description: 'The account hashed id'
          type: string
          example: AS3df3A
        user_id:
          description: 'The user_id hashed id'
          type: string
          example: AS3df3A
        client_id:
          description: 'The client_id hashed id'
          type: string
          example: AS3df3A
        event_id:
          description: 'The Log Type ID'
          type: integer
          example: 1
        category_id:
          description: 'The Category Type ID'
          type: integer
          example: 1
        type_id:
          description: 'The Type Type ID'
          type: integer
          example: 1
        log:
          description: 'The json object of the error'
          type: object
          example: {}
        updated_at:
          description: Timestamp
          type: string
          example: '2'
        created_at:
          description: Timestamp
          type: string
          example: '2'
      type: object
    BankTransaction:
      properties:
        id:
          description: 'The bank integration hashed id'
          type: string
          example: AS3df3A
        user_id:
          description: 'The user hashed id'
          type: string
          example: AS3df3A
        transaction_id:
          description: 'The id of the transaction rule'
          type: integer
          example: 343434
        amount:
          description: 'The transaction amount'
          type: number
          example: 10
        currency_id:
          description: 'The currency ID of the currency'
          type: string
          example: '1'
        account_type:
          description: 'The account type'
          type: string
          example: creditCard
        description:
          description: 'The description of the transaction'
          type: string
          example: 'Potato purchases for kevin'
        category_id:
          description: 'The category id'
          type: integer
          example: 1
        category_type:
          description: 'The category description'
          type: string
          example: Expenses
        base_type:
          description: 'Either CREDIT or DEBIT'
          type: string
          example: CREDIT
        date:
          description: 'The date of the transaction'
          type: string
          example: '2022-09-01'
        bank_account_id:
          description: 'The ID number of the bank account'
          type: integer
          example: 1
      type: object
    ProjectRequest:
      required:
        - name
        - client_id
      properties:
        name:
          description: 'Project name'
          type: string
          example: 'Website Redesign Project'
        client_id:
          description: 'The hashed ID of the client'
          type: string
          example: 'D2J234DFA'
        description:
          description: 'Project description'
          type: string
          example: 'Complete redesign of company website'
        budgeted_hours:
          description: 'Budgeted hours for the project'
          type: number
          example: 120.5
        task_rate:
          description: 'Hourly rate for tasks in this project'
          type: number
          example: 75.00
        due_date:
          description: 'Due date for the project'
          type: string
          format: date
          example: '2024-03-31'
        custom_value1:
          description: 'Custom field value 1'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'Custom field value 2'
          type: string
          example: 'Custom value 2'
        custom_value3:
          description: 'Custom field value 3'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'Custom field value 4'
          type: string
          example: 'Custom value 4'
        is_deleted:
          description: 'Whether the project is deleted'
          type: boolean
          example: false
        archived_at:
          description: 'Timestamp when project was archived'
          type: integer
          example: 1640995200
        color:
          description: 'Project color for UI display'
          type: string
          example: '#FF5733'
      type: object
    CreditInvitation:
      properties:
        id:
          description: 'The entity invitation hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        client_contact_id: 
          description: 'The client contact hashed id'
          type: string
          example: Opnel5aKBz
        key:
          description: 'The invitation key'
          type: string
          example: Opnel5aKBz4343343566236gvbb
          readOnly: true
        link:
          description: 'The invitation link'
          type: string
          example: 'https://www.example.com/invitations/Opnel5aKBz4343343566236gvbb'
          readOnly: true
        sent_date:
          description: 'The invitation sent date'
          type: string
          format: date-time
          readOnly: true
        viewed_date:
          description: 'The invitation viewed date'
          type: string
          format: date-time
          readOnly: true
        opened_date:
          description: 'The invitation opened date'
          type: string
          format: date-time
          readOnly: true
        updated_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        archived_at:
          description: 'Timestamp'
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        email_error:
          description: 'The email error'
          type: string
          example: 'The email error'
          readOnly: true
        email_status:
          description: 'The email status'
          type: string
          readOnly: true


    ProductBulkAction:
      required:
        - action
        - ids
      properties:
        action:
          type: string
          example: archive
          description: 'The action to perform ie. archive / restore / delete / set_tax_id'
        ids:
          type: array
          items:
            format: string
            type: string
            example: 2J234DFA,D2J234DFA,D2J234DFA
            description: string array of client hashed ids
        tax_id:
          type: string
          example: '1'
          description: |
                The tax rate id to set on the list of products

                The following constants are available (default = '1')
                
                ```
                PRODUCT_TYPE_PHYSICAL = '1'
                PRODUCT_TYPE_SERVICE = '2'
                PRODUCT_TYPE_DIGITAL = '3'
                PRODUCT_TYPE_SHIPPING = '4'
                PRODUCT_TYPE_EXEMPT = '5'
                PRODUCT_TYPE_REDUCED_TAX = '6'
                PRODUCT_TYPE_OVERRIDE_TAX = '7'
                PRODUCT_TYPE_ZERO_RATED = '8'
                PRODUCT_TYPE_REVERSE_TAX = '9'
                ```
      type: object
    FillableInvoice:
      properties:
        assigned_user_id:
          description: "The assigned user's hashed ID"
          type: string
          example: 'a1b2c3d4'
        client_id:
          description: "The client's hashed ID"
          type: string
          example: 'x1y2z3a4'
        number:
          description: "The unique alphanumeric invoice number for each invoice per company"
          type: string
          example: INV_101
        po_number:
          description: "The purchase order number associated with the invoice"
          type: string
          example: 'PO12345'
        terms:
          description: "The terms and conditions for the invoice"
          type: string
          example: 'Net 30'
        public_notes:
          description: "Public notes visible to the client on the invoice"
          type: string
          example: 'Thank you for your business.'
        private_notes:
          description: "Private notes for internal use only"
          type: string
          example: 'Client is a slow payer.'
        footer:
          description: "The footer text displayed on the invoice"
          type: string
          example: 'Authorized Signature'
        custom_value1:
          description: "First custom value for additional information"
          type: string
          example: 'Project ABC'
        custom_value2:
          description: "Second custom value for additional information"
          type: string
          example: 'Department XYZ'
        custom_value3:
          description: "Third custom value for additional information"
          type: string
          example: 'Location 123'
        custom_value4:
          description: "Fourth custom value for additional information"
          type: string
          example: 'Currency USD'
        tax_name1:
          description: "Name of the first tax applied to the invoice"
          type: string
          example: 'VAT'
        tax_name2:
          description: "Name of the second tax applied to the invoice"
          type: string
          example: 'GST'
        tax_rate1:
          description: "Rate of the first tax applied to the invoice"
          type: number
          example: 10.00
        tax_rate2:
          description: "Rate of the second tax applied to the invoice"
          type: number
          example: 5.00
        tax_name3:
          description: "Name of the third tax applied to the invoice"
          type: string
          example: 'PST'
        tax_rate3:
          description: "Rate of the third tax applied to the invoice"
          type: number
          example: 8.00
        line_items:
          type: array
          description: 'An array of objects which define the line items of the invoice'
          items:
            $ref: '#/components/schemas/InvoiceItem'
        discount:
          description: "The discount applied to the invoice"
          type: number
          example: 10.00
        partial:
          description: "The partial amount applied to the invoice"
          type: number
          example: 20.00
        is_amount_discount:
          description: "Indicates whether the discount applied is a fixed amount or a percentage"
          type: boolean
          example: true
        uses_inclusive_taxes:
          description: "Indicates whether the tax rates applied to the invoice are inclusive or exclusive"
          type: boolean
          example: true
        date:
          description: "The date the invoice was issued"
          type: string
          example: '1994-07-30'
        partial_due_date:
          description: "The due date for the partial payment"
          type: string
          example: '1994-08-15'
        due_date:
          description: "The due date for the invoice"
          type: string
          example: '1994-08-30'
        custom_surcharge1:
          description: "First custom surcharge applied to the invoice"
          type: number
          example: 10.00
        custom_surcharge2:
          description: "Second custom surcharge applied to the invoice"
          type: number
          example: 15.00
        custom_surcharge3:
          description: "Third custom surcharge applied to the invoice"
          type: number
          example: 5.00
        custom_surcharge4:
          description: "Fourth custom surcharge applied to the invoice"
          type: number
          example: 20.00
      type: object
    CompanyGateway:
      properties:
        id:
          description: 'The hashed id of the company gateway'
          type: string
          example: Opnel5aKBz
        gateway_key:
          description: 'The gateway key (hash)'
          type: string
          example: '2'
        accepted_credit_cards:
          description: 'Bitmask representation of cards'
          type: integer
          example: 32
        require_billing_address:
          description: 'Determines if the the billing address is required prior to payment.'
          type: boolean
          example: true
        require_shipping_address:
          description: 'Determines if the the billing address is required prior to payment.'
          type: boolean
          example: true
        config:
          description: 'The configuration map for the gateway'
          type: string
          example: dfadsfdsafsafd
        update_details:
          description: 'Determines if the client details should be updated.'
          type: boolean
          example: true
        fees_and_limits:
          description: 'A mapped collection of the fees and limits for the configured gateway'
          type: array
          items:
            $ref: '#/components/schemas/FeesAndLimits'
      type: object
    
    
    Activity:
      properties:
        id:
          description: 'The id field of the activity'
          type: string
          example: Opnel5aKBz
        activity_type_id:
          description: 'The activity type id'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        company_id:
          description: 'The company hashed id'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
        invoice_id:
          description: 'The invoice hashed id'
          type: string
          example: Opnel5aKBz
        payment_id:
          description: 'The payment hashed id'
          type: string
          example: Opnel5aKBz
        credit_id:
          description: 'The credit hashed id'
          type: string
          example: Opnel5aKBz
        updated_at:
          description: 'Unixtimestamp the last time the record was updated'
          type: integer
          example: 343421434
        expense_id:
          description: 'The expense hashed id'
          type: string
          example: Opnel5aKBz
        is_system:
          description: 'Defines is the activity was performed by the system'
          type: boolean
          example: true
        contact_id:
          description: 'The contact hashed id'
          type: string
          example: Opnel5aKBz
        task_id:
          description: 'The task hashed id'
          type: string
          example: Opnel5aKBz
        notes:
          description: 'Activity Notes'
          type: string
          example: Opnel5aKBz
        token_id:
          description: 'The hashed ID of the token who performed the action'
          type: string
          example: Opnel5aKBz
        ip:
          description: 'The IP Address of the user who performed the action'
          type: string
          example: 192.168.1.252
        user:
          $ref: '#/components/schemas/User'
        client:
          $ref: '#/components/schemas/Client'
        contact:
          $ref: '#/components/schemas/ClientContact'
        recurring_invoice:
          $ref: '#/components/schemas/RecurringInvoice'
        invoice:
          $ref: '#/components/schemas/Invoice'
        credit:
          $ref: '#/components/schemas/Credit'
        quote:
          $ref: '#/components/schemas/Quote'
        payment:
          $ref: '#/components/schemas/Payment'
        expense:
          $ref: '#/components/schemas/Expense'
        task:
          $ref: '#/components/schemas/Task'
        purchase_order:
          $ref: '#/components/schemas/PurchaseOrder'
        vendor:
          $ref: '#/components/schemas/Vendor'
        vendor_contact:
          $ref: '#/components/schemas/VendorContact'
      type: object
    CreditRequest:
      required:
        - client_id        
      properties:
        user_id:
          description: 'The user hashed id'
          type: string
          example: 'AxP7K9nY5z'
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: 'Bw2M8vR4qL'
        client_id:
          description: 'The client hashed id'
          type: string
          example: 'Ht5N9cX3jK'
        number:
          description: 'The credit number - is a unique alpha numeric number per credit per company'
          type: string
          example: 'INV-2024-0001'
        po_number:
          description: 'The purchase order associated with this credit'
          type: string
          example: 'PO-2024-0123'
        terms:
          description: 'The credit terms'
          type: string
          example: 'Net 30 - Payment is due within 30 days of credit date'
        public_notes:
          description: 'The public notes of the credit'
          type: string
          example: 'Thank you for your business. Please include credit number with payment.'
        private_notes:
          description: 'The private notes of the credit'
          type: string
          example: 'Client requested expedited delivery - premium rates apply'
        footer:
          description: 'The credit footer notes'
          type: string
          example: 'Payment accepted via bank transfer or credit card'
        custom_value1:
          description: 'A custom field value'
          type: string
          example: 'Department: Sales'
        custom_value2:
          description: 'A custom field value'
          type: string
          example: 'Region: North America'
        custom_value3:
          description: 'A custom field value'
          type: string
          example: 'Contract: C-2024-156'
        custom_value4:
          description: 'A custom field value'
          type: string
          example: 'Priority: High'
        tax_name1:
          description: 'The tax name'
          type: string
          example: 'VAT'
        tax_name2:
          description: 'The tax name'
          type: string
          example: 'GST'
        tax_rate1:
          description: 'The tax rate'
          type: number
          format: float
          example: 20.00
        tax_rate2:
          description: 'The tax rate'
          type: number
          format: float
          example: 5.00
        tax_name3:
          description: 'The tax name'
          type: string
          example: 'State Tax'
        tax_rate3:
          description: 'The tax rate'
          type: number
          format: float
          example: 8.50
        line_items:
          type: array
          description: 'An array of objects which define the line items of the credit'
          items:
            $ref: '#/components/schemas/InvoiceItem'
        invitations:
          type: array
          description: 'An array of objects which define the invitations of the credit'
          items:
            $ref: '#/components/schemas/CreditInvitationRequest'
        discount:
          description: 'The credit discount, can be an amount or a percentage'
          type: number
          format: float
          example: 15.00
        partial:
          description: 'The deposit/partial amount'
          type: number
          format: float
          example: 250.00
        is_amount_discount:
          description: 'Flag determining if the discount is an amount or a percentage'
          type: boolean
          example: true
        uses_inclusive_taxes:
          description: 'Defines the type of taxes used as either inclusive or exclusive'
          type: boolean
          example: true
        date:
          description: 'The credit Date'
          type: string
          format: date
          example: '2024-03-15'
        partial_due_date:
          description: 'The due date for the deposit/partial amount'
          type: string
          format: date
          example: '2024-03-29'
        due_date:
          description: 'The due date of the credit'
          type: string
          format: date
          example: '2024-04-14'
        custom_surcharge1:
          description: 'First Custom Surcharge'
          type: number
          format: float
          example: 25.00
        custom_surcharge2:
          description: 'Second Custom Surcharge'
          type: number
          format: float
          example: 35.00
        custom_surcharge3:
          description: 'Third Custom Surcharge'
          type: number
          format: float
          example: 45.00
        custom_surcharge4:
          description: 'Fourth Custom Surcharge'
          type: number
          format: float
          example: 55.00
        custom_surcharge_tax1:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax2:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax3:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        custom_surcharge_tax4:
          description: 'Toggles charging taxes on custom surcharge amounts'
          type: boolean
          example: true
        project_id:
          description: 'The project associated with this credit'
          type: string
          example: Opnel5aKBz
      type: object
    User:
      properties:
        id:
          description: 'The hashed id of the user'
          type: string
          example: Opnel5aKBz
          readOnly: true
        first_name:
          description: 'The first name of the user'
          type: string
          example: Brad
        last_name:
          description: 'The last name of the user'
          type: string
          example: Pitt
        email:
          description: 'The users email address'
          type: string
          example: brad@pitt.com
        phone:
          description: 'The users phone number'
          type: string
          example: 555-1233-23232
        signature:
          description: 'The users sign off signature'
          type: string
          example: 'Have a nice day!'
        avatar:
          description: 'The users avatar'
          type: string
          example: 'https://url.to.your/avatar.png'
        accepted_terms_version:
          description: 'The version of the invoice ninja terms that has been accepted by the user'
          type: string
          example: 1.0.1
          readOnly: true
        oauth_user_id:
          description: 'The provider id of the oauth entity'
          type: string
          example: jkhasdf789as6f675sdf768sdfs
          readOnly: true
        oauth_provider_id:
          description: 'The oauth entity id'
          type: string
          example: google
          readOnly: true
        language_id:
          description: 'The language id of the user'
          type: string
          example: "1"
        verified_phone_number:
          description: 'Boolean flag if the user has their phone verified. Required to settings up 2FA'
          type: boolean
          example: true
          readOnly: true
        sms_verification_code:
          description: 'The sms verification code for the user. Required to settings up 2FA'
          type: string
          example: '123456'
          readOnly: true
        oauth_user_token_expiry:
          description: 'The expiry date of the oauth token'
          type: string
          example: '2022-10-10'
          readOnly: true
        has_password:
          description: 'Boolean flag determining if the user has a password'
          type: boolean
          example: true
          readOnly: true
        last_confirmed_email_address:
          description: 'The last confirmed email address of the user'
          type: string
          example: 'bob@gmail.com'
          readOnly: true
        custom_value1:
          description: 'A custom value'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'A custom value'
          type: string
          example: '$1000'
        custom_value3:
          description: 'A custom value'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'A custom value'
          type: string
          example: 'Custom value 4'
        is_deleted:
          description: 'Boolean flag determining if the user has been deleted'
          type: boolean
          example: true
          readOnly: true
        google_2fa_secret:
          description: 'The google 2fa secret for the user'
          type: string
          example: '123456'
          readOnly: true
        company_user:
            $ref: '#/components/schemas/CompanyUserRef'
      type: object
    UserRef:
      properties:
        id:
          description: 'The hashed id of the user'
          type: string
          example: Opnel5aKBz
          readOnly: true
        first_name:
          description: 'The first name of the user'
          type: string
          example: Brad
        last_name:
          description: 'The last name of the user'
          type: string
          example: Pitt
        email:
          description: 'The users email address'
          type: string
          example: brad@pitt.com
        phone:
          description: 'The users phone number'
          type: string
          example: 555-1233-23232
        signature:
          description: 'The users sign off signature'
          type: string
          example: 'Have a nice day!'
        avatar:
          description: 'The users avatar'
          type: string
          example: 'https://url.to.your/avatar.png'
        accepted_terms_version:
          description: 'The version of the invoice ninja terms that has been accepted by the user'
          type: string
          example: 1.0.1
          readOnly: true
        oauth_user_id:
          description: 'The provider id of the oauth entity'
          type: string
          example: jkhasdf789as6f675sdf768sdfs
          readOnly: true
        oauth_provider_id:
          description: 'The oauth entity id'
          type: string
          example: google
          readOnly: true
        language_id:
          description: 'The language id of the user'
          type: string
          example: "1"
        verified_phone_number:
          description: 'Boolean flag if the user has their phone verified. Required to settings up 2FA'
          type: boolean
          example: true
          readOnly: true
        sms_verification_code:
          description: 'The sms verification code for the user. Required to settings up 2FA'
          type: string
          example: '123456'
          readOnly: true
        oauth_user_token_expiry:
          description: 'The expiry date of the oauth token'
          type: string
          example: '2022-10-10'
          readOnly: true
        has_password:
          description: 'Boolean flag determining if the user has a password'
          type: boolean
          example: true
          readOnly: true
        last_confirmed_email_address:
          description: 'The last confirmed email address of the user'
          type: string
          example: 'bob@gmail.com'
          readOnly: true
        custom_value1:
          description: 'A custom value'
          type: string
          example: 'Custom value 1'
        custom_value2:
          description: 'A custom value'
          type: string
          example: '$1000'
        custom_value3:
          description: 'A custom value'
          type: string
          example: 'Custom value 3'
        custom_value4:
          description: 'A custom value'
          type: string
          example: 'Custom value 4'
        is_deleted:
          description: 'Boolean flag determining if the user has been deleted'
          type: boolean
          example: true
          readOnly: true
        google_2fa_secret:
          description: 'The google 2fa secret for the user'
          type: string
          example: '123456'
          readOnly: true
        oauth_user_refresh_token:
          description: 'OAuth refresh token for the user'
          type: string
          example: 'refresh_token_abc123'
        oauth_user_token:
          description: 'OAuth access token data for the user'
          type: object
          additionalProperties: true
        shopify_user_id:
          description: 'The unique identifier of the Shopify user'
          type: string
          example: '123456789'
        user_logged_in_notification:
          description: 'Flag indicating whether to send login notifications'
          type: boolean
          example: true
      type: object

    CompanyUser:
      properties:
        permissions:
          description: 'The user permissions for this company in a comma separated list'
          type: string
          example: 'create_invoice,create_client,view_client'
        settings:
          description: 'Settings that are used for the flutter applications to store user preferences / metadata'
          type: object
          readOnly: true
        react_settings:
          description: 'Dedicated settings object for the react web application'
          type: object
          readOnly: true
        is_owner:
          description: 'Determines whether the user owns this company'
          type: boolean
          example: true
          readOnly: true
        is_admin:
          description: 'Determines whether the user is the admin of this company'
          type: boolean
          example: true
          readOnly: true
        is_locked:
          description: 'Determines whether the users access to this company has been locked'
          type: boolean
          example: true
          readOnly: true
        updated_at:
          description: 'The last time the record was modified, format Unix Timestamp'
          type: integer
          example: 1231232312321
        deleted_at:
          description: 'Timestamp when the user was archived, format Unix Timestamp'
          type: integer
          example: 12312312321
        account:
          $ref: '#/components/schemas/Account'
        company:
          $ref: '#/components/schemas/Company'
        user:
          $ref: '#/components/schemas/UserRef'
        token:
          $ref: '#/components/schemas/CompanyToken'
      type: object
    CompanyUserRef:
      properties:
        permissions:
          description: 'The user permissions for this company in a comma separated list'
          type: string
          example: 'create_invoice,create_client,view_client'
        settings:
          description: 'Settings that are used for the flutter applications to store user preferences / metadata'
          type: object
          readOnly: true
        react_settings:
          description: 'Dedicated settings object for the react web application'
          type: object
          readOnly: true
        is_owner:
          description: 'Determines whether the user owns this company'
          type: boolean
          example: true
          readOnly: true
        is_admin:
          description: 'Determines whether the user is the admin of this company'
          type: boolean
          example: true
          readOnly: true
        is_locked:
          description: 'Determines whether the users access to this company has been locked'
          type: boolean
          example: true
          readOnly: true
        updated_at:
          description: 'The last time the record was modified, format Unix Timestamp'
          type: integer
          example: 1231232312321
        deleted_at:
          description: 'Timestamp when the user was archived, format Unix Timestamp'
          type: integer
          example: 12312312321
        account:
          $ref: '#/components/schemas/Account'
        company:
          $ref: '#/components/schemas/Company'
        user:
          $ref: '#/components/schemas/UserRef'
        token:
          $ref: '#/components/schemas/CompanyToken'
      type: object
    RecurringExpense:
      properties:
        id:
          description: 'The hashed id of the recurring expense'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The hashed id of the user who created the recurring expense'
          type: string
          example: Opnel5aKBz
        assigned_user_id:
          description: 'The hashed id of the user assigned to this recurring expense'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The hashed id of the client'
          type: string
          example: Opnel5aKBz
        invoice_id:
          description: 'The hashed id of the invoice'
          type: string
          example: Opnel5aKBz
        bank_id:
          description: 'The id of the bank associated with this recurring expense'
          type: string
          example: '22'
        invoice_currency_id:
          description: 'The currency id of the invoice associated with this recurring expense'
          type: string
          example: "1"
        expense_currency_id:
          description: 'The currency id of the expense associated with this recurring expense'
          type: string
          example: "1"
        invoice_category_id:
          description: 'The category id of the invoice'
          type: string
          example: "1"
        payment_type_id:
          description: 'The payment type id'
          type: string
          example: "1"
        private_notes:
          description: 'The recurring expense private notes'
          type: string
          example: 'Private and confidential'
        public_notes:
          description: 'The recurring expense public notes'
          type: string
          example: 'This is the best client in the world'
        transaction_reference:
          description: 'The recurring expense transaction reference'
          type: string
          example: EXP-1223-2333
        transcation_id:
          description: 'The transaction id of the recurring expense'
          type: string
          example: '1233312312'
        custom_value1:
          description: 'Custom value field'
          type: string
          example: $1000
        custom_value2:
          description: 'Custom value field'
          type: string
          example: '2022-10-10'
        custom_value3:
          description: 'Custom value field'
          type: string
          example: 'short text'
        custom_value4:
          description: 'Custom value field'
          type: string
          example: 'very long text'
        tax_name1:
          description: 'The tax name'
          type: string
          example: GST
        tax_name2:
          description: 'The tax name'
          type: string
          example: VAT
        tax_rate1:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        tax_name3:
          description: 'The tax name'
          type: string
          example: ''
        tax_rate3:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.00
        amount:
          description: 'The total amount of the recurring expense'
          type: number
          format: float
          example: 10.00
        frequency_id:
          description: 'The frequency this recurring expense fires'
          type: number
          format: int
          example: 1
        remaining_cycles:
          description: 'The number of remaining cycles for this recurring expense'
          type: number
          format: int
          example: 1
        foreign_amount:
          description: 'The foreign currency amount of the recurring expense'
          type: number
          format: float
          example: 10.00
        exchange_rate:
          description: 'The exchange rate for the expernse'
          type: number
          format: float
          example: 0.80
        date:
          description: 'The date of the expense'
          type: string
          example: ''
        payment_date:
          description: 'The date the expense was paid'
          type: string
          example: ''
        should_be_invoiced:
          description: 'Boolean flag determining if the expense should be invoiced'
          type: boolean
          example: true
        is_deleted:
          description: 'Boolean flag determining if the recurring expense is deleted'
          type: boolean
          example: true
        last_sent_date:
          description: 'The Date it was sent last'
          type: string
          format: date
          example: '1994-07-30'
        next_send_date:
          description: 'The next send date'
          type: string
          format: date
          example: '1994-07-30'
        invoice_documents:
          description: 'Boolean flag determining if the documents associated with this expense should be passed onto the invoice if it is converted to an invoice'
          type: boolean
          example: true
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        calculate_tax_by_amount:
          description: 'Flag indicating whether to calculate tax based on amount rather than percentage'
          type: boolean
          example: true
        category_id:
          description: 'The unique identifier of the expense category'
          type: string
          example: Opnel5aKBz
        currency_id:
          description: 'The unique identifier of the currency'
          type: string
          example: "1"
        next_send_date_client:
          description: 'The next scheduled send date for the client'
          type: string
          format: date
          example: '2024-12-31'
        number:
          description: 'The unique number assigned to this recurring expense'
          type: string
          example: 'RE-0001'
        project_id:
          description: 'The unique identifier of the project associated with this recurring expense'
          type: string
          example: Opnel5aKBz
        tax_amount1:
          description: 'The amount of the first tax'
          type: number
          format: float
          example: 10.00
        tax_amount2:
          description: 'The amount of the second tax'
          type: number
          format: float
          example: 5.00
        tax_amount3:
          description: 'The amount of the third tax'
          type: number
          format: float
          example: 2.50
        transaction_id:
          description: 'The unique identifier of the transaction'
          type: string
          example: 'txn_1234567890'
        uses_inclusive_taxes:
          description: 'Flag indicating whether taxes are included in the price'
          type: boolean
          example: true
        vendor_id:
          description: 'The unique identifier of the vendor associated with this recurring expense'
          type: string
          example: Opnel5aKBz
      type: object

    ClientContact:
      properties:
        id:
          description: 'The hashed if of the contact'
          type: string
          example: Opnel5aKBz
          readOnly: true
        user_id:
          description: 'The hashed id of the user who created the contact'
          type: string
          example: Opnel5aKBz
          readOnly: true
        client_id:
          description: 'The hashed id of the client'
          type: string
          example: Opnel5aKBz
          readOnly: true
        first_name:
          description: 'The first name of the contact'
          type: string
          example: John
        last_name:
          description: 'The last name of the contact'
          type: string
          example: Doe
        phone:
          description: 'The phone number of the contact'
          type: string
          example: 555-152-4524
        custom_value1:
          description: 'A Custom field value'
          type: string
          example: ''
        custom_value2:
          description: 'A Custom field value'
          type: string
          example: ''
        custom_value3:
          description: 'A Custom field value'
          type: string
          example: ''
        custom_value4:
          description: 'A Custom field value'
          type: string
          example: ''
        email:
          description: 'The email of the contact'
          type: string
          example: ''
        accepted_terms_version:
          description: 'The terms of service which the contact has accpeted'
          type: string
          example: 'A long set of ToS'
          readOnly: true
        password:
          description: 'The hashed password of the contact'
          type: string
          example: '*****'
        confirmation_code:
          description: 'The confirmation code used to authenticate the contacts email address'
          type: string
          example: 333-sdjkh34gbasd
          readOnly: true
        token:
          description: 'A uuid based token.'
          type: string
          example: 333-sdjkh34gbasd
          readOnly: true
        contact_key:
          description: 'A unique identifier for the contact'
          type: string
          example: JD0X52bkfZlJRiroCJ0tcSiAjsJTntZ5uqKdiZ0a
          readOnly: true
        is_primary:
          description: 'Defines is this contact is the primary contact for the client'
          type: boolean
          example: true
        confirmed:
          description: 'Boolean value confirms the user has confirmed their account.'
          type: boolean
          example: true
        is_locked:
          description: 'Boolean value defines if the contact has been locked out.'
          type: boolean
          example: true
        send_email:
          description: 'Boolean value determines is this contact should receive emails'
          type: boolean
          example: true
        failed_logins:
          description: 'The number of failed logins the contact has had'
          type: number
          format: integer
          example: 3
          readOnly: true
        email_verified_at:
          description: 'The date which the contact confirmed their email'
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        last_login:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        deleted_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
      type: object
    TaskSortRequest:
      required:
        - task_ids
      properties:
        task_ids:
          type: array
          description: 'Array of task IDs to be sorted'
          items:
            type: string
            example: 'D2J234DFA'
        status_id:
          description: 'Status ID to assign to sorted tasks'
          type: integer
          example: 1
        sort_order:
          type: array
          description: 'Array of task IDs in the desired sort order'
          items:
            type: string
            example: 'D2J234DFA'
      type: object
    Location:
      properties:
        id:
          description: 'The location hashed id'
          type: string
          example: Kd5S2M
        name:
          description: 'The location name'
          type: string
          example: 'Warehouse A'
        address1:
          description: 'The first line of the address'
          type: string
          example: '123 Business Street'
        address2:
          description: 'The second line of the address'
          type: string
          example: 'Suite 100'
        city:
          description: 'The city name'
          type: string
          example: 'San Francisco'
        state:
          description: 'The state or region'
          type: string
          example: 'CA'
        postal_code:
          description: 'The postal or zip code'
          type: string
          example: '94107'
        country_id:
          description: 'The ID of the associated country'
          type: string
          example: '840'
        custom_value1:
          description: 'Custom field value 1'
          type: string
          nullable: true
        custom_value2:
          description: 'Custom field value 2'
          type: string
          nullable: true
        custom_value3:
          description: 'Custom field value 3'
          type: string
          nullable: true
        custom_value4:
          description: 'Custom field value 4'
          type: string
          nullable: true
        is_deleted:
          description: 'Indicates if the location has been deleted'
          type: boolean
          example: false
        is_shipping_location:
          description: 'Indicates if this is a shipping location'
          type: boolean
          example: true
        user_id:
          description: 'The user hashed id'
          type: string
          example: Opnel5aKBz
          readOnly: true
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The client hashed id'
          type: string
          example: Opnel5aKBz
        vendor_id:
          description: 'The vendor hashed id'
          type: string
          example: Opnel5aKBz
        created_at:
          description: 'Timestamp of when the location was created'
          type: integer
          example: 1623456789
        updated_at:
          description: 'Timestamp of when the location was last updated'
          type: integer
          example: 1623456999
      type: object 
    Expense:
      properties:
        id:
          description: 'The expense hashed id'
          type: string
          example: 'Opnel5aKBz'
        user_id:
          description: 'The user hashed id'
          type: string
          example: 'Opnel5aKBz'
        assigned_user_id:
          description: 'The assigned user hashed id'
          type: string
          example: 'Opnel5aKBz'
        project_id:
          description: 'The associated project_id'
          type: string
          example: 'Opnel5aKBz'  
        client_id:
          description: 'The client hashed id'
          type: string
          example: 'Opnel5aKBz'
        invoice_id:
          description: 'The related invoice hashed id'
          type: string
          example: 'Opnel5aKBz'
        bank_id:
          description: 'The bank id related to this expense'
          type: string
          example: ''
        invoice_currency_id:
          description: 'The currency id of the related invoice'
          type: string
          example: '1'
        currency_id:
          description: 'The currency id of the expense'
          type: string
          example: '2'
        invoice_category_id:
          description: 'The invoice category id'
          type: string
          example: 'Opnel5aKBz'
        payment_type_id:
          description: 'The payment type id'
          type: string
          example: ''
        recurring_expense_id:
          description: 'The related recurring expense this expense was created from'
          type: string
          example: 'Opnel5aKBz'
        private_notes:
          description: 'The private notes of the expense'
          type: string
          example: ''
        public_notes:
          description: 'The public notes of the expense'
          type: string
          example: ''
        transaction_reference:
          description: 'The transaction references of the expense'
          type: string
          example: ''
        transcation_id:
          description: 'The transaction id of the expense'
          type: string
          example: ''
        custom_value1:
          description: 'A custom value'
          type: string
          example: ''
        custom_value2:
          description: 'A custom value'
          type: string
          example: ''
        custom_value3:
          description: 'A custom value'
          type: string
          example: ''
        custom_value4:
          description: 'A custom value'
          type: string
          example: ''
        tax_amount:
          description: 'The tax amount'
          type: number
          example: 10.00
        tax_name1:
          description: 'Tax Name 1'
          type: string
          example: 'GST'
        tax_name2:
          description: 'Tax Name 2'
          type: string
          example: 'VAT'
        tax_name3:
          description: 'Tax Name 3'
          type: string
          example: 'IVA'
        tax_rate1:
          description: 'Tax rate 1'
          type: number
          format: float
          example: 10.00
        tax_rate2:
          description: 'Tax rate 2'
          type: number
          format: float
          example: 10.00
        tax_rate3:
          description: 'Tax rate 3'
          type: number
          format: float
          example: 10.00
        amount:
          description: 'The total expense amont'
          type: number
          format: float
          example: 10.00
        foreign_amount:
          description: 'The total foreign amount of the expense'
          type: number
          format: float
          example: 10.00
        exchange_rate:
          description: 'The exchange rate at the time of the expense'
          type: number
          format: float
          example: 0.80
        date:
          description: 'The expense date format Y-m-d'
          type: string
          example: '2022-12-01'
        payment_date:
          description: 'The date of payment for the expense, format Y-m-d'
          type: string
          example: '2022-12-01'
        should_be_invoiced:
          description: 'Flag whether the expense should be invoiced'
          type: boolean
          example: true
        is_deleted:
          description: 'Boolean determining whether the expense has been deleted'
          type: boolean
          example: true
        invoice_documents:
          description: 'Passing the expense documents over to the invoice'
          type: boolean
          example: true
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
        calculate_tax_by_amount:
          description: 'Flag indicating whether to calculate tax based on amount rather than percentage'
          type: boolean
          example: true
        category_id:
          description: 'The unique identifier of the expense category'
          type: string
          example: Opnel5aKBz
        number:
          description: 'The unique number assigned to this expense'
          type: string
          example: 'EXP-0001'
        purchase_order_id:
          description: 'The unique identifier of the associated purchase order'
          type: string
          example: Opnel5aKBz
        tax_amount1:
          description: 'The amount of the first tax'
          type: number
          format: float
          example: 10.00
        tax_amount2:
          description: 'The amount of the second tax'
          type: number
          format: float
          example: 5.00
        tax_amount3:
          description: 'The amount of the third tax'
          type: number
          format: float
          example: 2.50
        transaction_id:
          description: 'The unique identifier of the transaction'
          type: string
          example: 'txn_1234567890'
        uses_inclusive_taxes:
          description: 'Flag indicating whether taxes are included in the price'
          type: boolean
          example: true
        vendor_id:
          description: 'The unique identifier of the vendor associated with this expense'
          type: string
          example: Opnel5aKBz
      type: object

    Task:
      properties:
        id:
          description: 'The hashed id of the task'
          type: string
          example: Opnel5aKBz
        user_id:
          description: 'The hashed id of the user who created the task'
          type: string
          example: Opnel5aKBz
        assigned_user_id:
          description: 'The assigned user of the task'
          type: string
          example: Opnel5aKBz
        client_id:
          description: 'The hashed if of the client'
          type: string
          example: Opnel5aKBz
        invoice_id:
          description: 'The hashed id of the invoice associated with the task'
          type: string
          example: Opnel5aKBz
        project_id:
          description: 'The hashed id of the project associated with the task'
          type: string
          example: Opnel5aKBz
        number:
          description: 'The number of the task'
          type: string
          example: TASK-123
        time_log:
          description: 'An array of unix time stamps defining the start and end times of the task'
          type: string
          example: '[[1,2],[3,4]]'
        is_running:
          description: 'Determines if the task is still running'
          type: boolean
          example: true
        is_deleted:
          description: 'Boolean flag determining if the task has been deleted'
          type: boolean
          example: true
        task_status_id:
          description: 'The hashed id of the task status'
          type: string
          example: Opnel5aKBz
        description:
          description: 'The task description'
          type: string
          example: 'A wonder task to work on'
        duration:
          description: 'The task duration in seconds'
          type: integer
          example: 3600
        task_status_order:
          description: 'The order of the task'
          type: integer
          example: 4
        rate:
          description: 'The task rate'
          type: number
          example: 10.00
        custom_value1:
          description: 'A custom value'
          type: string
          example: '2022-10-10'
        custom_value2:
          description: 'A custom value'
          type: string
          example: $1100
        custom_value3:
          description: 'A custom value'
          type: string
          example: 'I need help'
        custom_value4:
          description: 'A custom value'
          type: string
          example: INV-3343
        is_date_based:
          description: 'Boolean flag determining if the task is date based'
          type: boolean
          example: true
        calculated_start_date:
          description: 'The calculated start date of the task'
          type: string
          example: '2022-10-10'
          readOnly: true
        invoice_documents:
          description: "Boolean flags which determines whether to include the task documents on the invoice"
          type: boolean
          example: true
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        archived_at:
          description: Timestamp
          type: number
          format: integer
          example: 1434342123
          readOnly: true
        hash:
          description: 'Unique hash identifier for this task'
          type: string
          example: 'a1b2c3d4e5f6'
        meta:
          description: 'Metadata associated with this task'
          type: object
          additionalProperties: true
        status_id:
          description: 'The unique identifier of the task status'
          type: string
          example: Opnel5aKBz
        status_order:
          description: 'Sort order for status display'
          type: integer
          example: 1
        status_sort_order:
          description: 'Alternative sort order for status'
          type: integer
          example: 1
      type: object


    FeesAndLimits:
      properties:
        min_limit:
          description: 'The minimum amount accepted for this gateway'
          type: string
          example: '2'
        max_limit:
          description: 'The maximum amount accepted for this gateway'
          type: string
          example: '2'
        fee_amount:
          description: 'The gateway fee amount'
          type: number
          format: float
          example: 2.0
        fee_percent:
          description: 'The gateway fee percentage'
          type: number
          format: float
          example: 2.0
        fee_tax_name1:
          description: 'Fee tax name'
          type: string
          example: GST
        fee_tax_name2:
          description: 'Fee tax name'
          type: string
          example: VAT
        fee_tax_name3:
          description: 'Fee tax name'
          type: string
          example: 'CA Sales Tax'
        fee_tax_rate1:
          description: 'The tax rate'
          type: number
          format: float
          example: 10.0
        fee_tax_rate2:
          description: 'The tax rate'
          type: number
          format: float
          example: 17.5
        fee_tax_rate3:
          description: 'The tax rate'
          type: number
          format: float
          example: 25.0
        fee_cap:
          description: 'If set the fee amount will be no higher than this amount'
          type: number
          format: float
          example: 2.0
        adjust_fee_percent:
          description: 'Adjusts the fee to match the exact gateway fee.'
          type: boolean
          example: true
      type: object
    Vendor:
      properties:
        id:
          description: 'The hashed id of the vendor. This is a unique identifier for the vendor.'
          type: string
          example: Opnel5aKBz
          readOnly: true
        user_id:
          description: 'The hashed id of the user who created the vendor. This is a unique identifier for the user.'
          type: string
          example: Opnel5aKBz
        assigned_user_id:
          description: 'The hashed id of the assigned user to this vendor. This is a unique identifier for the user.'
          type: string
          example: Opnel5aKBz
        contacts:
          type: array
          items:
            $ref: '#/components/schemas/VendorContact'
          description: 'An array of contacts associated with the vendor.'
        name:
          description: 'The name of the vendor.'
          type: string
          example: 'Harry cafe de wheels'
        classification:
          description: 'The classification of the vendor.'
          type: string
          example: 'individual'
        website:
          description: 'The website of the vendor.'
          type: string
          example: www.harry.com
        private_notes:
          description: 'The private notes of the vendor. These notes are only visible to users with appropriate permissions.'
          type: string
          example: 'Shhh, do not tell the vendor'
        industry_id:
          description: 'The industry id of the vendor. This is a unique identifier for the industry.'
          type: string
          example: '1'
        size_id:
          description: 'The size id of the vendor. This is a unique identifier for the size of the vendor.'
          type: string
          example: ''
        address1:
          description: 'The first line of the vendor''s address.'
          type: string
          example: ''
        address2:
          description: 'The second line of the vendor''s address.'
          type: string
          example: ''
        city:
          description: 'The city of the vendor''s address.'
          type: string
          example: ''
        state:
          description: 'The state of the vendor''s address.'
          type: string
          example: ''
        postal_code:
          description: 'The postal code of the vendor''s address.'
          type: string
          example: ''
        phone:
          description: 'The phone number of the vendor.'
          type: string
          example: 555-3434-3434
        country_id:
          description: 'The country id of the vendor. This is a unique identifier for the country.'
          type: string
          example: ''
        currency_id:
          description: 'The currency id of the vendor. This is a unique identifier for the currency.'
          type: string
          example: '4'
        custom_value1:
          description: 'The value of the first custom field for the vendor.'
          type: string
          example: ''
        custom_value2:
          description: 'The value of the second custom field for the vendor.'
          type: string
          example: ''
        custom_value3:
          description: 'The value of the third custom field for the vendor.'
          type: string
          example: ''
        custom_value4:
          description: 'The value of the fourth custom field for the vendor.'
          type: string
          example: ''
        vat_number:
          description: 'The VAT number of the vendor.'
          type: string
          example: ''
        id_number:
          description: 'The ID number of the vendor.'
          type: string
          example: ''
        number:
          description: 'The number of the vendor'
          type: string
          example: '11234'
        is_deleted:
          description: 'Boolean flag determining if the vendor has been deleted'
          type: boolean
          example: true
        language_id:
          description: 'The language id of the vendor. This is a unique identifier for the language.'
          type: string
          example: '1'
        vendor_hash:
          description: 'The vendor hash of the vendor. This is a unique identifier for the vendor.'
          type: string
          example: 'aaa-sss-www'
          readOnly: true
        transaction_name:
          description: 'The transaction name of the vendor.'
          type: string
          example: 'aaa-sss-www'
        last_login:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        created_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        updated_at:
          description: Timestamp
          type: number
          format: integer
          example: 134341234234
          readOnly: true
        display_name:
          description: 'The display name of the vendor.'
          type: string
          example: 'Bob the vendor'
          readOnly: true
        is_tax_exempt:
          description: 'Flag indicating whether the vendor is exempt from taxes'
          type: boolean
          example: false
        public_notes:
          description: 'Notes that are visible to the vendor'
          type: string
          example: 'These are public notes visible to vendors'
        routing_id:
          description: 'The routing identifier for e-invoicing'
          type: string
          example: '0088:12345678901'
      type: object

tags:
  - name: auth
    x-displayName: Authentication
    description: |
      Attempts to authenticate with the API using a email/password combination.
    
      After authenticating with the API, the returned object is a CompanyUser object which is a bridge linking the user to the company. 

      The company user object contains the users permissions (admin/owner or fine grained permissions) You will most likely want to 
        also include in the response of this object both the company and the user object, this can be done by using the include parameter.

      ```html
      /api/v1/login?include=company,user
      ```

  - name: clients
    x-displayName: Clients
    description: |
      The Clients API provides endpoints for managing client records within your company. A client represents a customer 
      or business entity that you provide services or products to.

      ### Key Features
      - Create, read, update, and delete client records
      - Manage client contact information and billing details
      - View client-specific transaction history
      - Handle multiple contacts per client
      - Track client-specific settings and preferences

      ### Client Statuses
      - Active: Client is currently active and can be billed
      - Archived: Client is archived and hidden from active lists
      - Deleted: Client is marked for deletion but retained in the database

      ### Best Practices
      - Always validate client email addresses
      - Use unique client numbers for easy reference
      - Keep contact information up to date
      - Set appropriate client-specific currency and tax settings

  - name: locations
    x-displayName: Locations
    description: |
      The Locations API provides endpoints for managing location records within your company. A location represents a physical 
      address where you provide services or products to a client OR vendor.

  - name: products
    x-displayName: Products
    description: |
      Endpoint definitions for interacting with products.
  - name: invoices
    x-displayName: Invoices
  
    description: |

      ## Invoice Statuses
      
      - STATUS_DRAFT = 1
        - Draft invoices are not visible in the client portal, are not active and they do not impact the client balance
      - STATUS_SENT = 2
        - Send invoices are visible in the client portal, are active and impact the client balance
      - STATUS_PARTIAL = 3
        - An invoice which has been partially paid
      - STATUS_PAID = 4
        - An invoice which has been fully paid
      - STATUS_CANCELLED = 5
        - When a invoice is cancelled the invoice balance is set to zero and the status updated to Cancelled, the client balance is also adjusted down. If payments have been applied to the invoice these will remain linked to the invoice
      - STATUS_REVERSED = 6
        - When a invoice has been reversed, the previous payments relationships are unlinked and cannot be restored
      - STATUS_OVERDUE = -1
        - An invoice which is still payable past its due date
      - STATUS_UNPAID = -2
        - An invoice which is not yet due, but also, not paid
        
  - name: Recurring Invoices
    x-displayName: Recurring Invoices
    description: |
      Endpoint definitions for interacting with recurring_invoices.

  - name: Recurring-Invoices
    x-displayName: Recurring Invoices
    description: |
      Endpoint definitions for interacting with recurring_invoices.

  - name: payments
    x-displayName: Payments
    description: |
      Endpoint definitions for interacting with payments.
  
  - name: quotes
    x-displayName: Quotes
    description: |
      Endpoint definitions for interacting with quotes.

  - name: credits
    x-displayName: Credits
    description: |
      Endpoint definitions for interacting with credits.

  - name: projects
    x-displayName: Projects
    description: |
      Endpoint definitions for interacting with projects.

  - name: tasks
    x-displayName: Tasks
    description: |
      Endpoint definitions for interacting with tasks.

  - name: vendors
    x-displayName: Vendors
    description: |
      Endpoint definitions for interacting with vendors.

  - name: Purchase Orders
    x-displayName: Purchase Orders
    description: |
      Endpoint definitions for interacting with purchase orders.

  - name: Purchase-Orders
    x-displayName: Purchase Orders
    description: |
      Endpoint definitions for interacting with purchase orders.

  - name: expenses
    x-displayName: Expenses
    description: |
      Endpoint definitions for interacting with expenses.

  - name: recurring_expenses
    x-displayName: Recurring Expenses
    description: |
      Endpoint definitions for interacting with recurring_expenses.

  - name: bank_transactions
    x-displayName: Bank Transactions
    description: |
      Endpoint definitions for interacting with bank transactions.

  - name: reports
    x-displayName: Reports
    description: |
      Endpoint definitions for interacting with reports.

  - name: activities
    x-displayName: Activities
    description: |
      Endpoint definitions for interacting with activities.

  - name: bank_integrations
    x-displayName: Bank Integrations
    description: |
      Endpoint definitions for interacting with bank integrations.

  - name: bank_transaction_rules
    x-displayName: Bank Transaction Rules
    description: |
      Endpoint definitions for interacting with bank transaction rules.

  - name: charts
    x-displayName: Charts
    description: |
      Endpoint definitions for interacting with charts.

  - name: claim_license
    x-displayName: Claim License
    description: |
      Endpoint definitions for claiming licenses.

  - name: client_gateway_tokens
    x-displayName: Client Gateway Tokens
    description: |
      Endpoint definitions for interacting with client gateway tokens.

  - name: companies
    x-displayName: Companies
    description: |
      Endpoint definitions for interacting with companies.

  - name: company_gateways
    x-displayName: Company Gateways
    description: |
      Endpoint definitions for interacting with company gateways.

  - name: company_ledger
    x-displayName: Company Ledger
    description: |
      Endpoint definitions for interacting with company ledger.

  - name: company_user
    x-displayName: Company User
    description: |
      Endpoint definitions for interacting with company users.

  - name: connected_account
    x-displayName: Connected Account
    description: |
      Endpoint definitions for connecting accounts.

  - name: Credits
    x-displayName: Credits
    description: |
      Endpoint definitions for interacting with credits.

  - name: designs
    x-displayName: Designs
    description: |
      Endpoint definitions for interacting with designs.

  - name: documents
    x-displayName: Documents
    description: |
      Endpoint definitions for interacting with documents.

  - name: emails
    x-displayName: Emails
    description: |
      Endpoint definitions for sending emails.

  - name: expense
    x-displayName: Expense
    description: |
      Endpoint definitions for interacting with expense documents.

  - name: expense_categories
    x-displayName: Expense Categories
    description: |
      Endpoint definitions for interacting with expense categories.

  - name: export
    x-displayName: Export
    description: |
      Endpoint definitions for exporting data.

  - name: group_settings
    x-displayName: Group Settings
    description: |
      Endpoint definitions for interacting with group settings.

  - name: health_check
    x-displayName: Health Check
    description: |
      Endpoint definitions for health checks.

  - name: import
    x-displayName: Import
    description: |
      Endpoint definitions for importing data.

  - name: imports
    x-displayName: Imports
    description: |
      Endpoint definitions for pre-import operations.

  - name: logout
    x-displayName: Logout
    description: |
      Endpoint definitions for logging out.

  - name: migration
    x-displayName: Migration
    description: |
      Endpoint definitions for migration operations.

  - name: one_time_token
    x-displayName: One Time Token
    description: |
      Endpoint definitions for one-time tokens.

  - name: payment_terms
    x-displayName: Payment Terms
    description: |
      Endpoint definitions for interacting with payment terms.

  - name: payment_termss
    x-displayName: Payment Terms
    description: |
      Endpoint definitions for payment terms operations.

  - name: ping
    x-displayName: Ping
    description: |
      Endpoint definitions for ping operations.

  - name: postmark
    x-displayName: Postmark
    description: |
      Endpoint definitions for Postmark webhooks.

  - name: preview
    x-displayName: Preview
    description: |
      Endpoint definitions for PDF previews.

  - name: recurring_expense
    x-displayName: Recurring Expense
    description: |
      Endpoint definitions for recurring expense documents.

  - name: recurring_quotes
    x-displayName: Recurring Quotes
    description: |
      Endpoint definitions for interacting with recurring quotes.

  - name: refresh
    x-displayName: Refresh
    description: |
      Endpoint definitions for refreshing data.

  - name: scheduler
    x-displayName: Scheduler
    description: |
      Endpoint definitions for scheduler operations.

  - name: search
    x-displayName: Search
    description: |
      Endpoint definitions for search operations.

  - name: statics
    x-displayName: Statics
    description: |
      Endpoint definitions for static data.

  - name: subscriptions
    x-displayName: Subscriptions
    description: |
      Endpoint definitions for interacting with subscriptions.

  - name: support
    x-displayName: Support
    description: |
      Endpoint definitions for support operations.

  - name: system_logs
    x-displayName: System Logs
    description: |
      Endpoint definitions for system logs.

  - name: task_schedulers
    x-displayName: Task Schedulers
    description: |
      Endpoint definitions for interacting with task schedulers.

  - name: task_status
    x-displayName: Task Status
    description: |
      Endpoint definitions for interacting with task statuses.

  - name: task_statuss
    x-displayName: Task Status
    description: |
      Endpoint definitions for task status operations.

  - name: tax_rates
    x-displayName: Tax Rates
    description: |
      Endpoint definitions for interacting with tax rates.

  - name: templates
    x-displayName: Templates
    description: |
      Endpoint definitions for template operations.

  - name: tokens
    x-displayName: Tokens
    description: |
      Endpoint definitions for interacting with tokens.

  - name: update
    x-displayName: Update
    description: |
      Endpoint definitions for system updates.

  - name: users
    x-displayName: Users
    description: |
      Endpoint definitions for interacting with users.

  - name: webcron
    x-displayName: Webcron
    description: |
      Endpoint definitions for webcron operations.

  - name: webhooks
    x-displayName: Webhooks
    description: |
      Endpoint definitions for interacting with webhooks.

  - name: Webhooks
    x-displayName: Webhooks
    description: |
      Endpoint definitions for webhook operations.

  - name: yodlee
    x-displayName: Yodlee
    description: |
      Endpoint definitions for Yodlee webhooks.

externalDocs:
  description: "Client Libraries"
  url: 'https://invoiceninja.github.io'
  x-libraries:
    - name: PHP SDK
      description: Official PHP client library
      url: https://github.com/invoiceninja/sdk-php
      packageUrl: https://packagist.org/packages/invoiceninja/sdk-php
      language: PHP
    - name: User Guide
      description: Official user guide
      url: https://invoiceninja.github.io

security:
  - ApiKeyAuth: []
    