Owed

PayBox plugin · MCP server · Solana and Base

Your agent asks for money. And knows when it lands.

Owed is a PayBox plugin that lets your agent ask anyone for money, then tells you who has paid. Ask one person in USDC, SOL or your own currency, split a bill or send an invoice; anyone can pay from a Solana or Base wallet or their own PayBox agent. Before your agent pays, Owed checks the payee is who it claims.

  • No fees
  • Owed never holds funds
  • One transaction, wallet to wallet
  • Open source
Your agent, with PayBox and Owed
Ask Priya for 15 USDC for dinner
Request ready. Here's the link to send Priya; she can pay it from any Solana wallet.

15 USDC

from Priya · for “dinner”

getowed.xyz/r/JArQ6g9JvoWr

Did Priya pay?
PaidPriya sent 15 USDC from 9WzD…AWWM, confirmed on Solana at 05:00 UTC.View transaction
Example conversation

Works with

  • Claude
  • ChatGPT
  • Phantom
  • Any Solana Pay wallet
  • Base wallets
  • PayBox agents

How it works

Three steps, and the last one is the point.

Asking is easy anywhere. Knowing it landed, without checking a block explorer, is what Owed adds.

  1. Ask

    Tell your agent who owes you and how much. Owed makes a short link, a QR code and a message to paste into WhatsApp or iMessage. A split bill gives each person their own link; an invoice gets a printable page.

  2. They pay from any wallet

    Priya scans the QR with Phantom, opens the link in a Solana wallet, or asks her own PayBox agent to pay it. She doesn't need an Owed account, and the money goes straight to your wallet.

  3. Your agent tells you

    Ask “did Priya pay?” Owed reads the chain and answers with the amount, the time and the transaction. The pay page flips to Paid on its own. If she paid from an exchange that dropped the reference, Owed finds it for you to confirm.

It works the other way too. Paste an Owed or Solana Pay link into your agent and approve the payment with your passkey in PayBox. When the request names a domain, Owed reads that domain's DNS record before it proposes anything.

What's new

Shipped since launch.

Built in public on Solana mainnet. Each of these is running on production today, except those marked next.

  • Live

    Chip-in pots for gifts, dinners and trips

    Start a pot with a target, a suggested amount and a deadline, and share one board. Anyone chips in from any Solana wallet or their own agent; every scan of the QR code is counted on its own, and the board shows the total against the target as money lands. Every pot ends by its deadline, and Owed never holds the money. On Owed's remote MCP endpoint now; in the PayBox plugin with its next upload.

    start_pot · pay_link · check_payments

  • Live

    One-tap monthly pay within your rule

    Tell your agent the most it may pay one person each month. When their request arrives, your agent has the exact PayBox payment ready, checked against the rule you signed; anything above it waits for you. Owed never pays anything itself. On Owed's remote MCP endpoint now; in the PayBox plugin with its next upload.

    set_autopay · what_do_i_owe

  • Live

    Paid alerts in Telegram

    Link a Telegram chat to the wallet your requests pay, with one signature, and get one message when each request is paid, on every rail. Send /stop to turn it off.

    /alerts

  • Next

    Cash out to your bank

    Sell the USDC you were paid to MoonPay for your bank account: one transfer from your wallet, approved in PayBox, to the address MoonPay names for that sale and nowhere else. Built; it switches on once MoonPay's live keys are in.

    cash_out

  • Live

    Group ledgers that settle in the fewest payments

    Start a tab for a trip or a flat, add expenses as they happen (evenly, by shares, exact amounts, or straight off a receipt, in USDC or the local currency), then settle up: at most one fewer payment than there are people, each one an ordinary Owed request paid straight to the person owed. Every expense is signed by a wallet in the ledger. On Owed's remote MCP endpoint now; in the PayBox plugin with its next upload.

    start_ledger · add_expense · ledger_balances · settle_up

  • Live

    Invoices with terms, and refunds

    Installments or an early-payment discount, a late fee and reminder days, where every term that changes the amount is its own request, so no link ever changes what it asks. Your agent says when a reminder is due, makes a client's monthly statement, and sends a refund back to the wallet that paid, never more than was paid. On Owed's remote MCP endpoint now; in the PayBox plugin with its next upload.

    create_invoice · who_owes_me · refund_payment

  • Live

    A short balance doesn't end a payment

    Not enough USDC? Your agent gets the exact PayBox steps that fix it: swap SOL (sized at Pyth's price), bring USDC over from Base, buy the shortfall with MoonPay, or pay over x402 when only the network fee is missing. You approve each step, and the payment is checked again from scratch. On Owed's remote MCP endpoint now; in the PayBox plugin with its next upload.

    pay_link · pay_all

  • Live

    Ask by X handle, pay them all at once

    Ask @sam and the request shows up in Sam's own agent when he asks “what do I owe?”, with no link to paste. He picks what to pay, and his agent checks each request on its own, then pays them all in one Solana transaction with one approval. Handles are labels Owed never verifies: his agent checks them with PayBox before paying. On Owed's remote MCP endpoint now; in the PayBox plugin with its next upload.

    what_do_i_owe · pay_all · ask_for_money

  • Live

    Find payments that lost their link

    Exchanges and some wallets drop the Solana Pay reference, so the money lands but the request stays open. Your agent finds transfers of exactly the amount still owed, says why each one fits, and counts one only after you sign that it's yours. Underpaid? It asks for exactly the rest.

    match_payments

  • Live

    Ask in your own currency

    “Ask Priya for ₹1,200 for dinner.” Owed locks the USDC at a live rate from Coinbase, checked against a second source, rounds it up, and the pay page shows both amounts. 38 currencies, for requests, splits and invoices.

    ask_for_money · split_bill · create_invoice

  • Live

    Get paid to a name

    Give your wallet as an .sns name. Owed resolves it on Solana itself, the pay page says “verified on-chain”, and your payer's agent refuses to pay if the name has since moved to another wallet.

    ask_for_money · pay_link · verify_payee

  • Live

    USDC on Base

    Ask on Base when that is where your payer keeps USDC. They open one link in their Base wallet, and Owed reads the transfer on Base to mark the request paid, with the payer, amount and transaction.

    ask_for_money · check_payments

    First Base payment
  • Live

    Scan with Phantom, and it counts

    Phantom's scanner turned a payment link into a plain send and dropped the reference, so the payment couldn't be matched. The QR now asks the wallet to sign a transaction Owed built, with the reference inside.

    pay page

    Paid by Phantom scan
  • Next

    Pay by card with MoonPay

    No wallet? The payer's card buys exactly the USDC owed in MoonPay's checkout, delivered straight to you, and Owed marks it paid only once Solana confirms the transfer. Built and merged; it switches on once MoonPay live keys are in.

    pay page · invoice page

Use cases

Say it the way you would say it to a friend.

Your agent picks the right Owed tool from plain words. Nothing is sent or paid until you approve it.

  • Dinner

    One person owes you. Your agent makes a short link, a QR code and a ready-to-send message; they pay from any Solana wallet or their own PayBox agent.

    “Ask Priya for 15 USDC for dinner”

    ask_for_money

  • In your own currency

    Ask in rupees, euros or any of 38 currencies. Owed locks the USDC at a live rate, rounded up, and the pay page shows both amounts, so nobody does the conversion in their head.

    “Ask Priya for ₹1,200 for dinner”

    ask_for_money

  • Split the bill

    One request per person, a set amount for anyone who owes a specific sum and an even split for the rest, plus a live board that shows who has paid.

    “Split 45 USDC for pizza between Priya, Sam and Alex”

    split_bill

  • Freelance invoice

    A printable invoice with line items, total, due date and invoice number, payable by QR, by link or by the client's own agent.

    “Invoice Acme for 3 hours of consulting at 40 USDC, due Friday”

    create_invoice

  • Rent every month

    The same amount on the same day each month. A new request opens on that day, and each one works with every other tool: check it, remind about it, cancel it.

    “Ask Sam for 450 USDC rent on the 1st”

    ask_every_month

  • Paid from an exchange

    Exchanges drop the payment's reference, so the money arrives and the request stays open. Your agent finds transfers of exactly the amount owed and counts one only when you sign that it's yours.

    “Sam says he paid from Coinbase, but it still shows open”

    match_payments

  • Who owes me

    Every open request, split share and invoice paid to your wallet, what came in over the last 30 days, and the totals. You sign one message to prove the wallet is yours; no money moves.

    “Who still owes me?”

    who_owes_me

  • Reminders

    A friendly, firm or formal reminder for SMS, WhatsApp or email, with the pay link and how long it has been outstanding. Owed checks Solana first, so nobody is chased for money they already sent, and you send it yourself.

    “Nudge Sam about the 20 USDC”

    write_reminder

  • Paying safely

    Paste any Owed or Solana Pay link, or an .sns name. Your agent checks it is still open, that your wallet can cover it and that the payee is who it claims: the domain's DNS lists the wallet, or the name still points to it on Solana. Then you approve with your passkey in PayBox.

    “Pay this link”

    pay_link + verify_payee

The toolbox

Twenty-one tools your agent can call.

Each one is an MCP tool. Eleven are in the Owed plugin submitted to PayBox. The ten marked remote MCP are on Owed's remote MCP endpoint, https://www.getowed.xyz/api/mcp, and join the plugin with its next upload. recipient, sender and a ledger's signer are always your own PayBox wallet, and money leaves it only when you approve the transaction in PayBox.

ask_for_money
Create a payment request and get a short link with a QR code that anyone can pay from a Solana wallet or their own PayBox agent, plus a ready-to-send message. Ask in USDC, SOL or your own currency (locked to USDC at a live rate), to your wallet or your .sns name, on Solana or in USDC on Base. Address it to someone's X handle and it shows up in their own agent's what_do_i_owe.
check_payments
Check up to 20 requests by reading Solana mainnet (and Base, for Base requests): open, paid, underpaid, cancelled, expired or not found, with the payer, amount and transaction when paid.
pay_link
Pay an Owed link, any Solana Pay transfer link or an .sns name (USDC or SOL): checks it is still open, the payee is who it claims and the wallet can cover it, then returns an unsigned transaction to approve in PayBox. On Owed's remote MCP endpoint, a wallet that is short gets the exact PayBox steps that fix it instead (swap SOL or another token, bring USDC over from Base, buy the shortfall with MoonPay), each approved by you, ending with the same checked payment. It also pays a chip-in pot (its board link, id or QR code) with the amount you choose.
verify_payee
Check who a request is from: whether a domain publishes the wallet that gets paid (read from DNS by the plugin itself), or which wallet an .sns name points to on Solana, with warnings for lookalike spellings.
split_bill
Split a bill into one request per person plus a live group board that shows who has paid. Split in your own currency and every share is locked to USDC at one rate.
create_invoice
Create a printable invoice with line items, total, due date and invoice number, payable from any Solana wallet by QR or link, or by the client's agent. Price it in your own currency if you like. On Owed's remote MCP endpoint it also takes installments or an early-payment discount, a late fee and reminder days; every term that changes the amount is its own request, so no link ever changes what it asks.
who_owes_me
List every open request, split share and invoice paid to your wallet, plus the last 30 days of payments, after you sign one message with your wallet. Signing moves no money. On Owed's remote MCP endpoint it also says when a polite, firm or formal reminder is due, and makes a client's monthly statement.
write_reminder
Draft a friendly, firm or formal reminder with the pay link and days outstanding. It checks Solana first and drafts nothing for a paid request; Owed sends nothing itself.
ask_every_month
Ask someone for the same amount every month: a new request opens on that day each month, and each one is an ordinary Owed request that check_payments, write_reminder and pay_link work on.
cancel_request
Cancel one of your own requests, split shares or invoices so nobody pays it, proven by a signature from the wallet it pays. A paid request can't be cancelled.
match_payments
Find money that reached your wallet without the request's reference (exchanges drop it): transfers of exactly the amount still owed, with reasons and warnings. It counts one only after you sign that it is yours, and can ask for exactly the rest of an underpaid request.
what_do_i_oweremote MCP
See what you owe: every open request, split share and invoice someone addressed to your wallet by your X handle, .sns name or wallet, after you sign one message. Names, handles and reasons are the requester's own words, unverified; first-time requesters are marked, and you can block one.
pay_allremote MCP
Pay several requests with one approval: one Solana transaction, every request checked like pay_link (open, payee, sanctions), capped at the total you agreed to. Requests on Base or with a brand-word caution are skipped with the reason. Short of the total, it returns the PayBox steps that fix it.
start_ledgerremote MCP
Start a running tab for a trip, a flat or a team: you and up to 19 others, each identified by X handle, .sns name or wallet if you like. Nothing is owed until expenses are added.
add_expenseremote MCP
Record who paid what and how it splits: evenly, by shares, exact amounts, or straight off a receipt with tax and tip spread over each person's items. In a local currency, each share is locked to USDC at one live rate. Signed by a wallet in the ledger.
ledger_balancesremote MCP
Who is owed and who owes, in USDC with the local currency beside it, the fewest payments that square everyone, and each settle-up request's live status. The plugin re-checks every split, balance and signature first.
settle_upremote MCP
Turn the balances into at most one fewer payment than there are people: ordinary Owed requests, each paid straight to the person owed and addressed to whoever owes it, so it waits in their own what_do_i_owe when the ledger has their wallet. Owed never holds the money.
refund_paymentremote MCP
Send all or part of a payment back to the wallet that paid it: you sign one message, then approve one transfer in PayBox. Refunds never add up to more than was paid, and count once Solana confirms them.
start_potremote MCP
Start a chip-in pot for a gift, a dinner or a trip kitty, paid straight to your wallet: an optional target, a suggested amount or fixed amounts, and a deadline (every pot ends). Share the board: each scan of its QR code counts on its own, anyone's agent can pay it with pay_link, and the board shows the total against the target.
set_autopayremote MCP
One-tap monthly pay within your rule: sign a rule for one person's wallet with the most per request and per month and an end date. what_do_i_owe then hands your agent the exact PayBox payment for requests within it; anything above your rule waits for you. Owed never pays anything itself.
cash_outremote MCP
Cash out USDC to your bank through MoonPay: MoonPay's sell link for the exact amount, then one transfer from your wallet to the address MoonPay named for that sale, approved in PayBox. Built, and switched off until MoonPay's live keys are set.

Developers

Built for agents and the people who build them.

One plugin, three ways in. Everything below is live on Solana mainnet; the samples are the contract fixtures the plugin and the API are both tested against.

Owed is a PayBox plugin. Add PayBox to your agent as an MCP connector and turn Owed on; your agent then calls Owed's tools through PayBox, and every payment it proposes comes back unsigned for you to approve with a passkey.

MCP connectorhttps://api.paybox.sh/mcp
what your agent calls
{
  "name": "ask_for_money",
  "arguments": {
    "recipient": "FN6G4CQkrM55pnT4npu1U8xegZk7AMnp3ApGvkM4cbvs",
    "amount": "15",
    "token": "USDC",
    "payer_name": "Priya",
    "for": "dinner"
  }
}
what it gets back
{
  "id": "JArQ6g9JvoWr",
  "mode": "hosted",
  "link": "https://www.getowed.xyz/r/JArQ6g9JvoWr",
  "solana_pay_url": "solana:FN6G4CQkrM55pnT4npu1U8xegZk7AMnp3ApGvkM4cbvs?amount=15&…",
  "qr_url": "https://www.getowed.xyz/api/qr/JArQ6g9JvoWr.png",
  "reference": "8nUqYfwq3V4KQ5Lq1jqcUFdC1V2bQe2KJ7m2p3sYQk9e",
  "recipient": "FN6G4CQkrM55pnT4npu1U8xegZk7AMnp3ApGvkM4cbvs",
  "amount": "15",
  "token": "USDC",
  "payer_name": "Priya",
  "for": "dinner",
  "share_text": "Hey Priya! Your share for \"dinner\" is 15 USDC. Pay with any Solana wallet here: https://www.getowed.xyz/r/JArQ6g9JvoWr",
  "status": "open",
  "screening": "clear"
}
  • Unsigned proposals only

    Owed never signs anything. pay_link returns an unsigned Solana transaction and you approve it with a passkey in PayBox. Decoded production proposals hold one transfer to the recipient and nothing to Owed.

  • Fresh sandbox, 10-second budget

    Every call runs in a fresh sandbox with a 10 s budget and HTTPS to an exact list of hosts: Owed, Solana RPC and two DNS resolvers. No secrets in the code, no network at startup, byte-identical builds.

  • Ids commit to the terms

    A request id is the last 12 base58 characters of sha256 over the recipient, asset, amount and reference. pay_link recomputes it from what the server returns and refuses a mismatch, so a server can't swap the payee behind a shared link.

  • DNS-verified payees

    A requester proves a domain with a TXT record _owed.<domain> = owed-pay=<wallet>. The plugin reads it over DNS over HTTPS itself and refuses a wallet the domain doesn't list.

Verified payee

Only pay people who are who they say.

Anyone can type “from Acme” on a payment request. Owed asks Acme's DNS instead. A business lists its wallet in a TXT record on its own domain, and before your agent pays a request that names the domain, Owed reads that record itself and refuses a wallet that isn't in it.

  1. The business lists its wallet

    name _owed.getowed.xyz

    type TXT

    value owed-pay=FN6G4CQkrM55pnT4npu1U8xegZk7AMnp3ApGvkM4cbvs

    value owed-pay=GSWhsLLNRj3D4XbtMaghk1UHoPa2CNqsctX28jYK8dcD

    Read from cloudflare-dns.com for this page just now. Not DNSSEC-signed, so Owed says “verified by DNS”.

  2. Payers see who it is from

    From getowed.xyz · verified

    getowed.xyz publishes this wallet in its DNS. That shows who controls the domain, not that the request is fair: check it is the domain you expect.

    The badge a pay page shows for a request from getowed.xyz to FN6G…cbvs, checked against the record in step 1.

  3. A swapped wallet is refused

    Pay this request from getowed.xyz
    Not payingThis request claims to be from getowed.xyz, but getowed.xyz does not publish this wallet. Not paying.

    Owed's answer when a copy of the request pays 1nc1…1111, a wallet the record doesn't list. The check runs inside the plugin, so Owed's own server can't vouch for anyone.

For your own domain: add a TXT record named _owed.<your domain> with the value owed-pay=<your wallet>, then ask your agent to send the request from that domain. Verified means the domain lists the wallet. It shows who controls the domain, not that a request is fair.

Live

Counted from Solana mainnet, not from a database of promises.

A request counts as paid only when a confirmed transaction sends the full amount of the right token to the recipient. These numbers come from /api/v1/stats, counting since Oct 17, 2026, refreshed every minute. Nothing here is seeded.

See the team's own payments, each with its transaction
requests paid with Owed
3
received through Owed links
0.52USDC

Before and after

Getting paid, with and without Owed.

The same eight jobs, done by hand and done by asking your agent.

JobWithout OwedWith Owed
AskingWithout:Paste your wallet address into the chat and say how much.With Owed:Say “ask Priya for 15 USDC for dinner”. Owed makes the link, the QR code and the message.
PayingWithout:They copy the address, pick the token, type the amount and hope it is right.With Owed:They open the link in a Solana wallet, or hand it to their own PayBox agent. Amount, token and wallet are filled in.
Splitting a billWithout:Work out every share, message each person, keep score in your head.With Owed:One sentence gives each person their own link and you one board that shows who has paid.
InvoicingWithout:Make a PDF, paste an address under it, match the payment by hand later.With Owed:A printable invoice with line items and a due date that the client pays by QR or link.
Knowing who paidWithout:Scroll a block explorer and match amounts to names.With Owed:Ask “did Priya pay?” and get the amount, the time and the transaction.
Asking in your currencyWithout:Look up a rate, convert, round, and hope it still holds when they pay.With Owed:Say “₹1,200”. Owed locks the USDC at a live rate and the pay page shows both amounts.
Paid from an exchangeWithout:The money is in your wallet, but nothing says which request it pays.With Owed:Your agent finds transfers of exactly the amount owed and counts one when you sign that it's yours.
Knowing who you payWithout:A wallet address in a chat can be swapped, and nothing tells you.With Owed:When a request names a domain or an .sns name, Owed checks it before your agent pays and refuses a wallet it doesn't point to.

Safety

Built to be safe to use.

  • Owed never holds money. Every payment goes straight from the payer's wallet to yours in one Solana transaction.
  • Owed charges no fees.
  • A request counts as paid only when a confirmed transaction sends the full amount of the right token to your address.
  • Notes appear in quotes, marked as unverified, with links and hidden characters removed. Requests that mention names like MoonPay or PayBox carry a warning.
  • Recipients on the U.S. Treasury's OFAC sanctions list are refused, by the plugin and by the server.
  • A request id is a hash of its terms, so a server can't swap who gets paid or how much behind a shared link.
  • Owed never guesses who paid: a transfer without the request's reference counts only after the recipient signs that it's theirs, and Owed re-checks it on chain first.
  • An .sns name is resolved on Solana by the plugin itself, and a request made for a name is paid only while the name still points to its wallet.

Get started

Add Owed to PayBox in two minutes.

No account with Owed, no keys to paste. PayBox holds your wallet; Owed only ever hands your agent unsigned proposals.

  1. Connect PayBox to your agent

    In Claude or ChatGPT, add PayBox as a connector with this address.

    https://api.paybox.sh/mcp
  2. Turn on Owed

    Owed is submitted to PayBox and waiting for its listing in the plugin marketplace. Once it is listed, open app.paybox.sh/plugins and enable Owed.

  3. Ask in your own words

    Your agent picks the right Owed tool. Nothing moves until you approve it with your passkey.

Things to try

  • “Ask Priya for 15 USDC for dinner”ask_for_money
  • “Split 45 USDC for pizza between Priya, Sam and Alex”split_bill
  • “Invoice Acme for 3 hours of consulting at 40 USDC, due Friday”create_invoice
  • “Did Priya pay?”check_payments
  • “Who still owes me?”who_owes_me
  • “Pay this link”pay_link
  • “Is this request really from getowed.xyz?”verify_payee
  • “Nudge Sam about the 20 USDC”write_reminder
  • “Ask Sam for 450 USDC rent on the 1st”ask_every_month
  • “Priya paid me in cash, cancel her link”cancel_request
  • “Ask Priya for ₹1,200 for dinner”ask_for_money
  • “Bill Alex 20 USDC on Base”ask_for_money
  • “Pay bonfida.sns 2 USDC”pay_link
  • “Sam says he paid from Coinbase, but it still shows open”match_payments
  • “Ask @sam for 10 USDC”ask_for_money
  • “What do I owe?”what_do_i_owe
  • “Pay them all”pay_all
  • “Start a tab for our Lisbon trip with Priya, Sam and Alex”start_ledger
  • “I paid 84.60 EUR for dinner, split it evenly”add_expense
  • “Who owes what on the trip?”ledger_balances
  • “Settle up the trip”settle_up
  • “Invoice Acme 1,200 USDC in 3 monthly installments”create_invoice
  • “Refund Priya the 5 USDC she overpaid”refund_payment

Asking by X handle, what_do_i_owe, pay_all, group ledgers, invoice terms, refunds and the steps for a short balance are on Owed's remote MCP endpoint now and come to the PayBox plugin with its next upload.