Your first payment
The Quickstart put you on the earning side. This page puts you on the paying side — which is what your agent will actually be doing most of the time.
There is a live endpoint to practise against: https://api.ripar.io/api/summarize, on
Algorand TestNet, at $0.01 a call.
Fund a wallet
You need TestNet USDC (asset 10458941) and, depending on the facilitator, a little
ALGO for fees. There is no ripar wallet command — use a wallet you already have (Pera,
Defly, or algosdk in a script) and put its mnemonic in the environment:
export RIPAR_MNEMONIC="your twenty five word mnemonic …"Fund it with what you are willing to let an agent spend. Combine that with spend caps — and read where those are enforced — rather than pointing an autonomous process at your main wallet.
Confirm the facilitator agrees with you about the network before you spend anything:
ripar doctor --network testnet --pay-to YOUR_ADDRESSIf fees reports sponsored, callers need USDC but no ALGO.
Find out what it costs
Quoting is free and needs no wallet:
ripar manifest https://api.ripar.ioRipar Text Tools @ripar-text-tools
A real, payable x402 endpoint on Algorand TestNet.
network testnet
payTo KBDRZK3BV2YFJJAVV3S5XQYDWU4RDDI6EDXXKMG3O4AEVPEDCETDKEISKQ
asset USDC (10458941)
ENDPOINT PRICE DESCRIPTION
POST /summarize $0.01 Summarise any text payload into whole sentences.ripar quote https://api.ripar.io/api/summarize --body '{"text":"a long article…"}'Nothing here searched a directory — the manifest was read from a host you already knew. Ripar has no search command and is not currently listed in any index. See Discovery for what does and does not exist today.
Pay for one call
ripar call https://api.ripar.io/api/summarize \
--body '{"text":"a long article…"}' \
--max-price 0.02 \
--network testnet{
"summary": "…"
}
settled · 4B81…2D0AThe JSON body goes to stdout and the settlement line to stderr, so piping into jq still
works.
The same thing in code
import { RiparClient } from "@ripar/sdk";
const ripar = new RiparClient({
mnemonic: process.env.RIPAR_MNEMONIC,
network: "testnet",
maxPrice: "0.02", // refuse to pay more than this, whatever the quote says
maxPerDay: "1.00", // and stop entirely after this much in a rolling 24h
});
// The client performs the whole handshake: it sends the request, reads the 402,
// checks the quote against the caps, signs a payment, and retries — in one call.
const res = await ripar.call("https://api.ripar.io/api/summarize", {
text: "a long article…",
});
console.log(res.data); // { summary: "…" }
console.log(res.payment?.txId); // 4B81…2D0A
console.log(ripar.remainingToday); // what is left under maxPerDayWithout it, the wrapped fetch settles whatever it is quoted. With it, the client reads
the quote first and throws price_above_max before anything is signed — and if the
quote cannot be decoded at all it throws unreadable_quote rather than paying blind.
Both checks run in your process; nothing on the network enforces them for you.
Read the receipt
res.payment carries the settlement, decoded from the base64 PAYMENT-RESPONSE header:
res.payment;
// { txId: "4B81…2D0A", amount: "10000", usd: 0.01, asset: "10458941" }amount is base units of asset; usd is that converted, and is only present when the
asset's decimals are known.
To reconcile spend across processes, read the chain rather than a local log — the MCP
server's ripar_settlements lists real USDC transfers for an address
from the Algorand indexer. See Payments & settlement.