GET
https://api.cryptohopper.com/v1/hopper/{id}/backtest
Returns your strategy backtests (started with Start a strategy backtest), newest first, up to 50. The hopper ID is only checked: the list holds the strategy backtests of all your hoppers.
OAuth scope:
read About scopes
Uses the backtest rate limit: one request per 2 seconds per token and app. Refused with 403 when you reached today's strategy backtest limit. start_time and end_time are Unix timestamps.
Example request
curl "https://api.cryptohopper.com/v1/hopper/HOPPER_ID/backtest" \
-H "access-token: YOUR_ACCESS_TOKEN"
const response = await fetch('https://api.cryptohopper.com/v1/hopper/HOPPER_ID/backtest', {
method: 'GET',
headers: {
"access-token": "YOUR_ACCESS_TOKEN"
}
});
const data = await response.json();
import requests
response = requests.get(
"https://api.cryptohopper.com/v1/hopper/HOPPER_ID/backtest",
headers={
"access-token": "YOUR_ACCESS_TOKEN"
},
)
data = response.json()
$ch = curl_init('https://api.cryptohopper.com/v1/hopper/HOPPER_ID/backtest');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'access-token: YOUR_ACCESS_TOKEN',
],
]);
$data = json_decode(curl_exec($ch), true);
Parameters
Headers
| Name | Type | Required | Description |
|---|---|---|---|
access-token |
string | Required | The OAuth access token of the user. |
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id |
string | Required | Hopper ID. Must be one of your hoppers; arbitrage, market maker, copy, grid and AI bots are refused. |
Response
{
"data": [
{
"id": "12665800",
"backtest_type": "configtester",
"exchange": "binance",
"currency": "ETH",
"base_currency": "USDT",
"market": "ETHUSDT",
"strategy": "My RSI strategy",
"config": "{\"strategy\":\"My RSI strategy\",\"strategy_select\":\"user_4521\",\"trailing_buy\":0,\"trailing_buy_percentage\":0}",
"candle_size": "300",
"profit": "3.12",
"take_profit": "2.00",
"stop_loss": "1",
"stop_loss_percentage": "5",
"trailing_stop_loss": "0",
"trailing_stop_loss_percentage": "0",
"trailing_stop_loss_arm": "0",
"trailing_stop_loss_only": "0",
"sell_with_strategy": "0",
"max_open_positions": "200",
"successful_sells": "14",
"loss_sells": "3",
"average_sell_time": "0",
"custom_period": "1",
"start_time": "1754006400",
"end_time": "1756598400",
"date": "2026-09-01T10:20:00Z",
"last_update": "2026-09-01 10:20:00"
}
]
}