Endpoint
GET https://api.terraquakeapi.com/stations/status/open
Description
Retrieves only the stations that are currently operational (status: “open”). These are stations actively collecting and transmitting seismic data in real-time. This endpoint filters the complete INGV network to return only functional, active monitoring stations.
Ideal for applications that need to work with live data sources or ensure station availability before integration.
Use Cases
Real-Time Monitoring : Identify which stations are providing current data
Network Health : Monitor the operational status of the seismic network
Data Quality : Ensure you’re working with active data sources
Coverage Analysis : Assess geographic coverage of active monitoring
Integration Planning : Determine available stations for data feeds
Parameters
Number of stations to return per page. Must be a positive integer greater than 0. Maximum : 1000Example : ?limit=100
Page number for pagination. Must be a positive integer greater than 0. Example : ?page=2
Request Examples
curl "https://api.terraquakeapi.com/stations/status/open?limit=100&page=1"
Indicates if the request was successful
HTTP status code (200 for success)
Human-readable description (“List of active seismic stations”)
Array of active station objects (see Station Object structure)
Total number of currently operational stations
Pagination metadata Total number of pages available
Number of results per page
Whether more pages are available
Request metadata (method, path, timestamp)
Station Object Structure
Each station object has the following structure:
Station metadata attributes Full station name with network prefix
Always “open” for this endpoint
ISO 8601 date when the station became operational
Station latitude in decimal degrees
Station longitude in decimal degrees
Station elevation in meters above sea level
Human-readable site location name
ISO 8601 timestamp when the station record was created
Response Example
{
"success" : true ,
"code" : 200 ,
"status" : "OK" ,
"message" : "List of active seismic stations" ,
"payload" : [
{
"$" : {
"code" : "ACATE" ,
"name" : "IV.ACATE" ,
"restrictedStatus" : "open" ,
"startDate" : "2015-06-10T00:00:00"
},
"Latitude" : 37.0287 ,
"Longitude" : 14.4983 ,
"Elevation" : 206.0 ,
"Site" : {
"Name" : "Acate (RG)"
},
"CreationDate" : "2015-06-10T00:00:00"
},
{
"$" : {
"code" : "ACER" ,
"name" : "IV.ACER" ,
"restrictedStatus" : "open" ,
"startDate" : "2009-03-12T00:00:00"
},
"Latitude" : 40.7328 ,
"Longitude" : 15.9428 ,
"Elevation" : 652.0 ,
"Site" : {
"Name" : "Acerenza (PZ)"
},
"CreationDate" : "2009-03-12T00:00:00"
}
],
"meta" : {
"method" : "GET" ,
"path" : "/stations/status/open?limit=2&page=1" ,
"timestamp" : "2025-11-06T11:30:45.680Z"
},
"totalStationsOpen" : 385 ,
"pagination" : {
"page" : 1 ,
"totalPages" : 193 ,
"limit" : 2 ,
"hasMore" : true
}
}
Error Responses
Invalid Parameters
{
"success" : false ,
"code" : 400 ,
"status" : "Bad Request" ,
"message" : "The 'limit' parameter must be a positive integer greater than 0. Example: ?limit=50"
}
No Open Stations Found
{
"success" : false ,
"code" : 404 ,
"status" : "Not Found" ,
"message" : "No station found restrictedStatus open"
}
Practical Examples
Check Network Coverage
async function analyzeNetworkCoverage () {
const response = await fetch (
'https://api.terraquakeapi.com/stations/status/open?limit=500'
);
const data = await response . json ();
if ( data . success ) {
const stations = data . payload ;
// Calculate bounding box
const lats = stations . map ( s => s . Latitude );
const lons = stations . map ( s => s . Longitude );
const bounds = {
north: Math . max ( ... lats ),
south: Math . min ( ... lats ),
east: Math . max ( ... lons ),
west: Math . min ( ... lons )
};
console . log ( 'Active network coverage:' );
console . log ( `Latitude: ${ bounds . south . toFixed ( 2 ) } ° to ${ bounds . north . toFixed ( 2 ) } °` );
console . log ( `Longitude: ${ bounds . west . toFixed ( 2 ) } ° to ${ bounds . east . toFixed ( 2 ) } °` );
console . log ( `Total active stations: ${ data . totalStationsOpen } ` );
}
}
Export Active Stations to CSV
import requests
import csv
url = "https://api.terraquakeapi.com/stations/status/open"
params = { "limit" : 500 }
response = requests.get(url, params = params)
data = response.json()
if data.get( 'success' ):
with open ( 'active_stations.csv' , 'w' , newline = '' ) as csvfile:
fieldnames = [ 'code' , 'name' , 'latitude' , 'longitude' , 'elevation' , 'site' ]
writer = csv.DictWriter(csvfile, fieldnames = fieldnames)
writer.writeheader()
for station in data[ 'payload' ]:
writer.writerow({
'code' : station[ '$' ][ 'code' ],
'name' : station[ '$' ][ 'name' ],
'latitude' : station[ 'Latitude' ],
'longitude' : station[ 'Longitude' ],
'elevation' : station[ 'Elevation' ],
'site' : station[ 'Site' ][ 'Name' ]
})
print ( f "Exported { len (data[ 'payload' ]) } active stations to active_stations.csv" )
Filter by Elevation Range
// Find high-altitude active stations
const response = await fetch (
'https://api.terraquakeapi.com/stations/status/open?limit=500'
);
const data = await response . json ();
if ( data . success ) {
const highAltitudeStations = data . payload . filter (
station => station . Elevation > 1000
);
console . log ( `High-altitude stations (>1000m): ${ highAltitudeStations . length } ` );
highAltitudeStations . forEach ( station => {
console . log ( ` ${ station . $ . code } : ${ station . Elevation } m - ${ station . Site . Name } ` );
});
}
Station Status Definitions
This endpoint returns only stations with restrictedStatus: "open", which means:
Station is currently operational
Actively collecting seismic data
Transmitting data to INGV network
Available for real-time monitoring
No endDate specified
Closed Stations Get inactive/historical stations
Statistics View open vs closed station counts
GeoJSON Format Map active stations
Get All Stations Browse all stations (open and closed)