> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dmly.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create and send an invoice

> Build an invoice from your catalogue, send it on WhatsApp with a pay link and QR code, and track it from draft to paid.

An invoice is the centre of Finance. Bookings, orders and subscriptions all produce invoices
rather than being billed directly, so this is the page you will use most. You build an
invoice from your **Offerings**, send it to a client on WhatsApp with a link they can pay,
and watch it move from **Draft** to **Paid**.

<Note>
  **A pay link needs a connected payment gateway.** Until you connect one, an invoice still
  sends and still produces a PDF, but there is no link to pay it with — opening **Payment link
  & QR** shows **No payment gateway is connected yet. Connect one to generate a payment link.**
  Set one up first in [Payments and gateways](/finance/payments-and-gateways).
</Note>

## Create the invoice

<Steps>
  <Step title="Open Finance → Invoices">
    Start a new invoice and pick the contact it is for.

    Creating an invoice for a contact converts them to a **client** automatically. This is
    normal — a client is just a contact at the client lifecycle stage, not a separate
    record. See [Client profile](/contacts/client-profile).
  </Step>

  <Step title="Add your line items">
    Line items come from your catalogue. When you add an Offering, its name and price are
    **copied onto the invoice** as a snapshot — editing that Service or Product later never
    changes an invoice you have already issued.

    Every line must be in the same currency. There is no exchange-rate conversion, so an
    invoice mixing currencies is rejected rather than converted.
  </Step>

  <Step title="Set the due date and notes">
    **Due date** and **Notes for client** start blank. Leave the due date empty and it is worked
    out on save from your **Default due days**; leave the notes empty and your default invoice
    notes are used. Both live in [Finance settings](/finance/settings).

    Terms and currency are not editable per invoice — terms come from your Finance settings, and
    the currency comes from your business details.
  </Step>

  <Step title="Apply a coupon (optional)">
    Enter a **Coupon code (optional)** to discount the invoice. The discount is worked out
    against the total **including tax**, so a percentage coupon takes that percentage off the
    total your client actually owes. A discount can never take an invoice below zero. See
    [Coupons](/finance/coupons).
  </Step>
</Steps>

<Tip>
  If the client is paying you on the spot — cash at the counter, a card machine — record that
  payment as you create the invoice instead of sending it and chasing it.
</Tip>

## Send it on WhatsApp

Sending flips the invoice from **Draft** to **Sent**, posts the amount to the client's
statement as money they owe you, and mints a pay link.

The message goes out on **WhatsApp** by default, preferring DMLY's approved `dmly_invoice_sent`
template. An approved template is what lets the message reach a client outside the 24-hour
window; inside an open window a freeform message still goes through. See
[Connect WhatsApp](/channels/whatsapp).

<Warning>
  Once an invoice is sent it can no longer be deleted. Only a **Draft** can be deleted; a sent
  invoice must be **voided** instead, which keeps the record. Check the amount before you
  send.
</Warning>

## The pay link and the QR code

Open **Payment link & QR** on an invoice to get everything you need to collect the money.

<Columns cols={2}>
  <Card title="The link" icon="link">
    The pay link is the payment provider's own hosted checkout page. **Copy link** to paste it
    anywhere, or **Visit link** to open the checkout page yourself. To send it, use **Share via**
    below.
  </Card>

  <Card title="The QR code" icon="qrcode">
    The same link as a QR code, generated in your browser from the link itself. Print it, or
    show it on screen for a client to scan at the counter.
  </Card>
</Columns>

Under **Share via** you can send the link on **WhatsApp**, **SMS** or **Email**. WhatsApp is
the default and the one to reach for.

The link always matches the **Balance due**, not the original total. If a client part-pays,
the next link you share is re-minted for what is still outstanding — you never have to work
out the remainder yourself. An invoice with nothing left to pay, no contact attached, or one
that has been voided will not produce a link.

<Note>
  If you have connected more than one gateway, an invoice uses the first one you connected
  unless a provider is chosen. Worth knowing if payments are landing in an account you did not
  expect.
</Note>

## The PDF

**Download PDF** gives you the invoice as `invoice-<number>.pdf`, using the same layout as the
print view. It is branded from your business details — logo, address, email, phone and
registration number, with your workspace name as the business name. Fix anything wrong there
rather than on the invoice.

Invoice numbers are issued per workspace and never collide: `INV-0001`, `INV-0002`, and so on.
Numbers are zero-padded to four digits, and the prefix is yours to change in
[Finance settings](/finance/settings).

## The statuses

| Status             | What it means                                             |
| ------------------ | --------------------------------------------------------- |
| **Draft**          | Not sent. Editable, and the only status you can delete.   |
| **Sent**           | Issued to the client and owed. Posted to their statement. |
| **Partially paid** | Some money received, a balance still outstanding.         |
| **Paid**           | Settled in full.                                          |
| **Overdue**        | Past its due date with money still owed.                  |
| **Void**           | Cancelled, but kept on the record.                        |

**Overdue** is applied automatically by a nightly job, not the moment the clock passes
midnight — an invoice paid in the meantime is skipped.

<Note>
  The [webhook topics](/api-reference/webhooks) for invoices use slightly different names to
  these labels (`invoice.created`, `invoice.partially_paid`, `invoice.voided`). Only relevant
  if you are building an integration.
</Note>

## Record a payment yourself

Not every payment comes through a gateway. Record cash, a bank transfer or a card-machine
charge against the invoice and it lands in the same ledger as an online payment. The methods
available are **Cash**, **Bank transfer**, **Credit / debit card**, **Cheque**, **EFTPOS** and
**Other**.

You can also record a payment against a client directly from their
[client profile](/contacts/client-profile).

<Note>
  A gateway payment reconciles itself. When your provider confirms a charge, DMLY applies it to
  the invoice and moves it to **Partially paid** or **Paid** without you touching it — there is
  no need to record it a second time.
</Note>

## Voiding an invoice

Voiding cancels an invoice without deleting it. Two things are worth understanding:

* **Only the unpaid balance is credited back.** Money the client already paid stays recorded
  against the invoice. Crediting the full total would double-count what you have already
  received and push their statement balance negative.
* **Loyalty points earned on that sale are taken back**, so a voided sale does not leave points
  behind that were never really earned.

## Invoices and loyalty points

Loyalty is off until you switch it on under **Loyalty** in
[Finance settings](/finance/settings). Once it is on, a paid invoice earns the client loyalty
points — and if you have also set a redeem threshold, a personal coupon is created for them
automatically once their balance crosses it. Leave the threshold at zero and no coupon is ever
minted.

Invoices raised from an [appointment](/appointments/overview) are the exception: their points
are awarded when the appointment is **completed**, not when the invoice is paid. This stops a
client earning points for a session they never turned up to.

<Accordion title="The invoice sent but the client got no WhatsApp message">
  The notification is only dropped when two things are true at once: `dmly_invoice_sent` is not
  approved by Meta, **and** the client's 24-hour window is closed. A pending or rejected template
  still delivers a freeform message if the client messaged you within the last 24 hours. So check
  both — your template status under [Connect WhatsApp](/channels/whatsapp), and whether the
  client has messaged you recently. Also confirm the contact is reachable on WhatsApp at all; a
  contact with no WhatsApp identity cannot receive one.
</Accordion>

<Accordion title="There is no pay link on the invoice">
  A link needs all of: a connected gateway, a contact on the invoice, a balance above zero,
  and an invoice that is not voided. A fully paid invoice has no link because there is nothing
  left to pay.
</Accordion>

<Accordion title="The client paid but the invoice still shows as owed">
  A gateway payment applies to the invoice only when the provider tells DMLY it succeeded.
  Every gateway needs its webhook endpoint set manually in the provider's own dashboard — DMLY
  does not register it for you. If that step was skipped, charges succeed at the provider and
  never reach the invoice. See [Payments and gateways](/finance/payments-and-gateways).
</Accordion>

## Related

<Columns cols={2}>
  <Card title="Payments and gateways" icon="credit-card" href="/finance/payments-and-gateways">
    Connect Stripe, PayPal, Paystack, Razorpay, MyFatoorah or Mercado Pago.
  </Card>

  <Card title="Finance settings" icon="gear" href="/finance/settings">
    Numbering, default due days, currency, tax and terms.
  </Card>

  <Card title="Orders" icon="box" href="/finance/orders">
    Sell stock-tracked products, then generate an invoice from the order.
  </Card>

  <Card title="Subscriptions" icon="rotate" href="/finance/subscriptions">
    Bill clients on a recurring plan from your catalogue.
  </Card>
</Columns>
