{% extends "base.html" %} {% from "macros.jinja" import window_vars with context %} {% block scripts %} {{ window_vars(user) }} {% endblock %} {% block page %}

Satoshi Machine — Operator

Manage your bitSpire fleet, liquidity providers, and commission distribution. Operator guide · Error glossary

Refresh all data
LNbits platform fee: cash-in ${ (superConfig.super_cash_in_fee_fraction * 100).toFixed(2) }% · cash-out ${ (superConfig.super_cash_out_fee_fraction * 100).toFixed(2) }% of each transaction's principal. Operator's per-machine fee rides on top of these. ${ worklistCount }
Your machines

Each ATM is paired with one dedicated wallet. Inbound payments to that wallet trigger automatic distribution.

You haven't registered any machines yet. Click Add machine to register a bitSpire ATM by its Nostr npub.
Liquidity providers

LPs receive proportional DCA distributions from your machines. Balances reflect deposits less the sats they've been paid.

Register at least one machine before adding LPs — an LP is scoped to a specific machine. No LPs yet. Use Register LP to add one at any of your machines.
Deposits

Record fiat handed in by LPs. Confirmed deposits increase the LP's balance and feed proportional DCA distribution.

Register at least one LP before recording deposits. No deposits yet. Use Record deposit to log a new one. No deposits match the current filters.
Commission splits

After the LNbits platform fee is taken, the remainder is distributed across the wallets you configure here. Per-machine overrides take precedence over your default rules.

Default ruleset — applies to every machine without an explicit override. Per-machine override for . Empty/cleared rows fall back to the default.
Legs Sum: Must sum to 100% before saving
No default rules. Without a default, all operator commission stays in the machine wallet (audit visible). No override for this machine. The default ruleset applies.
Remove leg
Preview against sats operator commission → :
Worklist

Settlements that didn't process cleanly. Errored ones need retry; stuck ones may need force-reset (processor crashed mid-flight).

All clear — no errored or stuck settlements.
Reports

Client-side CSV exports of the data currently loaded in the dashboard. For larger date ranges or server-side filters, use the LNbits API directly.

Machines
rows
Clients (LPs)
rows, balances included
Deposits
rows
Payments (legs)
Distribution audit (dca / super_fee / operator_split / etc)
Add bitSpire machine

Register an ATM by its Nostr public key. Choose the LNbits wallet that will receive cash-out payments from this machine — settlements there trigger the automatic distribution chain.

Pair spire
Close
Point the spire's camera here — tap Close when scanned.
Reload Close
npub
Wallet
Location
Settlements

Every bitSpire transaction lands here. Click a row's menu for retry / partial-dispense / notes.

No settlements yet. They'll appear when bitSpire pays this machine's wallet.
Cassettes

The machine owns these counts — it holds the notes. You record what you did to a bay and it keeps the running total. Bay count and denomination set are hardware-determined (re-provision via atm-tui to change the bays themselves).

Re-read the machine's latest report
Cash-out is held. The machine latched cash-out off after a terminal dispenser fault ( at ): . Clear the transport path, then either record a Recount (which also fixes the count) or release it here. The machine can't vouch for these counts. A dispense ended without a reliable count of what left the bay (). Open the bay, count it, and record a Recount — the machine clears this on its own once you do. Waiting for the ATM's state event. Power on the ATM and confirm it has reached the configured relay; cassette rows will auto-populate on receipt.
Recent operations

"Pending" means sent but not yet echoed back by the machine. Every publish carries the recent window, so a pending operation keeps being re-offered until it lands — there is nothing to retry by hand.

No operations recorded yet. Machine confirmed at Sent; waiting for the machine to echo this id back
Record cassette operation
Record what you did to the bay. The machine applies it to the count it already holds, so a dispense that happened while this dialog was open is kept, not overwritten. The bay is now empty. Nothing else to enter.
Apply partial dispense
Original gross: . Provide what was actually dispensed. Sat amounts will scale linearly, the commission split will recompute, and distribution will re-run.
Settle off-machine

The customer paid and the machine reports .

Use this when you have made the customer whole outside the machine. The settlement distributes at the full amount and the machine marks its own record remediated. Nothing is dispensed. If you dispensed the shortfall at the machine instead, do nothing — it reports that itself.

Add note to settlement

Notes are append-only and timestamped. Use for reconciliation context, off-LN refund records, dispute narrative, etc.

Platform fee (super-only)

Charged on every transaction's principal across the LNbits instance. Independent per direction. Each direction's total (super + operator) is capped at 15%. Operators see these as a read-only banner. Wallet ID is where the collected fee lands; typically a wallet you (the super) own.

This LP hasn't onboarded via satmachineclient yet, so their DCA wallet isn't configured. Ask them to open the satmachineclient extension once and the deposit will be accepted next time.
Reject deposit

The deposit will be marked rejected and won't count toward the LP's balance. Optional reason for the audit trail.

Enrol an LP at one of your machines. Wallet, DCA mode, and autoforward are configured by the LP themselves via the satmachineclient extension — you can't set them here. Deposits are refused until the LP has registered.

Settle LP balance
Pay the LP's remaining fiat balance in sats from your wallet at the rate you choose. Useful to zero out small balances that would otherwise shrink forever via proportional shares.
Remaining balance
Edit machine
{% endblock %}