{
  "openapi": "3.1.0",
  "info": {
    "title": "mckp.live catalog",
    "version": "1.0.0",
    "summary": "Read-only lists of mckp.live animated device mockups.",
    "description": "Static JSON files rebuilt on every deploy: every Origin scene (ready-made animated device mockup) and every Studio preset, with page and editor URLs. No authentication, no parameters. Filter on the client. To embed a scene, see https://mckp.live/developers/.",
    "contact": {
      "name": "mckp.live",
      "email": "info@ls.graphics",
      "url": "https://mckp.live/contact/"
    },
    "termsOfService": "https://mckp.live/legal/terms-of-service/"
  },
  "servers": [
    {
      "url": "https://mckp.live"
    }
  ],
  "security": [],
  "externalDocs": {
    "description": "Embed reference and agent resources",
    "url": "https://mckp.live/developers/"
  },
  "paths": {
    "/mockups/index.json": {
      "get": {
        "operationId": "listOriginMockups",
        "summary": "List all Origin mockup scenes",
        "description": "Every published ready-made animated scene with its device, model, animation types, page URL and editor URL (where the user puts their own screen on the device).",
        "tags": [
          "Origin"
        ],
        "responses": {
          "200": {
            "description": "All scenes.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SceneList"
                }
              }
            }
          }
        }
      }
    },
    "/presets/index.json": {
      "get": {
        "operationId": "listStudioPresets",
        "summary": "List all Studio presets",
        "description": "Every published Studio preset: a starting point in the timeline editor where the user animates the device themselves.",
        "tags": [
          "Studio"
        ],
        "responses": {
          "200": {
            "description": "All presets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresetList"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "SceneList": {
        "type": "object",
        "required": [
          "name",
          "total",
          "scenes"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Always \"Origin Mockups\"."
          },
          "description": {
            "type": "string",
            "description": "What the list is."
          },
          "total": {
            "type": "integer",
            "description": "Number of scenes."
          },
          "scenes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Scene"
            }
          }
        }
      },
      "Scene": {
        "type": "object",
        "required": [
          "title",
          "summary",
          "device",
          "model",
          "animations",
          "loops",
          "url",
          "editorUrl",
          "thumbnail",
          "uuid"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Descriptive scene title, e.g. \"iPad Pro isolated, half turn entrance, straight-on\"."
          },
          "summary": {
            "type": "string",
            "description": "Device type and animation types in one line."
          },
          "device": {
            "type": [
              "string",
              "null"
            ],
            "description": "Device type slug: iphone, ipad, macbook, nothing-phone."
          },
          "model": {
            "type": "string",
            "description": "Device model, e.g. \"iPhone 17 Pro\"."
          },
          "animations": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Animation type slugs, e.g. action-loop, enter."
          },
          "loops": {
            "type": "boolean",
            "description": "The saved animation loops forever."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Scene page on mckp.live."
          },
          "editorUrl": {
            "type": "string",
            "format": "uri",
            "description": "Opens the scene in the editor."
          },
          "thumbnail": {
            "type": "string",
            "format": "uri",
            "description": "800×600 WebP preview."
          },
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "Scene UUID — the mockup-id for <mockup-player>."
          }
        }
      },
      "PresetList": {
        "type": "object",
        "required": [
          "name",
          "total",
          "presets"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Always \"Studio Presets\"."
          },
          "description": {
            "type": "string",
            "description": "What the list is."
          },
          "total": {
            "type": "integer",
            "description": "Number of presets."
          },
          "presets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Preset"
            }
          }
        }
      },
      "Preset": {
        "type": "object",
        "required": [
          "mockup",
          "mockupSlug",
          "page",
          "editorUrl",
          "video",
          "uuid"
        ],
        "properties": {
          "mockup": {
            "type": [
              "string",
              "null"
            ],
            "description": "Studio mockup (device) name, e.g. \"iPhone 18 Pro in Hand\"."
          },
          "mockupSlug": {
            "type": [
              "string",
              "null"
            ],
            "description": "Slug of the Studio mockup."
          },
          "page": {
            "type": "string",
            "format": "uri",
            "description": "Page listing this mockup's presets on mckp.live."
          },
          "editorUrl": {
            "type": "string",
            "format": "uri",
            "description": "Opens the preset in the Studio editor."
          },
          "video": {
            "type": "string",
            "format": "uri",
            "description": "WebM preview of the preset animation."
          },
          "uuid": {
            "type": "string",
            "format": "uuid",
            "description": "Preset UUID."
          }
        }
      }
    }
  }
}