PHPackages                             proovit/laravel-billing - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. proovit/laravel-billing

ActiveLibrary[Payment Processing](/categories/payments)

proovit/laravel-billing
=======================

Laravel 13 billing package for invoices, quotes, payments, credit notes, public invoice sharing, PDF rendering, and API-driven billing workflows.

1.0.7(2mo ago)1181MITPHPPHP ^8.3

Since Apr 8Pushed 2mo agoCompare

[ Source](https://github.com/PROOV-IT/proovit-laravel-billing)[ Packagist](https://packagist.org/packages/proovit/laravel-billing)[ RSS](/packages/proovit-laravel-billing/feed)WikiDiscussions main Synced 2w ago

READMEChangelogDependencies (11)Versions (10)Used By (1)

Proovit Laravel Billing
=======================

[](#proovit-laravel-billing)

Laravel 13 billing package for invoices, quotes, payments, credit notes, public invoice sharing, PDF rendering, and API-driven billing workflows.

Need to certify invoices, keep a proof trail, or publish business evidence online? See [ProovIT](https://proov-it.io).

What this package gives you
---------------------------

[](#what-this-package-gives-you)

- Eloquent models with a stable `uuid_identifier` route key
- Single-action HTTP controllers grouped by concern
- Form requests and JSON resources split by domain
- Draft, finalize, payment, credit note, quote, and quote-to-invoice flows
- A PDF pipeline that works with Eloquent models or with plain DTOs
- Optional database-backed mode or fluent document builder mode
- Configurable storage disk and directory for generated invoice files
- Translatable labels and package translations
- Optional Scramble documentation at `docs/api/billing`
- Optional signed public sharing for invoices

Requirements
------------

[](#requirements)

- PHP 8.3
- Laravel 13
- Composer

Install
-------

[](#install)

```
composer require proovit/laravel-billing
php artisan billing:install
```

`billing:install` is recommended, not required.

You can skip it if you want to start with the package defaults and adjust the config later.

The installer can:

- enable or disable the database-backed stack
- enable or disable the API
- install and configure Sanctum if you want `auth:sanctum`
- publish package resources when requested
- enable or disable signed public invoice links
- enable or disable Scramble documentation

If you skip the installer:

- the package still works with its defaults
- you can publish config, views, translations, and routes later
- you can keep the package database-backed or document-builder-only through config changes

Quick examples
--------------

[](#quick-examples)

### Full stack

[](#full-stack)

```
config([
    'billing.database.enabled' => true,
    'billing.api.enabled' => true,
    'billing.api.auth_middleware' => ['auth:sanctum'],
    'billing.public_shares.enabled' => true,
    'billing.docs.enabled' => true,
]);
```

### Fluent document builder

[](#fluent-document-builder)

```
$document = \Proovit\Billing\Builders\Documents\InvoiceDocumentBuilder::make()
    ->withSeller([
        'legal_name' => 'ProovIT SAS',
        'display_name' => 'ProovIT',
        'address' => ['line1' => '1 rue de Paris', 'city' => 'Paris', 'country' => 'FR'],
    ])
    ->withCustomer([
        'legal_name' => 'Acme Ltd',
        'reference' => 'ACME-001',
        'billing_address' => ['line1' => '2 avenue des Tests', 'city' => 'Lyon', 'country' => 'FR'],
    ])
    ->addLine([
        'description' => 'Consulting',
        'quantity' => '1',
        'unit_price' => '250.00',
        'tax_rate' => '20',
    ])
    ->withNumber('INV-2026-0001')
    ->withIssuedAt(now())
    ->withDueAt(now()->addDays(30))
    ->withLocale('en')
    ->validate()
    ->build();

$pdf = app(\Proovit\Billing\Actions\Invoices\GenerateInvoicePdfAction::class)->handle($document);
```

If you already have a fully normalized draft and totals object, you can still build the immutable document DTO directly with `InvoiceDocumentData::fromDraft(...)`.

The fluent builder is the recommended public API for applications that do not want to pass a large DTO object around by hand.

Documentation
-------------

[](#documentation)

- [Installation](docs/install.md)
- [Configuration](docs/configuration.md)
- [HTTP API](docs/api.md)
- [Authentication](docs/authentication.md)
- [Release process](docs/release-process.md)
- [Release notes](docs/release-notes.md)
- [FAQ](docs/faq.md)

Use cases
---------

[](#use-cases)

- [Customers](docs/use-cases/customers.md)
- [Invoices](docs/use-cases/invoices.md)
- [Quotes](docs/use-cases/quotes.md)
- [PDF rendering](docs/use-cases/pdf.md)
- [Sample PDF output](docs/assets/invoice-sample.pdf)
- [Web preview and print](docs/use-cases/web-preview.md)
- [Document builder mode](docs/use-cases/document-builder.md)
- [Storage](docs/use-cases/storage.md)
- [Public sharing](docs/use-cases/public-sharing.md)
- [Demo data](docs/use-cases/demo-data.md)
- [Events](docs/use-cases/events.md)
- [Scramble documentation](docs/use-cases/scramble.md)

Repository layout
-----------------

[](#repository-layout)

- `src/Actions/Customers` for customer workflows
- `src/Actions/Invoices` for invoice, payment, credit note, and PDF workflows
- `src/Actions/Quotes` for quote workflows and quote conversion
- `src/Http/Controllers/Api` for API controllers
- `src/Http/Requests/Api` for API validation
- `src/Http/Resources/Api` for JSON responses
- `src/Http/Controllers/Web` for web preview and public sharing controllers
- `database/factories` for package factories
- `database/seeders` for demo and sample data seeders
- `resources/views/pdf` for the PDF HTML view
- `resources/views/web` for browser preview and print views
- `docs/` for package documentation
- `Makefile` for common local and Sail-based tasks

Release notes
-------------

[](#release-notes)

### 1.0.7

[](#107)

- Backfilled UUID identifiers for existing billing records so historical invoices, quotes, payments, and related resources keep resolving Filament URLs

### 1.0.6

[](#106)

- Improved Scramble response schemas so API documentation shows the real JSON payloads
- Added clearer API and documentation wiring for the billing panel

### 1.0.1

[](#101)

- Added a downloadable sample PDF generated from the default invoice Blade views
- Refined the classic invoice layout and page spacing

### 1.0.0

[](#100)

- Added optional database-backed and fluent document builder billing modes
- Added PDF document DTOs and offline PDF generation support
- Added configurable invoice storage disk and directory
- Added optional resource publication in the installer
- Added Scramble grouping by concern
- Added English docs with user-facing examples
- Added web preview and print views for invoices
- Added package factories and a demo seeder
- Added a package-local Makefile for QA and Sail workflows

Notes
-----

[](#notes)

- HTTP access uses `uuid_identifier`, not the numeric primary key.
- Controllers are single-action `__invoke` classes.
- Scramble docs are exposed on a configurable path so they do not overwrite the host application's docs.
- `dev` is the integration branch; tags are cut from `main`.
- Core and Filament releases should share the same tag when they are released together.
- If only `filament-billing` changes, use the fourth numeric segment for plugin-only tags.
- AI, MCP, and Filament documentation belongs to their respective packages, not this one.
- The package `Makefile` only covers package-local QA; sandbox commands live at the repository root.

Release notes
-------------

[](#release-notes-1)

### 1.0.7

[](#107-1)

- Backfilled UUID identifiers for existing billing records so historical invoices, quotes, payments, and related resources keep resolving Filament URLs

Acknowledgements
----------------

[](#acknowledgements)

The package builds on the Laravel ecosystem and related tooling:

[![Laravel](https://camo.githubusercontent.com/5a580364ff3bd338370177402c5c050ff81a1933927e1e475c920c90850b38a3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d4646324432303f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://laravel.com/)[![PHP 8.3](https://camo.githubusercontent.com/c0843d02f29799373722236b75ab9e8a21bed88ae48885077215dfb96db82110/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e332d3737374242343f7374796c653d666f722d7468652d6261646765266c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://www.php.net/)[![Pest](https://camo.githubusercontent.com/2a2eec0cccba34c60a6b92382d5564aabb28e552a98a29c9a305552c9afe6a95/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506573742d3232323232323f7374796c653d666f722d7468652d6261646765266c6f676f3d70657374266c6f676f436f6c6f723d7768697465)](https://pestphp.com/)[![Pint](https://camo.githubusercontent.com/afc73cb7dbf49a30d64013f52c252368b27bbc7c394e0ff3ebf41cf9a5d0e987/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f50696e742d3434343434343f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://github.com/laravel/pint)[![PHPStan](https://camo.githubusercontent.com/6edcd78ec6e2d91f8d5c91afc3beff6f3cdef1bd1228e5ef77976326f2e214f3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d3041364542443f7374796c653d666f722d7468652d6261646765266c6f676f3d7068707374616e266c6f676f436f6c6f723d7768697465)](https://phpstan.org/)[![Larastan](https://camo.githubusercontent.com/9c2303f377425e2fcb8b792fd250cc72345455f8540c1385768f9dd60fad1f2d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6172617374616e2d3246383535413f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://github.com/larastan/larastan)[![Scramble](https://camo.githubusercontent.com/75d3cfecd1ff13483c1541e4c2eaf1aab7bed75365a88112789116cd3de9d853/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f536372616d626c652d3131313832373f7374796c653d666f722d7468652d6261646765266c6f676f3d73776167676572266c6f676f436f6c6f723d7768697465)](https://dedoc.co/docs/scramble)[![Brick Math](https://camo.githubusercontent.com/83ccbda32e19113bbc4feead7d1462e63a69fa430e809146cf5313e58391a7ac/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f427269636b2e4d6174682d3542343633383f7374796c653d666f722d7468652d6261646765)](https://github.com/brick/math)

###  Health Score

42

—

FairBetter than 89% of packages

Maintenance88

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity55

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~2 days

Total

8

Last Release

62d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/20963821?v=4)[Macy Medema](/maintainers/Macymed)[@macymed](https://github.com/macymed)

---

Top Contributors

[![dabrokezz](https://avatars.githubusercontent.com/u/2923039?v=4)](https://github.com/dabrokezz "dabrokezz (40 commits)")

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/proovit-laravel-billing/health.svg)

```
[![Health](https://phpackages.com/badges/proovit-laravel-billing/health.svg)](https://phpackages.com/packages/proovit-laravel-billing)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.6k](/packages/larastan-larastan)[illuminate/database

The Illuminate Database package.

2.8k54.1M11.1k](/packages/illuminate-database)[laravel/ai

The official AI SDK for Laravel.

9782.1M162](/packages/laravel-ai)[spatie/laravel-health

Monitor the health of a Laravel application

87411.3M153](/packages/spatie-laravel-health)[pressbooks/pressbooks

Pressbooks is an open source book publishing tool built on a WordPress multisite platform. Pressbooks outputs books in multiple formats, including PDF, EPUB, web, and a variety of XML flavours, using a theming/templating system, driven by CSS.

45344.0k1](/packages/pressbooks-pressbooks)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
