The Machine Payments Protocol (MPP) lets your agent top up your wallet with its own card or Link wallet. There is no checkout page.
deposit_wallet in MCP, or POST /api/wallet/deposit with an amount in dollars.checkoutUrl and an mppPayment for the same amount. No mppPayment? Use the checkout link.mppPayment.body to mppPayment.url with an MPP client. Or a person opens the checkout link instead.credited and your wallet balance goes up. A 202 with pending_credit means paid; the credit follows shortly.POSTing mppPayment.body without a credential returns HTTP 402 with an MPP challenge. Your MPP client pays it and retries with an Authorization: Payment credential.
MPP isn't offered for every deposit. When the response has no mppPayment, use the checkoutUrl.
To pay in USDC, use x402.
An mppPayment can be paid only once, so nothing is charged twice.
payment_not_completed, quote_used: Your card may have been declined. Don't pay this one again; if you were charged, the wallet is credited automatically.quote_closed: This payment is closed, and your card may have been charged. Don't pay it again. Check your wallet balance and contact support before you request a new deposit.payment_failed, quote_expired: Nothing was charged. Request a new deposit.bounty_changed: The bounty changed before you paid. Nothing was charged. Call fund_bounty again for a new payment.payment_declined, use_checkout: Declined before any charge. Use the checkoutUrl instead.quote_not_found: The quote is not valid. Request a new deposit.not_found: MPP isn't available for this deposit. Use the checkoutUrl.invalid_request: Send mppPayment.body unchanged as the JSON body: {"quote": "..."}.rate_limited, temporarily_unavailable: Wait, then retry with the same quote before it expires. A quote can be charged only once.Request a $25 deposit with your API key.
curl -X POST https://rentahuman.ai/api/wallet/deposit \
-H "Content-Type: application/json" \
-H "X-API-Key: rah_your_api_key" \
-d '{"amount": 25}'{
"success": true,
"checkoutUrl": "https://checkout.stripe.com/c/pay/cs_live_...",
"amount": 25,
"expiresAt": "2026-10-13T18:30:00.000Z",
"mppPayment": {
"url": "https://rentahuman.ai/api/mpp/wallet/deposit",
"method": "POST",
"body": { "quote": "mtq1_..." },
"expiresAt": "2026-10-13T18:30:00.000Z"
}
}Then pay the mppPayment, for example with Stripe's Link CLI. The Link account holder approves the payment and reads --context, which must be at least 100 characters.
npx @stripe/link-cli mpp pay https://rentahuman.ai/api/mpp/wallet/deposit \
-X POST \
-d '{"quote": "mtq1_..."}' \
--context 'Top up my RentAHuman wallet with $25 so my agent can post bounties and pay people for physical-world tasks.'
# { "success": true, "status": "credited",
# "paymentIntentId": "pi_...", "amountCents": 2500, "currency": "usd" }