Tidemark Billing is an open-source billing system and client portal. Invoices, quotes and recurring billing are built in; payment providers, hosting panels and your own automations are plugins. It runs on ordinary PHP hosting or in Docker.
A small core that does the job, and a plugin system for everything that differs from one business to the next.
Invoice 0041Paid
Invoice 0042Open
Quote 0007Accepted
Invoices and quotes
Automatic numbering, taxes by country and region, partial payments and refunds. PDFs download from the portal and attach to emails, and pay links work without signing in. A quote turns into an invoice and its services when the client accepts.
Renewal invoiceCreated
Reminder emailSent
Overdue serviceSuspended
Recurring billing that runs itself
Cycles from monthly to every three years, setup fees and multi-currency prices. A daily billing run raises renewals, sends reminders, and suspends or terminates what stays unpaid. Free trials, prorated plan changes and usage-based pricing are built in.
Invoice 0042Pay
Quote 0008Accept
Hosting planManage
A client portal
Customers order, pay invoices, accept quotes, manage and change their services, save payment methods, open support tickets and create API tokens, under your logo and brand colour.
StripeCheckout
PayPalCheckout
Failed chargeRetried
Payments and autopay
Stripe and PayPal are bundled, with refunds and webhooks. Customers can save a payment method, and failed autopay charges are retried on a schedule with an email to the customer.
cpanelProvisioning
license-serverLicensing
your-pluginYours
Plugins for everything else
Payment gateways, provisioning modules, routes, views, menus and event listeners, all from a folder you drop in or a zip you upload. cPanel, DirectAdmin, Enhance and a license server are bundled.
GET /api/v1/me
POST /api/v1/services
Webhook, signedHMAC
An API for your own front end
A REST API for customers and staff with an OpenAPI description, token abilities and rate limiting, plus outbound webhooks signed with HMAC-SHA256.
Docker or a zip on ordinary PHP hosting. Either way you finish in a web installer that checks your server, connects a database and creates your admin account.
Install it
Upload the release zip, or run one Docker container with the scheduler and queue worker built in.
Open /install
SQLite needs no setup; MySQL, MariaDB and PostgreSQL work too.
Add email and a payment plugin
Enter your SMTP details, switch on Stripe or PayPal, and add your first product.
Create a token in the admin area or the client portal, and the API is yours. The reference and the OpenAPI file are in the repository and served by every install.
Yes. Tidemark Billing is open source (MIT). You run it on your own PHP hosting or server, with no licence fee and no account with us.
Where can I run it?
On ordinary PHP shared hosting (PHP 8.3 or newer, with SQLite, MySQL, MariaDB or PostgreSQL), or in Docker. You do not need SSH or Node. It needs one cron job that runs every minute, or a secret URL you can call from a cron service if your host has no command-line cron.
Which payment providers does it support?
Stripe and PayPal plugins are bundled: customers pay by hosted checkout, and refunds and webhooks are handled. Customers can save a payment method for autopay, with scheduled retries when a charge fails. Other providers are added as plugins.
Can it set up hosting accounts for my customers?
Bundled plugins for cPanel and WHM, DirectAdmin and Enhance create, suspend, unsuspend and terminate accounts. They follow each vendor’s published API documentation but have not been tested against live servers yet, so try them on a test account first.
Can I build my own front end?
Yes. A REST API (v1) covers customers and staff, with an OpenAPI description, tokens that carry only the abilities you give them, rate limiting and webhooks signed with HMAC-SHA256.
Is the interface translated?
Not yet: the interface is in English. Invoices and quotes can print Chinese, Japanese and Korean text once you install an optional font pack.
How do I update it?
With Docker, pull the newer image and recreate the container; it applies new migrations when it starts. On PHP hosting, replace the files with the new release, keeping your .env and storage folder, and run php artisan migrate --force.