Ping
curl --request GET \
--url https://eu.solana.bloombot.app/api/v1/ping \
--header 'Authorization: Bearer <token>'import requests
url = "https://eu.solana.bloombot.app/api/v1/ping"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://eu.solana.bloombot.app/api/v1/ping', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://eu.solana.bloombot.app/api/v1/ping",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eu.solana.bloombot.app/api/v1/ping"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://eu.solana.bloombot.app/api/v1/ping")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.solana.bloombot.app/api/v1/ping")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"pong": true
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": "<string>"
}
}Endpoints
Ping
Keep a connection warm without spending rate-limit budget.
GET
/
api
/
v1
/
ping
Ping
curl --request GET \
--url https://eu.solana.bloombot.app/api/v1/ping \
--header 'Authorization: Bearer <token>'import requests
url = "https://eu.solana.bloombot.app/api/v1/ping"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://eu.solana.bloombot.app/api/v1/ping', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://eu.solana.bloombot.app/api/v1/ping",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://eu.solana.bloombot.app/api/v1/ping"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://eu.solana.bloombot.app/api/v1/ping")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.solana.bloombot.app/api/v1/ping")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"pong": true
}
}{
"success": false,
"error": {
"code": "<string>",
"message": "<string>",
"details": "<string>"
}
}A ping does not count against any rate-limit window, so you can poll it as
often as your connection’s idle timeout requires. See
Rate limits.
Why ping
Opening a fresh TLS connection costs a round trip or two before your swap is even sent — latency you pay at exactly the wrong moment. Keeping one connection open and idle between trades removes that cost, but an idle connection gets reaped: the Solana host closes one after 60 seconds of inactivity, and any proxy in between may be stricter. Ping well inside the shortest of those and the connection stays up. Because the endpoint does no work and spends no budget, you can do this on a timer for as long as your process runs.- Solana
- EVM
curl "https://eu.solana.bloombot.app/api/v1/ping" \
-H "Authorization: Bearer blm_sol_live_YOUR_KEY_HERE"
curl "https://evm.bloombot.app/api/v1/ping" \
-H "Authorization: Bearer blm_evm_live_YOUR_KEY_HERE"
{
"success": true,
"data": { "pong": true }
}
Ping the same host you trade against. A warm connection to one host does
nothing for a request you send to another — that applies to the Solana
eu.
and us. regions as much as it does to the Solana
and EVM hosts.What else it tells you
The endpoint is authenticated, and it returns the sameX-RateLimit-* headers
as every other route, read from your current budget without consuming any of it.
That makes one call answer three questions at once:
| Question | Answer |
|---|---|
| Is the API reachable? | 200 versus a transport error |
| Is my key still valid? | 200 versus 401 UNAUTHORIZED — a revoked key fails here |
| How much budget is left? | The X-RateLimit-Remaining-* headers |

