API & MCP

API Reference

Query the live status of thousands of services over a read-only REST API. Bearer-authenticated JSON, available on the Starter plan and up.

The Statusfield REST API (v2) gives you read-only, programmatic access to the same 7,000+ vendor status catalog that powers your dashboard and alerts. Every endpoint returns JSON, is authenticated with a Bearer token, and is served from the base URL https://statusfield.com.

Use it to check whether a service is degraded, list the monitors in your workspace, or pull a live snapshot of your monitored catalog services currently down.

Paid Plan Required

The API is available on the Starter plan and up. It is not available on the Basic plan — Basic-plan keys return 403 plan_restriction. Upgrade your plan to get started.

Authentication

All endpoints require an API key passed as a Bearer token:

Authorization: Bearer sf_<64-hex-chars>
1

Create a Key

Go to Settings → Integrations → API Keys and create a new key. The key is shown only once at creation time, so copy it somewhere safe. You can revoke a key from the same screen at any time.

2

Make Your First Call

Pass the key in the Authorization header on every request:

curl -H "Authorization: Bearer sf_your_key" \
  "https://statusfield.com/api/v2/services?search=github&limit=5"

Keys are scoped to the workspace that created them. Rate limits, quotas, and available features all follow that workspace's plan.

Rate Limits & Quota

Limits are enforced per workspace per minute, with a per-second burst ceiling. The X-RateLimit-Limit and X-RateLimit-Remaining headers are returned on every response. When you exceed a limit you get 429 rate_limited along with a Retry-After (seconds) header.

PlanRequests / minuteRequests / secondRequests / UTC month
Basic——No API access
Starter305100,000
Pro6010500,000
Team120202,000,000

The monthly quota is enforced per workspace and tracked in the database, so it survives restarts and is accurate across instances. For plans with a finite cap, responses include X-Quota-Limit, X-Quota-Remaining, and X-Quota-Reset (ISO timestamp of the next UTC-month reset) headers. Exceeding the cap returns 429 quota_exceeded. The monthly counter resets at the start of each UTC month.

Check the Headers

Read X-RateLimit-Remaining to pace short bursts and X-Quota-Remaining to track your monthly budget. On a 429, honor Retry-After for burst limits; for quota_exceeded, wait until X-Quota-Reset or review your plan.

Error Shape

All errors follow the same JSON shape:

{ "error": "<code>", "message": "<human-readable description>" }
HTTP Statuserror codeMeaning
400bad_requestMissing or invalid parameter (e.g. slug)
401unauthorizedMissing Authorization header or invalid key format
401invalid_keyAPI key not found
403bannedAccount suspended or inactive
403expiredTemporary access expired
403plan_restrictionFeature not available on current plan
404not_foundResource does not exist
405method_not_allowedWrong HTTP method
429rate_limitedRate limit exceeded; see Retry-After
429quota_exceededMonthly request quota exceeded

List Services

GET /api/v2/services

List the Statusfield service catalog with optional filtering and cursor-based pagination.

Query parameters:

ParameterTypeDefaultMaxDescription
categorystring——Filter by category code (e.g. cloud_computing)
searchstring——Full-text search on service name
cursorstring——Opaque cursor from a previous response
limitnumber50100Number of results per page

Pass pagination.nextCursor from a response as the cursor on your next request to page through results. Keep going while pagination.hasMore is true.

Response 200:

{
  "data": [
    {
      "name": "GitHub",
      "slug": "github",
      "categoryCode": "developer_tools",
      "category": "Developer Tools",
      "iconUrl": "https://statusfield.com/logos/github.png",
      "lastCheckedAt": "2026-06-04T12:00:00.000Z"
    }
  ],
  "pagination": {
    "nextCursor": "eyJpZCI6IjEyMyJ9",
    "hasMore": true
  }
}

Example:

curl -H "Authorization: Bearer sf_your_key" \
  "https://statusfield.com/api/v2/services?search=github&limit=5"

Get a Service

GET /api/v2/services/{slug}

Get the current status of a service your workspace actively monitors and its components. A catalog match alone does not grant status access.

Path parameter: slug — the service's URL slug (e.g. github).

Response 200:

{
  "data": {
    "name": "GitHub",
    "slug": "github",
    "categoryCode": "developer_tools",
    "category": "Developer Tools",
    "iconUrl": "https://statusfield.com/logos/github.png",
    "lastCheckedAt": "2026-06-04T12:00:00.000Z",
    "statusCode": "OPERATIONAL",
    "status": "Operational",
    "components": [
      {
        "name": "GitHub Actions",
        "statusCode": "DEGRADED_PERFORMANCE",
        "status": "Degraded Performance",
        "updatedAt": "2026-06-04T11:45:00.000Z"
      }
    ]
  }
}

Returns 400 bad_request if the slug is missing or invalid, 403 service_not_monitored if the workspace does not actively monitor it, and 404 not_found if the service does not exist.

Example:

curl -H "Authorization: Bearer sf_your_key" \
  "https://statusfield.com/api/v2/services/github"

List Monitors

GET /api/v2/monitors

List all monitors belonging to the authenticated workspace.

Response 200:

{
  "data": [
    {
      "id": "mon_abc123",
      "createdAt": "2026-01-15T09:00:00.000Z",
      "isCustom": false,
      "type": "catalog",
      "expiresAt": null,
      "service": {
        "name": "GitHub",
        "slug": "github",
        "categoryCode": "developer_tools",
        "category": "Developer Tools",
        "iconUrl": "https://statusfield.com/logos/github.png",
        "lastCheckedAt": "2026-06-04T12:00:00.000Z"
      },
      "component": {
        "name": "GitHub Actions",
        "statusCode": "OPERATIONAL",
        "status": "Operational",
        "updatedAt": "2026-06-04T11:45:00.000Z"
      }
    }
  ]
}

Each monitor carries a type describing its kind and an isCustom flag:

typeisCustomMeaning
catalogfalseA monitor on a Statusfield catalog (3rd-party) service
httptrueYour custom URL / server-response (uptime) monitor
ssltrueYour custom SSL-certificate-expiry monitor
domaintrueYour custom domain-registration-expiry monitor
customtrueA custom monitor with no more specific kind

expiresAt is the upcoming expiry date (ISO 8601) for ssl / domain monitors, and null for all other types.

Query parameters:

ParameterTypeDefaultDescription
filterstring—outages returns only monitors whose component is currently in a non-operational state

Example:

curl -H "Authorization: Bearer sf_your_key" \
  "https://statusfield.com/api/v2/monitors"
 
# Only my monitors that are currently down:
curl -H "Authorization: Bearer sf_your_key" \
  "https://statusfield.com/api/v2/monitors?filter=outages"

List Outages

GET /api/v2/outages

List actively monitored catalog services in your workspace currently experiencing an outage or degradation. For workspace-private custom monitors, use /api/v2/monitors?filter=outages.

Query parameters:

ParameterTypeDefaultMaxDescription
limitnumber100200Number of outages to return

Response 200:

{
  "data": [
    {
      "name": "GitHub",
      "slug": "github",
      "categoryCode": "developer_tools",
      "category": "Developer Tools",
      "iconUrl": "https://statusfield.com/logos/github.png",
      "lastCheckedAt": "2026-06-04T12:00:00.000Z",
      "statusCode": "MAJOR_OUTAGE",
      "status": "Major Outage",
      "updatedAt": "2026-06-04T11:45:00.000Z"
    }
  ]
}

A non-operational service is anything not in OPERATIONAL, RE_ROUTED, or PARTIALLY_RE_ROUTED. Custom (workspace-private) monitors are never included. The list is a bounded snapshot — there is no pagination.

Example:

curl -H "Authorization: Bearer sf_your_key" \
  "https://statusfield.com/api/v2/outages"

Using the Same Key from AI Tools

Your sf_ key also works with the Statusfield MCP server, so AI tools like Claude can query live status directly. See the MCP Server guide to connect it.

For the current per-plan request and quota limits, see Pricing.