# Start a strategy backtest

`POST https://api.cryptohopper.com/v1/hopper/{id}/backtest`

Part of [Backtesting](https://www.cryptohopper.com/api-documentation/api-reference/backtesting.md) in the Cryptohopper API reference.

Starts a backtest of one strategy on one coin, using the exchange and quote currency of the hopper's config. Only one strategy backtest can run at a time per account.

OAuth scope: `read`

currency is required. strategy is user_<id>, market_<id> or ai_<id>; built-in strategies (multiple_ta) are refused. date_range is only used when custom_period is 1. The result appears in List strategy backtests when the run finishes. 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.

## Headers

| Name | Type | Required | Description |
|---|---|---|---|
| `access-token` | string | yes | The OAuth access token of the user. |

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `id` | string | yes | Hopper ID. Must be one of your hoppers; arbitrage, market maker, copy, grid and AI bots are refused. |

## Example request

```bash
curl -X POST "https://api.cryptohopper.com/v1/hopper/HOPPER_ID/backtest" \
  -H "access-token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"currency":"ETH","strategy":"user_4521","take_profit":2,"sell_with_strategy":0,"stop_loss":1,"stop_loss_percentage":5,"trailing_stop_loss":0,"trailing_stop_loss_only":0,"trailing_stop_loss_percentage":0,"trailing_stop_loss_arm":0,"trailing_buy":0,"trailing_buy_percentage":0,"custom_period":1,"date_range":"2026-08-01 00:00:00 - 2026-08-31 00:00:00"}'
```

## Response

Example response (illustrative values):

```json
{
    "data": "Backtest has started."
}
```

Status codes: 200. Errors return JSON with `status`, `error` and `message`, plus a numeric `code` when the error comes from the API itself rather than the gateway.
