# Filament Invoicing: Invoices With PDF, Email, Payments and Multiple Currencies

> tomatophp/filament-invoices adds invoices, payments, five PDF templates, email sending and multi-currency to a Filament 5 panel. Install it, wire your models and create an invoice from code.

*2026-10-12T12:32:33Z*

Most Laravel apps that bill someone end up with a half-built invoices table, a PDF view nobody wants to touch, and a mail class that attaches it. `tomatophp/filament-invoices` is that whole piece, already done, inside your Filament panel.

**The short answer:** `composer require tomatophp/filament-invoices`, run `php artisan filament-invoices:install`, register `FilamentInvoicesPlugin` on your panel, then tell it which models send and receive invoices. You get invoices and payments with multiple types, currencies and statuses, five PDF templates, email with the PDF attached, widgets and a facade for creating invoices from code. It's free and MIT-licensed.

## What you get

- Create, manage and print invoices
- Payments against invoices, with a printable pay slip
- Multiple invoice types, currencies and statuses, with a status manager
- Invoices from and for any model (morph relations)
- Invoice widgets for the dashboard
- PDF export with DomPDF, and bulk export of several invoices as a ZIP
- Five built-in templates: Classic, Modern, Minimal, Professional and Creative
- Email sending with the PDF attached, from the view page, a table row or in bulk
- An invoice settings page through Filament Settings Hub

## Requirements

| Plugin | Filament | Laravel | PHP |
|--------|----------|---------|-----|
| 5.x | 5.x | 12.x – 13.x | 8.2+ |
| 4.x | 4.x | 11.x – 12.x | 8.2+ |
| 2.x | 3.x | 10.x – 11.x | 8.1+ |

## Install

```bash
composer require tomatophp/filament-invoices
php artisan filament-invoices:install
```

Register the plugin in `app/Providers/Filament/AdminPanelProvider.php`. Add `useSettingsHub()` if you want the settings page:

```php
->plugin(
    \TomatoPHP\FilamentInvoices\FilamentInvoicesPlugin::make()
        ->useSettingsHub()
)
```

The settings page needs its own migration:

```bash
php artisan vendor:publish --tag="filament-invoices-settings-migrations"
php artisan migrate
```

## Tell it who invoices whom

An invoice is always from one model and for another, for example from a `Company` to an `Account`. Register both in a service provider:

```php
use TomatoPHP\FilamentInvoices\Facades\FilamentInvoices;
use TomatoPHP\FilamentInvoices\Services\Contracts\InvoiceFor;
use TomatoPHP\FilamentInvoices\Services\Contracts\InvoiceFrom;

public function boot()
{
    FilamentInvoices::registerFor([
        InvoiceFor::make(Account::class)->label('Account'),
    ]);
    FilamentInvoices::registerFrom([
        InvoiceFrom::make(Company::class)->label('Company'),
    ]);
}
```

The invoices resource now shows up in your panel.

## Create an invoice from code

When an order is paid or a subscription renews, you usually want the invoice created for you. The facade does it:

```php
use TomatoPHP\FilamentInvoices\Facades\FilamentInvoices;
use TomatoPHP\FilamentInvoices\Services\Contracts\InvoiceItem;

FilamentInvoices::create()
    ->for(Account::find(1))
    ->from(Company::find(1))
    ->date(now())
    ->dueDate(now()->addDays(7))
    ->items([
        InvoiceItem::make('Setup')->qty(1)->price(200),
        InvoiceItem::make('Monthly plan')->qty(2)->price(100)->discount(10)->vat(10),
    ])->save();
```

## PDF and email

Export a PDF from the invoice page or a table row, or bulk-export several invoices as a ZIP. In code, `PdfGenerator` can generate, stream or download an invoice with a template:

```php
use TomatoPHP\FilamentInvoices\Services\PdfGenerator;

return app(PdfGenerator::class)->download($invoice, 'professional');
```

Emails carry the PDF as an attachment. The subject and body are templates you set on the settings page, with placeholders such as `{uuid}`, `{customer_name}`, `{total}`, `{currency}` and `{due_date}`. The same page holds your company details, the default currency, tax rate and payment terms, the default template and the paper size (A4, Letter or Legal).

Need your own layout? Register a template class that extends `AbstractTemplate` with `TemplateFactory::register('my-template', MyTemplate::class)`.

## Honest limits

- **It's invoicing, not accounting.** There's no ledger, tax filing or bank reconciliation. If you need those, feed these invoices into your accounting system.
- **Payment collection is up to you.** The plugin records payments against invoices. Charging a card is your payment gateway's job.
- **e-invoicing rules differ by country.** If your country requires government e-invoicing, check that requirement separately before you rely on these PDFs.

## FAQ

### Is there a free invoicing plugin for Filament?
Yes. `tomatophp/filament-invoices` is free and open source under the MIT licence, and it supports Filament 3, 4 and 5.

### Can Filament invoices use more than one currency?
Yes. The plugin supports multiple currencies, invoice types and statuses, and the settings page sets the default currency.

### Can I send an invoice by email with a PDF?
Yes. You can send it from the invoice page, a table row or in bulk, and the PDF is attached. The subject and body are templates with placeholders.

### Can I change how the invoice PDF looks?
Yes. Pick one of the five built-in templates, or register your own template class through `TemplateFactory`.

## Next steps

- [The plugin page](https://tomatophp.com/en/plugins/filament-invoices) · [GitHub](https://github.com/tomatophp/filament-invoices)
- [Ship a Laravel admin panel in a day with Filament 5 and TomatoPHP](https://tomatophp.com/en/blog/laravel-admin-panel-in-a-day-filament-tomatophp)

Building billing into a Laravel SaaS and want it done properly? I take that work, including white-label for agencies. See [white-label Laravel development](https://fadymondy.com/en/services/white-label-laravel-filament?utm_source=tomatophp&utm_medium=referral&utm_campaign=seo-content-oct26).

---

Source: https://tomatophp.com/en/blog/filament-invoices-pdf-email-multi-currency
