PracticePanther Invoice API

The Invoice API from PracticePanther — 2 operation(s) for invoice.

Operations 3

GET /api/invoice/{guid} Returns an invoice #
GET /api/invoice OData end point to get a list of all invoices accessible by the user #
DELETE /api/invoice Marks an existing invoice as deleted, will remove all amounts applied on invoices. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/practicepanther-invoice-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

practicepanther-invoice-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: v1
  title: Legacy API (v1) Account Invoice API
  description: ''
servers:
- url: https://app.practicepanther.com
tags:
- name: Invoice
paths:
  /api/invoice/{guid}:
    get:
      tags:
      - Invoice
      summary: Returns an invoice
      operationId: Invoice_GetInvoice
      parameters:
      - name: guid
        in: path
        description: ''
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleDocumentDTO_Detail'
            text/json:
              schema:
                $ref: '#/components/schemas/SaleDocumentDTO_Detail'
      security:
      - oauth2:
        - full
  /api/invoice:
    get:
      tags:
      - Invoice
      summary: OData end point to get a list of all invoices accessible by the user
      operationId: Invoice_GetInvoices
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SaleDocumentDTO'
            text/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SaleDocumentDTO'
      security:
      - oauth2:
        - full
    delete:
      tags:
      - Invoice
      summary: Marks an existing invoice as deleted, will remove all amounts applied on invoices.
      operationId: Invoice_DeleteInvoice
      parameters:
      - name: guid
        in: query
        description: ''
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SaleDocumentDTO_Detail'
            text/json:
              schema:
                $ref: '#/components/schemas/SaleDocumentDTO_Detail'
      security:
      - oauth2:
        - full
components:
  schemas:
    SaleDocumentDTO_Detail:
      required:
      - accountGuid
      - discountPercent
      - saleDocumentTemplateGuid
      - currencyCode
      - date
      type: object
      properties:
        interestOptions:
          $ref: '#/components/schemas/InterestOptions'
        isDeleted:
          description: ' '
          type: boolean
          readOnly: true
        accountGuid:
          format: uuid
          description: 'Used to set the reference in POST and PUT '
          pattern: ^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$
          type: string
          example: 00000000-0000-0000-0000-000000000000
        projectGuid:
          format: uuid
          description: Used to set the reference in POST and PUTRequired for PracticePanther. Required for PracticePanther.
          pattern: ^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$
          type: string
          example: 00000000-0000-0000-0000-000000000000
        numOfPayments:
          format: int32
          description: Indicates the number of payments applied on this invoice (SaleDocumentPayments). Indicates the number of payments applied on this invoice (SaleDocumentPayments).
          type: integer
          readOnly: true
        discountPercent:
          format: double
          description: Discount (%) to be applied on this invoice. 10 = 10%, 1 = 1% etc.
          maximum: 100
          minimum: 0
          type: number
        lastModifiedBy:
          $ref: '#/components/schemas/UserRef'
        lastModifiedDate:
          format: date-time
          description: ' '
          type: string
          readOnly: true
        saleDocumentPayments:
          type: array
          items:
            $ref: '#/components/schemas/SaleDocumentPaymentRef'
        items:
          type: array
          items:
            $ref: '#/components/schemas/SaleDocumentItemDTO'
        credit:
          $ref: '#/components/schemas/CreditDTO'
        termsAndConditions:
          description: Terms and conditions for this invoice. Visible to the customer.
          type: string
        customerNotes:
          description: Specific notes for the customer. Visible to the customer.
          type: string
        isSendInvoicePaymentReminders:
          description: Set to true to send automatic payment reminders to this client.
          type: boolean
        isUseCreditToPayBalance:
          description: Used during PUT/POST. If set to true all available operating account credit (for this account / project) will automatically be applied to this invoice to pay any amount due.
          type: boolean
        isUseTrustToPayBalance:
          description: Used during PUT/POST. If set to true will automatically transfer funds from the trust account to the operating account and apply them on this invoice.
          type: boolean
        isNotifyWhenViewedByClient:
          description: Send an email to the user which created this invoice and to the account and project owners when this invoice is viewed by the customer.
          type: boolean
        isNotifyWhenPaidByClient:
          description: Invoices only, if set to true will send an email to the user which created this invoice and to the account and project owners when this invoice is paid by the customer.
          type: boolean
        isNotifyWhenApprovedByClient:
          description: Quotes only. If set to true, will send an email to the user which created this invoice and to the account and project owners when this quote is approved by the customer.
          type: boolean
        isAllowOnlinePayment:
          description: Invoices of type Sale only. If set to true, will accept online payment on this invoice. Online payments must be enabled for this to apply.
          type: boolean
        isAllowPartialPayment:
          description: Invoices of type Sale only. If set to true, will accept online payment on this invoice for less than the full amount due. Online payments must be enabled for this to apply.
          type: boolean
        isCarryForwardBalance:
          description: Invoices of type Sale only. If set to true, will add to the total balance all unpaid invoices
          type: boolean
        refundPaymentMethod:
          description: Invoices of type Refund only. Indicates the method funds were refunded to the client.
          enum:
          - Cash
          - Check
          - CreditCard
          - PayPal
          - AuthorizeNet
          - Other
          - Stripe
          - Wire
          - Transfer
          - LawPay
          - PantherPaymentsCC
          - PantherPaymentsECheck
          - JournalEntry
          type: string
        refundPaymentBankAccountGuid:
          format: uuid
          description: 'Used to set the reference in POST and PUT '
          type: string
          example: 00000000-0000-0000-0000-000000000000
        saleDocumentTemplateGuid:
          format: uuid
          description: 'Used to set the reference in POST and PUT '
          type: string
          example: 00000000-0000-0000-0000-000000000000
        isMultiMatterInvoice:
          type: boolean
        isSubmitInvoiceForApproval:
          type: boolean
        isSentToCustomer:
          type: boolean
        bankAccountGuid:
          format: uuid
          description: 'Used to set the reference in POST and PUT '
          type: string
          example: 00000000-0000-0000-0000-000000000000
        defaultBankAccountGuid:
          format: uuid
          description: 'Used to set the reference in POST and PUT '
          type: string
          example: 00000000-0000-0000-0000-000000000000
        bankAccount:
          $ref: '#/components/schemas/BankAccount'
        isHeadNoteEnabled:
          type: boolean
        invoiceOrder:
          enum:
          - Name
          - Number
          type: string
        isAccountingPlus:
          type: boolean
        isEditingLimited:
          type: boolean
          readOnly: true
        nextAvailablePaymentDateFormatted:
          type: string
        enableFutureAppliedDateWarningLabel:
          type: boolean
        automaticPaymentApplicationDate:
          format: date-time
          type: string
        accountTags:
          type: array
          items:
            $ref: '#/components/schemas/TagDTO'
        projectTags:
          type: array
          items:
            $ref: '#/components/schemas/TagDTO'
        account:
          $ref: '#/components/schemas/AccountRef'
        project:
          $ref: '#/components/schemas/ProjectRef'
        tenant:
          $ref: '#/components/schemas/TenantDTO'
        currencyCode:
          description: This defines the currency for this account. Must be in ISO 4217 format. Must match the currency code for the Account (contact).
          type: string
        dueDate:
          format: date-time
          description: The due date for full payment on this invoice.
          type: string
        expDate:
          format: date-time
          description: The expiration date for this quote.
          type: string
        amountPaid:
          format: double
          description: Total amount paid. Total amount paid.
          type: number
          readOnly: true
        amountDue:
          format: double
          description: Total amount due. Total amount due.
          type: number
          readOnly: true
        sub:
          format: double
          description: Subtotal (sum of all Items.Sub) Subtotal (sum of all Items.Sub)
          type: number
          readOnly: true
        discount:
          format: double
          description: Indicates the total discount on this invoice. Set by DiscountPercent. Indicates the total discount on this invoice. Set by DiscountPercent.
          type: number
          readOnly: true
        tax:
          format: double
          description: Total tax applied on this invoice (sum of all Items.Tax + Items.Tax2). Total tax applied on this invoice (sum of all Items.Tax + Items.Tax2).
          type: number
          readOnly: true
        total:
          format: double
          description: Total (sum of all Items.Total) Total (sum of all Items.Total)
          type: number
          readOnly: true
        poNumber:
          type: string
        isOverdue:
          description: Indicates if this invoice is overdue. Indicates if this invoice is overdue.
          type: boolean
          readOnly: true
        isExpired:
          description: Indicates if this quote has expired.
          type: boolean
          readOnly: true
        status:
          description: Sets the status on this invoice. Sets the status on this invoice.
          enum:
          - Saved
          - Approved
          - Sent
          - Paid
          - Viewed
          - Overdue
          - Expired
          - Invoiced
          - Due
          - PendingApproval
          type: string
          readOnly: true
        createdBy:
          $ref: '#/components/schemas/UserRef'
        approvedBy:
          $ref: '#/components/schemas/UserRef'
        approvalDate:
          format: date-time
          description: ' '
          type: string
          readOnly: true
        isApproved:
          type: boolean
        createdDate:
          format: date-time
          description: ' '
          type: string
          readOnly: true
        quickbooksId:
          type: string
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        number:
          format: int32
          type: integer
        name:
          description: ' '
          type: string
          readOnly: true
        type:
          description: Indicates if this sale document is an Invoice or a Quote
          enum:
          - Invoice
          - Quote
          type: string
        invoiceType:
          description: If this sale document is of type 'invoice', will indicate if this is a sale, refund or credit invoice.
          enum:
          - Sale
          - Refund
          - Credit
          type: string
        date:
          format: date-time
          description: The issue date for this invoice / quote.
          type: string
    CustomFieldTab:
      required:
      - name
      type: object
      properties:
        tenant:
          $ref: '#/components/schemas/Tenant'
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        name:
          type: string
        objectType:
          enum:
          - Account
          - Project
          - Contact
          - User
          - Address
          type: string
        customFields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        createdDate:
          format: date-time
          type: string
        lastModifiedDate:
          format: date-time
          type: string
        createdBy:
          $ref: '#/components/schemas/User'
        lastModifiedBy:
          $ref: '#/components/schemas/User'
        isDeleted:
          type: boolean
    LawToolboxCourtRule:
      type: object
      properties:
        id:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        projectId:
          format: int64
          type: integer
        project:
          $ref: '#/components/schemas/Project'
        accountId:
          format: int64
          type: integer
        account:
          $ref: '#/components/schemas/Account'
        tenantId:
          format: int64
          type: integer
        tenant:
          $ref: '#/components/schemas/Tenant'
        name:
          type: string
        toolsetName:
          type: string
        toolsetId:
          type: string
        triggerName:
          type: string
        triggerId:
          type: string
        triggerDate:
          format: date-time
          type: string
        toggleOptionId:
          type: string
        toggleId:
          type: string
        toggleDescription:
          type: string
        activities:
          type: array
          items:
            $ref: '#/components/schemas/Activity'
        isDeleted:
          type: boolean
        createdDate:
          format: date-time
          type: string
        createdBy:
          $ref: '#/components/schemas/User'
        lastModifiedDate:
          format: date-time
          type: string
        lastModifiedBy:
          $ref: '#/components/schemas/User'
    Activity:
      required:
      - name
      type: object
      properties:
        date:
          format: date-time
          type: string
        shares:
          type: array
          items:
            $ref: '#/components/schemas/Share'
        workflowId:
          format: int64
          type: integer
        workflow:
          $ref: '#/components/schemas/Workflow'
        activitiesSync:
          type: array
          items:
            $ref: '#/components/schemas/ActivitySync'
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        id:
          format: int64
          type: integer
        googleId:
          type: string
        isEnabled:
          type: boolean
        isDeleted:
          type: boolean
        createdDate:
          format: date-time
          type: string
        lastModifiedDate:
          format: date-time
          type: string
        recurrenceStopDate:
          format: date-time
          type: string
        createdById:
          format: int32
          type: integer
        createdBy:
          $ref: '#/components/schemas/User'
        lastModifiedBy:
          $ref: '#/components/schemas/User'
        lawToolboxCourtRule_Id:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        lawToolboxCourtRule:
          $ref: '#/components/schemas/LawToolboxCourtRule'
        lawToolboxDeadlineId:
          type: string
        lawToolboxDeadlineNumber:
          type: string
        tenantId:
          format: int64
          type: integer
        tenant:
          $ref: '#/components/schemas/Tenant'
        isHoursLoggedManually:
          description: sets if the activity should be marked as "time logged" even if no time was linked to it.
          type: boolean
        recurrenceId:
          format: int64
          description: will show the realted recurrence for this event, if such exists
          type: integer
        recurrence:
          $ref: '#/components/schemas/Recurrence'
        type:
          enum:
          - Call
          - Task
          - Event
          - Email
          - Note
          type: string
        accountId:
          format: int64
          pattern: ^(\s*|\d+)$
          type: integer
        account:
          $ref: '#/components/schemas/Account'
        contactId:
          format: int64
          type: integer
        contact:
          $ref: '#/components/schemas/Contact'
        projectId:
          format: int64
          pattern: ^(\s*|\d+)$
          type: integer
        project:
          $ref: '#/components/schemas/Project'
        saleDocumentId:
          format: int64
          type: integer
        saleDocument:
          $ref: '#/components/schemas/SaleDocument'
        name:
          type: string
        description:
          type: string
        assignedToUsers:
          type: array
          items:
            $ref: '#/components/schemas/User'
        assignedToContacts:
          type: array
          items:
            $ref: '#/components/schemas/Contact'
        htmlBody:
          $ref: '#/components/schemas/Blob'
        dueDate:
          format: date-time
          type: string
        taskCompleteDate:
          format: date-time
          type: string
        startDateTime:
          format: date-time
          type: string
        endDateTime:
          format: date-time
          type: string
        isAllDayActivity:
          type: boolean
        location:
          type: string
        status:
          enum:
          - NotCompleted
          - InProgress
          - Completed
          - Conditional
          type: string
        mandrillId:
          type: string
        isPrivate:
          type: boolean
        priority:
          enum:
          - Low
          - Medium
          - High
          type: string
        isSendNotificationEmail:
          type: boolean
        isSendCompletedEmail:
          type: boolean
        isSendTaskCompleteEmail:
          type: boolean
        isRecurringActivity:
          type: boolean
        recurringActivityStartDate:
          format: date-time
          type: string
        recurringActivityEndDate:
          format: date-time
          type: string
        recurringRepeatType:
          enum:
          - None
          - Daily
          - Weekly
          - Monthly
          - Yearly
          type: string
        callType:
          enum:
          - Inbound
          - Outbound
          type: string
        tags:
          type: array
          items:
            $ref: '#/components/schemas/Tag'
        eventColor:
          type: string
        emailProperties:
          $ref: '#/components/schemas/EmailProperties'
        noteProperties:
          $ref: '#/components/schemas/NoteProperties'
        callProperties:
          $ref: '#/components/schemas/CallProperties'
        timeEntries:
          type: array
          items:
            $ref: '#/components/schemas/TimeEntry'
        flatFees:
          type: array
          items:
            $ref: '#/components/schemas/FlatFee'
        eventBackgroundColor:
          type: string
        blobs:
          type: array
          items:
            $ref: '#/components/schemas/Blob'
        invitees:
          type: array
          items:
            $ref: '#/components/schemas/Invitee'
        activityReminders:
          type: array
          items:
            $ref: '#/components/schemas/ActivityReminder'
        activityConditionalTasks:
          type: array
          items:
            $ref: '#/components/schemas/ActivityConditionalTask'
        completedTask:
          $ref: '#/components/schemas/CompletedTask'
    Expense:
      type: object
      properties:
        blobs:
          type: array
          items:
            $ref: '#/components/schemas/Blob'
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        id:
          format: int64
          type: integer
        name:
          type: string
        isDeleted:
          type: boolean
        isEnabled:
          type: boolean
        notes:
          type: string
        description:
          type: string
        isDoNotCharge:
          type: boolean
        accountId:
          format: int64
          pattern: ^(\s*|\d+)$
          type: integer
        isAccountRequired:
          type: boolean
        account:
          $ref: '#/components/schemas/Account'
        projectId:
          format: int64
          pattern: ^(\s*|\d+)$
          type: integer
        isProjectRequired:
          type: boolean
        project:
          $ref: '#/components/schemas/Project'
        accountingAccountId:
          format: int64
          type: integer
        accountingAccount:
          $ref: '#/components/schemas/AccountingAccount'
        productId:
          format: int64
          type: integer
        qty:
          format: double
          type: number
        totalAmount:
          format: double
          type: number
        date:
          format: date-time
          type: string
        amount:
          format: double
          type: number
        isBillable:
          type: boolean
        isBilled:
          type: boolean
        tax1Id:
          format: int64
          type: integer
        tax1:
          $ref: '#/components/schemas/SalesTax'
        tax2Id:
          format: int64
          type: integer
        tax2:
          $ref: '#/components/schemas/SalesTax'
        userId:
          format: int32
          pattern: ^\d+$
          type: integer
        user:
          $ref: '#/components/schemas/User'
        status:
          enum:
          - Billable
          - Billed
          - Paid
          - NotBillable
          type: string
        receipts:
          type: array
          items:
            $ref: '#/components/schemas/Blob'
        primaryReceipt:
          $ref: '#/components/schemas/Blob'
        saleDocumentItemId:
          format: int64
          type: integer
        saleDocumentItem:
          $ref: '#/components/schemas/SaleDocumentItem'
        createdDate:
          format: date-time
          type: string
        lastModifiedDate:
          format: date-time
          type: string
        createdBy:
          $ref: '#/components/schemas/User'
        lastModifiedBy:
          $ref: '#/components/schemas/User'
        tenantId:
          format: int64
          type: integer
        tenant:
          $ref: '#/components/schemas/Tenant'
        costType:
          description: Hard costs are expenses incurred on behalf of a client that require a direct payment by the firm to a vendor. For example if a firm writes a check for a court filing fee, it is considered a hard cost. Soft costs are expenses that are charged to the client but a direct payment is not made to a vendor.
          enum:
          - SoftCost
          - HardCost
          type: string
        hardCostPayment:
          $ref: '#/components/schemas/Payment'
        utbmsCodeId:
          format: int64
          type: integer
        utbmsCode:
          $ref: '#/components/schemas/UtbmsCode'
    MailAddress:
      type: object
      properties:
        displayName:
          type: string
          readOnly: true
        user:
          type: string
          readOnly: true
        host:
          type: string
          readOnly: true
        address:
          type: string
          readOnly: true
    ProductVendor:
      type: object
      properties:
        id:
          format: int64
          type: integer
        vendorSku:
          type: string
        leadTimeInDays:
          format: double
          type: number
        cost:
          format: double
          type: number
        product:
          $ref: '#/components/schemas/Product'
        account:
          $ref: '#/components/schemas/Account'
        tenant:
          $ref: '#/components/schemas/Tenant'
        isEnabled:
          type: boolean
        isDeleted:
          type: boolean
        createdDate:
          format: date-time
          type: string
        lastModifiedDate:
          format: date-time
          type: string
        createdBy:
          $ref: '#/components/schemas/User'
        lastModifiedBy:
          $ref: '#/components/schemas/User'
    SaleDocumentPayment:
      type: object
      properties:
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        id:
          format: int64
          type: integer
        openBalance:
          format: double
          type: number
          readOnly: true
        appliedDate:
          format: date-time
          type: string
        amount:
          format: double
          type: number
        saleDocumentId:
          format: int32
          type: integer
        saleDocument:
          $ref: '#/components/schemas/SaleDocument'
        payment:
          $ref: '#/components/schemas/Payment'
        paymentId:
          format: int64
          type: integer
        creditId:
          format: int64
          type: integer
        credit:
          $ref: '#/components/schemas/Credit'
    Blob:
      type: object
      properties:
        shares:
          type: array
          items:
            $ref: '#/components/schemas/Share'
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        isHidden:
          description: If true, the blob will not be visible to the tenant in the list of attachments. Used for invoices etc.
          type: boolean
        id:
          format: int64
          type: integer
        uri:
          type: string
        size:
          format: int64
          type: integer
        type:
          type: string
        description:
          type: string
        name:
          type: string
        containerName:
          type: string
        isEnabled:
          type: boolean
        isDeleted:
          type: boolean
        boxFileId:
          type: string
        dropboxFileId:
          type: string
    CustomFieldSet:
      required:
      - name
      type: object
      properties:
        tenant:
          $ref: '#/components/schemas/Tenant'
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        name:
          type: string
        objectType:
          enum:
          - Account
          - Project
          - Contact
          - User
          - Address
          type: string
        customFields:
          type: array
          items:
            $ref: '#/components/schemas/CustomField'
        createdDate:
          format: date-time
          type: string
        lastModifiedDate:
          format: date-time
          type: string
        createdBy:
          $ref: '#/components/schemas/User'
        lastModifiedBy:
          $ref: '#/components/schemas/User'
        isDeleted:
          type: boolean
    UserRef:
      type: object
      properties:
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        displayName:
          description: ' '
          type: string
          readOnly: true
        name:
          description: ' '
          type: string
          readOnly: true
        timeZoneId:
          type: string
    Role:
      type: object
      properties:
        isEnabled:
          type: boolean
        isDeleted:
          type: boolean
        isShowFinancialSummary:
          type: boolean
        hourlyRate:
          format: double
          type: number
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        id:
          format: int64
          type: integer
        isFullAccess:
          type: boolean
        name:
          type: string
        isRestrictLoginToAllowedIpAddresses:
          description: If set to true, will allow logins only by users that are part of a rolw where IsFullAcces=true or AllowedIpAddresses contains the IP address the logged in from
          type: boolean
        allowedIpAddresses:
          description: To contain a csv string with a list of allowed IP addresses to be used if IsRestrictLoginByIpAddresses = true. Max Length is 100 IP addresses
          type: string
        createdDate:
          format: date-time
          type: string
        lastModifiedDate:
          format: date-time
          type: string
        accessLevels:
          type: array
          items:
            $ref: '#/components/schemas/AccessLevel'
        isTimeEntryTimeLimited:
          type: boolean
    Workflow:
      required:
      - name
      type: object
      properties:
        id:
          format: int64
          type: integer
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        name:
          type: string
        description:
          type: string
        isEnabled:
          type: boolean
        isDeleted:
          type: boolean
        createdDate:
          format: date-time
          type: string
        lastModifiedDate:
          format: date-time
          type: string
        createdBy:
          $ref: '#/components/schemas/User'
        lastModifiedBy:
          $ref: '#/components/schemas/User'
        workflowEvents:
          type: array
          items:
            $ref: '#/components/schemas/WorkflowEvent'
        workflowTasks:
          type: array
          items:
            $ref: '#/components/schemas/WorkflowTask'
        tenantId:
          format: int64
          type: integer
        tenant:
          $ref: '#/components/schemas/Tenant'
        sharing:
          enum:
          - Private
          - Public
          type: string
        activities:
          type: array
          items:
            $ref: '#/components/schemas/Activity'
    CreditRef:
      required:
      - creditForSaleDocument
      type: object
      properties:
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        creditAmount:
          format: double
          description: Total credit amount Total credit amount
          type: number
          readOnly: true
        creditApplied:
          format: double
          description: Credit amount applied towards invoices Credit amount applied towards invoices
          type: number
          readOnly: true
        creditAvailable:
          format: double
          description: Credit amount available (not applied towards invoices) Credit amount available (not applied towards invoices)
          type: number
          readOnly: true
        creditForSaleDocument:
          $ref: '#/components/schemas/SaleDocumentRef'
    RecurringPaymentOccurrence:
      required:
      - recurringPayment
      type: object
      properties:
        guid:
          format: uuid
          type: string
          example: 00000000-0000-0000-0000-000000000000
        lawPayTokenId:
          type: string
        headNoteId:
          type: string
        recurringPaymentGuid:
          format: uuid
          description: 'Used to set the reference in POST and PUT '
          type: string
          example: 00000000-0000-0000-0000-000000000000
        recurringPayment:
          $ref: '#/components/schemas/RecurringPayment'
        payment:
          $ref: '#/components/schemas/Payment'
        invoice:
          $ref: '#/components/schemas/SaleDocument'
        amount:
          format: double
          description: The amount, in terms of the base unit of the owning recurring charge account's currency, to be collected by this occurrence
          type: number
        status:
          description: The status of t

# --- truncated at 32 KB (204 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/practicepanther/refs/heads/main/openapi/practicepanther-invoice-api-openapi.yml