Ripardocs
Dashboard

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 …"
Use a dedicated spending wallet

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_ADDRESS

If 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.io
output
Ripar 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…"}'
There is no search index to query

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
output
{
  "summary": "…"
}
settled · 4B81…2D0A

The JSON body goes to stdout and the settlement line to stderr, so piping into jq still works.

The same thing in code

pay.ts
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 maxPerDay
Always set maxPrice

Without 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.