Query RSAM
curl --request GET \
--url https://avert.ldeo.columbia.edu/api/seismic/rsamimport requests
url = "https://avert.ldeo.columbia.edu/api/seismic/rsam"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://avert.ldeo.columbia.edu/api/seismic/rsam', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"series": [
{
"network": "AV",
"station": "CLNE",
"location": "",
"channel": "BHZ",
"window_sec": 60,
"points": [
{
"time": "2026-04-10T00:00:00Z",
"rsam_counts": 142.5
},
{
"time": "2026-04-10T00:01:00Z",
"rsam_counts": 138.2
}
]
}
],
"datefrom": "20260410",
"dateto": "20260412",
"query": {
"network": "AV",
"station": "CLNE",
"channel": "BHZ",
"datefrom": "20260410",
"dateto": "20260412"
}
}
Endpoints
Query RSAM
Endpoints for querying seismic RSAM (Real-time Seismic Amplitude Measurement) time-series data
GET
/
api
/
seismic
/
rsam
Query RSAM
curl --request GET \
--url https://avert.ldeo.columbia.edu/api/seismic/rsamimport requests
url = "https://avert.ldeo.columbia.edu/api/seismic/rsam"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://avert.ldeo.columbia.edu/api/seismic/rsam', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"series": [
{
"network": "AV",
"station": "CLNE",
"location": "",
"channel": "BHZ",
"window_sec": 60,
"points": [
{
"time": "2026-04-10T00:00:00Z",
"rsam_counts": 142.5
},
{
"time": "2026-04-10T00:01:00Z",
"rsam_counts": 138.2
}
]
}
],
"datefrom": "20260410",
"dateto": "20260412",
"query": {
"network": "AV",
"station": "CLNE",
"channel": "BHZ",
"datefrom": "20260410",
"dateto": "20260412"
}
}
Overview
The RSAM endpoints provide access to seismic amplitude data from AVERT monitoring stations. Query time-series data by network, station, and channel with flexible date range filtering.Use
/api/seismic/sites to discover available network/station/channel combinations before querying RSAM data.Available Stations and Channels
- Cleveland
- Poás
- Villarrica
| Field | Value |
|---|---|
| Volcano | Cleveland |
| Network | AV |
| Station | Channels |
|---|---|
CLCL | BHE, BHN, BHZ |
CLCO | BHE, BHN, BHZ |
CLES | BHE, BHN, BHZ |
CLNE | BHE, BHN, BHZ |
CLSF | BHE, BHN, BHZ |
| Field | Value |
|---|---|
| Volcano | Poás |
| Network | OV |
| Station | Channels |
|---|---|
VPCC | HHE, HHN, HHZ, VDT, VEC, VEI, VM1, VM2, VM3 |
VPNC | HHE, HHN, HHZ, VDT, VEC, VEI, VM1, VM2, VM3 |
VPPC | HHE, HHN, HHZ, VDT, VEC, VEI, VM1, VM2, VM3 |
VPRS | HHE, HHN, HHZ, VDT, VEC, VEI, VM1, VM2, VM3 |
| Field | Value |
|---|---|
| Volcano | Villarrica |
| Network | VC |
| Station | Channels |
|---|---|
RKPI | HDF, HHE, HHN, HHZ |
Endpoints
| Method | Path | Description |
|---|---|---|
GET | /api/seismic/sites | List all available network/station/channel combinations |
GET | /api/seismic/dates | List dates with RSAM data for a specific channel |
GET | /api/seismic/rsam/latest | Most recent RSAM entry per channel |
GET | /api/seismic/rsam | RSAM time-series for a channel over a date range |
GET /api/seismic/rsam
Returns a RSAM time-series for the requested channel betweendatefrom and dateto. Both dates are inclusive and results are returned in chronological order.
Parameters
string
required
Seismic network codeExample:
AV?network=AV
string
required
Station codeExample:
CLNE?station=CLNE
string
required
Channel codeExample:
BHZ?channel=BHZ
string
required
Start date for query range (inclusive)Format:
Example:
YYYYMMDDExample:
20260410 = April 10, 2026# Start from April 10, 2026
?datefrom=20260410
string
required
End date for query range (inclusive)Format:
Example:
YYYYMMDDExample:
20260412 = April 12, 2026# End on April 12, 2026
?dateto=20260412
Response Format
{
"series": [
{
"network": "AV",
"station": "CLNE",
"location": "",
"channel": "BHZ",
"window_sec": 60,
"points": [
{
"time": "2026-04-10T00:00:00Z",
"rsam_counts": 142.5
},
{
"time": "2026-04-10T00:01:00Z",
"rsam_counts": 138.2
}
]
}
],
"datefrom": "20260410",
"dateto": "20260412",
"query": {
"network": "AV",
"station": "CLNE",
"channel": "BHZ",
"datefrom": "20260410",
"dateto": "20260412"
}
}
Response Fields
array
required
Array containing one RSAM series object for the requested channel
Show Series object properties
Show Series object properties
string
required
Seismic network code
string
required
Station code
string
required
Location code (empty string if not set)
string
required
Channel code
integer
required
Duration in seconds of each RSAM averaging window (typically 60)
string
required
Start date echoed from your query (
YYYYMMDD)string
required
End date echoed from your query (
YYYYMMDD)object
required
Echo of all query parameters for debugging
GET /api/seismic/sites
Returns all distinct network/station/location/channel combinations that have RSAM data. Use this to discover what data is available before querying. Rate limit: 60 requests per minuteResponse Format
{
"channels": [
{
"network": "AV",
"station": "CLNE",
"location": "",
"channel": "BHZ"
},
{
"network": "AV",
"station": "CLES",
"location": "",
"channel": "BHZ"
}
],
"total": 2
}
Response Fields
array
required
integer
required
Total number of distinct channels returned
GET /api/seismic/dates
Returns a list of dates (UTC) that have RSAM data for the requested network/station/channel. Use this to populate date pickers or validate date availability before querying. Rate limit: 60 requests per minuteParameters
string
required
Seismic network code (e.g.
AV)string
required
Station code (e.g.
CLNE)string
required
Channel code (e.g.
BHZ)Response Format
{
"dates": [
"2026-04-12",
"2026-04-11",
"2026-04-10"
],
"network": "AV",
"station": "CLNE",
"channel": "BHZ"
}
Response Fields
array
required
List of available dates in
YYYY-MM-DD format, ordered newest firststring
required
Network code echoed from your query
string
required
Station code echoed from your query
string
required
Channel code echoed from your query
GET /api/seismic/rsam/latest
Returns the most recent available RSAM date for every network/station/location/channel combination. Useful for dashboards and monitoring views. Rate limit: 60 requests per minuteResponse Format
{
"channels": [
{
"network": "AV",
"station": "CLNE",
"location": "",
"channel": "BHZ",
"latest_date": "2026-04-12"
}
],
"total": 1
}
Response Fields
array
required
integer
required
Total number of channels returned
Example Requests
Discover Available Data
# See all available network/station/channel combinations
curl "https://avert.ldeo.columbia.edu/api/seismic/sites"
# See the most recent date available per channel
curl "https://avert.ldeo.columbia.edu/api/seismic/rsam/latest"
# Check which dates have data for AV.CLNE.BHZ
curl "https://avert.ldeo.columbia.edu/api/seismic/dates?\
network=AV&\
station=CLNE&\
channel=BHZ"
Query RSAM Time-series
# RSAM for AV.CLNE.BHZ on April 10, 2026
curl "https://avert.ldeo.columbia.edu/api/seismic/rsam?\
network=AV&\
station=CLNE&\
channel=BHZ&\
datefrom=20260410&\
dateto=20260410"
# RSAM for three days
curl "https://avert.ldeo.columbia.edu/api/seismic/rsam?\
network=AV&\
station=CLNE&\
channel=BHZ&\
datefrom=20260410&\
dateto=20260412"
# RSAM for all of April 2026
curl "https://avert.ldeo.columbia.edu/api/seismic/rsam?\
network=AV&\
station=CLES&\
channel=BHZ&\
datefrom=20260401&\
dateto=20260430"
Code Examples
JavaScript/TypeScript
// Step 1: find available channels
const sitesRes = await fetch(
'https://avert.ldeo.columbia.edu/api/seismic/sites'
);
const { channels } = await sitesRes.json();
console.log('Available channels:', channels.length);
// Step 2: query RSAM for the first channel
const { network, station, channel } = channels[0];
const params = new URLSearchParams({
network, station, channel,
datefrom: '20260410',
dateto: '20260412',
});
const rsamRes = await fetch(
`https://avert.ldeo.columbia.edu/api/seismic/rsam?${params}`
);
const data = await rsamRes.json();
const series = data.series[0];
console.log(`${series.points.length} points for ${network}.${station}.${channel}`);
// Fetch and plot RSAM data
async function getRsamSeries(network, station, channel, datefrom, dateto) {
const params = new URLSearchParams({ network, station, channel, datefrom, dateto });
const res = await fetch(
`https://avert.ldeo.columbia.edu/api/seismic/rsam?${params}`
);
const data = await res.json();
return data.series[0].points;
}
const points = await getRsamSeries('AV', 'CLNE', 'BHZ', '20260410', '20260412');
// points is an array of { time, rsam_counts }
const timestamps = points.map(p => new Date(p.time));
const values = points.map(p => p.rsam_counts);
// Pass timestamps/values to your charting library
// Build a status dashboard showing latest RSAM date per channel
const res = await fetch(
'https://avert.ldeo.columbia.edu/api/seismic/rsam/latest'
);
const { channels } = await res.json();
channels.forEach(({ network, station, channel, latest_date }) => {
console.log(`${network}.${station}.${channel} — latest: ${latest_date}`);
});
Python
import requests
response = requests.get(
'https://avert.ldeo.columbia.edu/api/seismic/rsam',
params={
'network': 'AV',
'station': 'CLNE',
'channel': 'BHZ',
'datefrom': '20260410',
'dateto': '20260412',
}
)
data = response.json()
series = data['series'][0]
print(f"{len(series['points'])} RSAM points")
print(f"Window: {series['window_sec']} seconds")
for point in series['points'][:5]:
print(f" {point['time']}: {point['rsam_counts']:.1f} counts")
import requests
# List all channels
sites = requests.get(
'https://avert.ldeo.columbia.edu/api/seismic/sites'
).json()
for ch in sites['channels']:
print(f"{ch['network']}.{ch['station']}.{ch['channel']}")
import requests
# Check which dates have data before querying
dates_res = requests.get(
'https://avert.ldeo.columbia.edu/api/seismic/dates',
params={'network': 'AV', 'station': 'CLNE', 'channel': 'BHZ'}
)
dates = dates_res.json()['dates']
print(f"Available dates: {len(dates)}")
print(f"Latest: {dates[0]}")
print(f"Oldest: {dates[-1]}")
import requests
import csv
response = requests.get(
'https://avert.ldeo.columbia.edu/api/seismic/rsam',
params={
'network': 'AV',
'station': 'CLNE',
'channel': 'BHZ',
'datefrom': '20260410',
'dateto': '20260410',
}
)
series = response.json()['series'][0]
with open('rsam.csv', 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['time', 'rsam_counts'])
writer.writeheader()
writer.writerows(series['points'])
print(f"Exported {len(series['points'])} rows to rsam.csv")
Handling Rate Limits
The/api/seismic/rsam endpoint limits requests to 100 per minute per IP address. Helper endpoints (/sites, /dates, /rsam/latest) are limited to 60 per minute.
import requests
import time
def query_rsam_with_retry(params, max_retries=3):
for attempt in range(max_retries):
response = requests.get(
'https://avert.ldeo.columbia.edu/api/seismic/rsam',
params=params
)
if response.status_code == 200:
return response.json()
elif response.status_code == 429:
wait_time = 2 ** attempt
print(f"Rate limited. Waiting {wait_time} seconds...")
time.sleep(wait_time)
else:
response.raise_for_status()
raise Exception("Max retries exceeded")
async function queryRsamWithRetry(params, maxRetries = 3) {
const url = 'https://avert.ldeo.columbia.edu/api/seismic/rsam?' +
new URLSearchParams(params);
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url);
if (response.ok) return await response.json();
if (response.status === 429) {
const waitTime = Math.pow(2, attempt) * 1000;
console.log(`Rate limited. Waiting ${waitTime / 1000} seconds...`);
await new Promise(resolve => setTimeout(resolve, waitTime));
} else {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
}
throw new Error('Max retries exceeded');
}
Error Responses
{
"error": true,
"status_code": 400,
"detail": "Invalid datefrom format '2026-04-10'. Use YYYYMMDD (e.g. 20260410)."
}
{
"error": true,
"status_code": 400,
"detail": "datefrom must be <= dateto"
}
{
"error": true,
"status_code": 422,
"detail": "Validation error in request parameters",
"errors": [
{
"type": "missing",
"loc": ["query", "network"],
"msg": "Field required"
}
],
"path": "/api/seismic/rsam"
}
{
"error": "Rate limit exceeded: 100 per 1 minute"
}
Rate Limits
| Endpoint | Rate Limit | Window |
|---|---|---|
/api/seismic/rsam | 100 requests | per minute |
/api/seismic/sites | 60 requests | per minute |
/api/seismic/dates | 60 requests | per minute |
/api/seismic/rsam/latest | 60 requests | per minute |
Need Help?
Query Imagery
Query infrared and visible volcano imagery
Contact Support
Questions or issues? Reach out to our team

