This is the v1 reference. v1 stops answering on November 1, 2026. Build on v2: see where this route went.
Configure autopilot
MCP tool: set_autopilot
With paper true, which is the default, this simulates fills and spends nothing. With paper false it places real orders with your money.
Going live takes two independent affirmations, config.paper false and confirmLive true, plus a key holding the trade scope. A client that sets one without meaning to still cannot spend.
Live autopilot is venue-shaped. Venues that execute through your own connected account are "polymarket_us", "kalshi", "hyperliquid", "novig", "prophetx", "gemini"; a browser-wallet venue is paper only, and paper false there is refused with LIVE_TRADING_UNAVAILABLE. Which venues are open right now is answered per account by readiness.liveCopy, not by this page.
Check the portfolio endpoint with include=readiness first and read readiness.liveCopy for the venue you are about to use. If allowed is false, this call will be refused and blockers says why.
Turning autopilot off or pausing it needs only the write scope and never needs confirmation.
Body parameters
statusstringrequired"off", "active" or "paused_user".
configobjectRequired when status is active.
modestringrequired"fixed" or "proportional".
stakeUsdnumberPer copy. Required for fixed mode. Max 5000.
proportionPctnumberPercent of the trader's own size. Required for proportional mode.
maxPerTradeUsdnumberrequiredHard ceiling per copy. Max 5000.
dailyCapUsdnumberrequiredCeiling per day for this follow. Max 20000.
paperbooleandefault: trueSimulate rather than spend.
mirrorExitsbooleandefault: falseSell when the trader fully closes.
lossLimitUsdnumberLive only. Stop the follow once it is down this many dollars since it went live or was last resumed. Omit for no limit.
onLossLimitstringdefault: "pause""pause" stops buying and keeps positions. "pause_and_close" also sells what this follow bought.
confirmLivebooleanRequired alongside config.paper false. Acknowledges that real money will be spent.
Response
Refusals are coded: SCOPE_REQUIRED when the key cannot trade, VALIDATION when confirmLive is missing, LIVE_TRADING_UNAVAILABLE when real-money autopilot is not open on that venue, NOT_FOUND when you do not follow that trader.
curl -X PATCH https://api.rivo.markets/v1/traders/polymarket/0x9f2c8e1b7a4d6035c8e1b7a4d60359f2c8e1b7a4/autopilot \
-H "Authorization: Bearer rivo_live_..." \
-H "Content-Type: application/json" \
-d '{
"status": "active",
"config": {
"mode": "fixed",
"stakeUsd": 50,
"maxPerTradeUsd": 100,
"dailyCapUsd": 500,
"paper": true
}
}'import requests
r = requests.patch(
"https://api.rivo.markets/v1/traders/polymarket/0x9f2c8e1b7a4d6035c8e1b7a4d60359f2c8e1b7a4/autopilot",
headers={"Authorization": "Bearer rivo_live_..."},
json={
"status": "active",
"config": {
"mode": "fixed",
"stakeUsd": 50,
"maxPerTradeUsd": 100,
"dailyCapUsd": 500,
"paper": True,
},
},
)
print(r.json()["data"])const res = await fetch("https://api.rivo.markets/v1/traders/polymarket/0x9f2c8e1b7a4d6035c8e1b7a4d60359f2c8e1b7a4/autopilot", {
method: "PATCH",
headers: {
Authorization: "Bearer rivo_live_...",
"Content-Type": "application/json",
},
body: JSON.stringify({
status: "active",
config: {
mode: "fixed",
stakeUsd: 50,
maxPerTradeUsd: 100,
dailyCapUsd: 500,
paper: true,
},
}),
});
const { data } = await res.json();{
"success": true,
"data": { "status": "active", "paper": true }
}