Billing Schedules
Manage every recurring billing relationship in one place. Set up a subscription, retainer, or payment plan, link its invoices and receipts, and see exactly how much has been paid, what is pending, and where each relationship stands.
Start Today
FLEXIBLE BILLING
Bill Any Deal, Any Shape
Subscriptions, payment plans, or both in one schedule. You pick the right billing for each customer.
Every billing schedule runs one of two ways: Enlivy runs it end to end, or it mirrors a subscription you already run elsewhere. You choose per customer, and you can use both at once.
App-managed schedules bill in two shapes, recurring subscriptions and fixed payment plans, and can mix them in a single schedule: a setup fee, a finite intro period, then an open-ended retainer. Set it once.
Recurring subscriptions
The same charge repeats on any cadence, weekly to yearly, indefinitely or until an end date.
Fixed payment plans
A finite set of installments, each its own amount and date, invoiced and charged automatically on schedule.
Phased and mixed
Step pricing up or down across phases, or combine a one-off fee, an intro rate, and an ongoing subscription in one schedule.
You run it, or you mirror it
Let Enlivy run new billing end to end, or import subscriptions you already run and keep them in sync, no migration.
HANDS-OFF BY DEFAULT
Payments That Run Themselves
Set the schedule once. Enlivy invoices, applies the right tax, and collects, on time, every cycle.
Each cycle, Enlivy generates the invoice, numbered and taxed, and where a card is on file it charges automatically, through your own Stripe account, so the money goes straight to you.
It keeps itself honest too: payments reconcile in real time, a retry never creates a second charge, and nothing gets stuck.
Invoiced on time, every time
An hourly process watches every active schedule and raises each invoice the moment it is due.
Charged automatically
Saved cards are charged off-session when the invoice is created, with no customer interaction and no accidental double-bills.
Your account, your money
Charges run through your own payment account, so funds go straight to you, never to Enlivy.
Self-correcting
Payments reconcile in real time, an hourly re-check fixes any missed event, and stuck charges clear themselves.
Bank transfer and manual too
Not everything is a card. Manual and bank-transfer methods are tracked right alongside the automatic ones.
SOUND FAMILIAR?
Where Did That Money Go?
Payments scattered across folders, inboxes, and spreadsheets, and no clean answer when someone asks what a client has actually paid. Here is what that costs you, and how Enlivy fixes it.
- The problem
Client payment confusion
A client has paid you monthly for 8 months. How much in total? What is still pending? You should not have to dig through records to answer.
One schedule shows every invoice and payment for a client, with totals and pending amounts always current.
- The problem
No long-term visibility
You know what happened this month, but how much has this supplier cost you over the year? The data exists, just scattered everywhere.
Every schedule keeps the full arc in one place, so the yearly picture is one click, not an investigation.
- The problem
Unstructured payment history
Invoices in one folder, receipts in another, confirmations in email. Answering "how much did we pay them?" is archaeology, not accounting.
Invoices, receipts, and payments live on the schedule they belong to, as one structured, running history.
- The problem
Manual reconciliation nightmare
Month-end means hours of spreadsheet work matching payments to invoices, calculating totals, and hoping the numbers are right.
Payments reconcile themselves against each invoice, so the totals are always right without the spreadsheet.
THE ENGINE BEHIND IT
Safe to Let Customers Self-Serve
Handing customers the controls is only a good idea if the machine behind the controls is trustworthy. Here is what makes ours safe.
- Byte-exact price grandfathering
When a customer changes plan, the items they already have keep their exact agreed price, currency, and quantity, to the cent, across unlimited changes. Raise list prices without a churn event.
- A preview that equals the charge
The "what will this cost me?" screen runs the real billing logic in memory, with no write and no risk, and is guaranteed to match the actual charge. There will be no surprises on the invoice.
- Fair, one-directional proration
Upgrades charge only the net, time-weighted difference as one clean invoice. Downgrades never pay cash back out. Foreign-priced lines are converted before netting.
- One package, every currency
Price the same package per currency, and bill each customer in their own. If a rate is missing or stale, the charge aborts rather than mis-bills. Correctness over collection.
- No double charges, ever
Charges are row-locked and idempotency-keyed, so a double-click, a retry, or a collision with the billing run cannot charge a customer twice.
- Card-loss auto-recovery
If a card expires, the subscription pauses itself instead of failing repeatedly. The moment a working card is added, it resumes and collects the balance owed. Revenue is not lost to an expired card.
Customer Self-Service, Set Per Schedule
Every billing schedule carries its own self-service rules. Each one can defer to the package default or override it, so you decide exactly what a customer can do on their own.
- Change plan
Use package default · Allow · Don't allow
- Cancel subscription
Use package default · Allow · Don't allow
- Pause & resume
Use package default · Allow · Don't allow
TRY IT
Reconfigure a Live Subscription
This is the real Change Package Terms editor. Open the drawer, add or edit a line, pick a proration mode, and watch the preview recompute, exactly what a customer sees.
EVERYTHING IN ONE PLACE
Everything You Need to Stay on Top of Payments
From automatic invoicing to audit-ready trails, built for businesses that need answers, not just data.
- Unified Dashboard
See all billing schedules in one place: inbound and outbound, active and completed. Filter by direction, status, sender, or recipient.
- Hourly Auto-Invoicing
An hourly background process watches every active schedule. When a payment is due, the invoice is generated automatically: numbered, taxed, and ready.
- Off-Session Card Charging
Cards are charged automatically when each invoice is created, no customer interaction needed. Idempotent charging means no accidental double-bills, ever.
- Document Linking
Link invoices, receipts, or payslips to any schedule. Enlivy auto-populates amounts, taxes, and payment status; saving hours every month.
- Flexible Frequencies
Weekly, bi-weekly, monthly, or yearly. Open-ended or bounded by an end date. Each phase can also have a fixed number of occurrences before stepping to the next.
- Multi-Currency Billing
Quote in one currency, bill in another. Enlivy converts each invoice at live exchange rates, with an optional conversion fee for FX spread, automatically, every cycle.
- Status Management
Mark schedules as pending, active, or cancelled. Keep your dashboard clean and focused on what matters now.
- Reuse & Edit
Clone existing schedules for similar arrangements. Edit active schedules as agreements change. Maximum flexibility, minimum hassle.
Structure Every Financial Relationship
Create Your Schedule
Set up any billing relationship in seconds. Choose direction (client paying you or you paying a supplier), type (subscription or payment plan), and frequency.
Link Your Documents
Connect invoices, receipts, or payslips to your schedule. Enlivy automatically pulls amounts, tax info, and payment status: building your payment history without manual entry.
Watch It Update
As invoices get paid or receipts are processed, the billing schedule updates to reflect the current state. No manual reconciliation, no status chasing.
See The Complete Picture
View total amounts paid, payment dates, pending invoices, and exactly where every financial relationship stands: instantly, from one dashboard.
API Reference
Billing Schedules from the API
Automate recurring revenue end-to-end. An app-managed billing schedule is run entirely by Enlivy: it generates invoices on the cadence you define, charges the saved payment method, retries failures, and moves through its own lifecycle: pending, active, paused, cancelling, completed. You define the composition once; the engine bills it on schedule.
This reference covers app-managed schedules only. Enlivy also supports Stripe-hosted schedules, where Stripe owns the subscription and runs the billing. Those are managed on Stripe’s side, so their creation and modification aren’t covered here. You can compose an app-managed schedule two ways: from raw phases (your own recurring line items and cadence) or from a subscription billing package (a reusable template). The examples below cover both, plus listing, editing, reconfiguring, and cancelling.
Query your schedules with pagination, filtering, and full-text search. Filter by status, direction (outbound / inbound), sender, receiver, contract, bank account, or any of the date ranges (starts_at, ends_at, created_at, updated_at). Expand the phases and generated payments inline.
const organizationId = "your_org_id";
const token = "YOUR_TOKEN_HERE";
fetch(
`https://api.enlivy.com/organizations/${organizationId}/billing-schedules?page=1&limit=20` +
// status: pending | active | payment_method_required | paused | cancelling | completed | cancelled
`&status=active&direction=outbound` +
`&include=receiver_user,phases,payments` +
`&include_meta=navigation`,
{
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
}
}
);Retrieve a single schedule with everything attached: its phases and line items, the payments generated so far, the counterparties, and the linked package or contract. Read next_payment_create_at to see when the engine bills next, and total / paid_total for progress.
const organizationId = "your_org_id";
const scheduleId = "your_schedule_id";
const token = "YOUR_TOKEN_HERE";
fetch(
`https://api.enlivy.com/organizations/${organizationId}/billing-schedules/${scheduleId}` +
// includes: sender_user, receiver_user, contract, billing_package,
// subscription_term, phases, payments, deleted_by_user
`?include=phases,payments,receiver_user,billing_package`,
{
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
}
}
);The most direct way to bill: define one or more phases, each with its own cadence and line items. The engine issues an invoice per phase occurrence and charges it. Phases are exclusive to app-managed schedules.
const organizationId = "your_org_id";
const token = "YOUR_TOKEN_HERE";
fetch(`https://api.enlivy.com/organizations/${organizationId}/billing-schedules`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
management_type: "app_managed", // this reference only covers app_managed
direction: "outbound", // outbound = you bill a customer; inbound = you are billed
status: "active", // start billing right away
organization_sender_user_id: "org_user_sender_id", // the biller (you)
organization_receiver_user_id: "org_user_receiver_id", // the customer (required for outbound)
currency: "EUR",
payment_method: "stripe_card_payment", // bank_transfer | card_payment | stripe_card_payment | paypal | cash | paid_by_personal_funds
organization_user_payment_method_id: "payment_method_id", // saved card to auto-charge (must belong to the receiver)
name_lang_map: { en: "Monthly Retainer" }, // per-locale maps, not plain strings
note_lang_map: { en: "Includes support and hosting." },
is_email_notifications_active: true,
email_notifications_to: "billing@acme.example",
// customer self-service toggles (what the recipient may do from the portal)
customer_can_reconfigure: false,
customer_can_cancel: true,
customer_can_pause: false,
// totals + dates (total, paid_total, starts_at, ends_at, next_payment_create_at)
// are computed by the engine, do NOT send them.
// phases are valid ONLY for app_managed (stripe_hosted rejects them). Max 20.
phases: [
{
frequency: "monthly", // weekly | biweekly | monthly | yearly
execute_after: "2026-08-01", // first run date for this phase
max_occurrences: 12, // stop after N invoices (omit for open-ended)
due_date_type: "custom_days", // immediate | end_of_month | custom_days
due_date_days: 14, // required only when due_date_type = custom_days
order: 0,
line_items: [
{
name_lang_map: { en: "Retainer" }, // required unless organization_product_id is set
quantity: 1,
price: 500.00, // money: signed decimal in MAJOR units (not cents)
organization_tax_class_id: "tax_class_id"
},
{
organization_product_id: "product_id", // pulls name / tax defaults from the product
quantity: 2,
price: 49.90
}
]
}
]
})
});Instead of hand-building phases, materialize the schedule from a reusable subscription billing package. The package owns the composition, you just pick the cadence variant and which group items to include.
const organizationId = "your_org_id";
const token = "YOUR_TOKEN_HERE";
fetch(`https://api.enlivy.com/organizations/${organizationId}/billing-schedules`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
management_type: "app_managed", // package-managed requires app_managed
direction: "outbound", // package-managed requires outbound
status: "active",
organization_sender_user_id: "org_user_sender_id",
organization_receiver_user_id: "org_user_receiver_id",
organization_user_payment_method_id: "payment_method_id",
// attach a SUBSCRIPTION package, it defines the phases & line items
organization_billing_package_id: "billing_package_id",
// optional: pick the cadence variant; omit to use the package default
organization_billing_package_subscription_term_id: "subscription_term_id",
// optional: choose which package group items (and quantities) to include
selected_group_items: [
{ id: "group_item_id_1", quantity: 1 },
{ id: "group_item_id_2", quantity: 3 }
]
// NOTE: mutually exclusive with `phases`, the package supplies them.
})
});Update metadata (name, notes, notification settings, self-service toggles) and drive the lifecycle by moving status: pause an active schedule, resume a paused one, or set it to cancel. Send only what you want to change.
const organizationId = "your_org_id";
const scheduleId = "your_schedule_id";
const token = "YOUR_TOKEN_HERE";
fetch(`https://api.enlivy.com/organizations/${organizationId}/billing-schedules/${scheduleId}`, {
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
// lifecycle: active <-> paused; set "cancelling" to stop at the end of the cycle
status: "paused",
note_lang_map: { en: "Paused at customer request." },
is_email_notifications_active: false,
customer_can_cancel: true
// to change WHAT gets billed on a package-managed schedule,
// use /reconfigure below rather than editing here.
})
});Change what a package-managed schedule bills: swap the package, change the term, adjust selected items and quantities, override prices, or add one-off custom line items. Always preview first: the preview endpoint returns the resulting composition and any proration before a cent is charged.
const organizationId = "your_org_id";
const scheduleId = "your_schedule_id";
const token = "YOUR_TOKEN_HERE";
const headers = {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
};
const changes = {
organization_billing_package_id: "billing_package_id",
organization_billing_package_subscription_term_id: "subscription_term_id",
selected_group_items: [
// price_override + pricing_currency let you deviate from the package price
{ id: "group_item_id", quantity: 2, price_override: 39.00, pricing_currency: "EUR" }
],
custom_line_items: [
{ name_lang_map: { en: "One-off setup" }, quantity: 1, price: 150.00 }
],
// how the switch is billed: none | prorate_immediately | prorate_next_invoice
// (prorate_immediately requires an active schedule)
proration_mode: "prorate_next_invoice"
};
// 1. Preview, no changes are applied; returns the new composition + proration
await fetch(
`https://api.enlivy.com/organizations/${organizationId}/billing-schedules/${scheduleId}/preview-reconfigure`,
{ method: "POST", headers, body: JSON.stringify(changes) }
);
// 2. Apply
await fetch(
`https://api.enlivy.com/organizations/${organizationId}/billing-schedules/${scheduleId}/reconfigure`,
{ method: "PUT", headers, body: JSON.stringify(changes) }
);Read aggregate recurring-revenue analytics across your schedules: a point-in-time summary (with forward projection) or a history_monthly breakdown, to power MRR dashboards without pulling every schedule yourself.
const organizationId = "your_org_id";
const token = "YOUR_TOKEN_HERE";
fetch(
`https://api.enlivy.com/organizations/${organizationId}/billing-schedules/analytics/summary` +
// analyticsType: summary | history_monthly
`?direction=outbound&convert_to_currency=EUR`,
{
method: "GET",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
}
}
);Soft-delete a schedule. Prefer setting status to cancelling (stops future billing at the end of the cycle) when you want to keep the record; delete when you want it gone. It can be restored later.
const organizationId = "your_org_id";
const scheduleId = "your_schedule_id";
const token = "YOUR_TOKEN_HERE";
// soft delete, restore via POST /billing-schedules/restore/{scheduleId}
fetch(`https://api.enlivy.com/organizations/${organizationId}/billing-schedules/${scheduleId}`, {
method: "DELETE",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json"
}
});Works together with
- InvoicesCreate a compliant invoice in seconds, send it, and watch it link itself to the contract, payment, and bank transaction it belongs to. EU e-invoicing is built in, so the work between issuing and getting paid happens in one place.
- ReceiptsReceipts gives you a structured record of every payment, money in and money out: linked to your invoices and contracts, with your cashflow always up to date.
- PayslipsBuild a payslip template once with the fields your business needs, then generate payslips for every employee in minutes. Each one links to its contract, payment, and bank transaction, so the whole record stays connected and traceable.
- UsersEasily customize roles and permissions in Enlivy for clients, partners, accountants, and administrators, ensuring secure and efficient access with full audit trails for compliance.
- ContractsDraft contracts from templates, send them for signature with SMS or email identity verification, and track every signature and renewal. Signed copies are delivered automatically.
- Billing PackagesBuild a plan once and offer it weekly, monthly, yearly, or anything in between. Customers subscribe, switch cycle, change tier, manage their card, pause, and cancel from a branded portal, with every change previewed, prorated, and collected automatically.
- Slack IntegrationStop checking dashboards to find out what changed. Enlivy brings the important moments from your business directly into Slack, from payments and proposals to contracts and customer activity. Connect once, choose your events, route them to the right channels, and keep your team aligned in real time.
- MCPConnect Enlivy to Claude, ChatGPT, Cursor, or any AI assistant through MCP. Ask about your invoices, contracts, and pipeline, and get real work done, safely scoped to exactly what your own account can already do.