SYS.API_REFERENCE()

Cycle Status API.

Read-only endpoints for retrieving the current status of the Cycle platform. All endpoints return JSON and can be called without authentication.

API.BASICS()

Basics.

The Status API is a read-only, unauthenticated JSON endpoint. Responses reflect the same data rendered on this page, aggregated across every public Cycle core. All responses are cached for 60 seconds with a further 90 second stale-while-revalidate window, and support conditional requests via ETag.

// BASE_URL
https://status.cycle.io
// AUTH
None required
// FORMAT
application/json
API.ENDPOINTS()

Endpoints.

GET
/api/v1/status

Returns the overall platform status and per-core breakdowns with service-level detail.

// bash
curl https://status.cycle.io/api/v1/status
// RESPONSE_FIELDS
data.platform.statusstring

Overall platform status. One of online, upgrading, degraded, partial-outage, offline.

data.platform.availability_percentnumber

Current mean availability across all monitored services, 0–100.

data.cores[]array

One entry per public Cycle core.

data.cores[].namestring

Human-readable name of the core.

data.cores[].statusstring

Aggregate status of this core. Same enum as platform.status minus partial-outage.

data.cores[].availability_percentnumber

Current mean availability across the services in this core, 0–100.

data.cores[].services[]array

Services running in this core.

data.cores[].services[].namestring

Service identifier (e.g. portal, public-api).

data.cores[].services[].statusstring

Service status. One of online, upgrading, degraded, offline.

data.cores[].services[].percent_onlinenumber

Percentage of instances currently reporting healthy, 0–100.

data.cores[].services[].percent_upgradingnumber

Percentage of instances currently mid-upgrade, 0–100.

data.cores[].services[].corestring

Name of the core this service belongs to. Matches the parent core's name.

// EXAMPLE_RESPONSE
// json
{
  "data": {
    "platform": {
      "status": "online",
      "availability_percent": 99.87,
    },
    "cores": [
      {
        "name": "North America",
        "status": "online",
        "availability_percent": 100,
        "services": [
          {
            "name": "portal",
            "percent_online": 100,
            "percent_upgrading": 0,
            "status": "online",
            "core": "North America"
          },
          {
            "name": "public-api",
            "percent_online": 100,
            "percent_upgrading": 0,
            "status": "online",
            "core": "North America"
          }
        ]
      },
      {
        "name": "Europe",
        "status": "degraded",
        "availability_percent": 98.5,
        "services": [
          {
            "name": "portal",
            "percent_online": 100,
            "percent_upgrading": 0,
            "status": "online",
            "core": "Europe"
          },
          {
            "name": "dns",
            "percent_online": 75,
            "percent_upgrading": 0,
            "status": "degraded",
            "core": "Europe"
          }
        ]
      }
    ]
  }
}
API.STATUS_VALUES()

Status Values.

Both the platform status and each service status use enumerated string values. Clients should treat unknown values as a soft error and fall back to the nearest known neighbor.

"online"
// SCOPE: platform, core, service

Fully operational.

"upgrading"
// SCOPE: platform, core, service

A rollout is underway. Instances may briefly restart.

"degraded"
// SCOPE: platform, core, service

One or more instances are unhealthy but the unit is still serving traffic.

"offline"
// SCOPE: platform, core, service

All instances are unhealthy or unreachable.

"partial-outage"
// SCOPE: platform only

A mix of offline and degraded services across cores.

API.CACHING()

Caching.

The endpoint sets Cache-Control: public, max-age=60, stale-while-revalidate=90 and an ETag on every response. Clients polling the endpoint should send the last-seen ETag in If-None-Match to receive a 304 when nothing has changed.

// bash
curl -I https://status.cycle.io/api/v1/status
# HTTP/2 200
# etag: "a3f1..."
# cache-control: public, max-age=60, stale-while-revalidate=90

curl -H 'If-None-Match: "a3f1..."' https://status.cycle.io/api/v1/status
# HTTP/2 304
Cookies

Quick thing about cookies.

Anonymous session metrics run by default so we can see if the site works. Analytics lets us see how you move through the product, including session replay. Marketing lets us personalize follow-ups and retargeting. Change what's on anytime.