# Get exchange arbitrage scan results

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

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

Returns the latest exchange arbitrage opportunities the bot found in its last scan, with the time of that scan.

OAuth scope: `read`

Before the bot's first scan, found is 0 and result is the text "Your hopper has not started searching for exchange arbitrages yet." lowest is the exchange with the lowest ask, highest the exchange with the highest bid.

## 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 of an arbitrage bot. |

## Example request

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

## Response

Example response (illustrative values):

```json
{
    "data": {
        "found": "1",
        "last_update": "2026-09-25T10:15:00Z",
        "result": [
            {
                "cur": "ETH",
                "base_cur": "USDT",
                "percentage": "0.50",
                "lowest": {
                    "ex_key": "binance",
                    "rate": "2500.12000000",
                    "pair": "ETHUSDT",
                    "base_cur": "USDT",
                    "cur": "ETH"
                },
                "highest": {
                    "ex_key": "kraken",
                    "rate": "2512.50000000",
                    "pair": "ETH/USDT",
                    "base_cur": "USDT",
                    "cur": "ETH"
                }
            }
        ]
    }
}
```

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.
