API reference · Monitoring

Scheduled jobs (heartbeats)

Cron jobs and backups that must call in before a deadline. Silence becomes an incident.

Base URL https://app.upfour.io/v1 · auth via Authorization: Bearer <key> · “Try it” runs from your browser — the key is kept in this tab only. Use a pls_test_ sandbox key to experiment freely.

GET /heartbeats

scope heartbeat.write stable returns 200

ParameterInTypeNotes
limit query integer default 50
cursor query string
client_id query uuid
all_clients query boolean
q query string
sort query string
curl -s https://app.upfour.io/v1/heartbeats \
  -H "Authorization: Bearer $UP4_API_KEY"
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

POST /heartbeats

scope heartbeat.write stable returns 201

Body fieldTypeNotes
namestringDisplay name
expected_interval_secondsintegerHow often the job should check in
grace_period_secondsintegerSlack on top before the silence alerts
heartbeat_group_iduuidOptional folder
client_iduuidCreate inside a client partition (agency mode)
curl -s -X POST https://app.upfour.io/v1/heartbeats \
  -H "Authorization: Bearer $UP4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "nightly pg_dump", "expected_interval_seconds": 86400, "grace_period_seconds": 3600 }'
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

GET /heartbeats/{heartbeatID}

scope heartbeat.write stable returns 200

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s https://app.upfour.io/v1/heartbeats/<heartbeatID> \
  -H "Authorization: Bearer $UP4_API_KEY"
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

PUT /heartbeats/{heartbeatID}

scope heartbeat.write stable returns 200

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s -X PUT https://app.upfour.io/v1/heartbeats/<heartbeatID> \
  -H "Authorization: Bearer $UP4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

PATCH /heartbeats/{heartbeatID}

scope heartbeat.write stable returns 200

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s -X PATCH https://app.upfour.io/v1/heartbeats/<heartbeatID> \
  -H "Authorization: Bearer $UP4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

DELETE /heartbeats/{heartbeatID}

scope heartbeat.write stable returns 204

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s -X DELETE https://app.upfour.io/v1/heartbeats/<heartbeatID> \
  -H "Authorization: Bearer $UP4_API_KEY"
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

GET /heartbeats/{heartbeatID}/availability

scope heartbeat.read stable returns 200

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s https://app.upfour.io/v1/heartbeats/<heartbeatID>/availability \
  -H "Authorization: Bearer $UP4_API_KEY"
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

POST /heartbeats/{heartbeatID}/pause

scope heartbeat.write stable returns 201

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s -X POST https://app.upfour.io/v1/heartbeats/<heartbeatID>/pause \
  -H "Authorization: Bearer $UP4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

PUT /heartbeats/{heartbeatID}/pause

scope heartbeat.write stable returns 200

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s -X PUT https://app.upfour.io/v1/heartbeats/<heartbeatID>/pause \
  -H "Authorization: Bearer $UP4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

GET /heartbeats/{heartbeatID}/pings

scope heartbeat.read stable returns 200

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s https://app.upfour.io/v1/heartbeats/<heartbeatID>/pings \
  -H "Authorization: Bearer $UP4_API_KEY"
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

POST /heartbeats/{heartbeatID}/resume

scope heartbeat.write stable returns 201

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s -X POST https://app.upfour.io/v1/heartbeats/<heartbeatID>/resume \
  -H "Authorization: Bearer $UP4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.

PUT /heartbeats/{heartbeatID}/resume

scope heartbeat.write stable returns 200

ParameterInTypeNotes
heartbeatIDrequired path uuid
curl -s -X PUT https://app.upfour.io/v1/heartbeats/<heartbeatID>/resume \
  -H "Authorization: Bearer $UP4_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Try it

Sent directly from your browser to https://app.upfour.io/v1. Mutating calls get an automatic Idempotency-Key.