{
  "openapi": "3.1.0",
  "info": {
    "title": "NOFire AI content",
    "version": "1.0.0",
    "summary": "The pages nofire.ai publishes, addressable by slug.",
    "description": "A read interface over everything nofire.ai publishes: comparisons, alternatives, SRE reference pages, the glossary, articles and customer stories. Every slug is enumerated, so a caller knows the valid arguments before it makes a request.\n\nEvery operation is a GET and is safe to retry. There is no authentication and no rate limit on reads.\n\nThe product and platform APIs are documented separately at https://docs.nofire.ai. To reach a person, use https://www.nofire.ai/book-a-demo or sales@nofire.ai.",
    "contact": {
      "name": "NOFire AI",
      "email": "sales@nofire.ai",
      "url": "https://www.nofire.ai/contact-us"
    },
    "termsOfService": "https://www.nofire.ai/terms"
  },
  "servers": [
    {
      "url": "https://www.nofire.ai",
      "description": "Production"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Discovery",
      "description": "Start here: the indexes that list everything else."
    },
    {
      "name": "Comparisons",
      "description": "Two tools, compared head to head."
    },
    {
      "name": "Alternatives",
      "description": "What teams move to when they leave a tool."
    },
    {
      "name": "SRE reference",
      "description": "How one reliability concept works and is measured."
    },
    {
      "name": "Glossary",
      "description": "Short definitions for the category's vocabulary."
    },
    {
      "name": "Blog",
      "description": "Signed, dated engineering writing."
    },
    {
      "name": "Customers",
      "description": "Named teams and what changed for them."
    },
    {
      "name": "Closed",
      "description": "Paths that exist but are not a public interface."
    }
  ],
  "paths": {
    "/llms.txt": {
      "get": {
        "operationId": "getLlmsIndex",
        "summary": "The annotated index of everything this site publishes",
        "description": "Plain-text index following the llms.txt convention. Opens with the jobs this site can answer, then lists every page with a one-line description. Start here.",
        "tags": [
          "Discovery"
        ],
        "responses": {
          "200": {
            "description": "The index.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "operationId": "getSitemap",
        "summary": "Every indexable URL, with last-modified dates",
        "description": "Standard sitemap. Use it when you need the complete URL set with freshness, rather than the annotated subset in llms.txt.",
        "tags": [
          "Discovery"
        ],
        "responses": {
          "200": {
            "description": "The sitemap.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/robots.txt": {
      "get": {
        "operationId": "getRobots",
        "summary": "Crawl rules and content signals",
        "description": "Which agents may crawl, and what they may do with what they fetch. Carries a Content-Signal line declaring search, AI input and AI training all permitted.",
        "tags": [
          "Discovery"
        ],
        "responses": {
          "200": {
            "description": "The robots file.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/comparisons": {
      "get": {
        "operationId": "listComparisons",
        "summary": "Index of the comparisons family",
        "description": "Head-to-head comparisons of the tools engineering teams evaluate for root cause analysis, incident response and deployment risk. Each page answers one question, with the same table on every one. Each entry leads with the question that page answers.",
        "tags": [
          "Comparisons"
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/comparisons/{slug}": {
      "get": {
        "operationId": "getComparison",
        "summary": "Fetch one head-to-head comparison of two tools",
        "description": "Returns the page for one slug in the comparisons family. Every page opens with the question it answers and a self-contained answer paragraph, and carries TechArticle and FAQPage JSON-LD.",
        "tags": [
          "Comparisons"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Which page to fetch. 2 available.",
            "schema": {
              "type": "string",
              "enum": [
                "nofire-ai-vs-resolve-ai",
                "resolve-ai-vs-traversal"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No page at that slug. The body is a short HTML document linking the sitemap, llms.txt and the documentation index.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/alternatives": {
      "get": {
        "operationId": "listAlternatives",
        "summary": "Index of the alternatives family",
        "description": "One page per tool teams tell us they are moving off: what drives the search, what changes in the move, and where the tool they already have is still the better answer. Each entry leads with the question that page answers.",
        "tags": [
          "Alternatives"
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/alternatives/{slug}": {
      "get": {
        "operationId": "getAlternative",
        "summary": "Fetch one page on what teams move to when they leave a given tool",
        "description": "Returns the page for one slug in the alternatives family. Every page opens with the question it answers and a self-contained answer paragraph, and carries TechArticle and FAQPage JSON-LD.",
        "tags": [
          "Alternatives"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Which page to fetch. 5 available.",
            "schema": {
              "type": "string",
              "enum": [
                "backstage",
                "compass",
                "cortex",
                "resolve-ai",
                "roadie"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No page at that slug. The body is a short HTML document linking the sitemap, llms.txt and the documentation index.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sre": {
      "get": {
        "operationId": "listSreReferences",
        "summary": "Index of the sre reference family",
        "description": "One page per concept behind AI SRE: what it is, how it works, how it is measured, and what people get wrong about it. Longer than a glossary entry and built to be quoted, with the approaches compared on every page. Each entry leads with the question that page answers.",
        "tags": [
          "SRE reference"
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sre/{slug}": {
      "get": {
        "operationId": "getSreReference",
        "summary": "Fetch one reference page on one site-reliability concept",
        "description": "Returns the page for one slug in the sre reference family. Every page opens with the question it answers and a self-contained answer paragraph, and carries TechArticle and FAQPage JSON-LD.",
        "tags": [
          "SRE reference"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Which page to fetch. 4 available.",
            "schema": {
              "type": "string",
              "enum": [
                "alert-triage",
                "blast-radius",
                "causal-ai",
                "root-cause-analysis"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No page at that slug. The body is a short HTML document linking the sitemap, llms.txt and the documentation index.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/tools": {
      "get": {
        "operationId": "listToolLists",
        "summary": "Index of the tool lists family",
        "description": "One list per question a buyer actually types. Every list names the real field rather than only the vendors we compare well against, and every list says where each tool is blind, ours included. Each entry leads with the question that page answers.",
        "tags": [
          "Tool lists"
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/tools/{slug}": {
      "get": {
        "operationId": "getToolList",
        "summary": "Fetch one ranked list of the tools in a category",
        "description": "Returns the page for one slug in the tool lists family. Every page opens with the question it answers and a self-contained answer paragraph, and carries TechArticle and FAQPage JSON-LD.",
        "tags": [
          "Tool lists"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Which page to fetch. 4 available.",
            "schema": {
              "type": "string",
              "enum": [
                "best-ai-sre-tools",
                "best-automated-root-cause-analysis-tools",
                "best-incident-investigation-tools",
                "tools-that-record-what-ai-agents-do-in-production"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No page at that slug. The body is a short HTML document linking the sitemap, llms.txt and the documentation index.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/glossary": {
      "get": {
        "operationId": "listGlossaryTerms",
        "summary": "Index of defined terms",
        "description": "Every term this site defines, grouped by the job it belongs to.",
        "tags": [
          "Glossary"
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/glossary/{slug}": {
      "get": {
        "operationId": "getGlossaryTerm",
        "summary": "Fetch the definition of one term",
        "description": "A definition of one term in the category. Shorter than the /sre reference page on the same concept: the glossary defines, /sre answers how it works and how it is measured.",
        "tags": [
          "Glossary"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Which term to fetch. 28 available.",
            "schema": {
              "type": "string",
              "enum": [
                "502-503-errors",
                "ai-agent-governance",
                "alert-fatigue",
                "blast-radius-analysis",
                "causal-vs-correlation-rca",
                "change-failure-rate",
                "context-and-control-model",
                "dora-metrics",
                "fix-oomkilled",
                "incident-postmortem-template",
                "kubernetes-probe-failures",
                "observability-vs-monitoring",
                "pod-stuck-pending",
                "policy-as-code",
                "post-incident-review",
                "postgresql-deadlock",
                "proactive-reliability",
                "production-context-graph",
                "production-reliability-mental-model",
                "reduce-mttr",
                "root-cause-analysis-tools",
                "service-catalog",
                "what-is-a-microvm",
                "what-is-agentic-ai",
                "what-is-an-ai-sre",
                "what-is-causal-ai",
                "what-is-kubernetes",
                "what-is-site-reliability-engineering"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No page at that slug. The body is a short HTML document linking the sitemap, llms.txt and the documentation index.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/blog/{slug}": {
      "get": {
        "operationId": "getBlogPost",
        "summary": "Fetch one article",
        "description": "Engineering and reliability writing, each post signed and dated. Use llms.txt to pick one: it carries the summary for every post.",
        "tags": [
          "Blog"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Which post to fetch. 49 published.",
            "schema": {
              "type": "string",
              "enum": [
                "From-DevOps-To-AIOps-To-Full-Context-Embedded-SRE",
                "How-We-Built-a-Production-Ready-GraphRAG-for-AI-Root-Cause-Analysis-Using-PostgreSQL",
                "ITS-arm64-escape",
                "Shift-Reliability-Left-Turning-Operational-Knowledge-into-a-Superpower",
                "The-Search-for-Prevention-Why-Modern-Systems-Need-a-New-Reliability-Model",
                "The-World-Before-Rising-Complexity-and-Breaking-Promises",
                "Urunc-Integration-with-Kubernetes-Agent-Sandbox",
                "Why-95-of-Enterprise-AI-Fails",
                "alert-fatigue-reduce-noise",
                "aws-extended-native-support",
                "crashloopbackoff-more-than-just-a-bad-deployment",
                "design-for-breach",
                "five-reasons-rcas-delays",
                "how-opentelemetry-kubernetes-slo-ai-redefine-incident-resolution",
                "how-our-agentic-AI-incident-response-team-works",
                "incident-response-vs-incident-prevention",
                "introducing-kafka-poison-pills-and-lag-root-caused",
                "introducing-workflows-always-on-agents-for-production",
                "kafka-stall-across-a-hop",
                "nofire-ai-and-grafana-irm-resolve-incidents-faster",
                "nofire-cli-introduction",
                "nofire-mcp-server-giving-ai-agents-production-context",
                "nofire-recognised-gartner-market-guide-ai-sre-tooling-2026",
                "production-reliability-why-ai-sre-tools-get-it-wrong",
                "saas-incident-management-challenge",
                "sre-archetypes-and-the-role-of-AI",
                "the-context-and-control-model",
                "the-failing-tools-why-observability-aiops-monitoring-hit-a-wall",
                "the-sandboxing-manifesto",
                "tight-enough-to-move-fast-deep-enough-to-matter",
                "vibe-coding-how-we-lost-ownership-of-production",
                "welcoming-alexandros-sapranidis",
                "welcoming-anastasia-mallikopoulou",
                "welcoming-artemis-leonardou",
                "welcoming-charalampos-mainas",
                "welcoming-george-skoumas",
                "welcoming-konstantinos-papazafeiropoulos",
                "welcoming-maria-gkoutha",
                "welcoming-maria-rafaela-gkeka",
                "welcoming-panagiotis-mavrikos",
                "welcoming-stelios-charmpalis",
                "what-ai-adoption-really-means-for-reliability-engineering",
                "what-observability-data-shows-in-2025",
                "who-audits-the-ai-agent",
                "why-genai-alone-wont-fix-incident-response",
                "why-observability-needs-causality",
                "why-oncall-teams-needs-causal-ai",
                "why-reliability-has-become-impossible",
                "your-service-catalog-is-already-wrong"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No page at that slug. The body is a short HTML document linking the sitemap, llms.txt and the documentation index.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/customers/{slug}": {
      "get": {
        "operationId": "getCustomerStory",
        "summary": "Fetch one customer story",
        "description": "What one team changed, with the incidents behind it. Named companies with their own numbers, not composites.",
        "tags": [
          "Customers"
        ],
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Which story to fetch. 3 published.",
            "schema": {
              "type": "string",
              "enum": [
                "ergeon",
                "harborlab",
                "learnworlds"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The page, server-rendered. Headings, links and JSON-LD are present in the HTML.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "No page at that slug. The body is a short HTML document linking the sitemap, llms.txt and the documentation index.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/{path}": {
      "get": {
        "operationId": "getApiPath",
        "summary": "Not a public interface",
        "description": "Everything under /api is this site's own form and telemetry handling, not a published API. It is disallowed in robots.txt and is documented here only so a caller that probes it can recognise the answer. Product and platform APIs live at https://docs.nofire.ai.",
        "tags": [
          "Closed"
        ],
        "parameters": [
          {
            "name": "path",
            "in": "path",
            "required": true,
            "description": "Any path under /api.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "No public endpoint at that path.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "The path exists but does not accept this method.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "ok",
          "error_code",
          "message",
          "resolution_hint"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "enum": [
              false
            ],
            "description": "Always false on an error response."
          },
          "error_code": {
            "type": "string",
            "enum": [
              "rate_limited",
              "not_configured",
              "payload_too_large",
              "bad_request",
              "invalid_email",
              "personal_email",
              "upstream_error",
              "not_found",
              "method_not_allowed"
            ],
            "description": "Stable machine-readable code. Branch on this, not on the message."
          },
          "message": {
            "type": "string",
            "description": "What went wrong, in one sentence."
          },
          "resolution_hint": {
            "type": "string",
            "description": "What the caller should do next."
          }
        }
      }
    }
  }
}