Observability API
Metrics, alerts, and incident management (read-only).
List metrics
GET /api/v1/observability/metricsconst { data: metrics } = await puchify.observability.listMetrics({
resource_id: "svr_abc123",
metric: "cpu",
from: "2026-05-28T00:00:00Z",
to: "2026-05-29T00:00:00Z",
})metrics = puchify.observability.list_metrics(
resource_id="svr_abc123",
metric="cpu",
from="2026-05-28T00:00:00Z",
to="2026-05-29T00:00:00Z",
)metrics, err := client.Observability.ListMetrics(ctx, &puchify.MetricListParams{
ResourceID: puchify.String("svr_abc123"),
Metric: puchify.String("cpu"),
From: puchify.String("2026-05-28T00:00:00Z"),
To: puchify.String("2026-05-29T00:00:00Z"),
})puchify observability metrics --resource-id svr_abc123 --metric cpucurl "https://api.puchify.com/api/v1/observability/metrics?resource_id=svr_abc123&metric=cpu&from=2026-05-28T00:00:00Z&to=2026-05-29T00:00:00Z" \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Query parameters:
| Parameter | Type | Description |
|---|---|---|
resource_id | string | Filter by resource ID |
metric | cpu | memory | disk | network_in | network_out | Metric name |
aggregation | avg | max | min | p95 | p99 | Aggregation function (default: avg) |
interval | string | Resolution (1m, 5m, 1h, 1d; default: 5m) |
from | string | Start timestamp (ISO 8601) |
to | string | End timestamp (ISO 8601) |
Returns time-series metric samples for all resources.
Get current metrics
GET /api/v1/observability/metrics/currentconst { data: current } = await puchify.observability.getCurrentMetrics("svr_abc123")current = puchify.observability.get_current_metrics("svr_abc123")current, err := client.Observability.GetCurrentMetrics(ctx, "svr_abc123")puchify observability metrics current --resource-id svr_abc123curl "https://api.puchify.com/api/v1/observability/metrics/current?resource_id=svr_abc123" \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Returns the latest snapshot of all metric values for a resource.
List alerts
GET /api/v1/observability/alertsconst { data: alerts } = await puchify.observability.listAlerts({
status: "firing",
})alerts = puchify.observability.list_alerts(status="firing")alerts, err := client.Observability.ListAlerts(ctx, &puchify.AlertListParams{
Status: puchify.String("firing"),
})puchify observability alerts --status firingcurl "https://api.puchify.com/api/v1/observability/alerts?status=firing" \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Query parameters:
| Parameter | Type | Description |
|---|---|---|
resource_id | string | Filter by resource ID |
status | firing | resolved | acknowledged | Alert status |
severity | critical | warning | info | Alert severity |
cursor | string | Pagination cursor |
limit | integer (1-100) | Results per page (default 50) |
List incidents
GET /api/v1/observability/incidentsconst { data: incidents } = await puchify.observability.listIncidents({
status: "open",
})incidents = puchify.observability.list_incidents(status="open")incidents, err := client.Observability.ListIncidents(ctx, &puchify.IncidentListParams{
Status: puchify.String("open"),
})puchify observability incidents --status opencurl "https://api.puchify.com/api/v1/observability/incidents?status=open" \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Query parameters:
| Parameter | Type | Description |
|---|---|---|
resource_id | string | Filter by resource ID |
status | open | investigating | resolved | closed | Incident status |
severity | critical | major | minor | Incident severity |
cursor | string | Pagination cursor |
limit | integer (1-100) | Results per page (default 50) |
Get an incident
GET /api/v1/observability/incidents/{id}const { data: incident } = await puchify.observability.getIncident("inc_abc123")incident = puchify.observability.get_incident("inc_abc123")incident, err := client.Observability.GetIncident(ctx, "inc_abc123")puchify observability incident get inc_abc123curl https://api.puchify.com/api/v1/observability/incidents/inc_abc123 \
-H "Authorization: Bearer $PUCHIFY_API_KEY"Response shape
{
"data": {
"metrics": [
{
"resource_id": "svr_abc123",
"metric": "cpu",
"unit": "percent",
"samples": [
{ "timestamp": "2026-05-28T10:30:00Z", "value": 45.2 },
{ "timestamp": "2026-05-28T10:35:00Z", "value": 72.1 }
]
}
],
"alerts": [
{
"id": "alert_001",
"resource_id": "svr_abc123",
"name": "High CPU Usage",
"status": "firing",
"severity": "warning",
"value": 92.3,
"threshold": 80.0,
"triggered_at": "2026-05-28T10:30:00Z",
"resolved_at": null
}
],
"incidents": [
{
"id": "inc_abc123",
"title": "Production API Latency",
"status": "investigating",
"severity": "major",
"resource_id": "svr_abc123",
"summary": "P99 latency exceeded 2s for 15 minutes",
"created_at": "2026-05-28T10:30:00Z",
"resolved_at": null,
"timeline": [
{
"timestamp": "2026-05-28T10:30:00Z",
"action": "alert_triggered",
"description": "High CPU usage alert fired"
}
]
}
]
},
"meta": {
"persistence": "synced"
}
}Error codes
| Code | Description |
|---|---|
404 | Resource or incident not found |
422 | Invalid time range or metric name |