Free AI outage & price alerts

Get notified the moment an AI API goes down or recovers, a model changes price, or a retirement date is announced — in your browser or team chat. No sign-up, no email.

⌁RSSEverything in one feed, or per service: /feed.xml?service=openai/feed.xml →

Follow a single service

Want price & retirement alerts for one model? Open its page and click “Get free alerts”.

What you’ll receive

Outage / degraded

Not just “is the API reachable” but “do models actually answer”: official status, the vendor’s own API success rate on real traffic and our live test calls, every 2 minutes; confirmed twice to avoid false alarms.

Recovered

A follow-up when it’s back (re-checked every 2 minutes during an incident, usually delivered within 2–6 minutes), with how long it lasted. If you follow a single model, you also get a notice when that model stops / starts answering on the vendor’s own API.

Price changes

All 355 tracked models compared every 10 minutes; cuts and increases with percentages.

Deprecations & launches

Retirement dates, removals and new model launches.

How to get a webhook URL

Slack
  1. Go to api.slack.com/apps → Create New App → Incoming Webhooks → turn on.
  2. Click “Add New Webhook to Workspace”, pick a channel and copy the hooks.slack.com/services/… URL.
Discord
  1. Channel settings → Integrations → Webhooks → New Webhook.
  2. Click “Copy Webhook URL” and paste it above.
Microsoft Teams
  1. Recommended: channel “…” → Workflows → “Post to a channel when a webhook request is received”.
  2. Paste the generated URL (logic.azure.com / powerplatform.com). Legacy Incoming Webhook connector URLs (webhook.office.com) work too.
Google Chat
  1. Space name → Apps & integrations → Webhooks → Add webhook.
  2. Paste the chat.googleapis.com/v1/spaces/…/messages?key=…&token=… URL.
Telegram
  1. Create a bot with @BotFather, add it to your group and find the group’s chat_id (usually negative).
  2. Paste https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat_id>.
ntfy
  1. Subscribe to a hard-to-guess topic in the ntfy app, e.g. modelbank-a8f3k2.
  2. Paste https://ntfy.sh/modelbank-a8f3k2. If the topic needs an access token, put it under Advanced → Auth token.
Feishu / Lark
  1. In a group: Settings → Bots → Add Bot → Custom Bot.
  2. Copy the webhook URL. Security: keyword “ModelBank”, or enable signature verification and put the secret under Advanced → Signing secret. Do not enable the IP allowlist.
DingTalk
  1. Group settings → Bots → Add → Custom (Webhook).
  2. Use keyword “ModelBank” or “Sign” security — put the secret under Advanced → Signing secret.
WeCom
  1. Group → “…” → Add group bot → New bot, then copy the webhook URL.
Bark (iPhone)
  1. Install Bark, copy the push URL from its home screen (https://api.day.app/<key>/…) and paste it above.
Cursor · n8n · Zapier · your own service
  1. Any https URL works. We POST JSON (see “Custom webhooks” below).
  2. If the receiver requires authentication, open Advanced: the Auth token is sent as Authorization: Bearer <token>; put other headers (e.g. X-Api-Key) under Other headers, one per line.
  3. Cursor automations: paste https://api2.cursor.sh/automations/webhook/… and put the crsr_… key in Auth token.
  4. If the receiver only accepts Slack / Discord / Teams payloads or plain text, change the Payload format.

Custom webhooks: payload, auth & signatures

Any https URL that isn’t a chat platform is a custom webhook: we POST the JSON below (or Slack / Discord / Teams-compatible payloads or plain text — see Payload format). Any 2xx counts as delivered; redirects are not followed, the timeout is 10 s, and private / reserved addresses are refused.

{
  "source": "modelbank.ai",
  "event": "outage",
  "title": "OpenAI is down",
  "text": "Real-traffic success rate 41% in the last 5 min…",
  "markdown": "…",
  "url": "https://modelbank.ai/status/openai",
  "level": "bad",
  "data": {
    "type": "outage",
    "service": "openai"
  },
  "ts": "2026-11-09T08:00:00.000Z"
}

Request headers

Content-Typeapplication/json (text/plain for the plain-text format)
User-AgentModelBank-Webhooks/2.0
X-ModelBank-EventEvent type: outage / recovered / price / deprecation / new / radar / test …
X-ModelBank-DeliveryUnique UUID per delivery — use it to de-duplicate
X-ModelBank-TimestampWith a signing secret: send time (Unix seconds)
X-ModelBank-SignatureWith a signing secret: sha256= hex HMAC-SHA256(secret, "<timestamp>.<raw body>")
AuthorizationWith an auth token: Bearer <token> (or the full Basic … value you entered)

The receiver requires authentication (401 / 403)

Paste the key under Advanced → Auth token and we send Authorization: Bearer (values starting with “Bearer ”, “Basic ” or a full “Authorization: …” line are used as-is). Other headers such as X-Api-Key go under Other headers, one “Name: value” per line. All credentials are stored AES-256-GCM encrypted and only shown masked afterwards; user:pass@ in the URL becomes Basic auth.

If the test fails you see the receiver’s reason (e.g. “requires authentication” or “token rejected”). If the receiver is just temporarily down you can “Save anyway” and fix it later with Edit.

Verifying signatures

Set a random string only you know under Advanced → Signing secret and every request carries X-ModelBank-Timestamp and X-ModelBank-Signature. Compute over the raw body (don’t re-serialise the JSON) and reject timestamps older than 5 minutes to stop replays. For Feishu / DingTalk the secret is used with each platform’s own signing scheme.

// Node.js / Cloudflare Workers / Next.js route — verify X-ModelBank-Signature
import crypto from 'node:crypto'

export function verify(rawBody, headers, secret) {
  const ts = headers['x-modelbank-timestamp']
  const sig = headers['x-modelbank-signature'] || ''
  if (!ts || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false // reject replays older than 5 min
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(ts + '.' + rawBody).digest('hex')
  return sig.length === expected.length && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(expected))
}
# Python (Flask / FastAPI) — use the raw request body, not re-serialised JSON
import hmac, hashlib, time

def verify(raw_body: bytes, headers, secret: str) -> bool:
    ts = headers.get('X-ModelBank-Timestamp', '')
    sig = headers.get('X-ModelBank-Signature', '')
    if not ts or abs(time.time() - int(ts)) > 300:
        return False
    mac = hmac.new(secret.encode(), ts.encode() + b'.' + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(sig, 'sha256=' + mac)

Recent alerts

Gemini Omni 1.2 Flash is answering againGoogle AI Studio's own API is back to 100% success, recovered at 00:44 UTC — the outage lasted about 18 min42m agoFireworks has recoveredBack to normal at 00:40 UTC — issue lasted about 3h 8m44m agoGemini Omni 1.2 Flash is failing right nowGoogle AI Studio's own API: 0% of real requests succeeded in the last 5 min (62.5% in 30 min), detected at 00:26 UTC. We will tell you when it recovers.1h agoQwen2.5 7B Instruct was removed from the catalogThe model has not been publicly offered for 24 hours. It may still be served by the vendor directly — check the official announcement and anything that depends on it.1h agoOpenAI / ChatGPT is downOutage detected at 22:50 UTC2h agoGemini Omni 1.2 Flash is answering againGoogle AI Studio's own API is back to 100% success, recovered at 21:40 UTC — the outage lasted about 42 min3h agoFireworks is degradedDegraded performance detected at 21:32 UTC3h agoCopilot has recoveredBack to normal at 21:08 UTC — issue lasted about 10 min4h agoCopilot is downOutage detected at 20:58 UTC4h agoGemini Omni 1.2 Flash is failing right nowGoogle AI Studio's own API: 25% of real requests succeeded in the last 5 min (50% in 30 min), detected at 20:58 UTC. We will tell you when it recovers.4h agoOpenAI / ChatGPT has recoveredBack to normal at 20:52 UTC — issue lasted about 6 min4h agoOpenAI / ChatGPT is degradedDegraded performance detected at 20:46 UTC4h agoGemini Omni 1.2 Flash is answering againGoogle AI Studio's own API is back to 100% success, recovered at 20:44 UTC — the outage lasted about 24 min4h agoGemini Omni 1.2 Flash is failing right nowGoogle AI Studio's own API: 0% of real requests succeeded in the last 5 min (40% in 30 min), detected at 20:20 UTC. We will tell you when it recovers.5h agoGemini Omni 1.2 Flash is answering againGoogle AI Studio's own API is back to 100% success, recovered at 19:44 UTC — the outage lasted about 14 min5h agoGemini Omni 1.2 Flash is failing right nowGoogle AI Studio's own API: 0% of real requests succeeded in the last 5 min (25% in 30 min), detected at 19:30 UTC. We will tell you when it recovers.5h agoLovable.dev has recoveredBack to normal at 19:16 UTC — issue lasted about 2h 2m6h agoGemini Omni 1.2 Flash is answering againGoogle AI Studio's own API is back to 100% success, recovered at 19:04 UTC — the outage lasted about 32 min6h agoGemini Omni 1.2 Flash is failing right nowGoogle AI Studio's own API: 0% of real requests succeeded in the last 5 min (50% in 30 min), detected at 18:32 UTC. We will tell you when it recovers.6h agoMiniMax M2.5 price cut 10%Input $0.30 → $0.27 (-10%)8h ago

FAQ

Is it really free?

Yes. Browser push and webhooks cost us nothing per message, so we can keep it free.

Does it work on iPhone?

On iOS 16.4+: in Safari tap Share → Add to Home Screen, open the site from the icon, then enable notifications. Or just use a team-chat webhook.

How do I stop alerts?

Browser: open “Get alerts” → Turn off, or disable notifications for this site in browser settings. Webhooks: click Remove in the panel, or delete the bot.

Will it spam me?

Status changes must be confirmed twice, and bursts of alerts are merged into one digest.

My webhook needs a token (e.g. Cursor). Where does it go?

Paste the URL under Team chat, open Advanced and put the key in Auth token — it is sent as Authorization: Bearer <key>. Click Test first, then Add.

The test failed — now what?

The panel shows the receiver’s reason (authentication required, URL gone, keyword mismatch…). Fix it and test again, or “Save anyway” if the receiver is temporarily down and use Edit later. Channels that keep failing are paused automatically and come back after a successful test.

How do I manage alerts on another device?

Subscriptions live in this browser. Log in and open My account → Alerts: this browser’s subscriptions are attached to your account and can be edited, tested and removed anywhere. Email alerts always have an unsubscribe link.

4 active channels · 682 alerts sent so far.