curl --request GET \
--url https://api.ironflow.sh/v1/statusimport requests
url = "https://api.ironflow.sh/v1/status"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.ironflow.sh/v1/status', 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://api.ironflow.sh/v1/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.ironflow.sh/v1/status"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ironflow.sh/v1/status")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ironflow.sh/v1/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": "operational",
"timestamp": 1745145533000,
"uptime": "3h12m40s",
"platform": {
"total_events": 1843000000,
"total_markets": 568,
"event_types_active": 9,
"oldest_data_days": 266
},
"components": {
"data_pipeline": {
"status": "operational",
"last_seen_age_seconds": 4.2
},
"rest_api": {
"status": "operational",
"last_seen_age_seconds": 4.2
},
"streaming": {
"status": "operational",
"last_seen_age_seconds": 4.2
}
},
"venues": {
"hyperliquid": {
"status": "operational",
"markets": 568,
"streams": {
"fills": {
"latest_timestamp": "2026-04-20 09:58:53.033",
"age_seconds": 0.41,
"total_rows": 1843000000
},
"order_statuses": {
"latest_timestamp": "2026-04-20 09:58:53.044",
"age_seconds": 0.39,
"total_rows": 3500000000
},
"book_snapshots": {
"latest_timestamp": "2026-04-20 09:58:52.900",
"age_seconds": 1.14,
"total_rows": 21000000
}
},
"events": {
"liquidations": {
"latest_timestamp": "2026-04-20 09:54:12.019",
"age_seconds": 281,
"total_rows": 1204000
},
"funding_rates": {
"latest_timestamp": "2026-04-20 09:00:00.000",
"age_seconds": 3533,
"total_rows": 150000
}
}
}
}
}Ironflow API status
GET /v1/status returns overall health, per-venue data freshness and platform totals for the Ironflow Hyperliquid data API. It needs no API key.
curl --request GET \
--url https://api.ironflow.sh/v1/statusimport requests
url = "https://api.ironflow.sh/v1/status"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.ironflow.sh/v1/status', 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://api.ironflow.sh/v1/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://api.ironflow.sh/v1/status"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ironflow.sh/v1/status")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ironflow.sh/v1/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"status": "operational",
"timestamp": 1745145533000,
"uptime": "3h12m40s",
"platform": {
"total_events": 1843000000,
"total_markets": 568,
"event_types_active": 9,
"oldest_data_days": 266
},
"components": {
"data_pipeline": {
"status": "operational",
"last_seen_age_seconds": 4.2
},
"rest_api": {
"status": "operational",
"last_seen_age_seconds": 4.2
},
"streaming": {
"status": "operational",
"last_seen_age_seconds": 4.2
}
},
"venues": {
"hyperliquid": {
"status": "operational",
"markets": 568,
"streams": {
"fills": {
"latest_timestamp": "2026-04-20 09:58:53.033",
"age_seconds": 0.41,
"total_rows": 1843000000
},
"order_statuses": {
"latest_timestamp": "2026-04-20 09:58:53.044",
"age_seconds": 0.39,
"total_rows": 3500000000
},
"book_snapshots": {
"latest_timestamp": "2026-04-20 09:58:52.900",
"age_seconds": 1.14,
"total_rows": 21000000
}
},
"events": {
"liquidations": {
"latest_timestamp": "2026-04-20 09:54:12.019",
"age_seconds": 281,
"total_rows": 1204000
},
"funding_rates": {
"latest_timestamp": "2026-04-20 09:00:00.000",
"age_seconds": 3533,
"total_rows": 150000
}
}
}
}
}Response
System status.
Overall system health, the worst of any individual service or venue.
degraded means at least one input crossed 60s of staleness;
down means at least one crossed 5 minutes (or a process is hard-down).
operational, degraded, down Server time as Unix milliseconds.
Time since the last pipeline incident (data freshness > 60s OR a
critical process scraped as down) within the trailing 7-day window,
as a Go duration string (e.g. "3h12m40s", "168h0m0s" for a full
incident-free week). Sourced from Prometheus, so it is stable across
api-server restarts — rolling deploys do NOT reset this value.
If Prometheus is unreachable, falls back to the process uptime of
the serving container as a degraded-mode best-effort value.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Health of each customer-facing service. Three keys are returned:
data_pipeline— events ingested from venues into queryable storage. Reflects worst-of(ingest path liveness, venue freshness).rest_api— HTTP API for historical and recent data.streaming— WebSocket feed for real-time data.
The status page deliberately exposes services rather than the underlying processes — internal implementation components (message bus, storage engine, individual binaries) are folded into these three to give customers a clear answer without leaking the architecture.
Show child attributes
Show child attributes