{
  "consumes": [
    "application/json"
  ],
  "definitions": {
    "CatalogAPIReviewEditRequestBody": {
      "properties": {
        "decision": {
          "type": "string"
        }
      },
      "title": "ReviewEditRequest (admin)",
      "type": "object"
    },
    "CatalogAPIReviewSubmissionBody": {
      "properties": {
        "decision": {
          "type": "string"
        }
      },
      "title": "ReviewSubmission (admin)",
      "type": "object"
    },
    "CatalogAPISuggestToolEditBody": {
      "description": "SuggestToolEdit — public edit suggestion for a published tool.",
      "properties": {
        "description": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "screenshots": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "CatalogAPIUpdateCategoryBody": {
      "properties": {
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "parentId": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "sortOrder": {
          "format": "int32",
          "type": "integer"
        }
      },
      "title": "UpdateCategory",
      "type": "object"
    },
    "CatalogAPIUpdateProprietaryToolBody": {
      "properties": {
        "categoryId": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "platforms": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "pricing": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "title": "UpdateProprietaryTool",
      "type": "object"
    },
    "CatalogAPIUpdateToolBody": {
      "properties": {
        "categoryId": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "downloadUrl": {
          "type": "string"
        },
        "githubUrl": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "license": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "packages": {
          "items": {
            "$ref": "#/definitions/v1ToolPackage",
            "type": "object"
          },
          "type": "array"
        },
        "platforms": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "readme": {
          "type": "string"
        },
        "screenshots": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "slug": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "toolType": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "title": "UpdateTool",
      "type": "object"
    },
    "protobufAny": {
      "additionalProperties": {},
      "properties": {
        "@type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "rpcStatus": {
      "properties": {
        "code": {
          "format": "int32",
          "type": "integer"
        },
        "details": {
          "items": {
            "$ref": "#/definitions/protobufAny",
            "type": "object"
          },
          "type": "array"
        },
        "message": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1AgentCallCount": {
      "properties": {
        "calls": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1AgentCallDay": {
      "properties": {
        "calls": {
          "format": "int32",
          "type": "integer"
        },
        "day": {
          "type": "string"
        },
        "protocol": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1AgentCallQuery": {
      "properties": {
        "calls": {
          "format": "int32",
          "type": "integer"
        },
        "notFound": {
          "format": "int32",
          "type": "integer"
        },
        "text": {
          "type": "string"
        },
        "tool": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1Category": {
      "description": "Category represents a tool category.",
      "properties": {
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "parentId": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "sortOrder": {
          "format": "int32",
          "type": "integer"
        },
        "toolCount": {
          "format": "int32",
          "type": "integer"
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1CreateCategoryRequest": {
      "properties": {
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "parentId": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "sortOrder": {
          "format": "int32",
          "type": "integer"
        }
      },
      "title": "CreateCategory",
      "type": "object"
    },
    "v1CreateCategoryResponse": {
      "properties": {
        "id": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1CreateProprietaryToolRequest": {
      "properties": {
        "categoryId": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "platforms": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "pricing": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "title": "CreateProprietaryTool",
      "type": "object"
    },
    "v1CreateProprietaryToolResponse": {
      "properties": {
        "id": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1CreateToolRequest": {
      "properties": {
        "categoryId": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "downloadUrl": {
          "type": "string"
        },
        "githubUrl": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "license": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "packages": {
          "items": {
            "$ref": "#/definitions/v1ToolPackage",
            "type": "object"
          },
          "type": "array"
        },
        "platforms": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "readme": {
          "type": "string"
        },
        "screenshots": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "slug": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "toolType": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "title": "CreateTool",
      "type": "object"
    },
    "v1CreateToolResponse": {
      "properties": {
        "id": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1DeleteCategoryResponse": {
      "type": "object"
    },
    "v1DeleteProprietaryToolResponse": {
      "type": "object"
    },
    "v1DeleteToolResponse": {
      "type": "object"
    },
    "v1Digest": {
      "description": "Digest is a full weekly issue.",
      "properties": {
        "id": {
          "type": "string"
        },
        "intro": {
          "type": "string"
        },
        "number": {
          "format": "int32",
          "type": "integer"
        },
        "period": {
          "$ref": "#/definitions/v1DigestPeriod"
        },
        "publishedAt": {
          "type": "string"
        },
        "sections": {
          "$ref": "#/definitions/v1DigestSections"
        },
        "summary": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1DigestAlternative": {
      "description": "DigestAlternative is a proprietary product whose alternatives grew.",
      "properties": {
        "alternativesCount": {
          "format": "int32",
          "type": "integer"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "tools": {
          "items": {
            "$ref": "#/definitions/v1DigestTool",
            "type": "object"
          },
          "type": "array"
        },
        "weeklyGrowth": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1DigestEntry": {
      "description": "DigestEntry is an archive row without sections.",
      "properties": {
        "id": {
          "type": "string"
        },
        "number": {
          "format": "int32",
          "type": "integer"
        },
        "period": {
          "$ref": "#/definitions/v1DigestPeriod"
        },
        "publishedAt": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1DigestPeriod": {
      "description": "DigestPeriod is the covered week, dates as YYYY-MM-DD.",
      "properties": {
        "from": {
          "type": "string"
        },
        "to": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1DigestSections": {
      "properties": {
        "newTools": {
          "items": {
            "$ref": "#/definitions/v1DigestTool",
            "type": "object"
          },
          "type": "array"
        },
        "risingAlternatives": {
          "items": {
            "$ref": "#/definitions/v1DigestAlternative",
            "type": "object"
          },
          "type": "array"
        },
        "topGrowth": {
          "items": {
            "$ref": "#/definitions/v1DigestTool",
            "type": "object"
          },
          "type": "array"
        },
        "topRate": {
          "items": {
            "$ref": "#/definitions/v1DigestTool",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1DigestTool": {
      "description": "DigestTool is one tool inside a digest section.",
      "properties": {
        "blurb": {
          "type": "string"
        },
        "categoryName": {
          "type": "string"
        },
        "categorySlug": {
          "type": "string"
        },
        "createdAt": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "githubStars": {
          "format": "int32",
          "type": "integer"
        },
        "githubUrl": {
          "type": "string"
        },
        "growthPct": {
          "format": "double",
          "type": "number"
        },
        "license": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "starsGrowth": {
          "format": "int32",
          "type": "integer"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1EditRequest": {
      "description": "EditRequest is one maintainer edit suggestion.",
      "properties": {
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "currentDescription": {
          "type": "string"
        },
        "currentScreenshots": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "currentWebsiteUrl": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "reviewedAt": {
          "format": "date-time",
          "type": "string"
        },
        "screenshots": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "status": {
          "title": "pending | approved | rejected | applied",
          "type": "string"
        },
        "toolName": {
          "type": "string"
        },
        "toolSlug": {
          "type": "string"
        },
        "verified": {
          "type": "boolean"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1GetCategoryBySlugResponse": {
      "properties": {
        "category": {
          "$ref": "#/definitions/v1Category"
        },
        "tools": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        },
        "toolsTotal": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1GetDigestResponse": {
      "properties": {
        "digest": {
          "$ref": "#/definitions/v1Digest"
        }
      },
      "type": "object"
    },
    "v1GetInstallRecipeResponse": {
      "properties": {
        "recipe": {
          "$ref": "#/definitions/v1InstallRecipe"
        }
      },
      "type": "object"
    },
    "v1GetProprietaryToolBySlugResponse": {
      "properties": {
        "alternatives": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        },
        "alternativesTotal": {
          "format": "int32",
          "type": "integer"
        },
        "proprietaryTool": {
          "$ref": "#/definitions/v1ProprietaryTool"
        }
      },
      "type": "object"
    },
    "v1GetToolBySlugResponse": {
      "properties": {
        "alternatives": {
          "items": {
            "$ref": "#/definitions/v1ProprietaryTool",
            "type": "object"
          },
          "type": "array"
        },
        "similarTools": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        },
        "tool": {
          "$ref": "#/definitions/v1Tool"
        }
      },
      "type": "object"
    },
    "v1GitHubMetrics": {
      "properties": {
        "forks": {
          "format": "int32",
          "type": "integer"
        },
        "language": {
          "type": "string"
        },
        "lastCommit": {
          "format": "date-time",
          "type": "string"
        },
        "latestVersion": {
          "type": "string"
        },
        "license": {
          "type": "string"
        },
        "stars": {
          "format": "int32",
          "type": "integer"
        },
        "toolId": {
          "type": "string"
        }
      },
      "title": "UpdateGitHubMetricsBatch",
      "type": "object"
    },
    "v1InstallCheck": {
      "properties": {
        "detail": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "ok": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "v1InstallEnvVar": {
      "description": "InstallEnvVar is a variable the user puts into .env next to compose.yml.",
      "properties": {
        "description": {
          "type": "string"
        },
        "generate": {
          "description": "How to generate a secret: hex32, hex64, base64-32 or password.",
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "value": {
          "description": "Fixed value, e.g. a base URL. Empty when generate is set.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1InstallImage": {
      "properties": {
        "digest": {
          "type": "string"
        },
        "image": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1InstallRecipe": {
      "description": "InstallRecipe is a docker compose setup verified by open-source.store.",
      "properties": {
        "compose": {
          "type": "string"
        },
        "method": {
          "description": "Only \"docker-compose\" for now.",
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "spec": {
          "$ref": "#/definitions/v1InstallSpec"
        },
        "updatedAt": {
          "type": "string"
        },
        "verification": {
          "$ref": "#/definitions/v1InstallVerification"
        }
      },
      "type": "object"
    },
    "v1InstallSpec": {
      "description": "InstallSpec is everything a person or an agent needs to run the recipe.",
      "properties": {
        "env": {
          "items": {
            "$ref": "#/definitions/v1InstallEnvVar",
            "type": "object"
          },
          "type": "array"
        },
        "firstRun": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "port": {
          "format": "int32",
          "type": "integer"
        },
        "sourceNotes": {
          "type": "string"
        },
        "sourceUrl": {
          "type": "string"
        },
        "version": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1InstallVerification": {
      "description": "InstallVerification is the result of starting the recipe from scratch in a clean machine.",
      "properties": {
        "arch": {
          "type": "string"
        },
        "checks": {
          "items": {
            "$ref": "#/definitions/v1InstallCheck",
            "type": "object"
          },
          "type": "array"
        },
        "composeVersion": {
          "type": "string"
        },
        "cpus": {
          "format": "int32",
          "type": "integer"
        },
        "dockerVersion": {
          "type": "string"
        },
        "images": {
          "items": {
            "$ref": "#/definitions/v1InstallImage",
            "type": "object"
          },
          "type": "array"
        },
        "logTail": {
          "type": "string"
        },
        "machine": {
          "type": "string"
        },
        "memoryMb": {
          "format": "int32",
          "type": "integer"
        },
        "peakMemMb": {
          "format": "int32",
          "type": "integer"
        },
        "pullSec": {
          "format": "int32",
          "type": "integer"
        },
        "readySec": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "type": "string"
        },
        "verifiedAt": {
          "description": "RFC 3339.",
          "type": "string"
        },
        "version": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1LinkAlternativeRequest": {
      "properties": {
        "proprietaryId": {
          "type": "string"
        },
        "relevanceScore": {
          "format": "int32",
          "type": "integer"
        },
        "toolId": {
          "type": "string"
        }
      },
      "title": "LinkAlternative",
      "type": "object"
    },
    "v1LinkAlternativeResponse": {
      "type": "object"
    },
    "v1ListAgentCallStatsResponse": {
      "properties": {
        "clients": {
          "items": {
            "$ref": "#/definitions/v1AgentCallCount",
            "type": "object"
          },
          "type": "array"
        },
        "days": {
          "items": {
            "$ref": "#/definitions/v1AgentCallDay",
            "type": "object"
          },
          "type": "array"
        },
        "queries": {
          "items": {
            "$ref": "#/definitions/v1AgentCallQuery",
            "type": "object"
          },
          "type": "array"
        },
        "tools": {
          "items": {
            "$ref": "#/definitions/v1AgentCallCount",
            "type": "object"
          },
          "type": "array"
        },
        "total": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1ListCategoriesResponse": {
      "properties": {
        "categories": {
          "items": {
            "$ref": "#/definitions/v1Category",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1ListClickStatsResponse": {
      "properties": {
        "stats": {
          "items": {
            "$ref": "#/definitions/v1ToolClickStat",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1ListDigestsResponse": {
      "properties": {
        "digests": {
          "items": {
            "$ref": "#/definitions/v1DigestEntry",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1ListEditRequestsResponse": {
      "properties": {
        "editRequests": {
          "items": {
            "$ref": "#/definitions/v1EditRequest",
            "type": "object"
          },
          "type": "array"
        },
        "total": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1ListProprietaryToolsResponse": {
      "properties": {
        "proprietaryTools": {
          "items": {
            "$ref": "#/definitions/v1ProprietaryTool",
            "type": "object"
          },
          "type": "array"
        },
        "total": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1ListRecentToolsResponse": {
      "properties": {
        "tools": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1ListSubmissionsResponse": {
      "properties": {
        "submissions": {
          "items": {
            "$ref": "#/definitions/v1Submission",
            "type": "object"
          },
          "type": "array"
        },
        "total": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1ListToolsResponse": {
      "properties": {
        "tools": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        },
        "total": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1ListTopToolsResponse": {
      "properties": {
        "tools": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1ListTrendingAlternativesResponse": {
      "properties": {
        "proprietaryTools": {
          "items": {
            "$ref": "#/definitions/v1ProprietaryTool",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1ListTrendingToolsResponse": {
      "properties": {
        "tools": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1ProprietaryTool": {
      "description": "ProprietaryTool represents a proprietary tool with alternatives.",
      "properties": {
        "alternativesCount": {
          "format": "int32",
          "type": "integer"
        },
        "categoryId": {
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "platforms": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "pricing": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1RecordOutboundClickRequest": {
      "properties": {
        "slug": {
          "type": "string"
        },
        "visitorHash": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1RecordOutboundClickResponse": {
      "type": "object"
    },
    "v1ReviewEditRequestResponse": {
      "type": "object"
    },
    "v1ReviewSubmissionResponse": {
      "type": "object"
    },
    "v1SearchAllResponse": {
      "properties": {
        "proprietaryTools": {
          "items": {
            "$ref": "#/definitions/v1ProprietaryTool",
            "type": "object"
          },
          "type": "array"
        },
        "proprietaryTotal": {
          "format": "int32",
          "type": "integer"
        },
        "tools": {
          "items": {
            "$ref": "#/definitions/v1Tool",
            "type": "object"
          },
          "type": "array"
        },
        "toolsTotal": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1Submission": {
      "description": "Submission is one entry of the public moderation queue.",
      "properties": {
        "categoryId": {
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "githubUrl": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "proprietaryAlternative": {
          "type": "string"
        },
        "reviewedAt": {
          "format": "date-time",
          "type": "string"
        },
        "status": {
          "title": "pending | approved | rejected",
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1SubmitToolRequest": {
      "description": "SubmitTool — public submission into the moderation queue.",
      "properties": {
        "categoryId": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "githubUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "proprietaryAlternative": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1SubmitToolResponse": {
      "properties": {
        "id": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1SuggestToolEditResponse": {
      "properties": {
        "id": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "verified": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "v1Tool": {
      "description": "Tool represents an open-source tool in the catalog.",
      "properties": {
        "categoryId": {
          "type": "string"
        },
        "categoryName": {
          "type": "string"
        },
        "categorySlug": {
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "descriptionLong": {
          "type": "string"
        },
        "downloadUrl": {
          "type": "string"
        },
        "githubForks": {
          "format": "int32",
          "type": "integer"
        },
        "githubLanguage": {
          "type": "string"
        },
        "githubLastCommit": {
          "format": "date-time",
          "type": "string"
        },
        "githubLatestVersion": {
          "type": "string"
        },
        "githubStars": {
          "format": "int32",
          "type": "integer"
        },
        "githubUrl": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "license": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "packages": {
          "items": {
            "$ref": "#/definitions/v1ToolPackage",
            "type": "object"
          },
          "type": "array"
        },
        "platforms": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "readme": {
          "title": "raw upstream README (supplementary, not primary/indexed content)",
          "type": "string"
        },
        "screenshots": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "slug": {
          "type": "string"
        },
        "starsGrowth": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "type": "string"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "toolType": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        },
        "websiteUrl": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "v1ToolClickStat": {
      "properties": {
        "clicks": {
          "format": "int32",
          "type": "integer"
        },
        "tool": {
          "$ref": "#/definitions/v1Tool"
        }
      },
      "type": "object"
    },
    "v1ToolPackage": {
      "description": "ToolPackage is the tool in an official package registry. os and command are filled by the server.",
      "properties": {
        "command": {
          "type": "string"
        },
        "distros": {
          "description": "apt only: releases that ship the package, e.g. debian-13, ubuntu-24.04.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "id": {
          "type": "string"
        },
        "kind": {
          "description": "app is the tool itself, client is its desktop client (for a server tool), cli is its command-line companion.",
          "type": "string"
        },
        "manager": {
          "type": "string"
        },
        "os": {
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1UnlinkAlternativeResponse": {
      "type": "object"
    },
    "v1UpdateCategoryResponse": {
      "type": "object"
    },
    "v1UpdateGitHubMetricsBatchRequest": {
      "properties": {
        "metrics": {
          "items": {
            "$ref": "#/definitions/v1GitHubMetrics",
            "type": "object"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "v1UpdateGitHubMetricsBatchResponse": {
      "type": "object"
    },
    "v1UpdateProprietaryToolResponse": {
      "type": "object"
    },
    "v1UpdateToolResponse": {
      "type": "object"
    },
    "v1UpsertDigestResponse": {
      "properties": {
        "id": {
          "type": "string"
        },
        "number": {
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "v1UpsertInstallRecipeResponse": {
      "properties": {
        "slug": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "host": "api.open-source.store",
  "info": {
    "description": "Read-only API of the open-source.store catalog of open-source alternatives to proprietary software. MCP: https://api.open-source.store/mcp, A2A: https://api.open-source.store/a2a.",
    "title": "open-source.store Catalog API",
    "version": "v1"
  },
  "paths": {
    "/catalog/api/v1/categories": {
      "get": {
        "operationId": "CatalogAPI_ListCategories",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListCategoriesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List all categories with tool counts.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/categories/{slug}": {
      "get": {
        "operationId": "CatalogAPI_GetCategoryBySlug",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "type": "string"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "toolsLimit",
            "required": false,
            "type": "integer"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "toolsOffset",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1GetCategoryBySlugResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get category details with paginated tools.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/digests": {
      "get": {
        "operationId": "CatalogAPI_ListDigests",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListDigestsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List published digest issues, newest first (public).",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/digests/{id}": {
      "get": {
        "operationId": "CatalogAPI_GetDigest",
        "parameters": [
          {
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1GetDigestResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get one digest issue by id like 2026-w41 (public).",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/proprietary": {
      "get": {
        "operationId": "CatalogAPI_ListProprietaryTools",
        "parameters": [
          {
            "format": "int32",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListProprietaryToolsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List proprietary tools with pagination.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/proprietary/{slug}": {
      "get": {
        "operationId": "CatalogAPI_GetProprietaryToolBySlug",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "type": "string"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "toolsLimit",
            "required": false,
            "type": "integer"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "toolsOffset",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1GetProprietaryToolBySlugResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get proprietary tool details with open-source alternatives.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/recent": {
      "get": {
        "operationId": "CatalogAPI_ListRecentTools",
        "parameters": [
          {
            "format": "int32",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListRecentToolsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get recently added tools.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/search": {
      "get": {
        "operationId": "CatalogAPI_SearchAll",
        "parameters": [
          {
            "in": "query",
            "name": "query",
            "required": false,
            "type": "string"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1SearchAllResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Search tools and proprietary tools by query.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/tools": {
      "get": {
        "operationId": "CatalogAPI_ListTools",
        "parameters": [
          {
            "format": "int32",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "collectionFormat": "multi",
            "in": "query",
            "items": {
              "type": "string"
            },
            "name": "toolTypes",
            "required": false,
            "type": "array"
          },
          {
            "collectionFormat": "multi",
            "in": "query",
            "items": {
              "type": "string"
            },
            "name": "platforms",
            "required": false,
            "type": "array"
          },
          {
            "in": "query",
            "name": "categoryId",
            "required": false,
            "type": "string"
          },
          {
            "collectionFormat": "multi",
            "in": "query",
            "items": {
              "type": "string"
            },
            "name": "licenses",
            "required": false,
            "type": "array"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "activityDays",
            "required": false,
            "type": "integer"
          },
          {
            "in": "query",
            "name": "sort",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListToolsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List published tools with optional filters and pagination.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/tools/{slug}": {
      "get": {
        "operationId": "CatalogAPI_GetToolBySlug",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1GetToolBySlugResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get full tool details by slug.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/tools/{slug}/install": {
      "get": {
        "operationId": "CatalogAPI_GetInstallRecipe",
        "parameters": [
          {
            "in": "path",
            "name": "slug",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1GetInstallRecipeResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the verified docker compose install recipe of a tool (public). Not found until a recipe passes verification.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/top": {
      "get": {
        "operationId": "CatalogAPI_ListTopTools",
        "parameters": [
          {
            "format": "int32",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListTopToolsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get top tools by GitHub stars.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/trending": {
      "get": {
        "operationId": "CatalogAPI_ListTrendingAlternatives",
        "parameters": [
          {
            "format": "int32",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListTrendingAlternativesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get trending proprietary tools by alternatives count.",
        "tags": [
          "CatalogAPI"
        ]
      }
    },
    "/catalog/api/v1/trending/tools": {
      "get": {
        "operationId": "CatalogAPI_ListTrendingTools",
        "parameters": [
          {
            "format": "int32",
            "in": "query",
            "name": "windowDays",
            "required": false,
            "type": "integer"
          },
          {
            "format": "int32",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "in": "query",
            "name": "categorySlug",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/v1ListTrendingToolsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "tags": [
          "CatalogAPI"
        ]
      }
    }
  },
  "produces": [
    "application/json"
  ],
  "schemes": [
    "https"
  ],
  "swagger": "2.0",
  "tags": [
    {
      "name": "CatalogAPI"
    }
  ]
}