Mainnet beta. Real USDC on Arc. The contracts are not audited: at most 10 USDC a bill. To try SendSure with test money, use the testnet version.
SendSure

Books

Your books, exact to the last decimal

A ledger checks that debits equal credits. A payment to the wrong wallet balances perfectly, and a half-cent difference can vanish into rounding. SendSure writes each payment into the books you already keep, with the exact amount from the chain and the Arc transaction, once.

What SendSure never does in your books

Never rounded

Six decimals, always

A settlement is recorded only if it equals the open amount to the last of 6 decimals. Anything else stays open for a person.

Never twice

One transaction, one entry

Each Arc transaction can be recorded once. Syncing again changes nothing.

Never without proof

No transaction, no payment

In Odoo and ERPNext, a USDC payment entered by hand, without an Arc transaction to the proven address, is refused.

Odoo 16–19

An add-on for Odoo Community 16, 17, 18 and 19, from one source. It was tested inside Odoo (37 tests, on each version) and end to end: a real Odoo bill paid on Arc testnet and recorded back, 27 of 27 checks.

An Odoo vendor bill paid with SendSure, recorded with the exact USDC amount and the Arc transaction

A vendor bill paid on Arc, recorded through Odoo's own Register Payment.

An Odoo vendor: the wallet the vendor proved is trusted, a wallet someone added is refused

The wallet the vendor proved can be trusted. A wallet someone slipped in cannot, even by the admin.

Odoo alone (we reproduced each on Odoo 19)With the SendSure add-on
The built-in “Manual” method pays an untrusted wallet.The USDC journal's only way out is SendSure, which needs a trusted wallet and an Arc transaction.
Anyone with the right can trust any wallet someone typed in.A wallet can be trusted only if it is the address the vendor proved, read from Arc at that moment.
A $250.00 bill paid with 249.995 USDC is marked paid, with no write-off.Recorded only if it matches exactly. Otherwise the bill stays open with a note.
The currency code USDC is cut to USD, which already exists.USDC is set up with 6 decimals at 1:1 to USD.

One command with Docker: ./run.sh up in integrations/odoo. The key Odoo uses can send bills and read their status. It can never approve, co-sign or change your rules.

ERPNext 15–16

A Frappe app for ERPNext 15 and 16, including companies whose books are in another currency. It was tested inside ERPNext (29 tests, on both versions) and end to end: a real ERPNext purchase invoice paid on Arc testnet and recorded back, 29 of 29 checks.

An ERPNext purchase invoice paid with SendSure: 0.250000 USDC with the Arc transaction and a link to the receipt

A purchase invoice paid on Arc, recorded as a Payment Entry with the transaction as its reference.

An ERPNext supplier: the proven payout address is read from SendSure and cannot be typed in

The proven address is read from SendSure. Typing another one is refused, for the administrator too.

ERPNext alone (we reproduced each on ERPNext 15.121.6)With the SendSure app
A 250.00 invoice paid with 249.995 is marked Paid: both ledger rows say 250.00, no Round Off row, no write-off.A settlement is recorded only if it equals the open amount exactly, to the last of 6 decimals; the ledger rows are read back after posting.
A supplier's bank account number takes 30 characters; a wallet address has 42.The proven address is a read-only field read from SendSure. Only an Accounts Manager can approve it for payments.
A Payment Entry takes any text as its reference; nothing ties it to a transfer.A payment on the SendSure mode, or out of the USDC account, is refused unless SendSure read the settlement from Arc.

One command with Docker: ./run.sh up in integrations/erpnext. The same key rules as Odoo: it can send invoices and read their status, never approve, co-sign or change your rules.

Plain-text and CSV books

Every payment carries its claim, the agent's decision hash and its Arc transaction. After each payment day the treasury balance is asserted from the chain, and anything that moved the treasury outside SendSure is one explicit entry, computed from that balance.

bean-check passes

beancount

Six-decimal USDC with an explicit tolerance of one millionth, and a balance assertion per payment day.

hledger check --strict passes

hledger

A journal with declared accounts and a balance assertion per day. hledger refuses the file if the balance is off by 0.000001.

Debits equal credits

Journal CSV

A general journal, two lines per entry, for any ledger that imports journal lines, or for a spreadsheet.

Nets to the chain balance

Bank-statement CSV

Date, amount, payee, description and the Arc transaction as the reference, for tools that reconcile from a statement. Amounts keep six decimals; the download tells you which ones a cents-only tool would round.

A sample of the books (the demo org's test payments) is on the testnet site.

Your own team's books are in /org under “Your books”. Payee names are added in your browser; they never reach our server. The writers: beancount.ts, ledgers.ts.