GET
https://api.cryptohopper.com/v1/hopper/{id}/arbitrage/exchange/results
Returns the latest exchange arbitrage opportunities the bot found in its last scan, with the time of that scan.
OAuth scope:
read About scopes
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.
Example request
curl "https://api.cryptohopper.com/v1/hopper/HOPPER_ID/arbitrage/exchange/results" \
-H "access-token: YOUR_ACCESS_TOKEN"
const response = await fetch('https://api.cryptohopper.com/v1/hopper/HOPPER_ID/arbitrage/exchange/results', {
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/arbitrage/exchange/results",
headers={
"access-token": "YOUR_ACCESS_TOKEN"
},
)
data = response.json()
$ch = curl_init('https://api.cryptohopper.com/v1/hopper/HOPPER_ID/arbitrage/exchange/results');
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 of an arbitrage bot. |
Response
{
"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"
}
}
]
}
}