Muin is in private beta.Watch the public release announcement —talk to us.
Falaah Falaah AI

Customer Invoices

Create, send, and track customer invoices. Real-time status tracking, email delivery with PDF attachments, automated reminders, and recurring templates.

Customer Invoices are the accounts-receivable side of Finance. They capture what customers owe you, send branded email notifications with a PDF attachment, track delivery and payment, and let you recover overdue balances through a tuned reminder workflow. Paired with Recurring Invoices, AR Aging, and the Funds module, Customer Invoicing gives your team a single view of every incoming dollar.

How Customer Invoicing Fits Together

Draft Invoice → Send (email + PDF) → Viewed → Paid (in full or partial) → Reconciled

                                Overdue → AR Aging reminders
SurfaceWhat It Does
Customer InvoicesThe outbox of customer obligations — draft, sent, viewed, partial paid, paid, overdue, void
Recurring InvoicesTemplates that auto-generate invoices on a monthly / quarterly / annual cadence
AR Aging & CollectionsOverdue-invoice queue, per-customer collection score, reminder ladder

Customer Invoices

Viewing Invoices

  1. Navigate to Finance → Customer Invoices (/invoicing)
  2. The invoice list shows every outgoing invoice with status, customer, amount, issue date, due date, and collection score
  3. Filter by status: draft, sent, viewed, partial_paid, paid, overdue, void

Invoice Statuses

StatusMeaning
draftCreated but not yet sent. No email dispatched; not visible to the customer
sentEmailed to the customer with the PDF attachment; awaiting payment
viewedCustomer opened the invoice email or downloaded the attached PDF
partial_paidOne or more payments applied, but amount_due is still above zero
paidFully paid; amount_due is zero
overduePast its due_date and not yet paid or void (derived, not stored)
voidCancelled with a reason; any linked payment page token is revoked

Creating an Invoice

  1. From Customer Invoices, click New Invoice (or press N)
  2. Pick a customer:
    • Start typing in the Customer picker — matching CRM people appear
    • Or type a name + email to bill an ad-hoc customer not yet in the CRM
  3. Nonprofit tenants only: pick an optional Fund to tag this AR line for Fund-level reporting
  4. Set Issue Date and Due Date (defaults to today + 30 days)
  5. Add one or more line items — each row captures description, quantity, and unit price; amount calculates automatically
  6. Enter Tax and Discount if applicable. Discounts cannot exceed the subtotal + tax (guarded by the API)
  7. Click Save as Draft to keep it private, or Save and Send to email it immediately

When a CRM person is selected, Muin pre-fills the customer name and email from the CRM record; manual overrides are preserved.

Sending an Invoice

Click Send on a draft invoice to email it to the customer. Muin:

  • Generates a branded PDF with your tenant’s logo, address, and invoice line items
  • Emails the customer at customer_email with the PDF attached
  • Stamps last_sent_at on the invoice
  • Transitions status from draft to sent

Preview before sending: click Preview Email to see the exact subject, body, and PDF filename Muin will dispatch. Useful for verifying branding and wording before it hits the customer’s inbox.

Resend: already-sent invoices show a Resend button — useful after a customer reports the email was caught by spam or sent to the wrong address.

Voiding an Invoice

Sometimes an invoice is issued in error, cancelled by agreement, or superseded by a credit note. Void captures the reason and revokes any payment link:

  1. Open the invoice and click Void
  2. Enter a reason (required — becomes part of the audit trail)
  3. Confirm

Voiding:

  • Transitions status to void
  • Revokes the associated PaymentPageToken so the public payment link returns a 410 Gone
  • Keeps the invoice visible in history for audit and reporting
  • Removes it from AR Aging calculations

You cannot void an invoice that has already received payment. Issue a credit note instead.

Downloading the PDF

Every invoice can be re-downloaded as a PDF at any time — useful for audits, vendor-style record-keeping, or sending via a channel other than Muin. The PDF matches exactly what was (or will be) attached to the email.


Tracking Payments

Amount Due

Every invoice tracks subtotal, tax_amount, discount_amount, total_amount, amount_paid, and amount_due. All amounts use IRS-grade decimal precision — no floating-point rounding errors in your books.

Recording Payments

Payments applied to an invoice (through the Reconciliation drawer, a payment-page gateway transaction, or a manual journal entry) automatically:

  • Increment amount_paid
  • Decrement amount_due
  • Transition status from sent to partial_paid, then to paid when amount_due hits zero

Collection Score

Sent invoices display a collection score — a 0-100 signal that blends invoice age, customer payment history, and prior reminder responsiveness. Higher scores signal invoices that are likely to be paid soon; lower scores surface accounts that need intervention.


Reminders & Collections

Sent or overdue invoices can send payment reminders to the customer:

  • From the invoice row, click Remind — Muin drafts and sends an AI-composed reminder email using the invoice details and current aging bucket
  • The reminder copy tone escalates automatically with aging: friendly at 1-14 days, firm at 15-30 days, urgent at 31+ days past due
  • For per-customer and bulk reminder flows across many overdue invoices, use AR Aging & Collections — see the AR Aging doc

Each reminder stamps last_reminded_at so you can see when the customer was last contacted.


Recurring Invoices

For retainers, subscriptions, and standing monthly bills, create a template that auto-generates invoices on a cadence.

Creating a Recurring Template

  1. Navigate to Finance → Customer Invoices → Recurring (/invoicing/recurring)
  2. Click New Recurring Template
  3. Pick the customer + optional fund (same pickers as a one-off invoice)
  4. Set the Frequency: monthly, quarterly, semi-annual, or annual
  5. Set Next Issue Date — the first invoice fires on this date
  6. Set Payment Terms — days between issue and due date for each generated invoice
  7. Optionally set an End Date — the template stops generating after this date
  8. Add line items, tax, discount — these are copied verbatim onto every generated invoice
  9. Toggle Auto-send if you want each generated invoice to be emailed immediately, or leave it off to generate drafts you can review first

Recurring Statuses

StatusMeaning
activeGenerates on schedule
pausedTemporarily stopped — resume at any time
cancelledManually stopped; no further invoices will generate
completedReached its end_date naturally

Payment Method Integration

If your tenant has a connected payment processor (Stripe or Paystack), recurring templates can pre-attach the customer’s saved payment method so auto-sent invoices include a one-click pay link. When the processor is unavailable or unsupported in your region, the template degrades gracefully to send-only mode — no broken flows.

Tracking Generated Invoices

Each recurring template shows invoices_generated and last_generated_at so you can verify the cadence is firing as expected. Every generated invoice appears in the main Customer Invoices list with the template’s tag so you can filter them.


Data Model Notes

  • Decimal-safe amounts: subtotal, tax, discount, total, amount_paid, amount_due all stored as DECIMAL(19,4) — no float drift across sums, tax computations, or reminder-cadence math.
  • Idempotent payment application: applying the same payment twice is a no-op — Muin deduplicates by transaction fingerprint.
  • Multi-currency: each invoice carries its own currency code; aggregates respect the invoice currency.
  • Audit trail: every state transition (draft → sent, void with reason, payment applied) writes an entry viewable in the invoice’s Activity timeline.
  • Tenant isolation: invoices are scoped to the tenant; cross-tenant reads are guarded at the API layer.

Permissions

Customer Invoices require RequireFinanceWrite (or RequireFinanceProcess for void actions). Users without finance-write access see a 403 on direct API calls and an Access Denied state on the /invoicing pages.