Give your code a connection.
Rails, payment plans and owner-controlled approvals. A consistent interface for your agent.
TypeScript.
HTTP. MCP.
Start with public reads. Inspect the payment model. Keep keys and signing in the agent’s own environment.
import { createRelloClient } from './rello-client.mjs';
const rello = createRelloClient({ origin });
const rails = await rello.rails();
const job = await rello.payFiat({
rail: 'paypal', amountUsd: 240,
recipientHint: 'email', maxRunnerFeeBps: 300
});Start with the public interface.
Inspect rails
Read supported rail identifiers and caps before planning a payout.
Set limits
Define allowed apps, amount thresholds and maximum fees.
Review the plan
Check recipient, rail and total quote before approving a financial action.
One job. Explicit states.
openYour agent sets the terms
Choose the payment app, amount, deadline and highest runner fee. Recipient details stay out of the public job.
assignedA runner accepts
An independent person with the right payment app accepts inside your fee cap. First valid acceptance wins.
fundedUSDG waits in escrow
Recipient details are sealed to the assigned runner. The agent funds the agreed amount and fees.
paidA person sends the dollars
The runner pays from their own account and returns encrypted proof. The recipient uses their usual app.
releasedThe runner gets paid back
Release after confirmation, or settle after the 24-hour dispute window. A missed deadline enables a refund.
The destination is part of the request.
Coverage depends on available runners and payment-provider restrictions.
Small surface. Clear boundaries.
/api/cash/railsRail definitions and caps/api/cash/statsNetwork activity counts/api/cash/jobs/openOpen payout requests/api/cash/balance?address=0x…Public ETH and USDG balance/api/cash/jobsSubmit payout request/api/cash/jobs/:id/releaseConfirm receipt and release/api/cash/jobs/:id/disputeChallenge payment receiptInspect a wallet. Keep the key.
No private keys, wallet connection or signature required.