Skip to content
Skip to main content
Novel Systems home
Billing sandbox (test mode)

Try a test payment against our Stripe test account

Not a screenshot and not a description. Below is a finalised Stripe test invoice this server read back before you arrived, the Ontario HST line on it, the approved quote it reconciles to, and a button that creates a fresh Checkout Session in test mode while you watch.

Use test card

4242 4242 4242 4242

Stripe’s published test card — any future expiry, any CVC, any postal code. It is the only card that will work here, because this account has no live key.

Every object on this page is Stripe test data, in Canadian dollars. No live key exists on this deployment and no real money can move through it.

A finalised Stripe test invoice

Invoice open — test

This document was read back out of Stripe by this server when the page was generated, against approved quote #9. Nothing was created to produce it — the read is a GET, and the invoice below existed before you arrived. Every figure is Stripe’s, in test mode, in Canadian dollars.

Invoice number
P49QOGVA-0009
Stripe object id
in_1U1CYgPiVC0ozAWKkZqDpX8k
Line items on Stripe invoice P49QOGVA-0009
LineAmount
Billing sandbox — atrium bank (qty 6)$3,646.72 CAD
HST (13%)Tax line$474.07 CAD
Subtotal$3,646.72 CAD
HST$474.07 CAD
Total$4,120.79 CAD
Amount due
$4,120.79 CAD
Finalised
Aug 5, 2026, 5:41 p.m.

Read from Stripe at Oct 6, 2026, 7:45 a.m. — this section is regenerated on a schedule; a finalised invoice is a document, not a status, so it does not change once written.

Deposit and progress payments, against that invoice

Commercial trade work is not paid in one movement, so the platform carries a milestone schedule and prints it on the proposal the customer signs. Applied to the invoice above, it comes to this. Read the boundary before the numbers: these three amounts are computed by the quoting engine, not issued as three Stripe invoices. One approved quote becomes one finalised invoice today, and a page claiming otherwise would be inventing objects you could go and fail to find.

Deposit on execution (30%)
$1,236.24 CAD

Due on signature. Releases material procurement and reserves the crew window.

Progress draw (50%)
$2,060.40 CAD

Invoiced at substantial completion of the installed scope, net 30.

Completion & sign-off (20%)
$824.15 CAD

Released on inspection sign-off and closure of the deficiency list, net 30.

Shares are read from the same constant the proposal renders, which a build-time assertion holds to exactly 100% — a schedule summing to 95% silently forgives 5% of a contract. Rounding remainder falls on the final milestone so the three amounts add back to the invoice total to the cent.

Check it yourself

Create a Checkout Session, now, from your browser

The invoice above proves a document exists. This proves the flow still runs. Pressing the button posts to this site’s own route, which approves a quote in our sandbox tenant and asks Stripe for a hosted payment page against it — then prints the object that came back, including the session id, the total, and the expiry.

Billing sandbox — Stripe test mode

Try a test payment: create a real Stripe Checkout Session

Pressing that button approves a quote in our sandbox tenant, which is the event that makes the Stripe adapter find or create a customer, write invoice items, and finalise an invoice. It then asks the API for a hosted payment page against the same quote. Nothing runs until you press it, because all of that leaves objects behind in a real Stripe account.

Stripe mode

Test mode. Every object this button creates carries a cs_test_ or in_ id in our Stripe test account, and the mode printed after a run is read off the object itself rather than off a sentence here.

Test card

4242 4242 4242 4242

Stripe’s published test card. Any future expiry, any CVC, any postal code. No money moves — the charge exists only in our test account.

Nothing has been created yet. The panel fills in with the session id, the amount, the expiry, the payment link, and the finalised invoice — its number, its line items, its HST line and its total — once you run it.

How to test tiers, discounts and taxes

How Stripe test mode maps to our tiers — and what it does not

What Stripe bills here
One approved quote, for one of your customers, as one invoice. The adapter runs on quote approval and writes a Customer, an invoice item per approved line, an explicit tax line, and a finalised invoice. Optionally a Checkout Session against the same quote, only when somebody asks for one.
What Stripe does not bill here
Your Novel Systems subscription. Starter Operator, Growth Contractor and Enterprise Fleet, the implementation fee, and seat and vehicle overage at $45 and $25 per month are contracted and invoiced directly — there is no Stripe Product, Price or Subscription behind any of them, and no recurring-billing model in the schema. A tier is not a price object in this account and this page will not imply it is.
How the amounts are set
Each line is sent as an explicit integer amount in cents, taken from the approved quote. Stripe is never handed a unit price and a quantity to multiply, because a recomputed line lands a cent away from the document the customer signed.
How HST is handled
Ontario HST at 13% is posted as its own invoice line rather than folded into the total, and the same is done on the Checkout Session. The line's description comes from a single constant that the read-back path also matches on, so the rate cannot move on one side only. Stripe Tax is not enabled on this account: it computes zero until a Canadian registration is configured, and a silent zero on a Canadian invoice is worse than a line you can see.
How test mode is configured
The backend holds one Stripe secret key as a server-side environment variable and nothing else declares a mode. Whether an object is test data is read off the object — the cs_test_ prefix on a session, the livemode flag on an invoice — so the badges above cannot be stale, and a hosted payment or invoice link is withheld unless the artifact itself reports test mode.

Plan prices, included allowances and the overage rates quoted above are published on the pricing page, which is the same module this section reads them from.