Skip to content

Invoice Workflow

Invoices live in a status workflow. Each status has transitions leading to other statuses, and each transition can fire actions (emails, webhooks, notifications) and evaluate conditions.

Default statuses

Out of the box, FoxCLM ships with:

StatusMeaning
DraftBeing composed; not yet sent
SentDelivered to the client, waiting for payment
Pending PaymentClient has initiated checkout but not confirmed
PaidFull payment received
OverdueDue date passed without payment
CancelledVoid - not billed

You can add, rename, or remove statuses. Common additions:

  • Submitted for Approval / Approved - for multi-user workflows where invoices need review
  • Partially Paid - for split payments (FoxCLM does not currently compute partial balances automatically; this is a manual status)
  • Refunded - after a refund is processed

Transitions

A transition connects two statuses. You build them at Settings -> Workflows & Statuses, filtering by type Invoice.

Each transition can have:

  • Label - shown as the button text on the invoice (e.g. "Send", "Approve", "Cancel")
  • Condition - optional - must be satisfied before the transition fires
  • Actions - fire when the transition runs (e.g. send email, call webhook)

See Workflows & Statuses for the full reference.

Auto-advance

Two built-in auto-advance jobs run on invoices:

Overdue detection

Every few minutes, FoxCLM checks for invoices where:

  • Status is Sent (or any non-terminal status)
  • due_date is in the past
  • overdue_notified_at is null

These are moved to Overdue, firing any actions you've configured on that transition (typically a send_overdue_notice email action). The flag prevents the email from being resent.

Workflow-driven auto-advance

Any transition can have a date-column condition - e.g. "auto-move to Overdue if due_date < $NOW". The cron checks these and fires the transition when the condition is true.

Approval lock

Settings -> Automation has a master toggle: Invoice Approval Lock.

When enabled:

  • An invoice in status Submitted for Approval or Approved cannot be edited.
  • Only admins (workspace owner or admin-level collaborators) can revert to Draft to unlock editing.
  • This applies across all users including the invoice creator.

Leave it off if your business does not require multi-person approval.

Common workflows

Simple billing flow

Draft -> Sent (action: send_invoice_email)
Sent -> Paid (action: send_paid_confirmation)
Sent -> Overdue (condition: due_date < $NOW, action: send_overdue_notice)
Overdue -> Paid (action: send_paid_confirmation)

Approval flow

Draft -> Submitted for Approval
Submitted for Approval -> Approved (action: send_invoice_email)
Submitted for Approval -> Draft (rejection - no action)
Approved -> Paid (action: send_paid_confirmation)
Approved -> Overdue

Reminder cadence

Sent -> Reminder Sent (condition: issued_date < 7 days ago, action: send_custom_email)
Reminder Sent -> Overdue (condition: due_date < $NOW)
Overdue -> Final Notice (condition: due_date < 14 days ago)

Workflow actions for invoices

Action types specific to invoices:

ActionWhat it does
send_invoice_emailSends the invoice to linked client emails
send_overdue_noticeOverdue reminder email
send_paid_confirmationPayment receipt
share_invoice / unshare_invoiceCreates or revokes the public share link
send_custom_emailAny custom subject/body
create_notificationIn-app notification
call_webhook / call_apiFire an HTTP request to an external system

See Workflow Actions for the full list.

Next steps

FoxCLM Documentation