Autopilot log
MCP tool: get_copy_log
This is the only way to answer why a trade was not copied. A skipped row carries a skipReason from a fixed vocabulary. These rows describe autopilot only: a skip here never means a manual order would have failed.
Product gates: polymarket_coming_soon, autopilot_disabled, wrong_live_venue, kill_switch. Setup: wallet_not_ready, kalshi_not_connected, geo_blocked. Your own configuration: filtered_out, zero_stake, daily_cap. Ours: global_cap. Market conditions: stale, price_drift, not_tradable.
A status of failed carries the venue's error in error instead of a skipReason.
Query parameters
limitnumberdefault: 501 to 200.
Response
status is skipped_<reason> for a skip, and one of matched, submitted, paper_filled, filled or failed otherwise.
curl "https://api.rivo.markets/v1/copy-executions?limit=50" \
-H "Authorization: Bearer rivo_live_..."import requests
r = requests.get(
"https://api.rivo.markets/v1/copy-executions",
headers={"Authorization": "Bearer rivo_live_..."},
params={
"limit": 50,
},
)
print(r.json()["data"])const res = await fetch("https://api.rivo.markets/v1/copy-executions?limit=50", {
headers: { Authorization: "Bearer rivo_live_..." },
});
const { data } = await res.json();response
{
"success": true,
"data": {
"executions": [
{
"id": "3f9c...11a2",
"source": "follow",
"platform": "polymarket",
"traderId": "0x9f2c...b7a4",
"marketTitle": "Will the Fed cut in September?",
"outcome": "YES",
"paper": true,
"status": "paper_filled",
"skipReason": null,
"requestedUsd": 50,
"createdAt": 1755071883000
},
{
"id": "8b21...77de",
"source": "follow",
"status": "skipped_price_drift",
"skipReason": "price_drift",
"requestedUsd": 50,
"createdAt": 1755071120000
}
]
}
}