{"openapi":"3.1.0","info":{"title":"Is the internet OK? API","version":"1","description":"Live status of the whole internet and an am-I-affected check. Public, no key, refreshed every 5 minutes. A public GitHub repo's check (every lockfile, 14 ecosystems) is in the v1 API: /v1/openapi.json."},"servers":[{"url":"https://istheinternetok.com"}],"paths":{"/status.json":{"get":{"operationId":"getStatus","summary":"Is the internet OK? The answer, a one-sentence summary, the services and the open incidents.","responses":{"200":{"description":"The status","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer"},"answer":{"enum":["yes","mostly","kind-of","no","unknown"],"description":"unknown: fewer than half of the status pages answered (Unclear.)"},"summary":{"type":"string"},"up":{"enum":["up","shaky","down","unknown"]},"safe":{"enum":["calm","caution","critical"]},"checkedAt":{"type":"string","format":"date-time"},"services":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"site":{"type":"string","description":"The company's domain."},"group":{"enum":["social","mail","work","video","games","shopping","ai","backbone","dev"],"description":"What the service is for, as the home page groups it. On 2026-10-25 the everyday group was split into social, mail, work and shopping, and Stripe moved from backbone to shopping; service ids did not change."},"pillar":{"type":"boolean","description":"A backbone service: one in a major outage takes a large part of the web with it, and the answer is no."},"state":{"enum":["operational","maintenance","degraded","partial","major","unknown"],"description":"What the company's own status page says."},"note":{"type":["string","null"]},"url":{"type":"string"},"probe":{"type":["object","null"],"description":"Our own checks, every minute from two regions (cdg1, iad1); null when the service is not probed. ok false: both regions failed the last 3 checks, the answer then counts it as degraded at most.","properties":{"ok":{"type":"boolean"},"since":{"type":"string","format":"date-time","description":"When it stopped answering, when ok is false"},"regions":{"type":"array","items":{"type":"string"}}}}}}},"incidents":{"type":"array","items":{"type":"object","description":"An incident in English; see /skill.md for every field.","properties":{"id":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"impact":{"type":"string"},"severity":{"enum":["critical","major","minor"]},"status":{"type":"string"},"exploited":{"type":"boolean"},"action":{"type":"object"},"affects":{"type":"array"},"url":{"type":"string"}}}}}}}}}}}},"/events.json":{"get":{"operationId":"eventsSince","summary":"What changed since a date, oldest first: incidents created, updated or resolved, and big services going down or coming back. Keep next and pass it as since next time.","parameters":[{"name":"since","in":"query","schema":{"type":"string","format":"date-time"},"description":"The next of the last answer; the last 7 days when left out"}],"responses":{"200":{"description":"The events, at most 200","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer"},"since":{"type":["string","null"]},"next":{"type":["string","null"],"description":"The since of the next call; null when nothing changed"},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Stable: the same event keeps its id"},"at":{"type":"string","format":"date-time"},"type":{"enum":["incident.created","incident.updated","incident.resolved","service.degraded","service.recovered"]},"title":{"type":"string"},"text":{"type":"string"},"url":{"type":"string"},"incident":{"type":"string"},"status":{"type":"string"},"severity":{"enum":["critical","major","minor"]},"exploited":{"type":"boolean"},"service":{"type":"string"},"state":{"enum":["operational","maintenance","degraded","partial","major","unknown"]},"products":{"type":"array","items":{"type":"string"}},"packages":{"type":"array","items":{"type":"string"},"description":"ecosystem:name"}}}}}}}}}}}},"/check.json":{"get":{"operationId":"checkStack","summary":"Am I affected? Packages and products in the query. A package with an exact version is checked against every known flaw (OSV.dev, CISA's exploited list); the incidents this site explains come first and also match ranges and products. 60 checks an hour per caller.","parameters":[{"name":"packages","in":"query","schema":{"type":"string"},"example":"npm:next@16.3.0,pypi:litellm@1.107.0","description":"ecosystem:name@version, comma separated; without an exact version only the incidents are compared"},{"name":"products","in":"query","schema":{"type":"string"},"example":"chrome,windows","description":"Product ids, compared with the incidents: chrome, firefox, safari, edge, windows, macos, ios, android, linux, office, whatsapp, zoom, plex, wordpress, php, nodejs, python, openssl, nginx, apache-httpd, ivanti-connect-secure, pan-os, fortimail, fortios, cisco-asa, gitlab, tidb-cloud"},{"name":"full","in":"query","schema":{"enum":["1"]},"description":"Also every flaw of every package (findings), minor ones included"}],"responses":{"200":{"$ref":"#/components/responses/Check"},"400":{"description":"A package that does not parse"},"429":{"$ref":"#/components/responses/Busy"},"503":{"$ref":"#/components/responses/Failed"}}},"post":{"operationId":"checkLockfile","summary":"Am I affected? A lockfile or manifest as the body (package.json, package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, composer.lock; with ?filename=, any of 30+ formats: Cargo.lock, go.mod, uv.lock, Gemfile.lock...), or JSON { packages, products, lockfile, filename, full }. 5 MB at most. Only names and versions reach the flaw database; nothing about who asked is stored.","parameters":[{"name":"filename","in":"query","schema":{"type":"string"},"example":"Cargo.lock","description":"The lockfile's name: reads it with the repo check's own readers, which also tell dev dependencies apart"},{"name":"full","in":"query","schema":{"enum":["1"]},"description":"Also every flaw of every package (findings)"}],"requestBody":{"content":{"text/plain":{"schema":{"type":"string"}},"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"$ref":"#/components/responses/Check"},"413":{"description":"A body over 5 MB"},"422":{"description":"A file it cannot read: the error says which it reads, and that a filename reads 30+ formats"},"429":{"$ref":"#/components/responses/Busy"},"503":{"$ref":"#/components/responses/Failed"}}}}},"components":{"responses":{"Check":{"description":"What in the stack is affected","content":{"application/json":{"schema":{"type":"object","properties":{"affected":{"type":"boolean","description":"An incident this site explains, or a serious known flaw (critical, high, exploited or malware), touches the stack"},"answer":{"enum":["yes","mostly","kind-of","no","unknown"],"description":"The site's scale, as for a repo: no = malware or exploited now, kind-of = a critical flaw, mostly = a serious one, yes = nothing that counts, unknown = no package with an exact version (or the flaw database failed)"},"summary":{"type":"string","description":"One sentence to repeat as it is; it says what was checked and how"},"covers":{"type":"object","description":"What each part of the stack is compared with","properties":{"incidents":{"type":"integer"},"packages":{"type":"string"},"products":{"type":"string"},"fullScan":{"type":"string","description":"Where a GitHub repo is checked, every lockfile read on GitHub"}}},"read":{"type":"object","properties":{"packages":{"type":"integer"},"products":{"type":"integer"},"exact":{"type":"integer","description":"Package versions checked against every known flaw"},"unversioned":{"type":"integer","description":"Packages without an exact version: compared with the incidents only"}}},"fixes":{"type":"array","description":"What to update first: the packages to update, to the version that fixes all their counted flaws when OSV names one","items":{"type":"object","properties":{"update":{"type":"string"},"ecosystem":{"type":"string"},"to":{"type":"string"},"because":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"fixedIn":{"type":"string"}}}},"advisories":{"type":"array","items":{"type":"string"}},"worst":{"enum":["malware","takeover","data-leak","impersonation","tampering","visitors","outage","weak-protection","other"]},"critical":{"type":"boolean"},"exploited":{"type":"boolean"}}}},"uncounted":{"type":"integer","description":"Minor flaws (and those in dev dependencies) left out of the answer"},"failed":{"const":true,"description":"The flaw database did not answer: only the incidents were checked"},"findings":{"type":"array","description":"With full: every flaw of every package","items":{"type":"object","properties":{"name":{"type":"string"},"ecosystem":{"type":"string"},"version":{"type":"string"},"advisory":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"severity":{"enum":["critical","high","moderate","low",null]},"impact":{"enum":["malware","takeover","data-leak","impersonation","tampering","visitors","outage","weak-protection","other"]},"exploited":{"type":"boolean"},"fixedIn":{"type":["string","null"]},"counts":{"type":"boolean"},"url":{"type":"string"}}}},"hits":{"type":"array","description":"The incidents this site explains that touch the stack, gravest first","items":{"type":"object","properties":{"verdict":{"enum":["affected","check"]},"name":{"type":"string"},"installed":{"type":["string","null"]},"range":{"type":["string","null"],"description":"The range sent instead of an exact version: check, since the installed version is unknown"},"fix":{"type":["string","null"]},"incident":{"type":"object","description":"An incident in English; see /skill.md for every field.","properties":{"id":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"impact":{"type":"string"},"severity":{"enum":["critical","major","minor"]},"status":{"type":"string"},"exploited":{"type":"boolean"},"action":{"type":"object"},"affects":{"type":"array"},"url":{"type":"string"}}}}}}}}}}},"Failed":{"description":"The flaw database did not answer: the incidents still answer (failed: true, answer unknown), the rest was not checked. Never read it as a green; Retry-After says when to try again","content":{"application/json":{"schema":{"type":"object","properties":{"affected":{"type":"boolean","description":"An incident this site explains, or a serious known flaw (critical, high, exploited or malware), touches the stack"},"answer":{"enum":["yes","mostly","kind-of","no","unknown"],"description":"The site's scale, as for a repo: no = malware or exploited now, kind-of = a critical flaw, mostly = a serious one, yes = nothing that counts, unknown = no package with an exact version (or the flaw database failed)"},"summary":{"type":"string","description":"One sentence to repeat as it is; it says what was checked and how"},"covers":{"type":"object","description":"What each part of the stack is compared with","properties":{"incidents":{"type":"integer"},"packages":{"type":"string"},"products":{"type":"string"},"fullScan":{"type":"string","description":"Where a GitHub repo is checked, every lockfile read on GitHub"}}},"read":{"type":"object","properties":{"packages":{"type":"integer"},"products":{"type":"integer"},"exact":{"type":"integer","description":"Package versions checked against every known flaw"},"unversioned":{"type":"integer","description":"Packages without an exact version: compared with the incidents only"}}},"fixes":{"type":"array","description":"What to update first: the packages to update, to the version that fixes all their counted flaws when OSV names one","items":{"type":"object","properties":{"update":{"type":"string"},"ecosystem":{"type":"string"},"to":{"type":"string"},"because":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"string"},"fixedIn":{"type":"string"}}}},"advisories":{"type":"array","items":{"type":"string"}},"worst":{"enum":["malware","takeover","data-leak","impersonation","tampering","visitors","outage","weak-protection","other"]},"critical":{"type":"boolean"},"exploited":{"type":"boolean"}}}},"uncounted":{"type":"integer","description":"Minor flaws (and those in dev dependencies) left out of the answer"},"failed":{"const":true,"description":"The flaw database did not answer: only the incidents were checked"},"findings":{"type":"array","description":"With full: every flaw of every package","items":{"type":"object","properties":{"name":{"type":"string"},"ecosystem":{"type":"string"},"version":{"type":"string"},"advisory":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"summary":{"type":"string"},"severity":{"enum":["critical","high","moderate","low",null]},"impact":{"enum":["malware","takeover","data-leak","impersonation","tampering","visitors","outage","weak-protection","other"]},"exploited":{"type":"boolean"},"fixedIn":{"type":["string","null"]},"counts":{"type":"boolean"},"url":{"type":"string"}}}},"hits":{"type":"array","description":"The incidents this site explains that touch the stack, gravest first","items":{"type":"object","properties":{"verdict":{"enum":["affected","check"]},"name":{"type":"string"},"installed":{"type":["string","null"]},"range":{"type":["string","null"],"description":"The range sent instead of an exact version: check, since the installed version is unknown"},"fix":{"type":["string","null"]},"incident":{"type":"object","description":"An incident in English; see /skill.md for every field.","properties":{"id":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"impact":{"type":"string"},"severity":{"enum":["critical","major","minor"]},"status":{"type":"string"},"exploited":{"type":"boolean"},"action":{"type":"object"},"affects":{"type":"array"},"url":{"type":"string"}}}}}}}}}}},"Busy":{"description":"More than 60 checks from this caller this hour; Retry-After says when to try again","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"problem":{"const":"busy"}}}}}}}}}