Ionhour Docs

Checks API

Create, list, update, pause, and delete checks. Includes outbound check configuration.

List Checks

GET /checks

Returns a paginated list of checks in the workspace.

Query Parameters

ParameterTypeDescription
workspaceIdnumberFilter by workspace
projectIdnumberFilter by project
checkModestringFilter by mode: INBOUND or OUTBOUND
pagenumberPage number (default: 1)
limitnumberItems per page (default: 10)

Example

curl -H "Authorization: Bearer ionh_your_key" \
  "https://app.failsignal.com/api/checks?workspaceId=1&checkMode=INBOUND"

Get Check

GET /checks/:id

Returns a single check with its configuration. For outbound checks, includes the outbound config and latest probe state.

curl -H "Authorization: Bearer ionh_your_key" \
  https://app.failsignal.com/api/checks/123

Get Check by Token

GET /checks/token/:token

Returns a check by its ping token, including recent signals and dependencies.

Create Check

POST /checks

Inbound Check (Heartbeat)

curl -X POST https://app.failsignal.com/api/checks \
  -H "Authorization: Bearer ionh_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Nightly Backup",
    "projectId": 1,
    "intervalSeconds": 3600,
    "graceSeconds": 30,
    "checkMode": "INBOUND"
  }'

Outbound Check (HTTP Probe)

curl -X POST https://app.failsignal.com/api/checks \
  -H "Authorization: Bearer ionh_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "API Health",
    "projectId": 1,
    "intervalSeconds": 300,
    "graceSeconds": 15,
    "checkMode": "OUTBOUND",
    "url": "https://api.example.com/health",
    "checkType": "HTTP",
    "method": "GET",
    "expectedStatusMin": 200,
    "expectedStatusMax": 299,
    "timeoutMs": 5000,
    "failAfterConsecutive": 3,
    "resolveAfterConsecutiveSuccess": 2,
    "regions": ["us-east-1", "eu-west-1"]
  }'

Request Body

Core Fields

FieldTypeRequiredDescription
namestringYesCheck name (1–255 characters)
projectIdnumberYes*Project to associate with
dependencyIdnumberYes*Dependency to associate with (mutually exclusive with projectId)
intervalSecondsnumberYesProbe/ping interval (60–3,600 seconds)
graceSecondsnumberYesGrace period before alerting (5–60 seconds)
checkModestringNoINBOUND (default) or OUTBOUND
muteNotificationsbooleanNoSuppress alerts for this check (default: false)
dependencyIdsnumber[]NoCheck-based dependency IDs

* Exactly one of projectId or dependencyId is required.

Outbound-Specific Fields

Required when checkMode is OUTBOUND:

FieldTypeDefaultDescription
urlstringTarget URL (must be http:// or https://, max 2,048 chars)
checkTypestringHTTPHTTP, TCP, DNS, or ICMP
methodstringGETGET, HEAD, POST, PUT, or PATCH
customHeadersobjectCustom HTTP headers (max 10)
timeoutMsnumber8000Request timeout (1,000–15,000 ms)
expectedStatusMinnumber200Minimum acceptable status code (100–599)
expectedStatusMaxnumber399Maximum acceptable status code (100–599)
followRedirectsbooleantrueFollow HTTP redirects
maxRedirectsnumber3Maximum redirect hops (0–3)
blockHttpDowngradebooleantrueBlock HTTPS to HTTP redirects
failAfterConsecutivenumber3Consecutive failures before DOWN (1–10)
resolveAfterConsecutiveSuccessnumber2Consecutive successes before OK (1–10)
latencyWarnMsnumberLatency alert threshold in ms
sslExpiryWarnDaysnumber14SSL expiry warning threshold (1–365 days)
regionsstring[]Probe regions: us-east-1, eu-west-1, ap-southeast-1

Response

Returns the created check with a generated token for heartbeat pings.

Constraints

  • Inbound checks: minimum interval is 300 seconds (5 minutes).
  • Outbound checks cannot be associated with dependencies (must use projectId).
  • Check count limits are enforced per workspace based on your plan.
  • Outbound check limits are enforced separately.

Update Check

PATCH /checks/:id

Accepts the same fields as creation. Only include fields you want to change.

curl -X PATCH https://app.failsignal.com/api/checks/123 \
  -H "Authorization: Bearer ionh_your_key" \
  -H "Content-Type: application/json" \
  -d '{"graceSeconds": 45}'

Delete Check

DELETE /checks/:id

Soft-deletes the check. Associated signals are cleaned up and open incidents are resolved.

curl -X DELETE https://app.failsignal.com/api/checks/123 \
  -H "Authorization: Bearer ionh_your_key"

Pause Check

PUT /checks/:id/pause

Pauses the check. Paused checks don't trigger alerts or create incidents for missed signals.

curl -X PUT https://app.failsignal.com/api/checks/123/pause \
  -H "Authorization: Bearer ionh_your_key"

Resume Check

PUT /checks/:id/resume

Resumes a paused check. Monitoring begins again from the next expected interval.

curl -X PUT https://app.failsignal.com/api/checks/123/resume \
  -H "Authorization: Bearer ionh_your_key"

Transfer Check

PATCH /checks/:id/transfer

Moves a check to a different project within the same workspace.

curl -X PATCH https://app.failsignal.com/api/checks/123/transfer \
  -H "Authorization: Bearer ionh_your_key" \
  -H "Content-Type: application/json" \
  -d '{"projectId": 5}'

Check Badge

GET /checks/:id/badge

Returns a shields.io-style status badge. No authentication required.

Redirects to a colored badge based on the check's current status (green for OK, red for DOWN).

![Status](https://app.failsignal.com/api/checks/123/badge)

Outbound Check Endpoints

Get Outbound Config

GET /checks/:id/outbound

Returns the outbound configuration and latest probe state.

Update Outbound Config

PATCH /checks/:id/outbound

Updates the outbound check configuration (URL, headers, timeout, thresholds, regions).

Get Run History

GET /checks/:id/runs

Returns paginated probe run history.

ParameterTypeDescription
pagenumberPage number
limitnumberItems per page
startDateISO stringFilter runs after this date
endDateISO stringFilter runs before this date

Get Outbound Stats

GET /checks/:id/outbound-stats

Returns aggregated statistics (uptime percentage, average latency, P95 latency) for a time window (default: 24 hours).

Get Outbound Timeline

GET /checks/:id/outbound-timeline

Returns bucketed probe results over time (default: 5-minute buckets over 24 hours).