{
 "openapi": "3.1.0",
 "info": {
  "title": "O11y Watch API",
  "version": "1.0.0",
  "description": "Read-only static JSON describing observability vendor free tiers and pricing changes. No auth, no rate limit beyond the host."
 },
 "servers": [
  {
   "url": "https://o11y-watch.pages.dev"
  }
 ],
 "paths": {
  "/api/vendors.json": {
   "get": {
    "summary": "All vendors",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "vendors": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Vendor"
           }
          }
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/vendors/{id}.json": {
   "get": {
    "summary": "One vendor",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "vendor": {
           "$ref": "#/components/schemas/Vendor"
          }
         }
        }
       }
      }
     }
    }
   },
   "parameters": [
    {
     "name": "id",
     "in": "path",
     "required": true,
     "schema": {
      "type": "string",
      "enum": [
       "airbrake",
       "appsignal",
       "arize",
       "atatus",
       "statuspage",
       "axiom",
       "betterstack",
       "braintrust",
       "bugsink",
       "bugsnag",
       "checkly",
       "coralogix",
       "cronitor",
       "dash0",
       "datadog",
       "dynatrace",
       "elastic",
       "exceptionless",
       "firehydrant",
       "glitchtip",
       "grafana",
       "graylog",
       "groundcover",
       "healthchecks",
       "helicone",
       "honeybadger",
       "honeycomb",
       "hyperping",
       "ilert",
       "incidentio",
       "instatus",
       "laminar",
       "langfuse",
       "langsmith",
       "last9",
       "loggly",
       "logrocket",
       "logzio",
       "lunary",
       "mezmo",
       "middleware",
       "newrelic",
       "observe",
       "ohdear",
       "oneuptime",
       "openobserve",
       "openstatus",
       "opik",
       "pagerduty",
       "papertrail",
       "parseable",
       "pingdom",
       "portkey",
       "posthog",
       "raygun",
       "rollbar",
       "rootly",
       "scoutapm",
       "sematext",
       "sentry",
       "signoz",
       "site24x7",
       "splunk",
       "squadcast",
       "statuscake",
       "statusgator",
       "sumologic",
       "trackjs",
       "updown",
       "uptimerobot",
       "uptrace",
       "wandb",
       "zenduty"
      ]
     }
    }
   ]
  },
  "/api/changes.json": {
   "get": {
    "summary": "Change log",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "changes": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Change"
           }
          }
         }
        }
       }
      }
     }
    }
   }
  },
  "/api/categories.json": {
   "get": {
    "summary": "Categories with best free pick",
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "type": "object"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Vendor": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "category": {
      "type": "string",
      "enum": [
       "apm",
       "logs",
       "errors",
       "uptime",
       "incident",
       "llm",
       "product"
      ]
     },
     "type": {
      "type": "string"
     },
     "free_tier": {
      "type": "string",
      "enum": [
       "yes",
       "no",
       "unknown"
      ]
     },
     "free_plan": {
      "type": [
       "string",
       "null"
      ]
     },
     "free_tier_limits": {
      "type": [
       "string",
       "null"
      ]
     },
     "paid_from": {
      "type": "string"
     },
     "pricing_model": {
      "type": "string"
     },
     "card_required": {
      "type": "string"
     },
     "oss_self_host": {
      "type": "string"
     },
     "gotchas": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "confidence": {
      "type": "string",
      "enum": [
       "verified",
       "uncertain"
      ]
     },
     "source_url": {
      "type": "string",
      "format": "uri"
     },
     "checked": {
      "type": [
       "string",
       "null"
      ],
      "format": "date"
     },
     "page": {
      "type": "string"
     },
     "api": {
      "type": "string"
     },
     "changes": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Change"
      }
     }
    }
   },
   "Change": {
    "type": "object",
    "properties": {
     "date": {
      "type": "string",
      "format": "date"
     },
     "vendor": {
      "type": "string"
     },
     "type": {
      "type": "string"
     },
     "summary": {
      "type": "string"
     },
     "source": {
      "type": "string"
     }
    }
   }
  }
 }
}