# Invoice Ninja

Self-hostable invoicing, quotes, expenses and time tracking with a complete REST API.

Laravel invoicing suite an SMB runs to bill clients: invoices, quotes, recurring billing, online payments through Stripe and other gateways, expenses, projects and tasks, purchase orders and bank feeds. The self-hosted edition includes every hosted Pro and Enterprise feature under the Elastic License 2.0; the same REST API the mobile and desktop apps use is published with an OpenAPI spec.

Alternative to: FreshBooks, QuickBooks, Zoho Invoice

- Capabilities: adaptable, operable
- Vertical: invoicing-finance
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/invoiceninja/invoiceninja (Elastic-2.0), 10045 stars, last commit 2026-09-03
- Last activity: 2026-09-03
- Page: apps/invoiceninja--invoiceninja.html
- JSON: apps/invoiceninja--invoiceninja.json

## Use it when

- I bill a handful of clients and want invoices, quotes and card payments on my own server without a per-seat plan
- I want my agent to raise and chase invoices from a project tracker without touching the invoicing UI

## Gotchas

- License is Elastic License 2.0, not OSI open source: you may modify and self-host, but may not offer it as a managed service to third parties
- Default PDF_GENERATOR=hosted_ninja sends invoice HTML to Invoice Ninja's PDF service; switch to snappdf for fully local rendering
- APP_KEY encrypts stored data; losing it makes the database unreadable
- Removing Invoice Ninja branding from client-facing pages needs the $40/year white-label license

## Editions

- Self-hosted: Free, open source
  - source: https://github.com/invoiceninja/invoiceninja
  - container: https://hub.docker.com/r/invoiceninja/invoiceninja/
- Hosted Free: Free, closed source
  - hosted: https://www.invoiceninja.com
- Ninja Pro: $14 per month, closed source
  - hosted: https://invoiceninja.com/pricing-plans/
- Enterprise: $18 per month, closed source
  - hosted: https://invoiceninja.com/pricing-plans/
- White-label license (self-hosted): $40 per year, closed source

## Adaptable: make it yours

Effort: config-only (18 things to edit), surface kind admin-ui

The named .env vars are deployment configuration: APP_URL, APP_KEY, DB_*, MAIL_MAILER, PDF_GENERATOR, REQUIRE_HTTPS, and optional bank-feed and exchange-rate credentials. Business adaptation lives in the admin UI under Settings: company details and logo, tax rates, invoice and quote designs, custom fields, email templates and reminders, payment gateways, products and recurring schedules.

- Env vars: APP_URL, APP_KEY, DB_CONNECTION, DB_HOST, DB_DATABASE, MAIL_MAILER, POSTMARK_API_TOKEN, PDF_GENERATOR, NINJA_ENVIRONMENT, REQUIRE_HTTPS, NORDIGEN_SECRET_ID, NORDIGEN_SECRET_KEY, GOCARDLESS_CLIENT_ID, GOCARDLESS_CLIENT_SECRET, OPENEXCHANGE_APP_ID, NINJA_AUTO_BILL_TIME, DELETE_PDF_DAYS
- Config files: .env
- Prompt files: none
- Accounts you'll need: Stripe or another supported payment gateway (optional); Postmark or SMTP provider; Nordigen or GoCardless for bank feeds (optional)

## Operable: what an agent can drive

Operability: official. Interface: api at https://api-docs.invoicing.co/ (published by the builder, both).

### Reach (complete coverage)

- Create, send and track invoices: reachable. openapi/api-docs.yaml tags invoices, emails, activities
- Quotes and conversion to invoices: reachable. openapi tag quotes; recurring_quotes
- Recurring invoices and auto-billing: reachable. openapi tags Recurring Invoices, subscriptions, scheduler; NINJA_AUTO_BILL_TIME in .env.example
- Take online payments through gateways: reachable. openapi tags payments, company_gateways, client_gateway_tokens; gateway keys entered in app settings
- Expenses and vendors: reachable. openapi tags expenses, expense_categories, recurring_expenses, vendors
- Projects, tasks and time tracking: reachable. openapi tags projects, tasks, task_status, task_schedulers
- Credits and purchase orders: reachable. openapi tags credits, Purchase Orders
- Bank feeds and transaction rules: reachable. openapi tags bank_integrations, bank_transactions, bank_transaction_rules; needs NORDIGEN_* or GOCARDLESS_* or Yodlee credentials on self-host
- Reports and exports: reachable. openapi tags reports, export, charts
- Invoice design and PDF templates: reachable. openapi tags designs, templates, preview; PDF_GENERATOR selects snappdf, phantom or hosted_ninja

## Code stack

- Languages: PHP, JavaScript, Dart
- Frameworks: Laravel, React, Flutter
- Package manager: composer
- Database: MySQL, PostgreSQL
- Hosting target: Docker, VM, Cloudron, Softaculous, Elestio, YunoHost

## Evidence and confidence

- formFactor: Laravel web app with API and client portal (README Developers Guide) (confidence 0.95)
- executionModel: no model at runtime; PHP business logic (confidence 0.9)
- operability: REST API published by the Builder at api-docs.invoicing.co with OpenAPI spec in repo openapi/api-docs.yaml (confidence 0.95)
- effort: .env.example in repo; README says cp .env.example .env; hosting guide at invoiceninja.github.io (confidence 0.9)
- editions: README: hosted vs self-hosted, $40/year white-label; invoiceninja.com/pricing-plans: Free (5 clients), Pro $14/mo, Enterprise $18/mo (confidence 0.8)
- active: GitHub pushedAt 2026-09-03; tag v5.11.53 referenced in README
- reach:  (confidence 0.85)

## Open questions

- Does the OpenAPI spec cover the invoice PDF download route on self-host, or only through invitation links?
- Which third-party MCP wrapper is best maintained, for Adopters who want MCP rather than raw REST (NightSquawk/invoiceninja-mcp-server was seen at sourcing)

## Sources

- https://github.com/invoiceninja/invoiceninja (sourcing:invoicing-finance:github)
- https://github.com/invoiceninja/invoiceninja/blob/master/openapi/api-docs.yaml (analysis:invoicing-finance)
- https://invoiceninja.com/pricing-plans/ (analysis:invoicing-finance)
