# Get trade history for arbitrage hopper

`GET https://api.cryptohopper.com/v1/hopper/{id}/arbitrage/exchange/history/{start}/{limit}`

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

Returns the finished exchange arbitrages (completed, cancelled or failed) of an arbitrage bot, most recently completed first, one page at a time.

OAuth scope: `read`

## Headers

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

## Path parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `limit` | string | yes | Maximum number of arbitrages to return, at most 500. |
| `start` | string | yes | Number of arbitrages to skip (offset), 0 for the first page. |
| `id` | string | yes | Hopper ID of an arbitrage bot. |

## Example request

```bash
curl "https://api.cryptohopper.com/v1/hopper/HOPPER_ID/arbitrage/exchange/history/START/LIMIT" \
  -H "access-token: YOUR_ACCESS_TOKEN"
```

## Response

Example response (illustrative values):

```json
{
    "data": [
        {
            "id": "2396990",
            "base_currency": "USDT",
            "currency": "ETH",
            "buy_exchange": "binance",
            "buy_pair": "ETHUSDT",
            "buy_order_id": "55120001",
            "buy_trade_id": "88100001",
            "buy_order_type": "limit",
            "buy_amount": "0.05",
            "buy_amount_filled": "0.05",
            "buy_rate": "2480.1",
            "buy_cost": "124.005",
            "buy_fee": "0.124",
            "sell_exchange": "kraken",
            "sell_pair": "ETH/USDT",
            "sell_order_id": "55120002",
            "sell_trade_id": "88100002",
            "sell_order_type": "limit",
            "sell_amount": "0.05",
            "sell_amount_filled": "0.05",
            "sell_rate": "2493.2",
            "sell_cost": "124.66",
            "sell_fee": "0.324",
            "found_date": "2026-09-24 18:00:00",
            "completed_date": "2026-09-24 18:02:10",
            "order_trigger": "exchange-arbitrage",
            "arbitrage_values": {
                "cur": "ETH",
                "base_cur": "USDT",
                "percentage": "0.53",
                "lowest": {
                    "ex_key": "binance",
                    "rate": "2480.10000000",
                    "pair": "ETHUSDT",
                    "base_cur": "USDT",
                    "cur": "ETH"
                },
                "highest": {
                    "ex_key": "kraken",
                    "rate": "2493.20000000",
                    "pair": "ETH/USDT",
                    "base_cur": "USDT",
                    "cur": "ETH"
                }
            },
            "market_order": "0",
            "result_message": null,
            "profit": "0.21",
            "completed": "1",
            "cancelled": "0",
            "failed": "0",
            "reversed": "0"
        }
    ]
}
```

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.
