{
  "openapi": "3.1.0",
  "info": {
    "title": "Slop Farm Publishing API",
    "version": "1.0.0",
    "description": "Create game projects and submit immutable static-browser-game releases. Public visibility always requires moderation."
  },
  "servers": [{ "url": "https://slopfarm.games" }],
  "components": {
    "securitySchemes": {
      "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "sf_live token" }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "required": ["error"],
        "properties": { "error": { "type": "string" } }
      },
      "File": {
        "type": "object",
        "required": ["path", "size", "sha256"],
        "properties": {
          "path": { "type": "string" },
          "size": { "type": "integer", "minimum": 0 },
          "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" }
        }
      }
    }
  },
  "security": [{ "bearerAuth": [] }],
  "paths": {
    "/api/v1/me": { "get": { "summary": "Get the authenticated creator", "responses": { "200": { "description": "Creator" } } } },
    "/api/v1/games": { "post": { "summary": "Create or resolve an owned game project", "responses": { "201": { "description": "Created" } } } },
    "/api/v1/games/{id}": {
      "get": {
        "summary": "Get an owned game project",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }],
        "responses": { "200": { "description": "Game" } }
      }
    },
    "/api/v1/games/{id}/releases": {
      "get": {
        "summary": "List immutable releases",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }],
        "responses": { "200": { "description": "Release list" } }
      },
      "post": {
        "summary": "Create an idempotent release upload session",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }],
        "responses": { "201": { "description": "Presigned uploads and reuse plan" } }
      }
    },
    "/api/v1/releases/{id}": {
      "get": {
        "summary": "Get release and moderation status",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }],
        "responses": { "200": { "description": "Release" } }
      }
    },
    "/api/v1/releases/{id}/complete": {
      "post": {
        "summary": "Verify uploaded objects and submit a release for review",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }],
        "responses": { "200": { "description": "Release ready for moderation" } }
      }
    },
    "/api/v1/games/{id}/rollback": {
      "post": {
        "summary": "Restore a previously approved release",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }],
        "responses": { "200": { "description": "Restored game" } }
      }
    }
  }
}
