{
  "openapi": "3.0.3",
  "info": {
    "title": "olud.ai Intelligence API",
    "version": "1.0.0",
    "description": "The graph behind olud.ai: 10,000+ open-source AI projects rebuilt every morning, 180+ models with price per million tokens, and open-source alternatives to 129 commercial products.\n\nUse it to answer questions a repository list cannot: is this dependency still maintained, what changed licence, which model fits this budget and context window, what is emerging right now.\n\nEvery response carries an `attribution` field. Maintenance scores are published with their four components — never as a single opaque number.",
    "contact": {
      "name": "olud.ai",
      "url": "https://olud.ai/connect.html"
    },
    "termsOfService": "https://olud.ai/terms/"
  },
  "servers": [
    {
      "url": "https://olud.ai/api/v1",
      "description": "Production"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "tags": [
    {
      "name": "Projects",
      "description": "The 10,000+ tracked open-source AI projects."
    },
    {
      "name": "Models",
      "description": "Models with pricing, context window and modality."
    },
    {
      "name": "Discovery",
      "description": "What is emerging, and what replaces a paid product."
    },
    {
      "name": "Service",
      "description": "Status of the graph."
    }
  ],
  "paths": {
    "/meta": {
      "get": {
        "tags": [
          "Service"
        ],
        "operationId": "getMeta",
        "security": [],
        "summary": "Graph status — no API key needed",
        "description": "When the graph was last built and how many projects it holds. The only endpoint that works without a key; use it as a health check.",
        "responses": {
          "200": {
            "description": "Status.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "version": {
                          "type": "string"
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true
                        },
                        "counts": {
                          "type": "object",
                          "properties": {
                            "projects": {
                              "type": "integer",
                              "example": 10142
                            }
                          }
                        },
                        "endpoints": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "docs": {
                          "type": "string",
                          "format": "uri"
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/search": {
      "get": {
        "tags": [
          "Projects"
        ],
        "operationId": "searchProjects",
        "summary": "Search projects by name, topic or purpose",
        "description": "Free-text search across the catalogue. Matches on exact name first, then prefix, then substring, then description; a matching GitHub topic adds to the score. Use it to turn a package or product name into a tracked project.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "What to look for: a name, a topic, or a task — \"ocr\", \"text to speech\", \"vector database\".",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "vector database"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "How many results.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 15
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "example": "ollama-ollama",
                            "description": "Stable identifier, also the page slug."
                          },
                          "name": {
                            "type": "string",
                            "example": "ollama"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "example": "https://github.com/ollama/ollama"
                          },
                          "desc": {
                            "type": "string",
                            "nullable": true
                          },
                          "stars": {
                            "type": "integer",
                            "nullable": true
                          },
                          "lang": {
                            "type": "string",
                            "nullable": true,
                            "description": "Primary language on GitHub."
                          },
                          "license": {
                            "type": "string",
                            "nullable": true,
                            "example": "MIT"
                          },
                          "health": {
                            "type": "integer",
                            "nullable": true,
                            "description": "Maintenance score out of 100. Absent when the project has not been scored."
                          },
                          "momentum": {
                            "type": "integer",
                            "nullable": true,
                            "description": "Stars gained over the last 7 days."
                          },
                          "trend": {
                            "type": "string",
                            "nullable": true,
                            "enum": [
                              "accelerating",
                              "steady",
                              "quiet",
                              null
                            ]
                          },
                          "vertical": {
                            "type": "string",
                            "nullable": true
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        },
                        "total": {
                          "type": "integer",
                          "description": "Matches before the limit was applied."
                        },
                        "q": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          }
        }
      }
    },
    "/projects": {
      "get": {
        "tags": [
          "Projects"
        ],
        "operationId": "listProjects",
        "summary": "List and filter projects",
        "description": "The catalogue, filterable and sortable. Combine filters freely; they are applied before sorting and paging.",
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "description": "Exact primary language, lowercase.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "python"
          },
          {
            "name": "license",
            "in": "query",
            "description": "Substring match on the licence identifier.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "mit"
          },
          {
            "name": "vertical",
            "in": "query",
            "description": "Exact vertical.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "healthcare"
          },
          {
            "name": "health_min",
            "in": "query",
            "description": "Keep projects scoring at least this out of 100. Unscored projects are excluded.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Ordering, descending.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "stars",
                "health",
                "momentum",
                "recent"
              ],
              "default": "stars"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Page size.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Rows to skip.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "example": "ollama-ollama",
                            "description": "Stable identifier, also the page slug."
                          },
                          "name": {
                            "type": "string",
                            "example": "ollama"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "example": "https://github.com/ollama/ollama"
                          },
                          "desc": {
                            "type": "string",
                            "nullable": true
                          },
                          "stars": {
                            "type": "integer",
                            "nullable": true
                          },
                          "lang": {
                            "type": "string",
                            "nullable": true,
                            "description": "Primary language on GitHub."
                          },
                          "license": {
                            "type": "string",
                            "nullable": true,
                            "example": "MIT"
                          },
                          "health": {
                            "type": "integer",
                            "nullable": true,
                            "description": "Maintenance score out of 100. Absent when the project has not been scored."
                          },
                          "momentum": {
                            "type": "integer",
                            "nullable": true,
                            "description": "Stars gained over the last 7 days."
                          },
                          "trend": {
                            "type": "string",
                            "nullable": true,
                            "enum": [
                              "accelerating",
                              "steady",
                              "quiet",
                              null
                            ]
                          },
                          "vertical": {
                            "type": "string",
                            "nullable": true
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        },
                        "total": {
                          "type": "integer"
                        },
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "sort": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          }
        }
      }
    },
    "/project/{id}": {
      "get": {
        "tags": [
          "Projects"
        ],
        "operationId": "getProject",
        "summary": "One project, in full",
        "description": "The complete record: stars, forks, licence, topics, the maintenance score broken into its four components, stars gained over 1 and 7 days, recent releases, and the page on olud.ai.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Slug (`ollama-ollama`) or GitHub pair (`ollama/ollama`).",
            "schema": {
              "type": "string"
            },
            "example": "ollama-ollama"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "example": "ollama-ollama",
                          "description": "Stable identifier, also the page slug."
                        },
                        "name": {
                          "type": "string",
                          "example": "ollama"
                        },
                        "url": {
                          "type": "string",
                          "format": "uri",
                          "example": "https://github.com/ollama/ollama"
                        },
                        "desc": {
                          "type": "string",
                          "nullable": true
                        },
                        "stars": {
                          "type": "integer",
                          "nullable": true
                        },
                        "lang": {
                          "type": "string",
                          "nullable": true,
                          "description": "Primary language on GitHub."
                        },
                        "license": {
                          "type": "string",
                          "nullable": true,
                          "example": "MIT"
                        },
                        "health": {
                          "type": "object",
                          "nullable": true,
                          "description": "Score and its four components.",
                          "properties": {
                            "score": {
                              "type": "integer"
                            },
                            "label": {
                              "type": "string"
                            },
                            "why": {
                              "type": "string"
                            },
                            "activity": {
                              "type": "integer",
                              "description": "out of 30"
                            },
                            "momentum": {
                              "type": "integer",
                              "description": "out of 20"
                            },
                            "community": {
                              "type": "integer",
                              "description": "out of 30"
                            },
                            "maintenance": {
                              "type": "integer",
                              "description": "out of 20"
                            },
                            "checked": {
                              "type": "string"
                            }
                          }
                        },
                        "momentum": {
                          "type": "integer",
                          "nullable": true,
                          "description": "Stars gained over the last 7 days."
                        },
                        "trend": {
                          "type": "string",
                          "nullable": true,
                          "enum": [
                            "accelerating",
                            "steady",
                            "quiet",
                            null
                          ]
                        },
                        "vertical": {
                          "type": "string",
                          "nullable": true
                        },
                        "owner": {
                          "type": "string"
                        },
                        "forks": {
                          "type": "integer",
                          "nullable": true
                        },
                        "topics": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        },
                        "created": {
                          "type": "string",
                          "nullable": true
                        },
                        "pushed": {
                          "type": "string",
                          "nullable": true
                        },
                        "page": {
                          "type": "string",
                          "nullable": true,
                          "description": "Path of the project page on the site."
                        },
                        "velocity": {
                          "type": "object",
                          "nullable": true,
                          "properties": {
                            "stars_1d": {
                              "type": "integer"
                            },
                            "stars_7d": {
                              "type": "integer"
                            }
                          }
                        },
                        "releases": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "tag": {
                                "type": "string"
                              },
                              "date": {
                                "type": "string"
                              },
                              "level": {
                                "type": "string"
                              },
                              "url": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/emerging": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "listEmerging",
        "summary": "Healthy, accelerating, still little known",
        "description": "Projects our morning scan flags as emerging: good maintenance, rising velocity, low notoriety. Pro and Org receive today's detections as soon as they are built; Free and Dev receive the previous day's index — the `meta.freshness` field says which.",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "How many results.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "example": "ollama-ollama",
                            "description": "Stable identifier, also the page slug."
                          },
                          "name": {
                            "type": "string",
                            "example": "ollama"
                          },
                          "url": {
                            "type": "string",
                            "format": "uri",
                            "example": "https://github.com/ollama/ollama"
                          },
                          "desc": {
                            "type": "string",
                            "nullable": true
                          },
                          "stars": {
                            "type": "integer",
                            "nullable": true
                          },
                          "lang": {
                            "type": "string",
                            "nullable": true,
                            "description": "Primary language on GitHub."
                          },
                          "license": {
                            "type": "string",
                            "nullable": true,
                            "example": "MIT"
                          },
                          "health": {
                            "type": "integer",
                            "nullable": true,
                            "description": "Maintenance score out of 100. Absent when the project has not been scored."
                          },
                          "momentum": {
                            "type": "integer",
                            "nullable": true,
                            "description": "Stars gained over the last 7 days."
                          },
                          "trend": {
                            "type": "string",
                            "nullable": true,
                            "enum": [
                              "accelerating",
                              "steady",
                              "quiet",
                              null
                            ]
                          },
                          "vertical": {
                            "type": "string",
                            "nullable": true
                          },
                          "signals": {
                            "type": "object",
                            "nullable": true
                          },
                          "detected": {
                            "type": "string",
                            "nullable": true,
                            "description": "First appearance in the index."
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        },
                        "freshness": {
                          "type": "string",
                          "enum": [
                            "realtime",
                            "previous-day"
                          ]
                        },
                        "criteria": {
                          "type": "string",
                          "nullable": true
                        },
                        "note": {
                          "type": "string",
                          "nullable": true
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          }
        }
      }
    },
    "/alternatives/{product}": {
      "get": {
        "tags": [
          "Discovery"
        ],
        "operationId": "getAlternatives",
        "summary": "Open-source alternatives to a commercial product",
        "description": "Give a paid product — Midjourney, GitHub Copilot, Notion, Zapier — and get the open-source projects that replace it, with licence and repository.",
        "parameters": [
          {
            "name": "product",
            "in": "path",
            "required": true,
            "description": "Slug or product name; matching is loose.",
            "schema": {
              "type": "string"
            },
            "example": "notion"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "domain": {
                          "type": "string"
                        },
                        "desc": {
                          "type": "string"
                        },
                        "cat": {
                          "type": "string",
                          "nullable": true
                        },
                        "page": {
                          "type": "string",
                          "nullable": true,
                          "description": "Comparison page on the site."
                        },
                        "alternatives": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "repo": {
                                "type": "string"
                              },
                              "site": {
                                "type": "string"
                              },
                              "license": {
                                "type": "string"
                              },
                              "desc": {
                                "type": "string"
                              }
                            }
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/models": {
      "get": {
        "tags": [
          "Models"
        ],
        "operationId": "listModels",
        "summary": "Models with price, context window and modality",
        "description": "Answers \"which model fits this budget and this context length\". Prices are US dollars per million tokens.",
        "parameters": [
          {
            "name": "provider",
            "in": "query",
            "description": "Substring match on the provider name.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "deepseek"
          },
          {
            "name": "tier",
            "in": "query",
            "description": "Exact tier.",
            "required": false,
            "schema": {
              "type": "string"
            },
            "example": "free"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Page size.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Rows to skip.",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 100000,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "string",
                            "example": "deepseek/deepseek-v4-flash"
                          },
                          "name": {
                            "type": "string"
                          },
                          "provider": {
                            "type": "string"
                          },
                          "tier": {
                            "type": "string"
                          },
                          "ctx": {
                            "type": "integer",
                            "description": "Context window in tokens."
                          },
                          "price_in": {
                            "type": "number",
                            "description": "USD per million input tokens."
                          },
                          "price_out": {
                            "type": "number",
                            "description": "USD per million output tokens."
                          },
                          "modality": {
                            "type": "string",
                            "example": "text->text"
                          },
                          "tools": {
                            "type": "boolean",
                            "description": "Supports tool calling."
                          },
                          "rank": {
                            "type": "integer"
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        },
                        "total": {
                          "type": "integer"
                        },
                        "limit": {
                          "type": "integer"
                        },
                        "offset": {
                          "type": "integer"
                        },
                        "source": {
                          "type": "string",
                          "nullable": true
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          }
        }
      }
    },
    "/hf": {
      "get": {
        "tags": [
          "Models"
        ],
        "operationId": "getHuggingFace",
        "summary": "Hugging Face — most downloaded and trending",
        "description": "Top LLMs by 30-day downloads, plus what is trending on the Hub today. Collected by the morning scan.",
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "top_llm": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        },
                        "top": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        },
                        "trending": {
                          "type": "array",
                          "items": {
                            "type": "object"
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        },
                        "source": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          }
        }
      }
    },
    "/history/{slug}": {
      "get": {
        "tags": [
          "Projects"
        ],
        "operationId": "getHistory",
        "summary": "90 days of stars, health and momentum — Pro and Org",
        "description": "The rolling 90-day series for one project: is it declining? Reserved for Pro and Org plans; other plans receive 403 with an explanation.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "ollama-ollama"
          }
        ],
        "responses": {
          "200": {
            "description": "Success.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "ok",
                    "data"
                  ],
                  "properties": {
                    "ok": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "slug": {
                          "type": "string"
                        },
                        "days": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Dates, oldest first."
                        },
                        "series": {
                          "type": "object",
                          "properties": {
                            "stars": {
                              "type": "array",
                              "items": {
                                "type": "integer",
                                "nullable": true
                              }
                            },
                            "health": {
                              "type": "array",
                              "items": {
                                "type": "integer",
                                "nullable": true
                              }
                            },
                            "velocity_7d": {
                              "type": "array",
                              "items": {
                                "type": "integer",
                                "nullable": true
                              }
                            }
                          }
                        }
                      }
                    },
                    "meta": {
                      "type": "object",
                      "properties": {
                        "attribution": {
                          "type": "string",
                          "description": "Always present. Our scores are our work; contextual facts come from public sources."
                        },
                        "generated": {
                          "type": "string",
                          "nullable": true,
                          "description": "When the underlying graph was built (ISO 8601)."
                        },
                        "points": {
                          "type": "integer"
                        },
                        "window": {
                          "type": "string",
                          "example": "90 days rolling"
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/MissingKey"
          },
          "403": {
            "$ref": "#/components/responses/ProRequired"
          },
          "429": {
            "$ref": "#/components/responses/Quota"
          },
          "503": {
            "$ref": "#/components/responses/Rebuilding"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Api-Key",
        "description": "Free key from https://olud.ai/account.html. Daily quota depends on your plan; responses carry X-RateLimit-Limit and X-RateLimit-Remaining."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": [
          "ok",
          "error"
        ],
        "properties": {
          "ok": {
            "type": "boolean",
            "example": false
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              }
            }
          }
        }
      },
      "ProjectCard": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "ollama-ollama",
            "description": "Stable identifier, also the page slug."
          },
          "name": {
            "type": "string",
            "example": "ollama"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "example": "https://github.com/ollama/ollama"
          },
          "desc": {
            "type": "string",
            "nullable": true
          },
          "stars": {
            "type": "integer",
            "nullable": true
          },
          "lang": {
            "type": "string",
            "nullable": true,
            "description": "Primary language on GitHub."
          },
          "license": {
            "type": "string",
            "nullable": true,
            "example": "MIT"
          },
          "health": {
            "type": "integer",
            "nullable": true,
            "description": "Maintenance score out of 100. Absent when the project has not been scored."
          },
          "momentum": {
            "type": "integer",
            "nullable": true,
            "description": "Stars gained over the last 7 days."
          },
          "trend": {
            "type": "string",
            "nullable": true,
            "enum": [
              "accelerating",
              "steady",
              "quiet",
              null
            ]
          },
          "vertical": {
            "type": "string",
            "nullable": true
          }
        }
      }
    },
    "responses": {
      "MissingKey": {
        "description": "No API key supplied.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Forbidden": {
        "description": "Key unknown or revoked.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "ProRequired": {
        "description": "This endpoint is part of the Pro plan.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "NotFound": {
        "description": "No such record.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Quota": {
        "description": "Daily quota reached. Resets at 00:00 UTC.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Rebuilding": {
        "description": "The graph is being rebuilt. Try again in a minute.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    }
  }
}
