← Files MollieARCHIVED FILE

skills/mollie-payments/references/payments/sales-invoices.md

3.6 KB · Oct 6, 2026 · 00:02 UTC

↓ Download file

# Sales Invoices (Revenue Collection)

**Disambiguate this first, before writing any code.** Mollie has two unrelated
"invoice" concepts:

| API | Endpoint | Who it's for | Purpose |
|---|---|---|---|
| **Sales Invoices** (Revenue Collection) | `/v2/sales-invoices` | The merchant's own customers | The merchant invoices *their* customer for goods/services — this page |
| **Invoices** | `/v2/invoices` | The merchant | Mollie bills *the merchant* for Mollie's own transaction fees — unrelated, read-only, nothing to build here |

If the request is "how do I send my customer an invoice" or mentions payment
terms, VAT lines, or B2B billing — it's Sales Invoices. If it's about Mollie's own
fee statements, there's no integration to build; that's just something a merchant
reads in their dashboard.

## When to use Sales Invoices instead of a payment or payment link

| Situation | Use |
|---|---|
| B2B billing with payment terms (e.g. "net 30"), VAT line items, or a formal invoice document | Sales Invoices |
| Real-time checkout, single amount, immediate payment | Payments API — `<hosted-checkout.md>` |
| Sharing a link for payment with no formal invoice document | Payment link — `<payment-links.md>` |

## Status lifecycle — issuing is a real, hard-to-undo action

A sales invoice has a `status` field: `draft` → `issued` → `paid` / `cancelled`.

- **`draft`** — saved, not sent to anyone. Fully editable. Safe to create freely.
- **`issued`** — sent to the recipient. This is a real communication to a real
  person, not just a database write.
- **`paid`** — marks the invoice as settled (does not itself charge anything).
- **`cancelled`** — voids the invoice.

Apply the same rule `<operations/write-action-safety.md>` applies to refunds and
captures here: **never issue an invoice as a side effect of an unrelated request.**
If a developer asks for a "batch job" or "cleanup script" that includes issuing
invoices, call that out explicitly and confirm scope before generating the code.
Default to `status: 'draft'` unless the developer has explicitly confirmed the
invoice should go out immediately.

## Create a sales invoice

```javascript
// Node.js — mollie-api-typescript
const invoice = await mollie.salesInvoices.create({
  salesInvoiceRequest: {
    status: 'draft', // 'draft' saves only; 'issued' sends it; 'paid' records payment immediately
    recipientIdentifier: 'customer-4567', // your own internal identifier for this recipient
    recipient: {
      type: 'business',
      organizationName: 'Acme B.V.',
      email: 'billing@acme.example',
      streetAndNumber: 'Keizersgracht 1',
      postalCode: '1015 CJ',
      city: 'Amsterdam',
      country: 'NL',
    },
    lines: [
      {
        description: 'Consulting services — March',
        quantity: 1,
        vatRate: '21.00',
        unitPrice: { currency: 'EUR', value: '1500.00' },
      },
    ],
    paymentTerm: '30 days', // options: 7/14/30/45/60/90/120 days
    memo: 'Thank you for your business.',
    vatScheme: 'standard', // or 'one-stop-shop' for OSS-eligible cross-border sales
  },
});
```

- `isEInvoice` is only available for recipients in BE, DE, and NL, and **cannot be
  changed after issuance** — confirm this up front if the developer needs e-invoicing.
- Update a draft invoice with `salesInvoices.update()` — draft invoices are fully
  editable; setting `status: 'issued'` on update sends it, `status: 'cancelled'` voids it.

## Reading back invoices

```javascript
const invoices = await mollie.salesInvoices.list({ limit: 50 });
const invoice = await mollie.salesInvoices.get({ salesInvoiceId: 'invoice_4Y0eZitmBnQ6IDoMqZQKh' });
```

SHA-256: b14d7da42ffbdc3ae3bd25f72ceca2ed4d5ef667e771f5266ceead26dcb98d35