List Bots
This route returns the account's bots of all three kinds, each with its record. It lists bots you made in the app and bots you made through the API together.
- A trader bot copies one trader's buys.
- A signal bot copies every whale buy that matches its signal.
- A market bot runs a price rule on one market, or on every market of a repeating series.
Live bots appear with mode: "live". You can set them up and change them only in the app.
Example request
curl "https://api.rivo.markets/v2/bots?status=running" \
-H "Authorization: Bearer rivo_live_..."import requests
url = "https://api.rivo.markets/v2/bots"
headers = {
"Authorization": "Bearer rivo_live_...",
}
params = [
("status", "running"),
]
res = requests.get(url, headers=headers, params=params)
res.raise_for_status()
print(res.json())const params = new URLSearchParams([
["status", "running"],
]);
const res = await fetch(`https://api.rivo.markets/v2/bots?${params}`, {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.RIVO_API_KEY}`,
},
});
if (!res.ok) throw new Error(`Rivo API ${res.status}`);
const { data } = await res.json();Query parameters
kindstringReturns bots of these kinds:
trader,signalormarket. Repeat the key to pass several.statusstringReturns bots with these statuses:
running,pausedorended. Repeat the key to pass several.venuestringReturns rows from these venues:
kalshi,polymarket,polymarket_usorgemini. To pass several values, repeat the key, up to 50 times. A row matches if it matches any of them.limitintegerdefault50The number of rows on each page, from 1 to 200.
cursorstringPass the
nextCursorfrom the previous page to read the next one. A cursor works only on the listing that made it. See Paging.
Example response
{
"data": [
{
"id": "trader:8d3f2a61-0c4e-4b7a-9f15-2e6a1c9b4d70",
"name": "avidsmores",
"kind": "trader",
"mode": "paper",
"summary": "Copies avidsmores",
"status": "running",
"venues": ["kalshi"],
"trades": 14,
"profit": 186.4,
"winRate": 0.6,
"lastTradeAt": "2026-10-12T05:13:31.000Z"
},
{
"id": "signal:2c91e7d4-5a3b-4f08-b6e2-91d04f7a3c55",
"name": "Kalshi sports buys, 30¢ to 70¢, $5,000 or more",
"kind": "signal",
"mode": "paper",
"summary": "Kalshi sports buys, 30¢ to 70¢, $5,000 or more",
"status": "running",
"venues": ["kalshi"],
"trades": 212,
"profit": 523.17,
"winRate": 0.5521,
"lastTradeAt": "2026-10-15T01:58:12.000Z"
}
],
"nextCursor": null
}Response fields
dataobject[]The bots on this page.
Show 11 data fields
idstringThe bot's id:
trader:<id>,signal:<id>ormarket:<id>.namestringThe bot's name. A trader bot takes its trader's name, and a market bot takes the name of its market or series.
kindstringThe kind of bot. A
traderbot copies one trader, asignalbot runs a signal, and amarketbot runs a price rule on one market.modestringWhether the bot trades on
paperorlive. A live bot trades real money. You set it up in the app, and the API can only read it.summarystringWhat the bot does, in one line.
statusstringThe bot's status:
running,pausedorended. A signal bot is never paused. It runs for as long as it exists.venuesstring[]The venues the bot trades on.
tradesintegerThe number of trades the bot took.
profitnumberThe bot's profit in USD, from both closed and open trades.
winRatenumber or nullThe share of the bot's settled trades that won, from 0 to 1.
lastTradeAtstring or nullWhen the bot last traded, in ISO 8601 UTC.
nextCursorstring or nullPass this as
cursorto read the next page. It isnullon the last page.
Errors
| Code | When |
|---|---|
VALIDATION | A parameter is out of range or unknown, or the cursor came from another listing. |