Arc Testnet

Split any receipt.
Anyone.
Or their agent.

Scan a receipt, tag friends by X, Discord, email, or wallet, and settle in USDC on Arc. Or fund an agent and let it settle your share for you, under ceilings you set.

Animated product demo: a receipt from Café Arc is dragged into the upload area and scanned. Four line items are detected: Pizza, Coffee, Dessert, and Taxi. Each item is assigned to a person by X handle, Discord username, email address, or wallet address, then the split is written to Arc and settled in USDC.

Upload bill

Upload the bill

Click to browse or drag & drop an image

CAFÉ ARC

Table 7 · 4 guests

01Pizza$18.00
02Coffee$4.50
03Dessert$7.25
04Taxi$12.80
TOTAL$42.55
Settled on Arc

Split the bill

Scan a receipt to start a split…

01Pizza$18.00@splitsy_xyz
02Coffee$4.50Splitsy
03Dessert$7.25info@splitsy.xyz
04Taxi$12.800xEE42…70AC
@splitsy_xyz$18.00
Splitsy$4.50
info@splitsy.xyz$7.25
0xEE42…70AC$12.80

Successfully settled on Arc

Act one · agents that buy

Upload a receipt. An agent goes shopping.

Scout has its own wallet, an ERC-8004 identity on Arc, and a daily budget of one dollar. It judges your photo before spending anything, pays Splitsy's own x402 endpoints per call, and buys a second opinion when the parse looks shaky — signing gasless authorizations that Circle Gateway batches and settles on Arc.

Animated walkthrough of an agent payment. Scout, an autonomous agent, checks that the uploaded receipt is legible and that its daily budget can cover the call. It requests Splitsy's OCR endpoint, receives an HTTP 402 Payment Required challenge quoting $0.005 in USDC on Arc Testnet, signs an offchain EIP-3009 authorization instead of sending a transaction, and retries. Circle Gateway verifies and settles the payment, and the endpoint returns the parsed bill. The first parse scores 0.62 confidence, below the 0.80 threshold, so Scout pays a second time for a higher-quality parse and keeps the better of the two. Finally it buys a foreign-exchange rate to convert the total to USD, spending $0.011 in all.

Scout · the buyer

Image is legible

1.4 MB · 1290 × 1720

floors: 8 KB · 200 px

Budget allows it

$1 cap · $0.005 per call

the cap is the risk control

Confidence

0.94 — kept the better parse

below 0.80 it buys a second opinion

Spent this run$0.011

Signed from Scout's own wallet — a server-held EOA on Arc, capped at $1 a day.

x402 · HTTP

scout.assess(receipt.jpg)

image size1.4 MB ≥ 8 KB

resolution1290 × 1720 ≥ 200 px

budget$1 left ≥ $0.005

POST /api/ocr

402 Payment Required

PAYMENT-REQUIRED (base64)

scheme"exact"

network"eip155:5042002"Arc Testnet

asset0x3600…0000USDC

amount"5000"$0.005

maxTimeoutSeconds608400

extra.name"GatewayWalletBatched"

sign EIP-3009 authorization

offchain · Scout sends no transaction · zero gas

POST /api/ocr

payment-signatureeyJ4NDAyVmVyc2lvbiI6Mi…

facilitator.verify() → isValid

facilitator.settle() → batched by Circle Gateway

200 OK

PAYMENT-RESPONSEtransaction 0x9f1c…4b2e

ledgerearned $0.005

!confidence0.62 < 0.80

POST /api/ocr { hq: true }

200 OK confidence 0.94

pickBetterParse → keep the high-quality parse

ledgerearned $0.005

bill currency EUR ≠ USD

POST /api/fx $0.001

200 OK { rate, source, asOf }

run completespent $0.011

Scripted walkthrough — the field names, headers, prices and thresholds are the ones the server uses. The address and transaction hash are illustrative.

Agent economy · all time

0.011 USDC

Earned

x402 calls served

0.011 USDC

Scout spent

paid to Splitsy's own APIs

3

Calls served

paid API responses

Act two · agents that pay

Fund an agent.
It settles your share.

A bill raised against you can be settled without you opening the app. The agent is yours: one per account, holding its own USDC on Arc. It spends only what you have sent it, only under ceilings you set, and every settlement it makes is a public job a second agent has to sign off before any fee is released.

You fund it first

Your agent0x7a41…4c1f

2.00 USDC

A suggested first top-up. Send more if the shares you expect are larger.

  • A connected browser walletsigns a USDC transfer on Arc
  • Your Splitsy walletthe same transfer, behind your PIN
  • Anywhere elseit is just an address, so send it USDC

Funding is a transfer, never an approval. An agent holding 5 USDC can never spend 6. Whatever any rule says, it has nothing else to draw on. Until it holds USDC every bill is skipped, no job is opened, and nothing is spent.

Then it has to prove it

  • clientYour agentposts the job, escrows the fee
  • providerThe Settlerdoes the work, proves what it did
  • evaluatorThe Auditorpaid to say no

Three distinct wallets, so the party that gets paid is never the party that decides it earned it.

  1. 1createJobyour agent
  2. 2setBudgetthe Settler prices its own work
  3. 3fund0.01 USDC into escrow
  4. 4payDebtForthe only step that moves bill money
  5. 5submitkeccak256(settlement tx)
  6. 6completethe Auditor, only when paid ≥ owed

The escrow only ever holds the fee. Your share is never inside it. The Auditor reads the registry itself, and if the debt is not really settled it does not complete: the job expires an hour later and the Settler is not paid for work it did not do.

  • Six transactions per settled share

    Per share, not per bill. A four-person bill where everyone autopays is four independent jobs.

  • A refusal costs nothing

    Your rules run before the job is opened, so a bill your agent declines sends no transaction at all.

  • The reputation is yours

    payDebtFor pulls from the agent but credits you. The DebtPaid event names you as the payer.

Your ceilings (per bill, per day, an allowed-creator list, a creator score floor, a verified-hash requirement and a paid review of the bill's contents) are checked before your agent spends rather than enforced by a contract, so the hard limit is the balance above. The address and figures on this card are illustrative; your own are on the settlement-agents panel.

The market

Seven endpoints. Priced in half-cents.

Splitsy's paid APIs answer HTTP 402 with their own terms. Any agent that signs an offchain EIP-3009 authorization gets served: no account, no API key, and no gas, because Circle's facilitator settles the payment in a batch rather than a transaction.

  • /api/ocr$0.005

    Splitsy sells to Scout, per receipt scan

  • /api/fx$0.001

    Splitsy sells to Scout, non-USD receipts only

  • /api/agents/review$0.002

    The Auditor sells to The Settler, before every settlement

  • /api/agents/queue$0.001

    Splitsy sells to any agent, fetch payable bills for a debtor wallet

  • /api/reputation$0.001

    Splitsy sells to any agent, ERC-8004 reputation lookup

  • /api/agents/netting$0.001

    Splitsy sells to any agent, minimum-transfer settlement solver

  • /api/agents/dunning/verdict$0.001

    Splitsy sells to any creditor agent, nudge / escalate / collect decision

All three are open to anyone who pays. That is what makes them a market rather than an internal call. The last row is Splitsy's own two agents trading with each other, so it is deliberately left out of the earned and spent totals above: nobody outside paid it, and counting it would inflate both sides of the ledger from a single internal transfer.

How x402 works

Open to any agent · Developer API

Seven APIs. Any agent.

Every endpoint answers HTTP 402 with a Circle Gateway challenge. Sign one offchain EIP-3009 authorisation — no Splitsy account, no API key, no gas — and you're in.

  1. 01 Probe
  2. 02 Parse
  3. 03 Sign
  4. 04 Retry
  • /api/agents/queue$0.001
  • /api/reputation$0.001
  • /api/agents/netting$0.001
  • /api/agents/dunning/verdict$0.001
  • + 3 existing endpoints

No wallet? No problem.

Tag people where they already are. Splitsy holds their share in escrow on Arc until they claim it with a handle, an inbox, or an address.

  • @splitsy_xyzX handle
  • SplitsyDiscord username
  • info@splitsy.xyzEmail address
  • 0xEE42…70ACWallet address

Don't trust the split. Verify it.

The receipt's fingerprint is written into the bill on Arc. Anyone tagged can check that what they're paying matches the paper before they pay.

The receipt

Scanned, itemized, and hashed byte for byte.

keccak256(receipt.jpg)

The bill on Arc

Every share and the fingerprint, committed in one event.

BillCreated(billId, metadataHash)

The check

Payers recompute the hash and confirm it matches before paying.

✓ matches on-chain commitment

Many debts. One position.

Every share you owe and are owed collapses into one net figure per person. Settling fires them as a batch — one atomic transaction on a Circle wallet instead of an approve and a payment per bill.

The open ledger

Shares scattered across every bill you joined or created.

5 bills you owe · 4 you're owed

One net position

Everything owed in both directions, collapsed per counterparty.

−12.40 Alex · +8.00 Sam · −0.60 0x9f…

One settlement

Every approval, payment and claim lands together, or none of it does.

1 atomic tx instead of 14

Netting is a view, not a transfer. Each bill escrows its own USDC on Arc, so every debt is still paid to its own bill — batching removes transactions, never the money owed, and it never collects what someone else still owes you.

Built on Circle. Settled on Arc.

No mock rails under the demo! Circle's wallet and transfer infrastructure composed with Arc's stablecoin-native chain and open Ethereum standards. Every card links to the docs.

Stop chasing IOUs.

Test USDC, real workflow. Try the whole thing in two minutes.

Arc Testnet · no real funds · nothing to install