OpenAPI Specification v1.7

openapi: 3.0.1
info:
  contact:
    email: [email protected]
  description: This API allows the Roadsync clients to manage aspects of the RoadSync
    service via an API.
  license:
    name: Copyright (c) 2020, RoadSync Inc.
  title: Client API v1.7
  version: 1.7.11
  x-api-id: 3ea39084-d8df-11ea-ad77-0017b600647f
  x-audience: external-partner
servers:
- url: https://client-api.staging.roadsync.com/{basePath}
  variables:
    Product:
      default: ClientApi
    basePath:
      default: v1
security: []
tags:
- description: Secured Admin-only calls
  name: admins
- description: Operations available to regular developers
  name: developers
- description: Invoice operations
  name: invoice
- description: Department operations
  name: department
- description: Company location operations
  name: location
- description: Unauthenticated operations not otherwise functionally categorized
  name: unauthenticated
- description: Authenticated operations not otherwise functionally categorized
  name: authenticated
- description: Product operations (company)
  name: product
- description: Shift operations (company/ location)
  name: shift
paths:
  /department/list:
    get:
      description: Retrieve a list of departments for a location
      operationId: department_list_get
      parameters:
      - explode: true
        in: query
        name: locationId
        required: true
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepartmentListResponse'
          description: A department list response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve a list of departments for a location
      tags:
      - department
    options:
      operationId: department_list_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - department
  /invoice/archive/{invoiceId}:
    get:
      description: 'Archive an invoice by Id.

        Note this is same function as /invoice/{invoiceId} DELETE for clients that
        only support OPTIONS,GET,POST.

        '
      operationId: invoice_archive_get
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: An invoice archive response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Archive an invoice by Id
      tags:
      - invoice
    options:
      operationId: invoice_archive_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
    parameters:
    - explode: true
      in: path
      name: invoiceId
      required: true
      schema:
        $ref: '#/components/schemas/HashedId'
      style: simple
  /invoice/create:
    options:
      operationId: invoice_create_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
    post:
      description: Create an invoice
      operationId: invoice_create_post
      requestBody:
        $ref: '#/components/requestBodies/InvoiceCreateRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: An invoice response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Create an invoice
      tags:
      - invoice
  /invoice/list:
    get:
      description: Retrieve a list of invoices
      operationId: invoice_list_get
      parameters:
      - description: 'Retrieve a list of invoices per company. Note that most users
          will have access to only one (their own) company and typically only

          SuperAdmins will be able to access invoices from multiple companies.

          paidState is optional with companyId and defaults to ''NA''

          '
        explode: true
        in: query
        name: companyId
        required: false
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      - description: 'Get a list of invoices filtered by location

          '
        explode: true
        in: query
        name: locationId
        required: false
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      - description: 'companyId is required with paidState. If no companyId is provided
          the default is the default from UserInfo if available.

          Providing paidState without a companyId will return a BadRequestError

          '
        explode: true
        in: query
        name: paidState
        required: false
        schema:
          $ref: '#/components/schemas/PaidStateEnum'
        style: form
      - explode: true
        in: query
        name: invoiceids
        required: false
        schema:
          items:
            $ref: '#/components/schemas/HashedId'
          maxItems: 20
          type: array
        style: form
      - explode: true
        in: query
        name: fromcreated
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - explode: true
        in: query
        name: tocreated
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - explode: true
        in: query
        name: archived
        required: false
        schema:
          type: boolean
        style: form
      - explode: true
        in: query
        name: customercompanyname
        required: false
        schema:
          maxLength: 256
          pattern: ^.*$
          type: string
        style: form
      - explode: true
        in: query
        name: customerid
        required: false
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      - explode: true
        in: query
        name: departmentid
        required: false
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      - explode: true
        in: query
        name: excludeauthorized
        required: false
        schema:
          type: boolean
        style: form
      - explode: true
        in: query
        name: fromauth
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - explode: true
        in: query
        name: fromdel
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - explode: true
        in: query
        name: fromsentdate
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - description: "The default DefaultPageSize is 20.\nThe original idea was this:\
          \ Ignore the 'limit' and return 20 items.\nHowever, the way this is implemented\
          \ in the backend is this:\nif (limit or offset or ignoreLimit) {\n  if limit\
          \ > 0 { // A specific value between 1 and 20 inclusive retrieves that many\
          \ items\n    if limit <= DefaultPageSize {\n      retrieve(limit)\n    }\
          \ else {\n      retrieve(DefaultPageSize)\n    }\n  } else\n    if ignoreLimit\
          \ == false {\n      retrieve(DefaultPageSize)\n  }\n} else {\n  retrieve(DefaultPageSize)\n\
          }\n\nThis makes ignoreLimit semantics basically useless in that it is only\
          \ considered if limit==0 and then it is the same as limit=DefaultPageSize!\n\
          \nRecommendation: NEVER use ignoreLimit. Only use offset and limit.\n\n\
          In v2 of the API ignoreLimit will be silently ignored and have no effect\
          \ on results whatsoever.\n"
        explode: true
        in: query
        name: ignoreLimit
        required: false
        schema:
          type: boolean
        style: form
      - explode: true
        in: query
        name: includeregular
        required: false
        schema:
          type: boolean
        style: form
      - explode: true
        in: query
        name: includevoided
        required: false
        schema:
          type: boolean
        style: form
      - explode: true
        in: query
        name: initialinvoicetypes
        required: false
        schema:
          items:
            $ref: '#/components/schemas/InvoiceType'
          maxItems: 64
          type: array
        style: form
      - explode: true
        in: query
        name: invoicestatuses
        required: false
        schema:
          items:
            $ref: '#/components/schemas/InvoiceStatus'
          maxItems: 16
          type: array
        style: form
      - explode: true
        in: query
        name: invoicetypes
        required: false
        schema:
          items:
            $ref: '#/components/schemas/InvoiceType'
          maxItems: 16
          type: array
        style: form
      - explode: true
        in: query
        name: isassignedtocustomer
        required: false
        schema:
          type: boolean
        style: form
      - description: 'Upper limit for number of items to return. A number >= 1 and
          <= 20. Default: 20'
        explode: true
        in: query
        name: limit
        required: false
        schema:
          $ref: '#/components/schemas/Count'
        style: form
      - explode: true
        in: query
        name: locationids
        required: false
        schema:
          items:
            $ref: '#/components/schemas/HashedId'
          maxItems: 16
          type: array
        style: form
      - description: 'The offset of the requested page of "limit" items to retrieve.
          If there are 50 invoices and "limit"

          is not provided then items 0 through 19 will be returned by default. If
          "offset" is 10, then

          items 11 through <limit> will be returned.

          '
        explode: true
        in: query
        name: offset
        required: false
        schema:
          $ref: '#/components/schemas/Count'
        style: form
      - explode: true
        in: query
        name: search
        required: false
        schema:
          maxLength: 2048
          pattern: ^.*$
          type: string
        style: form
      - explode: true
        in: query
        name: shiftid
        required: false
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      - explode: true
        in: query
        name: temporarycustomername
        required: false
        schema:
          maxLength: 256
          pattern: ^.*$
          type: string
        style: form
      - explode: true
        in: query
        name: toauth
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - explode: true
        in: query
        name: todel
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - explode: true
        in: query
        name: tosentdate
        required: false
        schema:
          $ref: '#/components/schemas/DateTime'
        style: form
      - description: Timeout in seconds for searching for invoices that meet the criteria.
          If the search exceeds this limit a Continuation response will be sent and
          optionally (if asyncResult == true and asynchronous results are availble)
          an asyncronous result set token.
        explode: true
        in: query
        name: timeout
        required: false
        schema:
          default: 19.0
          format: float
          maximum: 29.0
          minimum: 1.0
          type: number
        style: form
      - description: Turn on/off the asynchronous result set for this request if the
          `timeout` time is exceeded during the execution of this search.
        explode: true
        in: query
        name: asyncResult
        required: false
        schema:
          default: true
          type: boolean
        style: form
      - description: Optionally indicate on subsequent search request (typically with
          the same filters) where the search in the master list of invoices should
          be resumed.
        explode: true
        in: query
        name: searchStart
        required: false
        schema:
          default: 0
          format: int64
          minimum: 0
          type: number
        style: form
      - description: Optionally indicate on subsequent search request (typically with
          the same filters) where the search in the master list of invoices should
          be resumed.
        explode: true
        in: query
        name: resultToken
        required: false
        schema:
          maxLength: 256
          pattern: ^.*$
          type: string
        style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceListResponse'
          description: An invoice list response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve a list of invoices
      tags:
      - invoice
    options:
      operationId: invoice_list_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
  /invoice/report:
    get:
      description: Retrieve an invoice report in the designated format
      operationId: invoice_report_get
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceReportResponse'
          description: An invoice report
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve an invoice report in the designated format
      tags:
      - invoice
    options:
      operationId: invoice_report_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
    parameters:
    - description: 'The format of the report. CSV is the default. Valid values are:
        CSV'
      explode: true
      in: query
      name: format
      required: false
      schema:
        $ref: '#/components/schemas/FormatEnum'
      style: form
  /invoice/search:
    options:
      operationId: invoice_search_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
    post:
      description: "Search for invoices with search criteria and retrieve a paged\
        \ list of invoices.\n\nValid filters are:\n- All valid parameters of /invoice/list\n\
        - Filters specific to /invoice/search as detailed below. TODO\n\nPagination\
        \ has the defaults as specified in its schema, but 'pagination' is an optional\
        \ search request attribute!\nFilters can have three items that apply to pagination\
        \ (Supported by /invoice/list and factored in for compatibility):\n- offset\n\
        - limit\n- ignoreLimit\nThe precedence of these filter items and pagination\
        \ attributes are as follows:\n- No attributes from either set provided: Pagination\
        \ defaults apply\n- No Pagination and some 'pagination' filters: Pagination\
        \ defaults with overrides as follows when applicable:\n  PageNumber: offset\
        \ / ItemsPerPage\n  TotalItems: limit if ignoreLimit==false else ItemsPerPage\n\
        \  TotalPages: 1\n  ItemsPerPage: 20\n- Pagination provided: limit filters\
        \ are completely ignored\n\nNOTE: The following pattern in the request body/shape\
        \ constitutes a request for \"the default Pagination settings\"\nand will\
        \ cause 'limit' filters to be IGNORED because you are providing explicit Pagination:\n\
        {\n  \"pagination\": \"\"\n}\n\nFilters:\n- Valid parameters of /invoice/list\n\
        Examples:\n  Include voided invoices:\n\n      \"filters\": [\n        {\n\
        \          \"type\": \"boolean\",\n          \"field\": \"includevoided\"\
        ,\n          \"value\": \"true\"\n        }\n      ]\n\n  Multiple, specific\
        \ invoices:\n\n      \"filters\": [\n        {\n          \"type\": \"list\"\
        ,\n          \"field\": \"invoiceids\",\n          \"value\": \"A1A1A1A1A1A1A1A1,B2B2B2B2B2B2B2B2,C3C3C3C3C3C3C3C3\"\
        \n        }\n      ]\n\n  Weak pagination via limit and offset:\n\n      \"\
        filters\": [\n        {\n          \"type\": \"integer\",\n          \"field\"\
        : \"limit\",\n          \"value\": \"10\"\n        },\n        {\n       \
        \   \"type\": \"integer\",\n          \"field\": \"offset\",\n          \"\
        value\": \"10\"\n        },\n        {\n          \"type\": \"boolean\",\n\
        \          \"field\": \"includevoided\",\n          \"value\": \"true\"\n\
        \        }\n      ]\n\n  Better pagination:\n\n      \"filters\": [\n    \
        \    {\n          \"type\": \"boolean\",\n          \"field\": \"includevoided\"\
        ,\n          \"value\": \"true\"\n        }\n      ],\n      \"pagination\"\
        : {\n        \"TotalItems\": 20,\n        \"ItemsPerPage\": 10,\n        \"\
        PageNumber\": 2\n      }\n"
      operationId: invoice_search_post
      requestBody:
        $ref: '#/components/requestBodies/InvoiceSearchRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceSearchResponse'
          description: An invoice list response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Search for invoices
      tags:
      - invoice
  /invoice/stats:
    get:
      description: Retrieve invoices statistics
      operationId: invoice_stats_get
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceStatsResponse'
          description: An invoices statistics response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve invoices statistics
      tags:
      - invoice
    options:
      operationId: invoice_stats_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
  /invoice/update:
    options:
      operationId: invoice_update_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
    post:
      description: Update an invoice
      operationId: invoice_update_post
      requestBody:
        $ref: '#/components/requestBodies/InvoiceUpdateRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: An invoice response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Update an invoice
      tags:
      - invoice
  /invoice/{invoiceId}:
    delete:
      description: Archive an invoice by Id
      operationId: invoice_archive_delete
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: An invoice response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Archive an invoice by Id
      tags:
      - invoice
    get:
      description: Retrieve an invoice by Id
      operationId: invoice_get_get
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceResponse'
          description: An invoice response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve an invoice by Id
      tags:
      - invoice
    options:
      operationId: invoice_get_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - invoice
    parameters:
    - explode: true
      in: path
      name: invoiceId
      required: true
      schema:
        $ref: '#/components/schemas/HashedId'
      style: simple
  /location/list:
    get:
      description: 'Retrieve a list of company locations. If no CompanyId is provided
        the user''s companyId is used (if set).

        If the user''s company Id is also not set and error will be returned.

        '
      operationId: location_list_get
      parameters:
      - explode: true
        in: query
        name: companyId
        required: false
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LocationListResponse'
          description: A location list response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve a list of company locations
      tags:
      - location
    options:
      operationId: location_list_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - location
  /login:
    options:
      operationId: login_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - unauthenticated
    post:
      description: Validate credentials and establish session
      operationId: login_post
      requestBody:
        $ref: '#/components/requestBodies/LoginRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoginResponse'
          description: A login response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      summary: Accepts user credentials for validation, create a session and returns
        a session token
      tags:
      - unauthenticated
  /logout:
    get:
      description: End session
      operationId: logout_get
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogoutResponse'
          description: A logout response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Log user out and invalidate session token
      tags:
      - authenticated
    options:
      operationId: logout_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - authenticated
  /ping:
    get:
      description: Test backend connectivity
      operationId: ping_get
      parameters:
      - explode: true
        in: query
        name: pong
        required: false
        schema:
          maxLength: 2048
          pattern: ^.*$
          type: string
        style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PingResponse'
          description: A backend test response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      summary: Does roundtrip with the backend API
      tags:
      - unauthenticated
    options:
      operationId: ping_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - unauthenticated
  /product/list:
    get:
      description: Retrieve a list of products for a location
      operationId: product_list_get
      parameters:
      - explode: true
        in: query
        name: locationId
        required: true
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductListResponse'
          description: A product list response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve a list of products for a location
      tags:
      - product
    options:
      operationId: product_list_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - product
  /shift/list:
    get:
      description: Retrieve a list of shifts for a location
      operationId: shift_list_get
      parameters:
      - explode: true
        in: query
        name: locationId
        required: true
        schema:
          $ref: '#/components/schemas/HashedId'
        style: form
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ShiftListResponse'
          description: A shift list response
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
      - api_key: []
      - session_token: []
      summary: Retrieve a list of shifts for a location
      tags:
      - shift
    options:
      operationId: shift_list_options
      responses:
        '200':
          $ref: '#/components/responses/Options200'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFound404'
        '429':
          $ref: '#/components/responses/TooManyRequests429'
        '500':
          $ref: '#/components/responses/ServiceError500'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security: []
      tags:
      - shift
components:
  requestBodies:
    InvoiceCreateRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceCreateRequest'
      description: Create an invoice input
      required: true
    InvoiceSearchRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceSearchRequest'
      description: Search for invoices
      required: true
    InvoiceUpdateRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceUpdateRequest'
      description: Update an invoice input
      required: true
    LoginRequest:
      content:
        application/json:
          examples:
            userlogin:
              summary: API user login example
              value:
                Password: password
                Username: user
          schema:
            $ref: '#/components/schemas/UsernamePassword'
      description: Perform user authentication against the API
      required: true
  responses:
    DepartmentListResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DepartmentListResponse'
      description: A department list response
    ForbiddenError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CodeMessage'
      description: Request is completely forbidden. API not provided or method and
        or endpoint not supported
      headers:
        WWW_Authenticate:
          explode: false
          schema:
            maxLength: 2048
            pattern: ^.*$
            type: string
          style: simple
    InvoiceArchiveGetResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceResponse'
      description: An invoice archive response
    InvoiceCreateResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceResponse'
      description: An invoice response
    InvoiceDeleteResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceResponse'
      description: An invoice response
    InvoiceGetResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceResponse'
      description: An invoice response
    InvoiceListResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceListResponse'
      description: An invoice list response
    InvoiceReportResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceReportResponse'
      description: An invoice report
    InvoiceSearchResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceSearchResponse'
      description: An invoice list response
    InvoiceStatsResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceStatsResponse'
      description: An invoices statistics response
    InvoiceUpdateResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/InvoiceResponse'
      description: An invoice response
    LocationListResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LocationListResponse'
      description: A location list response
    LoginResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LoginResponse'
      description: A login response
    LogoutResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/LogoutResponse'
      description: A logout response
    NotFound404:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: 404 Not found
    Options200:
      content:
        application/json:
          schema:
            additionalProperties: false
            type: object
      description: 200 response
      headers:
        Access-Control-Allow-Credentials:
          explode: false
          schema:
            type: boolean
          style: simple
        Access-Control-Allow-Headers:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,]*$
            type: string
          style: simple
        Access-Control-Allow-Methods:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,]*$
            type: string
          style: simple
        Access-Control-Allow-Origin:
          explode: false
          schema:
            maxLength: 256
            pattern: ^.*$
            type: string
          style: simple
        Cache-Control:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,\-]*$
            type: string
          style: simple
        Expires:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 \-]*$
            type: string
          style: simple
        Pragma:
          explode: false
          schema:
            maxLength: 256
            pattern: ^[a-zA-Z0-9 ,]*$
            type: string
          style: simple
    PingResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PingResponse'
      description: A backend test response
    ProductListResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProductListResponse'
      description: A product list response
    ServiceError500:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: Service Error
    ShiftListResponse:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ShiftListResponse'
      description: A shift list response
    TooManyRequests429:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: 429 too many requests response
    UnauthorizedError:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CodeMessage'
      description: API key is missing or invalid
      headers:
        WWW_Authenticate:
          explode: false
          schema:
            maxLength: 2048
            pattern: ^.*$
            type: string
          style: simple
    UnexpectedError:
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
      description: unexpected error response
  schemas:
    AccountingProduct:
      additionalProperties: false
      properties:
        externalId:
          maxLength: 2048
          pattern: ^.*$
          type: string
        featureType:
          $ref: '#/components/schemas/FeatureType'
      type: object
    Amount:
      format: float
      maximum: 999999999.99
      minimum: -999999999.99
      type: number
    CodeEnum:
      default: Success
      enum:
      - Success
      - Error
      - Exception
      type: string
    CodeMessage:
      additionalProperties: false
      description: A generic error object generally used for 500 responses
      properties:
        code:
          $ref: '#/components/schemas/CodeEnum'
        message:
          $ref: '#/components/schemas/Message'
      required:
      - code
      - message
    CompanyType:
      enum:
      - ''
      - system
      - shipper
      - lumper
      - towandrepair
      - warehouse
      - owneroperator
      - payer
      type: string
    Continuation:
      additionalProperties: false
      properties:
        search_start:
          $ref: '#/components/schemas/Count'
      type: object
    Count:
      format: int64
      maximum: 999999999
      minimum: 0
      type: integer
    CustomField:
      additionalProperties: false
      properties:
        deletedAt:
          $ref: '#/components/schemas/DateTime'
        id:
          $ref: '#/components/schemas/HashedId'
        isRequired:
          type: boolean
        isShownInList:
          type: boolean
        name:
          maxLength: 256
          pattern: ^.*$
          type: string
        options:
          additionalProperties: false
          type: object
        title:
          maxLength: 2048
          pattern: ^.*$
          type: string
        type:
          $ref: '#/components/schemas/CustomFieldType'
      type: object
    CustomFieldType:
      enum:
      - ''
      - unknown
      - input
      - phone
      - email
      - select
      - numeric
      type: string
    DateTime:
      description: A timestamp of last modification of the entry.
      example: '2020-07-21 17:32:28Z'
      format: date-time
      type: string
    Department:
      additionalProperties: false
      properties:
        id:
          $ref: '#/components/schemas/HashedId'
        locationId:
          $ref: '#/components/schemas/HashedId'
        name:
          maxLength: 2048
          pattern: ^.*$
          type: string
      type: object
    DepartmentListResponse:
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          department_list:
            description: A list of Departments
            items:
              $ref: '#/components/schemas/Department'
            maxItems: 64
            type: array
        type: object
    DepositStatus:
      enum:
      - ''
      - unknown
      - processing
      - in_transit
      - completed
      - cancelled
      - failed
      type: string
    Description:
      maxLength: 1024
      pattern: ^.*$
      type: string
    EmailAddress:
      maxLength: 256
      pattern: ^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,5})$
      type: string
    FeatureType:
      enum:
      - unknown
      - cash
      - expeditedpayout
      - cards
      - rcptnotifs
      - paycodes
      - monthlyfee
      - feeperproduct
      - treatcashascard
      - hideclerkname
      - signaturecapture
      - payoutamountsinemail
      - zeroamountsinemail
      - disableinvoices
      - enableworkorders
      - enableproductscomment
      - disablefleetcheck
      - publiccheckout
      - invoiceattachment
      - cardautopayout
      - reportdollarsigndisabled
      - allowdisableconvfee
      - paysafepayment
      - notifyinvoicestatuschange
      - survey
      - invoicecsvtimestampenabled
      - directbill
      - hostbill
      - companydashboard
      - addmultiplelineitems
      - expeditedach
      - namerequiredwithcard
      - licenserequiredwithcard
      - invoicesubmissionconfirmation
      - accountingquickbooks
      - accountingfreshbooks
      - allowzerodollarinvoice
      - instantpayout
      - canpayinvoices
      - twodaymanualpayout
      - ach
      - creditcardatpubliccheckoutonly
      - conveniencefeeperlineitem
      - invoicebatches
      - skipcheckdetailsscreen
      - sendtotaltopayerbutton
      - generalledger
      - wexapi
      - roadsynccreditcardprocessing
      type: string
    FilterItem:
      additionalProperties: false
      properties:
        field:
          maxLength: 128
          pattern: ^.*$
          type: string
        type:
          enum:
          - integer
          - decimal
          - string
          - boolean
          - date
          - datetime
          - dictionary
          - object
          - json
          - csv
          - list
          type: string
        value:
          maxLength: 1024
          pattern: ^.*$
          type: string
      type: object
    FilterItemValue:
      maxLength: 1024
      pattern: ^.*$
      type: string
    FormatEnum:
      default: CSV
      enum:
      - ''
      - CSV
      type: string
    HashedId:
      maxLength: 128
      pattern: ^\w+$
      type: string
    Invoice:
      additionalProperties: false
      properties:
        amount:
          format: float
          maximum: 999999999.99
          minimum: -999999999.99
          type: number
        attachmentCount:
          format: int64
          maximum: 6
          minimum: 0
          type: integer
        authorizedAt:
          $ref: '#/components/schemas/DateTime'
        baseAmt:
          $ref: '#/components/schemas/Amount'
        comments:
          maxLength: 4096
          pattern: ^.*$
          type: string
        company:
          $ref: '#/components/schemas/ShortCompany'
        convFee:
          $ref: '#/components/schemas/Amount'
        convFeeDisable:
          type: boolean
        createdAt:
          $ref: '#/components/schemas/DateTime'
        customFields:
          $ref: '#/components/schemas/StringMap'
        customer:
          $ref: '#/components/schemas/ShortCompanyCustomer'
        customerId:
          $ref: '#/components/schemas/HashedId'
        deletedAt:
          $ref: '#/components/schemas/DateTime'
        deletionReason:
          $ref: '#/components/schemas/InvoiceDeletionReason'
        department:
          $ref: '#/components/schemas/Department'
        depositStatus:
          $ref: '#/components/schemas/DepositStatus'
        description:
          maxLength: 1024
          pattern: ^.*$
          type: string
        files:
          items:
            $ref: '#/components/schemas/InvoiceFile'
          maxItems: 20
          type: array
        id:
          $ref: '#/components/schemas/HashedId'
        initialType:
          $ref: '#/components/schemas/InvoiceType'
        invoiceNumber:
          $ref: '#/components/schemas/PublicId'
        lineItems:
          items:
            $ref: '#/components/schemas/InvoiceLineItem'
          maxItems: 64
          type: array
        location:
          $ref: '#/components/schemas/ShortLocation'
        payerEmail:
          $ref: '#/components/schemas/EmailAddress'
        payerName:
          maxLength: 256
          pattern: ^.*$
          type: string
        payerPhone:
          $ref: '#/components/schemas/PhoneNumberInternational'
        paymentError:
          $ref: '#/components/schemas/PaymentError'
        publicId:
          $ref: '#/components/schemas/PublicId'
        receipt:
          $ref: '#/components/schemas/Receipt'
        sentAt:
          $ref: '#/components/schemas/DateTime'
        shift:
          $ref: '#/components/schemas/Shift'
        status:
          $ref: '#/components/schemas/InvoiceStatus'
        subtype:
          maxLength: 128
          pattern: ^.*$
          type: string
        temporaryCustomerName:
          maxLength: 256
          pattern: ^.*$
          type: string
        timezone:
          $ref: '#/components/schemas/TimeZone'
        token:
          maxLength: 1024
          pattern: ^.*$
          type: string
        type:
          $ref: '#/components/schemas/InvoiceType'
        updatedAt:
          $ref: '#/components/schemas/DateTime'
        user:
          $ref: '#/components/schemas/ShortUser'
        userId:
          $ref: '#/components/schemas/HashedId'
        workOrderId:
          $ref: '#/components/schemas/HashedId'
        workflowStatus:
          $ref: '#/components/schemas/WorkflowStatus'
      type: object
    InvoiceCreateInput:
      additionalProperties: false
      properties:
        comments:
          maxLength: 4096
          pattern: ^.*$
          type: string
        convFeeDisable:
          type: boolean
        customFields:
          $ref: '#/components/schemas/StringMap'
        customerId:
          $ref: '#/components/schemas/HashedId'
        departmentId:
          $ref: '#/components/schemas/HashedId'
        description:
          maxLength: 1024
          pattern: ^.*$
          type: string
        lineItems:
          items:
            $ref: '#/components/schemas/InvoiceLineItemInput'
          maxItems: 64
          type: array
        locationId:
          $ref: '#/components/schemas/HashedId'
        payerEmail:
          $ref: '#/components/schemas/EmailAddress'
        payerName:
          maxLength: 256
          pattern: ^.*$
          type: string
        payerPhone:
          $ref: '#/components/schemas/PhoneNumberInternational'
        shiftId:
          $ref: '#/components/schemas/HashedId'
        temporaryCustomerName:
          maxLength: 256
          pattern: ^.*$
          type: string
        workflowStatus:
          $ref: '#/components/schemas/WorkflowStatus'
      type: object
    InvoiceCreateRequest:
      additionalProperties: false
      properties:
        companyId:
          $ref: '#/components/schemas/HashedId'
        invoiceCreateInput:
          $ref: '#/components/schemas/InvoiceCreateInput'
      type: object
    InvoiceDeletionReason:
      enum:
      - ''
      - unknown
      - requestedbycustomer
      - incorrectamount
      - prepaidcontract
      - duplicate
      - fraudulent
      - alternate
      - driverleft
      - unabletoservice
      type: string
    InvoiceFile:
      additionalProperties: false
      properties:
        fileId:
          $ref: '#/components/schemas/HashedId'
        fileName:
          maxLength: 2048
          pattern: ^.*$
          type: string
        invoiceFileId:
          $ref: '#/components/schemas/HashedId'
        invoiceId:
          $ref: '#/components/schemas/HashedId'
        type:
          $ref: '#/components/schemas/InvoiceFileType'
      type: object
    InvoiceFileType:
      enum:
      - ''
      - unknown
      - signature
      - pdf
      - image
      type: string
    InvoiceLineItem:
      additionalProperties: false
      properties:
        cost:
          format: float
          maximum: 999999999.99
          minimum: -999999999.99
          type: number
        description:
          maxLength: 1024
          pattern: ^.*$
          type: string
        isTaxable:
          type: boolean
        product:
          $ref: '#/components/schemas/Product'
        productId:
          $ref: '#/components/schemas/HashedId'
        qty:
          format: float
          maximum: 999999999.99
          minimum: -999999999.99
          type: number
        type:
          $ref: '#/components/schemas/ProductType'
      type: object
    InvoiceLineItemInput:
      additionalProperties: false
      properties:
        description:
          maxLength: 1024
          pattern: ^.*$
          type: string
        isTaxable:
          type: boolean
        productId:
          $ref: '#/components/schemas/HashedId'
        qty:
          format: float
          maximum: 999999999.99
          minimum: -999999999.99
          type: number
      type: object
    InvoiceListResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          continuation:
            $ref: '#/components/schemas/Continuation'
          invoice_list:
            description: A list of invoices - Each invocation returns a maximum of
              20 items
            items:
              $ref: '#/components/schemas/Invoice'
            maxItems: 20
            type: array
          paging:
            $ref: '#/components/schemas/Paging'
          parameters:
            $ref: '#/components/schemas/StringMap'
          result_token:
            $ref: '#/components/schemas/HashedId'
          stats:
            $ref: '#/components/schemas/StringMap'
        type: object
      type: object
    InvoiceReport:
      additionalProperties: false
      properties:
        format:
          $ref: '#/components/schemas/FormatEnum'
        report:
          maxLength: 2048
          pattern: ^.*$
          type: string
      type: object
    InvoiceReportResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          invoice_report:
            $ref: '#/components/schemas/InvoiceReport'
        type: object
      type: object
    InvoiceResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          invoice:
            $ref: '#/components/schemas/Invoice'
        type: object
      type: object
    InvoiceSearchRequest:
      additionalProperties: false
      description: Documenting the shape here get's lost by SwaggerUI implementations
        like readme.io
      properties:
        asyncResult:
          default: true
          description: Turn on/off the asynchronous result set for this request if
            the `timeout` time is exceeded during the execution of this search.
          type: boolean
        filters:
          items:
            $ref: '#/components/schemas/FilterItem'
          type: array
        pagination:
          $ref: '#/components/schemas/Pagination'
        resultToken:
          description: Optionally indicate on subsequent search request (typically
            with the same filters) where the search in the master list of invoices
            should be resumed.
          maxLength: 256
          pattern: ^.*$
          type: string
        searchStart:
          default: 0
          description: Optionally indicate on subsequent search request (typically
            with the same filters) where the search in the master list of invoices
            should be resumed.
          format: int64
          minimum: 0
          type: integer
        timeout:
          default: 19.0
          description: Timeout in seconds for searching for invoices that meet the
            criteria. If the search exceeds this limit a Continuation response will
            be sent and optionally (if asyncResult == true and asynchronous results
            are availble) an asyncronous result set token.
          format: float
          maximum: 29.0
          minimum: 1.0
          type: number
      type: object
    InvoiceSearchResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          continuation:
            $ref: '#/components/schemas/Continuation'
          invoice_list:
            description: A list of invoices
            items:
              $ref: '#/components/schemas/Invoice'
            maxItems: 100
            type: array
          pagination:
            $ref: '#/components/schemas/Pagination'
          parameters:
            $ref: '#/components/schemas/StringMap'
          result_token:
            $ref: '#/components/schemas/HashedId'
          stats:
            $ref: '#/components/schemas/StringMap'
        type: object
      type: object
    InvoiceStats:
      additionalProperties: false
      properties:
        count:
          $ref: '#/components/schemas/Count'
        total:
          $ref: '#/components/schemas/Amount'
      type: object
    InvoiceStatsResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          invoice_stats:
            $ref: '#/components/schemas/InvoiceStats'
        type: object
      type: object
    InvoiceStatus:
      enum:
      - ''
      - unknown
      - new
      - processing
      - completed
      - failed
      - waitingapproval
      - pendingreview
      - sent
      type: string
    InvoiceType:
      enum:
      - ''
      - cash
      - check
      - paycode
      - card
      - remotecheckout
      - directbill
      - hostbill
      - ach
      - batch
      - fuelcard
      type: string
    InvoiceUpdateInput:
      additionalProperties: false
      properties:
        comments:
          maxLength: 4096
          pattern: ^.*$
          type: string
        convFeeDisable:
          type: boolean
        customFields:
          $ref: '#/components/schemas/StringMap'
        customerId:
          $ref: '#/components/schemas/HashedId'
        departmentId:
          $ref: '#/components/schemas/HashedId'
        description:
          maxLength: 1024
          pattern: ^.*$
          type: string
        lineItems:
          items:
            $ref: '#/components/schemas/InvoiceLineItemInput'
          maxItems: 64
          type: array
        payerEmail:
          $ref: '#/components/schemas/EmailAddress'
        payerName:
          maxLength: 256
          pattern: ^.*$
          type: string
        payerPhone:
          $ref: '#/components/schemas/PhoneNumberInternational'
        shiftId:
          $ref: '#/components/schemas/HashedId'
        temporaryCustomerName:
          maxLength: 256
          minLength: 0
          pattern: ^.*$
          type: string
        workflowStatus:
          $ref: '#/components/schemas/WorkflowStatus'
      type: object
    InvoiceUpdateRequest:
      additionalProperties: false
      properties:
        invoiceId:
          $ref: '#/components/schemas/HashedId'
        invoiceUpdateInput:
          $ref: '#/components/schemas/InvoiceUpdateInput'
      type: object
    Location:
      additionalProperties: false
      properties:
        city:
          maxLength: 256
          pattern: ^.*$
          type: string
        companyId:
          $ref: '#/components/schemas/HashedId'
        createdAt:
          $ref: '#/components/schemas/DateTime'
        customFields:
          items:
            $ref: '#/components/schemas/CustomField'
          maxItems: 64
          type: array
        departments:
          items:
            $ref: '#/components/schemas/Department'
          maxItems: 64
          type: array
        id:
          $ref: '#/components/schemas/HashedId'
        locationReference:
          maxLength: 2048
          pattern: ^.*$
          type: string
        name:
          maxLength: 256
          pattern: ^.*$
          type: string
        shifts:
          items:
            $ref: '#/components/schemas/Shift'
          maxItems: 128
          type: array
        state:
          $ref: '#/components/schemas/StateCode'
        street:
          maxLength: 2048
          pattern: ^.*$
          type: string
        street2:
          maxLength: 2048
          pattern: ^.*$
          type: string
        timezone:
          $ref: '#/components/schemas/TimeZone'
        updatedAt:
          $ref: '#/components/schemas/DateTime'
        zip:
          maxLength: 10
          pattern: ^[0-9]{5}(|-[0-9]{4})$
          type: string
      type: object
    LocationListResponse:
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - properties:
          location_list:
            description: A list of locations
            items:
              $ref: '#/components/schemas/Location'
            maxItems: 128
            type: array
        type: object
    LoginResponse:
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - additionalProperties: false
        properties:
          SessionToken:
            $ref: '#/components/schemas/SessionToken'
          UserInfo:
            $ref: '#/components/schemas/UserInfo'
        type: object
      description: Session token / identifier
      type: object
    LogoutResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      type: object
    Message:
      maxLength: 2048
      pattern: ^[a-zA-Z0-9 ]*$
      type: string
    Pagination:
      additionalProperties: false
      properties:
        ItemsPerPage:
          default: 20
          format: int32
          maximum: 999999
          minimum: 1
          type: integer
        PageNumber:
          default: 1
          format: int32
          maximum: 999999
          minimum: 1
          type: integer
        SortColumn:
          default: ''
          maxLength: 64
          pattern: ^.*$
          type: string
        SortDirection:
          default: ascending
          description: Sort direction; asc accepted for ascending and desc accepted
            for descending
          enum:
          - asc
          - ascending
          - desc
          - descending
          type: string
        TotalItems:
          default: 20
          format: int32
          maximum: 999999
          minimum: 1
          type: integer
        TotalPages:
          default: 1
          format: int32
          maximum: 999999
          minimum: 1
          type: integer
      type: object
    Paging:
      additionalProperties: false
      description: Paging information for achieving the resulting invoice_list
      properties:
        limit:
          $ref: '#/components/schemas/Count'
        offset:
          $ref: '#/components/schemas/Count'
      type: object
    PaidStateEnum:
      default: ''
      enum:
      - ''
      - Paid
      - Unpaid
      - NA
      type: string
    PaymentError:
      enum:
      - ''
      - funds
      - expresscode
      - invaliddata
      - numbernotauthed
      - invalidchecknumber
      - unabletoprocess
      - invalidtripnumber
      - invalidunitnumber
      - invaliddrivernumber
      - invalidtripunitdriver
      - incorrectamount
      - invalidlocation
      - shipperdeclined
      - tcheckneedsexpiration
      - fleetoneregisterfunds
      - registercheck
      - callcheckprocessor
      - invalidcardnumber
      - invalidcardexpiry
      - invalidcardcvc
      - invalidcardzip
      - carddeclined
      - comdatadown
      - efsdown
      - tcheckdown
      - fleetonedown
      - instamoneydown
      - usbankdown
      - systemsdown
      - achfailed
      - nmirequestdeclined
      - addressmatchonly
      - addresscustomernamematchonly
      - 9characternumericzipmatchonly
      - 5characterzipmatchonly
      - 5characterzipcustomernamematchonly
      - noaddressorzipmatchonly
      - noaddressorziporcustomernamematchonly
      - addressunavailable
      - nonusissuerdoesnotparticipate
      - issuersystemunavailable
      - notamail/phoneorder
      - servicenotsupported
      - avsnotavailable
      - cvv2/cvc2nomatch
      - notprocessed
      - merchanthasindicatedthatcvv2/cvc2isnotpresentoncard
      - issuerisnotcertifiedandorhasnotprovidedvisaencryptionkeys
      - TransactionWasDeclinedByProcessor
      - DoNotHonor
      - InsufficientFunds
      - OverLimit
      - TransactionNotAllowed
      - IncorrectPaymentInformation
      - NoSuchCardIssuer
      - NoCardNumberOnFileWithIssuer
      - ExpiredCard
      - InvalidExpirationDate
      - InvalidCardSecurityCode
      - InvalidPin
      - CallIssuerForFurtherInformation
      - PickUpCard
      - LostCard
      - StolenCard
      - FraudulentCard
      - DeclinedWithFurtherInstructionsAvailable
      - DeclinedStopAllRecurringPayments
      - DeclinedStopThisRecurringProgram
      - DeclinedUpdateCardholderDataAvailable
      - DeclinedRetryInAFewDays
      - TransactionWasRejectedByGateway
      - TransactionErrorReturnedByProcessor
      - InvalidMerchantConfiguration
      - MerchantAccountIsInactive
      - CommunicationError
      - CommunicationErrorWithIssuer
      - DuplicateTransactionAtProcessor
      - ProcessorFormatError
      - InvalidTransactionInformation
      - ProcessorFeatureNotAvailable
      - UnsupportedCardType
      - WEXRequestFailed
      - WEXAPIisOffline
      - WEXEncounteredAnError
      - InvalidSiteNumber
      - InvalidMessageType
      - InvalidMoneyCode
      - CheckWasPreviouslyUsed
      - MaxAmountExceeded
      - MustBeExactAmount
      - UnknownErrorCode
      - ExpressCodeNotOnFile
      - UnexpectedError
      - InvalidRequestError
      - UnknownErrorCode46
      - WexInvalidDriverNumber
      - CheckNumberInvalid
      - WexInvalidFuelCardNumber
      - UnknownErrorCode43
      - WexInvalidUnitNumber
      - AmountCodeInvalid
      - InvalidProductCode
      - WexInactiveFuelCard
      - InvalidTerminalId
      - WexInvalidTripNumber
      - MissingFieldsError
      - WexInvalidTruckStop
      type: string
    PhoneNumberInternational:
      maxLength: 128
      pattern: ^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\
        \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$
      type: string
    PingResponse:
      additionalProperties: false
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - $ref: '#/components/schemas/Pong'
      type: object
    Pong:
      additionalProperties: false
      description: A ping response which also has API version
      example:
        pong: pong
        version: 1.7.11
      properties:
        pong:
          maxLength: 2048
          pattern: ^.*$
          type: string
        timestamp:
          $ref: '#/components/schemas/DateTime'
        version:
          maxLength: 64
          pattern: ^[a-zA-Z0-9]*$
          type: string
      required:
      - version
      type: object
    Problem:
      additionalProperties: false
      properties:
        detail:
          description: 'A human readable explanation specific to this occurrence of
            the

            problem.

            '
          example: Connection to database timed out
          maxLength: 2048
          pattern: ^.*$
          type: string
        instance:
          description: 'An absolute URI that identifies the specific occurrence of
            the problem.

            It may or may not yield further information if dereferenced.

            '
          format: uri
          maxLength: 2048
          pattern: ^.*$
          type: string
        status:
          description: 'The HTTP status code generated by the origin server for this
            occurrence

            of the problem.

            '
          example: 503
          exclusiveMaximum: true
          format: int32
          maximum: 600
          minimum: 100
          type: integer
        title:
          description: 'A short, summary of the problem type. Written in english and
            readable

            for engineers (usually not suited for non technical stakeholders and

            not localized); example: Service Unavailable

            '
          maxLength: 256
          pattern: ^.*$
          type: string
        type:
          default: about:blank
          description: 'An absolute URI that identifies the problem type.  When dereferenced,

            it SHOULD provide human-readable documentation for the problem type

            (e.g., using HTML).

            '
          example: https://problems.roadsync.com/problem/unspecified-error
          format: uri
          maxLength: 2048
          pattern: ^.*$
          type: string
      type: object
    Product:
      additionalProperties: false
      properties:
        accountingProducts:
          items:
            $ref: '#/components/schemas/AccountingProduct'
          maxItems: 128
          type: array
        cost:
          format: float
          maximum: 999999999.99
          minimum: -999999999.99
          type: number
        generalLedger:
          maxLength: 2048
          pattern: ^.*$
          type: string
        id:
          $ref: '#/components/schemas/HashedId'
        isTaxable:
          type: boolean
        locationId:
          $ref: '#/components/schemas/HashedId'
        name:
          maxLength: 2048
          pattern: ^.*$
          type: string
        parentId:
          $ref: '#/components/schemas/HashedId'
        parentPath:
          maxLength: 2048
          pattern: ^.*$
          type: string
        selectType:
          $ref: '#/components/schemas/ProductSelectType'
        type:
          $ref: '#/components/schemas/ProductType'
        weight:
          format: int64
          maximum: 999999999
          minimum: 0
          type: integer
      type: object
    ProductListResponse:
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - properties:
          product_list:
            description: A list of products
            items:
              $ref: '#/components/schemas/Product'
            maxItems: 128
            type: array
        type: object
    ProductSelectType:
      enum:
      - ''
      - none
      - preselected
      - obligatory
      type: string
    ProductType:
      enum:
      - service
      - item
      - custom
      - other
      - addmultiplelineitems
      - category
      - tax
      - ''
      type: string
    PublicId:
      format: int64
      maximum: 999999999
      minimum: 0
      type: integer
    Quantity:
      format: float
      maximum: 999999999.99
      minimum: -999999999.99
      type: number
    Receipt:
      additionalProperties: false
      properties:
        url:
          maxLength: 2048
          pattern: ^.*$
          type: string
      type: object
    Role:
      enum:
      - ''
      - superadmin
      - companyadmin
      - accountant
      - employee
      - warehouseworker
      - rsemployee
      - shiftmanager
      - clientsupport
      - implementation
      - wexsettlementservice
      type: string
    SessionToken:
      description: Session token / identifier
      format: password
      maxLength: 2048
      pattern: ^.*$
      type: string
    Shift:
      additionalProperties: false
      properties:
        id:
          $ref: '#/components/schemas/HashedId'
        locationId:
          $ref: '#/components/schemas/HashedId'
        name:
          maxLength: 256
          pattern: ^.*$
          type: string
      type: object
    ShiftListResponse:
      allOf:
      - $ref: '#/components/schemas/CodeMessage'
      - properties:
          shift_list:
            description: A list of Shifts
            items:
              $ref: '#/components/schemas/Shift'
            maxItems: 64
            type: array
        type: object
    ShortCompany:
      additionalProperties: false
      properties:
        id:
          $ref: '#/components/schemas/HashedId'
        logoUrl:
          maxLength: 2048
          pattern: ^.*$
          type: string
        name:
          maxLength: 2048
          pattern: ^.*$
          type: string
        phone:
          $ref: '#/components/schemas/PhoneNumberInternational'
        publicId:
          $ref: '#/components/schemas/Count'
        type:
          $ref: '#/components/schemas/CompanyType'
      type: object
    ShortCompanyCustomer:
      additionalProperties: false
      properties:
        city:
          maxLength: 2048
          pattern: ^.*$
          type: string
        companyId:
          $ref: '#/components/schemas/HashedId'
        contactEmail:
          $ref: '#/components/schemas/EmailAddress'
        contactPhone:
          $ref: '#/components/schemas/PhoneNumberInternational'
        customerCompanyId:
          $ref: '#/components/schemas/HashedId'
        id:
          $ref: '#/components/schemas/HashedId'
        name:
          maxLength: 256
          pattern: ^.*$
          type: string
        nickname:
          maxLength: 256
          pattern: ^.*$
          type: string
        publicId:
          $ref: '#/components/schemas/Count'
        state:
          $ref: '#/components/schemas/StateCode'
      type: object
    ShortLocation:
      additionalProperties: false
      properties:
        city:
          maxLength: 2048
          pattern: ^.*$
          type: string
        companyId:
          $ref: '#/components/schemas/HashedId'
        customFields:
          items:
            $ref: '#/components/schemas/CustomField'
          maxItems: 64
          type: array
        id:
          $ref: '#/components/schemas/HashedId'
        name:
          maxLength: 256
          pattern: ^.*$
          type: string
        state:
          $ref: '#/components/schemas/StateCode'
        timezone:
          $ref: '#/components/schemas/TimeZone'
      type: object
    ShortUser:
      additionalProperties: false
      properties:
        avatarUrl:
          maxLength: 2048
          pattern: ^.*$
          type: string
        email:
          $ref: '#/components/schemas/EmailAddress'
        first:
          maxLength: 256
          pattern: ^.*$
          type: string
        id:
          $ref: '#/components/schemas/HashedId'
        isVerified:
          type: boolean
        last:
          maxLength: 2048
          pattern: ^.*$
          type: string
        phone:
          $ref: '#/components/schemas/PhoneNumberInternational'
      type: object
    SortDirection:
      default: ascending
      description: Sort direction; asc accepted for ascending and desc accepted for
        descending
      enum:
      - asc
      - ascending
      - desc
      - descending
      type: string
    StateCode:
      enum:
      - AL
      - AK
      - AZ
      - AR
      - CA
      - CO
      - CT
      - DE
      - DC
      - FL
      - GA
      - HI
      - ID
      - IL
      - IN
      - IA
      - KS
      - KY
      - LA
      - ME
      - MD
      - MA
      - MI
      - MN
      - MS
      - MO
      - MT
      - NE
      - NV
      - NH
      - NJ
      - NM
      - NY
      - NC
      - ND
      - OH
      - OK
      - OR
      - PA
      - RI
      - SC
      - SD
      - TN
      - TX
      - UT
      - VT
      - VA
      - WA
      - WV
      - WI
      - WY
      - MEX
      - CAN
      type: string
    StringMap:
      additionalProperties: false
      type: object
    TimeZone:
      enum:
      - US/Hawaii
      - US/Alaska
      - US/Pacific
      - US/Mountain
      - US/Central
      - US/Eastern
      - ''
      type: string
    UserInfo:
      additionalProperties: false
      properties:
        avatarUrl:
          maxLength: 2048
          pattern: ^.*$
          type: string
        companyId:
          $ref: '#/components/schemas/HashedId'
        createdAt:
          $ref: '#/components/schemas/DateTime'
        email:
          $ref: '#/components/schemas/EmailAddress'
        fileId:
          $ref: '#/components/schemas/HashedId'
        first:
          maxLength: 256
          pattern: ^.*$
          type: string
        firstPasswordReset:
          type: boolean
        freshchatRestoreId:
          maxLength: 256
          pattern: ^.*$
          type: string
        id:
          $ref: '#/components/schemas/HashedId'
        isLocked:
          type: boolean
        isVerified:
          type: boolean
        last:
          maxLength: 256
          pattern: ^.*$
          type: string
        lastLogin:
          $ref: '#/components/schemas/DateTime'
        locationIds:
          items:
            $ref: '#/components/schemas/HashedId'
          maxItems: 64
          type: array
        lockedAt:
          $ref: '#/components/schemas/DateTime'
        phone:
          $ref: '#/components/schemas/PhoneNumberInternational'
        roles:
          items:
            $ref: '#/components/schemas/Role'
          maxItems: 64
          type: array
        tfaEnabled:
          type: boolean
        updatedAt:
          $ref: '#/components/schemas/DateTime'
        username:
          maxLength: 256
          pattern: ^.*$
          type: string
      type: object
    UsernamePassword:
      additionalProperties: false
      description: User credentials object
      properties:
        Password:
          maxLength: 128
          pattern: ^.*$
          type: string
        Username:
          maxLength: 64
          pattern: ^.*$
          type: string
      type: object
    WorkflowStatus:
      enum:
      - ''
      - unknown
      - default
      - savelineitemsforlater
      type: string
  securitySchemes:
    api_key:
      in: header
      name: x-api-key
      type: apiKey
      x-apikeyInfoFunc: client_api_server.controllers.authorization_controller.check_api_key
    session_token:
      bearerFormat: JWT
      scheme: bearer
      type: http
      x-apikeyInfoFunc: client_api_server.controllers.authorization_controller.check_session_token

Did this page help you?