Run it
Once Leaseclock takes payments, its team runs the business from the admin at leaseclock.com/admin. Customers, payments, plans and emails are records there, like leases, and every change has a preview, an undo and a line in its history. The same Verbs run from the API, from npx leaseclock and from your team's agent.
Your team signs in to the admin with its own Leaseclock accounts. Scripts use a key created in the admin under Settings → API keys, read from LEASECLOCK_TOKEN, and pick a customer with the Workspace header or --workspace.
Customers
Customers
| Since | Customer | Plan | Status |
|---|---|---|---|
| Aug 21, 2026 | Northgate Rentals | Leaseclock Pro | Active |
| Sep 1, 2026 | Eastside Lofts | Leaseclock Pro | Active |
| Sep 4, 2026 | Maple Street Rentals | Leaseclock Pro | Active |
| Sep 9, 2026 | Linden Row Lettings | — | Canceled |
| Sep 18, 2026 | Harbor Point Homes | Leaseclock Pro | Past due |
Every workspace is a customer, with its plan and where its billing stands. Past due and Canceled have tabs of their own, so the customers who need a look are one click away.
curl "https://leaseclock.com/api/subscriptions?status=past_due" \
-H "Authorization: Bearer $LEASECLOCK_TOKEN"A card fails
Billing
Stripe · acct ••••7c1e| Date | Customer | Amount | Status |
|---|---|---|---|
| Oct 21, 2026 | Northgate Rentals | $29.00 | Paid |
| Oct 18, 2026 | Harbor Point Homes | $29.00 | Past dueRetrying Oct 25 · card email sent |
| Oct 9, 2026 | Linden Row Lettings | $29.00 | Refunded |
| Oct 4, 2026 | Maple Street Rentals | $29.00 | Paid |
| Oct 1, 2026 | Eastside Lofts | $29.00 | Paid |
When a renewal payment fails, Stripe retries the card over the next two weeks, and Leaseclock emails the workspace's owner a link to update it, from Leaseclock's own address. The payment reads Past due, with the date of the next retry. The workspace keeps working while Stripe retries, and its owner sees a Past due banner in the app with the same link. If the last retry fails, the plan ends and the workspace turns read-only, with every record kept, until someone pays.
Once Harbor Point Homes updates its card, retry it now instead of waiting for Stripe's next attempt:
curl -X POST https://leaseclock.com/api/subscriptions/harbor-point-homes/retry \
-H "Authorization: Bearer $LEASECLOCK_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"Refund a payment
Billing › Payments › Oct 9, 2026
$29.00 from Linden Row Lettings
PaidRefundRefund $29.00 to Linden Row Lettings?
Status: Paid → RefundedStripe returns it to Visa •••• 0077, and the card shows it in 5 to 10 days. A receipt for the refund goes to the owner.CancelRefund $29.00- Plan
- Leaseclock Pro
- Card
- Visa •••• 0077
- Paid on
- Oct 9, 2026
- Invoice
- LC-0042
Refund $29.00 to Linden Row Lettings?
Status: Paid → RefundedStripe returns it to Visa •••• 0077, and the card shows it in 5 to 10 days. A receipt for the refund goes to the owner.CancelRefund $29.00Refund opens its preview first: the amount, the card it goes back to and the status the payment is left in. Confirm it, and Stripe returns the money, the payment reads Refunded, and the owner gets a receipt for the refund. Pass an amount to refund part of a payment.
curl -X POST https://leaseclock.com/api/payments/linden-row-lettings-2026-10-09/refund \
-H "Authorization: Bearer $LEASECLOCK_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"A GET on the same URL returns the preview and moves nothing. Stripe covers refunds from the customer's side.
Change a customer's plan
With a second Offer, a customer moves between plans from its billing portal, and your team moves it from its page in the admin. Here Leaseclock adds a Team plan for larger property managers:
---
name: Leaseclock Team
price: { amount: 79, currency: USD, unit: month }
limits: { Unit: 1000 }
personas: Property manager, Leasing coordinator
status: Live
---Customers › Northgate Rentals
Northgate Rentals
ActiveChange planChange Northgate Rentals' plan?
Plan: Leaseclock Pro → Leaseclock TeamLeaseclock Team is $79.00 a month. Stripe prorates the rest of this month and bills the difference on Nov 21, 2026.CancelChange plan- Plan
- Leaseclock Pro $29.00 a month
- Units
- 24 of 200
- Owner
- Priya Shah
- Renews
- Nov 21, 2026
Oct 21, 2026 Visa •••• 4242$29.00
Sep 21, 2026 Visa •••• 4242$29.00
Aug 21, 2026 Visa •••• 4242$29.00
Change Northgate Rentals' plan?
Plan: Leaseclock Pro → Leaseclock TeamLeaseclock Team is $79.00 a month. Stripe prorates the rest of this month and bills the difference on Nov 21, 2026.CancelChange planThe preview names both plans, the new price and what Stripe prorates, and the next invoice carries the difference.
curl -X POST https://leaseclock.com/api/subscriptions/northgate-rentals/changePlan \
-H "Authorization: Bearer $LEASECLOCK_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{ "offer": "team" }'Answer a support request
Viewing Northgate Rentals as Leaseclock team · changes are recorded under your name
Leases
| Unit | Renter | Ends on ↑ | Status | |
|---|---|---|---|---|
| 4BAlder Court | dana.whitfield@example.com | Nov 30, 2027 | Active | Renew |
| 2AAlder Court | marcus.bell@example.com | Dec 15, 2026in 55 days | Active | Renew |
| 6DBirch House | sofia.marino@example.com | Dec 31, 2026in 71 days | Active | Renew |
| 1CAlder Court | jonah.ellis@example.com | Jan 15, 2027in 86 days | Active | Renew |
| 7CBirch House | lena.okafor@example.com | Jan 31, 2027 | Active | Renew |
| 3BAlder Court | grace.liu@example.com | Feb 28, 2027 | Active | Renew |
| 3DAlder Court | tomas.rivera@example.com | Mar 31, 2027 | Active | Renew |
| 8ABirch House | felix.wagner@example.com | Apr 30, 2027 | Active | Renew |
1–8 of 21 · Next
Priya writes in: a lease she renewed shows the wrong date. View as customer on Northgate Rentals' page opens its app with its records, under a band that says whose screen it is. Anything your team changes there lands in the record's history under your team member's name, so Priya sees who changed what.
curl https://leaseclock.com/api/leases/4b/history \
-H "Authorization: Bearer $LEASECLOCK_TOKEN" \
-H "Workspace: northgate-rentals"The history shows every renewal of 4B with who ran it and from where, and Undo on the newest puts the date back.
Emails your product sends
Emails
From hello@leaseclock.com| Sent when | Sends | |
|---|---|---|
| Sign-in link | Someone signs in | On |
| Invitation | An admin invites a teammate | On |
| Receipt | Stripe takes a payment | On |
| Card failed | A payment fails, with each retry | On |
| Refund | Your team refunds a payment | On |
| Lease ends in 60 days | Lease.remind, on its date | On |
Leaseclock sends every email from its own domain, hello@leaseclock.com, in its theme. Sign-in links, invitations, receipts, failed-card notices and refund receipts come with every product. A Verb with emails: adds its own, like Lease's 60-day reminder in Verbs. npx saas.dev domain add publishes the domain's SPF and DKIM records with its DNS record, so the mail lands in inboxes. Rewrite an email's words, or turn one off, from the Emails screen.
Each email sent is a record, so a question about a missing message has an answer:
curl "https://leaseclock.com/api/emails?to=dana.whitfield@example.com" \
-H "Authorization: Bearer $LEASECLOCK_TOKEN" \
-H "Workspace: northgate-rentals"Close a customer
Customers › Northgate Rentals
Northgate Rentals
ActiveCancel planCancel Northgate Rentals' plan?
Status: Active → Canceled on Nov 21, 2026The workspace stays readable, its records kept and exportable, and nothing more is charged.Keep planCancel plan- Plan
- Leaseclock Pro $29.00 a month
- Units
- 24 of 200
- Owner
- Priya Shah
- Renews
- Nov 21, 2026
Oct 21, 2026 Visa •••• 4242$29.00
Sep 21, 2026 Visa •••• 4242$29.00
Aug 21, 2026 Visa •••• 4242$29.00
Cancel Northgate Rentals' plan?
Status: Active → Canceled on Nov 21, 2026The workspace stays readable, its records kept and exportable, and nothing more is charged.Keep planCancel planCancel plan shows what changes before anything changes: the plan ends on its renewal date, nothing more is charged, and the workspace stays readable with every record. The owner exports everything in one call, and reopening the plan brings the workspace back as it was.
curl -X POST https://leaseclock.com/api/subscriptions/northgate-rentals/cancel \
-H "Authorization: Bearer $LEASECLOCK_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"What the admin holds
Beside your own Nouns, every product has these, with the same lists, pages, API, CLI and MCP tools:
| Noun | What it is | Verbs |
|---|---|---|
| Workspace | One customer, with its people and records | |
| Member | A person in a workspace, with a role | |
| Subscription | A workspace's plan in Stripe | retry, changePlan, cancel |
| Payment | One charge in Stripe | refund |
| Invoice | What Stripe billed, with its PDF | |
| One message the product sent or has scheduled | ||
| Changelog entry | What changed in a push customers can see |
Your team's agent
Your team's agent connects to the same MCP server and runs the same Verbs, with the same previews. A morning's work is one sentence:
Find every past-due subscription and draft a note to each owner.