{
  "openapi": "3.1.0",
  "info": {
    "title": "Prompt Motion public API",
    "version": "1.0.0",
    "description": "Read-only public video, prompt and skill discovery with creator citations. Source snapshot: 2026-10-10."
  },
  "servers": [
    {
      "url": "https://prompt-motion.genedai.me"
    }
  ],
  "paths": {
    "/api/entries": {
      "get": {
        "summary": "Search and paginate entries",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "prompt",
                "skill"
              ]
            }
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "product-ui",
                "phone",
                "charts",
                "diagrams",
                "kinetic-type",
                "shapes",
                "particles",
                "characters",
                "photos",
                "music",
                "code"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "popular",
                "recent"
              ],
              "default": "popular"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query"
          },
          "404": {
            "description": "Entry not found"
          }
        }
      }
    },
    "/api/entries/{slug}": {
      "get": {
        "summary": "Read the complete entry, prompt, skill and sources",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query"
          },
          "404": {
            "description": "Entry not found"
          }
        }
      }
    },
    "/api/categories": {
      "get": {
        "summary": "Read category labels and counts",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query"
          },
          "404": {
            "description": "Entry not found"
          }
        }
      }
    },
    "/api/status": {
      "get": {
        "summary": "Read collection and service status",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query"
          },
          "404": {
            "description": "Entry not found"
          }
        }
      }
    }
  }
}