Puchify

Observability API

Metrics, alerts, and incident management (read-only).

List metrics

GET /api/v1/observability/metrics
const { 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 cpu
curl "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:

ParameterTypeDescription
resource_idstringFilter by resource ID
metriccpu | memory | disk | network_in | network_outMetric name
aggregationavg | max | min | p95 | p99Aggregation function (default: avg)
intervalstringResolution (1m, 5m, 1h, 1d; default: 5m)
fromstringStart timestamp (ISO 8601)
tostringEnd timestamp (ISO 8601)

Returns time-series metric samples for all resources.

Get current metrics

GET /api/v1/observability/metrics/current
const { 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_abc123
curl "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/alerts
const { 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 firing
curl "https://api.puchify.com/api/v1/observability/alerts?status=firing" \
  -H "Authorization: Bearer $PUCHIFY_API_KEY"

Query parameters:

ParameterTypeDescription
resource_idstringFilter by resource ID
statusfiring | resolved | acknowledgedAlert status
severitycritical | warning | infoAlert severity
cursorstringPagination cursor
limitinteger (1-100)Results per page (default 50)

List incidents

GET /api/v1/observability/incidents
const { 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 open
curl "https://api.puchify.com/api/v1/observability/incidents?status=open" \
  -H "Authorization: Bearer $PUCHIFY_API_KEY"

Query parameters:

ParameterTypeDescription
resource_idstringFilter by resource ID
statusopen | investigating | resolved | closedIncident status
severitycritical | major | minorIncident severity
cursorstringPagination cursor
limitinteger (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_abc123
curl 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

CodeDescription
404Resource or incident not found
422Invalid time range or metric name

On this page