{% 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.

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.

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

Per-cassette count and physical bay position. Denomination set is hardware-determined (re-provision via atm-tui to change). "Publish to ATM" encrypts + signs + sends the new config to the machine via Nostr.

Discard unsaved edits
Waiting for the ATM's bootstrap state event. Power on the ATM and confirm it has reached the configured relay; cassette rows will auto-populate on receipt.
Publish cassette config to ATM
This publish will overwrite the ATM's currently-tracked counts. If the ATM has dispensed cash since your last refill or count baseline, those decrements will be lost. Publish only after a physical refill (a known total), not to "tweak" counts mid-day. v2 reconciliation will replace this modal with reconciled state display.

Sending to ATM:

· count
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.
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 %}