Sage Continuum APIportal.sagecontinuum.org ↗
Access Sage Continuum edge node status, sensor readings, app catalogs, job definitions, and time-series data via 14 structured endpoints.
What is the Sage Continuum API?
This API provides 14 endpoints for querying the Sage Continuum scientific edge computing platform, covering node status, hardware manifests, sensor catalogs, app catalogs, job definitions, and raw time-series measurements. Endpoints like get_node_status return GPS coordinates, attached sensors, and live reporting status, while query_data lets you pull NDJSON-formatted measurement records filtered by time window and metric name.
curl -X GET 'https://api.parse.bot/scraper/74e0a5c8-c11c-4f26-8425-b22641d3ad19/get_node_status?VSN=H007' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace portal-sagecontinuum-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Sage Continuum Portal — monitor edge nodes, sensors, and apps."""
from parse_apis.sage_continuum_portal_api import SageContinuum, LOOKBACK, START, ResourceNotFound
client = SageContinuum()
# List active (reporting) nodes — bounded iteration
for node in client.nodes.list(limit=3):
print(node.vsn, node.project, node.status)
# Drill into one node's recent measurements
node = client.nodes.list(limit=1).first()
if node:
for record in node.latest_records(lookback=LOOKBACK._30M, limit=5):
print(record.timestamp, record.name, record.value)
# Get a node's full hardware manifest
if node:
manifest = node.manifest()
print(manifest.total_sensors, manifest.total_computes)
# Raw time-series query across the platform
for record in client.records.query(query_json='{"start":"-1h","filter":{"name":"sys.uptime"},"tail":3}', limit=3):
print(record.timestamp, record.name, record.meta)
# Browse the sensor catalog
sensor = client.sensors.list(limit=1).first()
if sensor:
print(sensor.hw_model, sensor.manufacturer, sensor.capabilities)
# Typed error handling for a missing node
try:
missing = client.nodes.get(vsn="ZZZZ")
print(missing.name)
except ResourceNotFound as exc:
print(f"Node not found: {exc.VSN}")
print("exercised: nodes.list / nodes.get / latest_records / manifest / records.query / sensors.list")
Get the reporting status and metadata for a specific node by its VSN. Returns node details including project, focus, location, GPS coordinates, registration info, and lists of attached sensors and compute units. Also checks whether the node is currently reporting data by looking for recent sys.uptime signals.
| Param | Type | Description |
|---|---|---|
| VSNrequired | string | Node VSN identifier (e.g., W0B8, H007, W02C) |
{
"type": "object",
"fields": {
"vsn": "string, node VSN identifier",
"name": "string, node hardware name",
"focus": "string, node focus area",
"status": "string, 'reporting' or 'not reporting'",
"address": "string, street address",
"gps_lat": "number or null, latitude",
"gps_lon": "number or null, longitude",
"project": "string, project the node belongs to (e.g., SAGE, SGT)",
"sensors": "array of sensor objects attached to the node",
"computes": "array of compute unit objects attached to the node",
"location": "string, physical location description",
"registered_at": "string or null, ISO timestamp of registration",
"commissioned_at": "string or null, ISO timestamp of commissioning"
},
"sample": {
"data": {
"vsn": "W0B8",
"name": "000048B02DD3C5BD",
"focus": "Training & Dev",
"status": "not reporting",
"address": "Argonne\r\n9700 South Cass Ave, Lemont, IL 60439",
"gps_lat": 41.701339,
"gps_lon": -87.995624,
"project": "SAGE",
"sensors": [
{
"name": "top_camera",
"hw_model": "XNV-8081Z",
"is_active": true,
"capabilities": [
"Camera"
],
"manufacturer": "Hanwha Techwin"
}
],
"computes": [
{
"name": "nxcore",
"hw_model": "xavierNX",
"is_active": true,
"serial_no": "48B02DD3C5BD",
"capabilities": [
"gpu",
"cuda102",
"arm64"
],
"manufacturer": "ConnectTech"
}
],
"location": "ATMOS",
"registered_at": "2023-10-09T16:36:58Z",
"commissioned_at": null
},
"status": "success"
}
}About the Sage Continuum API
Node and Hardware Data
get_node_status accepts a VSN string (e.g., W0B8, H007) and returns the node's project affiliation, focus area, street address, GPS coordinates, and arrays of attached sensor and compute objects along with a status field indicating whether the node is currently reporting. list_nodes restricts results to nodes that have sent sys.uptime signals in the last 15 minutes, while list_all_nodes returns every registered node regardless of activity. get_node_sensors adds the full hardware manifest including LoRaWAN connections, datasheet URLs, and per-sensor descriptions. get_node_computes returns the compute units attached to a node including model, manufacturer, and serial number.
Sensor and App Catalogs
list_sensors returns every sensor model in the Sage catalog with capabilities arrays, manufacturer names, datasheet URLs, markdown descriptions, and a vsns array listing which nodes carry each model. get_sensor_detail narrows that to a single model by MODEL name (e.g., BME680, ES-642). The app side mirrors this: list_apps returns all public ECR applications with name, namespace, version, description, source repository, authors, and license. get_app_detail requires all three of NAMESPACE, NAME, and VERSION — there is no latest alias, so version strings must be obtained from list_apps first.
Jobs and Time-Series Queries
list_jobs exposes every job on the platform with plugin definitions, node assignments, science rules, and current state. get_job_detail accepts a numeric JOB_ID and returns the full job definition including last_state, last_submitted, last_started, and last_completed timestamps. For measurement data, get_node_latest_records accepts a LOOKBACK parameter in formats like -30m, -6h, or -7d and returns timestamped records with name, value, and meta. The lower-level query_data endpoint accepts a raw JSON object with a required start key plus optional filters, returning parsed NDJSON records. get_node_app_history pulls scheduler event logs (sys.scheduler.*) for a node over a configurable time window.
The Sage Continuum API is a managed, monitored endpoint for portal.sagecontinuum.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when portal.sagecontinuum.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official portal.sagecontinuum.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor which edge nodes are actively reporting by polling
list_nodesand filtering on thestatusfield. - Build a hardware inventory dashboard by combining
get_node_sensorsandget_node_computesacross all VSNs fromlist_all_nodes. - Retrieve recent environmental readings for a specific node using
get_node_latest_recordswith a-1hlookback window. - Audit which nodes are running a given sensor model by querying
get_sensor_detailand inspecting thevsnsarray. - Track job scheduling and completion timelines by combining
list_jobswithget_job_detailstate fields. - Discover available edge applications and their source repositories by parsing
list_appsresults for namespace and git URL fields. - Query raw time-series measurements across multiple metrics by posting a structured filter object to
query_data.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does portal.sagecontinuum.org have an official developer API?+
What does `query_data` return, and how do I filter it?+
query_data accepts a JSON object with a required start key (relative time string like -1h or -2d) plus optional filter keys for metric name, node VSN, and a tail parameter to limit results. It returns an array of records each containing timestamp, name, value, and a meta object. Use get_node_latest_records instead if you only need recent data for a single known VSN.How fresh is the node reporting status returned by `list_nodes`?+
list_nodes checks for sys.uptime signals within the last 15 minutes. A node absent from this list may still have historical data queryable via query_data or get_node_latest_records — it simply hasn't sent a heartbeat recently. There is no sub-minute polling interval exposed through the API.Does the API expose historical node deployment or decommission dates?+
Can I retrieve per-app performance metrics or execution durations from job runs?+
get_node_app_history returns scheduler event records (plugin completion events and state changes) with timestamps and JSON-encoded values, but does not expose structured execution duration or resource-usage metrics. list_jobs and get_job_detail cover job state and scheduling rules. You can fork this API on Parse and revise it to add an endpoint that computes durations from the event log timestamps.