{
  "openapi": "3.1.0",
  "info": {
    "title": "the Vibing Company public API",
    "version": "2026-08-17",
    "description": "Unauthenticated, CORS-open, read-only access to the Vibeary library, services, pricing and guides of vibing.inc. Also available as an MCP server at https://vibing.inc/api/public/mcp.",
    "contact": {
      "email": "hello@vibing.inc",
      "url": "https://vibing.inc/for-agents"
    },
    "license": {
      "name": "Free to use with attribution",
      "url": "https://vibing.inc/terms"
    }
  },
  "servers": [
    {
      "url": "https://vibing.inc"
    }
  ],
  "paths": {
    "/api/public/library/search": {
      "get": {
        "summary": "Search the Vibeary",
        "description": "Ranked full-text search across every gem in the library (names, descriptions, tags, authors). Returns a cursor for paging.",
        "operationId": "api_public_library_search",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Search text. Omit to browse everything.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Filter to one category (see /api/public/library/categories).",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subcategory",
            "in": "query",
            "required": false,
            "description": "Filter to one subcategory.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "1–100, default 20.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from the previous response's `nextCursor`.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/public/library/gems/{slug}": {
      "get": {
        "summary": "Get one gem",
        "description": "Full metadata for a single gem: name, description, URL, author, licence, category, tags, why it is a gem, and its preview image.",
        "operationId": "api_public_library_gems_slug",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Gem slug, as returned by search.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/public/library/categories": {
      "get": {
        "summary": "Library taxonomy",
        "description": "Every category and subcategory with item counts — the cheapest way to understand the catalogue.",
        "operationId": "api_public_library_categories",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/public/services": {
      "get": {
        "summary": "Services and pricing",
        "description": "Everything the company sells: service pages, monthly plans for companies and solo founders, and one-off engagements with prices.",
        "operationId": "api_public_services",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/public/guides": {
      "get": {
        "summary": "Guide index",
        "description": "Published guides with titles, summaries and both their HTML and markdown URLs.",
        "operationId": "api_public_guides",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/public/library/submit": {
      "post": {
        "summary": "Submit a resource to the library",
        "description": "Suggest a tool, component, shader or AI skill for The Vibing Library. No key required, rate limited per source. Every submission is queued for human review; the response reports duplicates against the existing catalogue.",
        "operationId": "api_public_library_submit",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name",
                  "url"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Project name (required)."
                  },
                  "url": {
                    "type": "string",
                    "description": "Canonical http(s) link (required)."
                  },
                  "description": {
                    "type": "string",
                    "description": "One sentence on what it does."
                  },
                  "whyGem": {
                    "type": "string",
                    "description": "Why it beats the obvious alternative."
                  },
                  "category": {
                    "type": "string",
                    "description": "Optional category from /api/public/library/categories."
                  },
                  "subcategory": {
                    "type": "string",
                    "description": "Optional subcategory."
                  },
                  "tags": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "description": "Optional array of short tags."
                  },
                  "author": {
                    "type": "string",
                    "description": "Maker or organisation."
                  },
                  "license": {
                    "type": "string",
                    "description": "MIT, free, paid, …"
                  },
                  "contactEmail": {
                    "type": "string",
                    "description": "Optional — only used to confirm publication."
                  },
                  "submittedBy": {
                    "type": "string",
                    "description": "\"human\" or \"agent\"."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/public/openapi.json": {
      "get": {
        "summary": "OpenAPI 3.1 document",
        "description": "Machine description of every endpoint on this page, for tool-use planners and code generators.",
        "operationId": "api_public_openapi_json",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    }
  }
}