# Service Status Checker - Is It Down? Status Page & Outage API (`neverempty/service-status-checker`) Actor

For AI agents: when a call to GitHub, OpenAI, AWS, Stripe or 400 other services fails, check what its official status page says now - operational, degraded, outage or maintenance, with active incidents and affected components. Monitoring mode returns only changes.

- **URL**: https://apify.com/neverempty/service-status-checker.md
- **Developed by:** [NeverEmpty](https://apify.com/neverempty) (community)
- **Categories:** Developer tools, AI, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.85 / 1,000 service status returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Service Status Checker - Is It Down? Status Page & Outage API

**When your AI agent or script gets an error from GitHub, OpenAI, AWS, Twilio or another service, ask this before you debug your own code: what does that service's official status page say right now?** One call, one row per service: `officialStatus` (`operational`, `degraded`, `partial_outage`, `major_outage` or `maintenance`), the page's own wording, the active incidents with their latest update, the components that are not operational, and maintenance in progress or scheduled.

It reports what the provider's **official status page** says. It does not test the service itself. A status page can lag behind a real outage or never mention a small one, so `isOperational: true` means "the status page reports no problem", not "verified working". When a status page cannot be read, the row says so and gives no status; it never falls back to "operational".

### Example

Input:

```json
{ "services": ["api.openai.com", "Twilio", "GitHub"] }
```

Output (shortened, one row per service):

```json
[
 {
  "query": "api.openai.com",
  "service": "OpenAI",
  "status": "ok",
  "officialStatus": "operational",
  "officialStatusDescription": "All Systems Operational",
  "isOperational": true,
  "activeIncidentCount": 0,
  "activeIncidents": [],
  "affectedComponents": [],
  "upcomingMaintenanceCount": 0,
  "statusPageUrl": "https://status.openai.com/",
  "readVia": "https://status.openai.com/api/v2/summary.json",
  "checkedAt": "2026-09-25T06:38:08.272Z"
 },
 {
  "query": "Twilio",
  "service": "Twilio",
  "status": "ok",
  "officialStatus": "degraded",
  "officialStatusDescription": "Partially Degraded Service",
  "isOperational": false,
  "activeIncidentCount": 11,
  "activeIncidents": [
   {
    "id": "4vqcpc3zd4mq",
    "title": "User Authentication Identity Gateway API Failure Increase and High Latency for Verizon in United States",
    "impact": "minor",
    "status": "investigating",
    "startedAt": "2026-09-25T06:34:12.462Z",
    "updatedAt": "2026-09-25T06:34:12.570Z",
    "latestUpdate": "Twilio customers may be experiencing User Authentication Identity Gateway API failure increase and Gateway API high l...",
    "latestUpdateAt": "2026-09-25T06:34:12.567Z",
    "affectedComponents": [
     "Lookup SIM Swap",
     "Legacy Identity MatchAndAttributes"
    ],
    "url": "https://stspg.io/jww5m96l8ng4"
   }
  ],
  "affectedComponents": [
   {
    "name": "Bulk Export",
    "status": "degraded_performance",
    "group": ""
   },
   {
    "name": "SMS Long Code, North America",
    "status": "under_maintenance",
    "group": ""
   },
   {
    "name": "SMS Short Code, North America",
    "status": "degraded_performance",
    "group": ""
   }
  ],
  "upcomingMaintenanceCount": 31,
  "statusPageUrl": "https://status.twilio.com/",
  "readVia": "https://status.twilio.com/index.json + https://status.twilio.com/",
  "checkedAt": "2026-09-25T06:38:08.354Z"
 },
 {
  "query": "GitHub",
  "service": "GitHub",
  "status": "ok",
  "officialStatus": "operational",
  "officialStatusDescription": "All Systems Operational",
  "isOperational": true,
  "activeIncidentCount": 0,
  "activeIncidents": [],
  "affectedComponents": [],
  "upcomingMaintenanceCount": 0,
  "statusPageUrl": "https://www.githubstatus.com/",
  "readVia": "https://www.githubstatus.com/index.json + https://www.githubstatus.com/",
  "checkedAt": "2026-09-25T06:38:08.410Z"
 }
]
```

Leave the input empty and the example service OpenAI is checked (the row says `isExampleInput: true`).

### What you can put in

- a **service name**: `GitHub`, `OpenAI`, `Claude`, `Stripe`, `AWS`, `Google Cloud`, `Vercel` (exact name, a known alias, or a prefix that matches only one service)
- the **domain or API host you called**: `api.openai.com`, `api.github.com`, `hooks.slack.com` (matched to the service that owns the domain)
- a **status page URL**: `https://www.githubstatus.com`

A domain that is not in the verified list is looked up at the usual places (`status.<domain>`, `<name>status.com`, `<name>-status.com`, `status.<name>.com`, `status.<name>.io`) and used only when a status page this Actor can read answers there (`source: "discovered"`).

### Services in the verified list (407 status pages, all read on 2026-09-25)

1Password, Ably, Affirm, Afterpay, Airbyte, Aircall, Airtable, Airwallex, Aiven, Akamai, Alloy, Amplitude, Anaconda, Anthropic (Claude), api.video, Apify, Apigee, Apollo.io, AppCenter, Appcues, Appwrite, Asana, AssemblyAI, Atlassian, Atlassian Statuspage, Autodesk, Avalara, AWS, Axiom, Bandwidth, Basecamp, Baseten, Better Stack, BigCommerce, Bird (MessageBird), Bitbucket, Bitly, Bitrise, Bland AI, Bolt, Box, Braintrust, Branch, Braze, Brevo, Brex, Browserless, BrowserStack, Bubble, Buffer, Bugsnag, Buildkite, Bunny.net, Calendly, Canva, Cartesia, Cerebras, Chainguard, Chargebee, Chroma, Chromatic, CircleCI, Clearbit, Clerk, ClickHouse Cloud, ClickSend, Close, Cloudflare, Cloudinary, Cloudsmith, Coda, Codecov, Codemagic, CodeSandbox, Cohere, Coinbase, Confluence, Confluent, Contentful, Contentsquare, Convex, Coralogix, CoreWeave, Courier, Cribl, Crowdin, Cursor, Cypress Cloud, D-ID, Daily, Dashlane, Databricks, Datadog, Datadog EU, dbt Cloud, Deepgram, DeepSeek, Deno Deploy, Depot, Descope, Descript, Dialpad, DigitalOcean, Discord, Discourse, DNSimple, Docker, Doppler, Drata, Dropbox, Dropbox Sign, Dwolla, Dynatrace, Earthly, EasyPost, Elastic Cloud, ElevenLabs, Embrace, Epic Games, Exa, Expensify, Expo, Fastmail, Fern, Figma, Filestack, Firebase, Firecrawl, Fireworks AI, Flagsmith, Flutterwave, Fly.io, Frame.io, Framer, FreshBooks, Front, Frontegg, FullStory, FusionAuth, Gandi, Gemini (exchange), Ghost, GitBook, GitGuardian, GitHub, GitLab, Gitpod (Ona), Gladia, Gladly, GoCardless, GoDaddy, Gong, Google Cloud, Google Workspace, Gorgias, Grafana Cloud, Grammarly, Groq, Gusto, HackerOne, HashiCorp (HCP Terraform), Hashnode, Hasura, Heap, Helicone, Help Scout, Heroku, Hex, HeyGen, Honeycomb, Hookdeck, Hootsuite, Hostinger, Hotjar, HubSpot, Hugging Face, IFTTT, imgix, incident.io, Increase, InfluxData, Inngest, Intercom (Fin), JFrog, Jina AI, Jira, Jotform, Jumio, Kinsta, Kit (ConvertKit), Klarna, Klaviyo, Knock, Kong Konnect, Kraken, Kustomer, Lambda Labs, LangSmith, LastPass, LaunchDarkly, Let's Encrypt, Lightstep, Linear, Linode (Akamai Cloud), Lithic, Liveblocks, LiveKit, Loggly, LogRocket, Logz.io, Lokalise, Loom, Loops, Lovable, Lucid, Luma AI, Lumigo, MagicBell, MailerLite, Mailgun, Mailjet, Mailosaur, Make, Mapbox, Marqeta, Medium, Meilisearch, Mend, Mercury, Metabase, Mezmo, Microsoft Azure, Mintlify, Miro, Mixpanel, Modal, Modern Treasury, Mollie, Monday.com, MongoDB Atlas, Mural, Mux, Namespace, Neon, Netlify, New Relic, ngrok, Nhost, Notion, Novu, npm, Nx Cloud, OneSignal, Onfido, OpenAI, Opsgenie, Optimizely, Paddle, PandaDoc, Pantheon, Paperspace, Papertrail Logs, Patreon, Payoneer, Paystack, Pendo, Percy, Perplexity, Persona, Phrase, Pinecone, Pipedream, Plaid, PlanetScale, Plausible, Plivo, Portkey, Postman, Postscript, Prisma, Prismic, Productboard, PubNub, Pusher, PyPI, Qdrant, QuickBooks, Raycast, ReadMe, Recharge, Recurly, Reddit, Render, Resend, Retell AI, Retool, Rev.ai, RevenueCat, Rippling, Roblox, Rollbar, RubyGems, Runway, Salesloft, SambaNova, Sanity, Sauce Labs, Scaleway, Secureframe, Segment, Semgrep, SentinelOne, Sentry, SerpApi, Shippo, ShipStation, Shopify, Sinch, SingleStore, Sketch, Slack, Smartling, Smartproxy (Decodo), Smartsheet, Snowflake, Snyk, Socket, Socure, SonarCloud, Sourcegraph, SparkPost, Speakeasy, Speechmatics, Spline, Split, Sprout Social, Square, Squarespace, Stability AI, Statsig, StatusCake, Stoplight, Stream, Stripe, Stytch, Sumo Logic, Sumsub, Supabase, SurveyMonkey, Svix, Synthesia, Synthflow, Tabnine, Tailscale, Talkdesk, Tavily, TaxJar, Telnyx, Temporal Cloud, Textmagic, Todoist, Together AI, Transifex, Travis CI, Trello, Trigger.dev, Turso, Twilio, Twingate, Twitch, Tyk, Typeform, Unit, Uploadcare, Upstash, Userpilot, v0, Vanta, Vapi, Vectara, Vercel, Veriff, Vimeo, Vimeo OTT, Warp, Wasabi, Webflow, Weights & Biases, Windsurf, Wise, Wistia, Wix, Wiz, WorkOS, Writer, Xata, Xendit, Xero, xMatters, Yotpo, Zapier, Zed, Zilliz, Zoom, ZoomInfo, Zuplo, Zyte.

Also known, but their status pages have no machine-readable feed this Actor can read yet (you get a free row with the status page URL): Adobe, Adyen, Agora, Algolia, Auth0, Backblaze, Bitwarden, Cal.com, ConfigCat, Crisp, DatoCMS, Deel, Evernote, FireHydrant, Fivetran, Freshping, Freshworks (Freshdesk), Gumroad, Hetzner, Highlight, IBM Cloud, Jasper, JetBrains, Langfuse, Lemon Squeezy, LiteLLM, Mailchimp, Midjourney, Obsidian, Okta, OpenRouter, Outreach, PagerDuty, Pingdom, Pipedrive, Pitch, Plunk, Postmark, Railway, Razorpay, Redis Cloud, Rime, RingCentral, Salesforce, ScrapingBee, StackBlitz, Storyblok, Unity, UptimeRobot, Vast.ai, VWO, Webex, Whimsical, Zendesk.

### How each status page is read

| Status page type | Pages | What is read |
|---|---|---|
| Atlassian Statuspage | 272 | `/index.json` of the page (the page's own JSON), or the page itself if that is not allowed |
| incident.io | 73 | `/api/v2/summary.json`, plus `/proxy/<host>` for upcoming maintenance |
| Better Stack | 28 | `/index.json` |
| Instatus | 17 | `/summary.json` and `/v2/components.json` |
| status.io | 10 | the public status API `api.status.io/1.0/status/<page id>` |
| Google Cloud, Google Workspace, Firebase | 3 | the official dashboards' `incidents.json` (open incidents only) |
| AWS | 1 | the AWS Health Dashboard's current events |
| Heroku | 1 | its public status API |
| Microsoft Azure | 1 | the official Azure status RSS feed |
| Slack | 1 | its public status API |

**robots.txt is followed for every request.** Atlassian Statuspage pages disallow `/api/` for all crawlers, so this Actor never reads their `/api/v2/summary.json`; it reads `/index.json` (not under `/api/`) or the page. If a site's robots.txt cannot be read (5xx or no answer), nothing else is requested from it (RFC 9309). A bot check (CAPTCHA or JavaScript challenge) is never solved or retried.

### Status values

| officialStatus | Meaning (from the page's own indicator) |
|---|---|
| `operational` | The page reports no problem |
| `degraded` | Minor issue or degraded performance (Statuspage "minor") |
| `partial_outage` | Part of the service is down (Statuspage "major"). AWS and Google Cloud report any open regional outage this way |
| `major_outage` | Major outage (Statuspage "critical") |
| `maintenance` | Under maintenance |

Components use `operational`, `degraded_performance`, `partial_outage`, `major_outage`, `under_maintenance`. Some Statuspage pages list only component groups in their JSON; then `affectedComponents` names the group, and each incident's `affectedComponents` names the exact components.

### Monitoring mode (only changes)

Set `onlyChanges: true` (and optionally a `watchName`) and run it on a schedule. The first run returns every service once (`changeType: "first_check"`). After that a service comes back only when its status page changed (`changeType: "changed"`), with `changes` such as `official status operational -> degraded`, `incident started: ...`, `incident updated: ...`, `component: API is partial_outage` or `new scheduled maintenance: ...`, and `previousOfficialStatus`. A service that was read but did not change is not returned and costs only the check fee. A change is reported only for parts that were read in full both times: a status page that could not be read, or was only partly read (for example its JSON but not the page), never changes what is remembered for the missing parts and is never reported as a change. For upcoming maintenance only a newly scheduled window counts as a change (windows that pass or are cancelled do not).

### Input

| Field | Default | What it does |
|---|---|---|
| `services` | (example: OpenAI) | Service names, domains or status page URLs |
| `onlyChanges` | false | Monitoring mode: return a service only when its status page changed |
| `watchName` | empty | Separate memory per watch (setting it turns monitoring on) |
| `resetMonitoringState` | false | Forget this watch's memory first |
| `includeAllComponents` | false | Also return every component with its status (`components`) |
| `includeUpcomingMaintenance` | true | Return scheduled maintenance (up to 20, count in `upcomingMaintenanceCount`) |
| `discoverUnknownDomains` | true | Look for status pages of domains not in the list |
| `maxServices` | 200 | Services per run (up to 500) |
| `useProxy` | true | Retry through a proxy on 403 or 429 (never for a bot check) |

### Output columns

`query`, `service`, `statusPageUrl`, `statusPageProvider`, `source` (directory or discovered), `status` (row status: `ok` or why not), `officialStatus`, `officialStatusDescription`, `isOperational`, `hasActiveIncident`, `activeIncidentCount`, `incidentListComplete` (false only when an Atlassian Statuspage page could be read as JSON but not as a page; its JSON lists only the 10 most recent incidents, so an older unresolved incident may be missing), `activeIncidents` (id, title, impact, status, startedAt, updatedAt, latestUpdate, latestUpdateAt, affectedComponents, url), `affectedComponents` (name, status, group), `componentCount`, `components`, `activeMaintenances`, `upcomingMaintenances` (title, status, startsAt, endsAt, window, affectedComponents, url), `upcomingMaintenanceCount`, `pageUpdatedAt`, `readVia` (the exact URL that was read), `checkedAt`, `changeType`, `changes`, `previousOfficialStatus`, `isExampleInput`, `suggestions`, `note`.

Free rows (`status` other than `ok`): `not-found` (with `suggestions`), `unsupported` (status page known, no readable feed), `duplicate` (the same status page was already in your list under another name, for example GitHub and github.com), `unreadable`, `robots-disallowed`, `bot-check`, `bad-input`, `budget-reached`, `not-checked` (over `maxServices`, or the run was about to reach its timeout).

### Measured

All numbers below were measured on 2026-09-25.

- **Verified list**: all 407 status pages were read with this Actor's own reading code: 407 of 407 answered. In one production run of all 407 services (256 MB memory) 406 came back in 145 seconds; one page did not answer in time and came back as a free `unreadable` row.
- **From Apify's servers**: 16 status endpoints (Statuspage, incident.io, Better Stack, Instatus, status.io, Google Cloud, AWS, Azure, Slack, Heroku) answered 48 of 48 direct requests, 16 of 16 through the datacenter proxy and 16 of 16 through the residential proxy.
- **Against the live pages in a browser** (10 services, same minute as a production run): on the 6 Atlassian Statuspage pages the unresolved incidents and the non-operational components matched the page exactly (Twilio 11 incidents and 14 components, Kraken 7 and 9, Supabase, Xero, Snowflake, GitHub). On the 4 others (Stripe, Cloudflare, OpenAI, Hugging Face) every incident title was on the page and the operational wording matched.
- **Why the page is read too**: an Atlassian Statuspage page's JSON lists only its 10 most recent incidents. Twilio's page showed 11 unresolved incidents while the JSON had 2, and Supabase's page showed an unresolved incident open since 2026-08-14 that was not in the JSON at all.
- **Speed and cost**: a run for 1 to 3 services took about 3 seconds and about $0.0001 of platform usage at 256 MB.

### Pricing

Pay per event:

- **Run start**: $0.004 once per run that read at least one status page. Not charged when nothing could be read.
- **Service status returned**: $0.0055 per `ok` row ($5.50 per 1,000).
- **Unchanged service check** (monitoring mode only): $0.0015 per service that was read and had not changed ($1.50 per 1,000). No row is returned for it.

These are the free-plan prices; paid Apify plans pay less per event. One call for one service costs $0.0095. Monitoring 10 services every 5 minutes for 30 days (8,640 runs) costs about $34.56 in start fees plus $1.50 per 1,000 unchanged checks (about $129.60 if nothing ever changes), plus $0.0055 for each change returned.

Rows that say a service was not found, is not supported, could not be read, or was stopped by your run's charge limit are free. If the run's maximum total charge has no room for the start fee plus one row, nothing more is charged.

### Use it from an AI agent (MCP)

Add it to your agent through the Apify MCP server (`https://mcp.apify.com`) and call it with one service per call, for example `{"services": ["api.openai.com"]}`, when a request to that service fails.

### Limits

- It reports the official status page, not a live test. `operational` means "not reported".
- 407 status pages are in the verified list; others are found only when they sit at a usual location and are one of the five supported page types.
- Custom-built status pages (Salesforce, Okta, Zendesk, Mailchimp, Auth0, IBM Cloud and the others listed above) are not read.
- Incidents and maintenance lists are capped at 20 per row (the counts are complete).
- Monitoring memory is per watch. Do not run the same watch twice at the same moment: both runs can return (and charge for) the same change, and they can overwrite each other's memory (Apify key-value stores have no atomic update).
- A run stops starting new services 30 seconds before its timeout and says how many were not checked; they are not charged.

### Support

Found a status page that is read wrongly, or a service you want added? Open an issue on the Issues tab with the service name and its status page URL.

# Actor input Schema

## `services` (type: `array`):

One per line: a service name (GitHub, OpenAI, Stripe), a domain or API host you call (api.openai.com, github.com), or a status page URL (https://www.githubstatus.com). Names are matched against a list of 407 official status pages that were read and verified on 2026-09-25 (exact name, a known alias, or a unique prefix). A domain that is not in the list is looked up at the usual status page locations (status.<domain>, <name>status.com, <name>-status.com and a few more) and used only if a status page this Actor can read answers there. Duplicates are checked once. If this is empty, the example service OpenAI is checked and every row says so in isExampleInput.

## `onlyChanges` (type: `boolean`):

Off = every service comes back with its current official status. On = the Actor remembers what each status page said and, on later runs, returns a service only when something changed: the overall status, an incident started, was updated or ended, a component changed, a maintenance started or ended, or a new maintenance was scheduled. The first run returns every service once (changeType first_check). A service that was read but did not change is not returned and costs only the small check fee. Status pages that could not be read never change what is remembered.

## `watchName` (type: `string`):

Optional. A name for this watch, so two schedules that check the same service keep separate memories. Setting a watch name turns monitoring mode on. Letters, digits, - and \_ are kept; up to 60 characters.

## `resetMonitoringState` (type: `boolean`):

Clears the memory of this watch (the watch name above, or the default watch) before the run, so every service is returned once again as first_check.

## `includeAllComponents` (type: `boolean`):

Off = only the components that are not operational are returned (affectedComponents), plus the total count. On = the full component list with each component's status and group is also returned in components.

## `includeUpcomingMaintenance` (type: `boolean`):

Return the scheduled maintenance windows the status page announces (up to 20 per service, with the total in upcomingMaintenanceCount). Scheduled items whose end time has already passed are not called upcoming. For incident.io pages this needs one extra request. If the list could not be read, upcomingMaintenances is null rather than empty.

## `discoverUnknownDomains` (type: `boolean`):

On = for a domain that is not in the verified list, try the usual status page locations and use one only if its type is recognised (Atlassian Statuspage, incident.io, Instatus, Better Stack or status.io) and its status can actually be read. Off = such a domain comes back as a free not-found row.

## `maxServices` (type: `integer`):

Services after this many are not checked (a free row says how many). Up to 500.

## `useProxy` (type: `boolean`):

Every status page is requested directly first, which worked from Apify on every attempt measured on 2026-09-25 (48 of 48). If a page answers 403 or 429, the request is retried through an Apify datacenter proxy and then a residential proxy. A bot check (CAPTCHA or JavaScript challenge) is never retried or solved; that service comes back as a free bot-check row.

## Actor input object example

```json
{
  "services": [
    "OpenAI",
    "GitHub",
    "api.cloudflare.com"
  ],
  "onlyChanges": false,
  "resetMonitoringState": false,
  "includeAllComponents": false,
  "includeUpcomingMaintenance": true,
  "discoverUnknownDomains": true,
  "maxServices": 200,
  "useProxy": true
}
```

# Actor output Schema

## `results` (type: `string`):

One row per service: what its official status page says right now (officialStatus operational, degraded, partial_outage, major_outage or maintenance, and the page's own wording), active incidents with their latest update and affected components, components that are not operational, maintenance in progress and upcoming, and the status page URL. In monitoring mode only services whose status page changed, with the list of changes. Services that could not be matched or read come back as free rows that say why.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "services": [
        "OpenAI",
        "GitHub",
        "api.cloudflare.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("neverempty/service-status-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "services": [
        "OpenAI",
        "GitHub",
        "api.cloudflare.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("neverempty/service-status-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "services": [
    "OpenAI",
    "GitHub",
    "api.cloudflare.com"
  ]
}' |
apify call neverempty/service-status-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,neverempty/service-status-checker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xvon1gaA6Wn0JJKau/builds/L3vXFJLF4tFFlnrge/openapi.json
