{
    "openapi": "3.1.0",
    "info": {
        "title": "Gujo Account API",
        "version": "1",
        "description": "Generated from the router and #[PublicApiSpec] declarations by `php artisan developers:api-reference`. Do not edit by hand. Error semantics, idempotency and versioning rules: docs/contracts.md."
    },
    "servers": [
        {
            "url": "https://api.gujo.ai"
        }
    ],
    "tags": [
        {
            "name": "library",
            "description": "Library — 라이브러리"
        },
        {
            "name": "products",
            "description": "Products — 상품"
        },
        {
            "name": "install",
            "description": "Install — 설치"
        },
        {
            "name": "license",
            "description": "License and pass — 라이선스·패스"
        },
        {
            "name": "setup",
            "description": "Setup progress — 설정 진행"
        },
        {
            "name": "device",
            "description": "Device — 기기"
        },
        {
            "name": "orders",
            "description": "Orders and billing — 주문·청구"
        },
        {
            "name": "subscriptions",
            "description": "Subscriptions — 구독"
        },
        {
            "name": "client_config",
            "description": "Client config — 클라이언트 설정"
        },
        {
            "name": "support",
            "description": "Reports — 신고"
        },
        {
            "name": "mcp",
            "description": "Account MCP — 계정 MCP"
        },
        {
            "name": "distribution",
            "description": "App distribution feed (app host) — 앱 배포 피드(app 호스트)"
        },
        {
            "name": "downloads",
            "description": "Download supply status — 다운로드 공급 현황"
        },
        {
            "name": "public",
            "description": "Public lookups — 공개 조회"
        },
        {
            "name": "design",
            "description": "Design host — design 호스트"
        }
    ],
    "paths": {
        "/api/agent/collect/runs": {
            "post": {
                "operationId": "design_agent_collect_runs_open",
                "summary": "Opens a remote collect run. 409 while another run holds the lock",
                "description": "Opens a remote collect run. 409 while another run holds the lock\n\n원격 수집 실행을 연다. 다른 실행이 수집 중이면 409",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.collect.runs.open",
                "x-gujo-agent-role": "collect",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "apps": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "core",
                                                "accounts",
                                                "app",
                                                "asset",
                                                "lecture",
                                                "support",
                                                "design"
                                            ]
                                        }
                                    },
                                    "viewports": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "desktop",
                                                "mobile"
                                            ]
                                        },
                                        "minItems": 1
                                    },
                                    "langs": {
                                        "type": "array",
                                        "items": {
                                            "type": "string",
                                            "enum": [
                                                "ko",
                                                "en"
                                            ]
                                        },
                                        "minItems": 1
                                    }
                                },
                                "required": [
                                    "viewports",
                                    "langs"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/collect/runs/{run}": {
            "get": {
                "operationId": "design_agent_collect_runs_show",
                "summary": "Status of a collect run I opened",
                "description": "Status of a collect run I opened\n\n내가 연 원격 수집 실행의 상태",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.collect.runs.show",
                "x-gujo-agent-role": "collect",
                "parameters": [
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/collect/runs/{run}/assets": {
            "post": {
                "operationId": "design_agent_collect_runs_assets",
                "summary": "Uploads one asset file to a collect run",
                "description": "Uploads one asset file to a collect run\n\n수집 실행에 자산 파일 하나를 올린다",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.collect.runs.assets",
                "x-gujo-agent-role": "collect",
                "parameters": [
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "sha256": {
                                        "type": "string"
                                    },
                                    "type": {
                                        "type": "string",
                                        "enum": [
                                            "css",
                                            "js"
                                        ]
                                    },
                                    "url": {
                                        "type": "string",
                                        "maxLength": 2000
                                    },
                                    "file": {
                                        "type": "string",
                                        "format": "binary",
                                        "maxLength": 10240
                                    }
                                },
                                "required": [
                                    "sha256",
                                    "type",
                                    "url",
                                    "file"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/collect/runs/{run}/captures": {
            "post": {
                "operationId": "design_agent_collect_runs_captures",
                "summary": "Uploads one capture (image, HTML) to a collect run",
                "description": "Uploads one capture (image, HTML) to a collect run\n\n수집 실행에 캡처 하나(이미지·HTML)를 올린다",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.collect.runs.captures",
                "x-gujo-agent-role": "collect",
                "parameters": [
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "key": {
                                        "type": "string",
                                        "minLength": 40,
                                        "maxLength": 40
                                    },
                                    "url": {
                                        "type": "string",
                                        "maxLength": 2000
                                    },
                                    "viewport": {
                                        "type": "string",
                                        "enum": [
                                            "desktop",
                                            "mobile"
                                        ]
                                    },
                                    "lang": {
                                        "type": "string",
                                        "enum": [
                                            "ko",
                                            "en"
                                        ]
                                    },
                                    "auth": {
                                        "type": "boolean"
                                    },
                                    "outcome": {
                                        "type": "string",
                                        "enum": [
                                            "ok",
                                            "failed",
                                            "redirected"
                                        ]
                                    },
                                    "message": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 2000
                                    },
                                    "login_stage": {
                                        "type": [
                                            "boolean",
                                            "null"
                                        ]
                                    },
                                    "saved_state": {
                                        "type": [
                                            "boolean",
                                            "null"
                                        ]
                                    },
                                    "final_url": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 2000
                                    },
                                    "http_status": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ]
                                    },
                                    "meta": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "contentMediaType": "application/json"
                                    },
                                    "image": {
                                        "type": "string",
                                        "format": "binary",
                                        "maxLength": 30720
                                    },
                                    "html": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "binary",
                                        "maxLength": 10240
                                    },
                                    "assets": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "contentMediaType": "application/json"
                                    }
                                },
                                "required": [
                                    "key",
                                    "url",
                                    "viewport",
                                    "lang",
                                    "auth",
                                    "outcome"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/collect/runs/{run}/fail": {
            "post": {
                "operationId": "design_agent_collect_runs_fail",
                "summary": "Closes a collect run as failed before submission",
                "description": "Closes a collect run as failed before submission\n\n제출 전 수집 실행을 실패로 닫는다",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.collect.runs.fail",
                "x-gujo-agent-role": "collect",
                "parameters": [
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "error": {
                                        "type": "string"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/collect/runs/{run}/submit": {
            "post": {
                "operationId": "design_agent_collect_runs_submit",
                "summary": "Submits a collect run (the server replays it)",
                "description": "Submits a collect run (the server replays it)\n\n수집 실행을 제출한다(서버가 재생한다)",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.collect.runs.submit",
                "x-gujo-agent-role": "collect",
                "parameters": [
                    {
                        "name": "run",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "accounts": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "found": {
                                                    "type": "boolean"
                                                },
                                                "reason": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ],
                                                    "maxLength": 200
                                                }
                                            },
                                            "required": [
                                                "found"
                                            ]
                                        }
                                    },
                                    "build_versions": {
                                        "type": [
                                            "array",
                                            "null"
                                        ],
                                        "items": {
                                            "type": "string",
                                            "maxLength": 64
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/docs/{slug}": {
            "get": {
                "operationId": "design_agent_docs_show",
                "summary": "One design document (current version unless version is given)",
                "description": "One design document (current version unless version is given)\n\n디자인 문서 하나(version 이 없으면 현재 판)",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.docs.show",
                "x-gujo-agent-role": "read",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "version",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/docs/{slug}/versions": {
            "get": {
                "operationId": "design_agent_docs_versions_list",
                "summary": "Versions of a design document (paged)",
                "description": "Versions of a design document (paged)\n\n디자인 문서의 판 목록(쪽 단위)",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.docs.versions.index",
                "x-gujo-agent-role": "read",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "operationId": "design_agent_docs_versions_create",
                "summary": "Creates a new draft version on top of base_version",
                "description": "Creates a new draft version on top of base_version\n\n디자인 문서의 새 초안 판을 만든다(base_version 위에)",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.docs.versions.store",
                "x-gujo-agent-role": "write",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "body": {
                                        "type": "string"
                                    },
                                    "base_version": {
                                        "type": "integer",
                                        "minimum": 0
                                    }
                                },
                                "required": [
                                    "body",
                                    "base_version"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/docs/{slug}/versions/{number}/submit": {
            "post": {
                "operationId": "design_agent_docs_versions_submit",
                "summary": "Submits my draft version for review",
                "description": "Submits my draft version for review\n\n내가 쓴 초안 판을 검수에 올린다",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.docs.versions.submit",
                "x-gujo-agent-role": "write",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "number",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/manifest": {
            "get": {
                "operationId": "design_agent_manifest",
                "summary": "Design documents (paged) and the agent skill package info",
                "description": "Design documents (paged) and the agent skill package info\n\n디자인 문서 목록(쪽 단위)과 에이전트 스킬 패키지 정보",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.manifest",
                "x-gujo-agent-role": "read",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/reviews": {
            "post": {
                "operationId": "design_agent_reviews_create",
                "summary": "Records a review verdict on a version",
                "description": "Records a review verdict on a version\n\n판 하나에 검수 판정을 남긴다",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.reviews.store",
                "x-gujo-agent-role": "review",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "slug": {
                                        "type": "string"
                                    },
                                    "version": {
                                        "type": "integer",
                                        "minimum": 1
                                    },
                                    "verdict": {
                                        "type": "string",
                                        "enum": [
                                            "approved",
                                            "changes_requested",
                                            "rejected"
                                        ]
                                    },
                                    "reason": {
                                        "type": "string",
                                        "minLength": 1
                                    }
                                },
                                "required": [
                                    "slug",
                                    "version",
                                    "verdict",
                                    "reason"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/agent/reviews/pending": {
            "get": {
                "operationId": "design_agent_reviews_pending",
                "summary": "Versions waiting for review (paged)",
                "description": "Versions waiting for review (paged)\n\n검수 대기 판 목록(쪽 단위)",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.agent.reviews.pending",
                "x-gujo-agent-role": "review",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/bundles": {
            "get": {
                "operationId": "bundles_list",
                "summary": "Product bundles",
                "description": "Product bundles\n\n상품 묶음(번들) 목록",
                "tags": [
                    "device"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.bundles.index",
                "x-gujo-ability": "device.entitlements",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/cli/device/logout": {
            "post": {
                "operationId": "cli_device_logout",
                "summary": "Revokes the calling key on the server",
                "description": "Revokes the calling key on the server\n\n부른 키 자신을 서버에서 폐기한다",
                "tags": [
                    "device"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.cli.device.logout",
                "responses": {
                    "204": {
                        "description": "No content"
                    }
                }
            }
        },
        "/api/client-config": {
            "get": {
                "operationId": "client_config",
                "summary": "Signed client policy (minimum version, recheck interval, revocations). Requests without a key are 401",
                "description": "Signed client policy (minimum version, recheck interval, revocations). Requests without a key are 401\n\n클라이언트 정책(최소 버전·재확인 주기·폐기 목록, 서명 포함). 헤더 없는 요청은 401",
                "tags": [
                    "client_config"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.client-config",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ClientConfigData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/device/bulk-activate": {
            "post": {
                "operationId": "device_bulk_activate",
                "summary": "Creates device keys for every accessible product at once",
                "description": "Creates device keys for every accessible product at once\n\n쓸 수 있는 상품 전부의 기기 키를 한 번에 만든다",
                "tags": [
                    "device"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.device.bulk-activate",
                "x-gujo-ability": "device.activate",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/device/entitlements": {
            "get": {
                "operationId": "device_entitlements",
                "summary": "Everything a device needs at launch: products, subscriptions, bundles, device and user",
                "description": "Everything a device needs at launch: products, subscriptions, bundles, device and user\n\n기기 시작 때 부르는 전체 이용권(상품·구독·번들·기기·사용자)",
                "tags": [
                    "device"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.device.entitlements",
                "x-gujo-ability": "device.entitlements",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/DeviceEntitlementsData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/device/installs": {
            "post": {
                "operationId": "device_installs_create",
                "summary": "Records an install",
                "description": "Records an install\n\n설치 기록을 남긴다",
                "tags": [
                    "device"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.device.installs.store",
                "x-gujo-ability": "device.install",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "product_id": {
                                        "type": "integer"
                                    },
                                    "version": {
                                        "type": "string",
                                        "maxLength": 64
                                    },
                                    "bundle_id": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "installed_at": {
                                        "type": [
                                            "string",
                                            "null"
                                        ]
                                    }
                                },
                                "required": [
                                    "product_id",
                                    "version"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/device/usage": {
            "post": {
                "operationId": "device_usage_create",
                "summary": "Daily product usage upload; overwrites one row per (account, product, device key, date)",
                "description": "Daily product usage upload; overwrites one row per (account, product, device key, date)\n\n제품 사용량 일별 업로드. (계정, 상품, 기기 키, 날짜) 한 행을 덮어쓴다",
                "tags": [
                    "device"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.device.usage.store",
                "x-gujo-ability": "device.usage",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "consent": {
                                        "type": "boolean"
                                    },
                                    "days": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "product_id": {
                                                    "type": "integer",
                                                    "minimum": 1
                                                },
                                                "usage_date": {
                                                    "type": "string",
                                                    "format": "date"
                                                },
                                                "launches": {
                                                    "type": "integer",
                                                    "minimum": 0,
                                                    "maximum": 1000000
                                                },
                                                "commands": {
                                                    "type": "object"
                                                }
                                            },
                                            "required": [
                                                "product_id",
                                                "usage_date",
                                                "launches"
                                            ]
                                        },
                                        "minItems": 1,
                                        "maxItems": 200
                                    }
                                },
                                "required": [
                                    "consent",
                                    "days"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/downloads/pipeline": {
            "get": {
                "operationId": "downloads_pipeline",
                "summary": "Download supply status (catalog, platforms and checklist per channel)",
                "description": "Download supply status (catalog, platforms and checklist per channel)\n\n다운로드 공급 현황(채널별 catalog·platforms·checklist)",
                "tags": [
                    "downloads"
                ],
                "security": [],
                "x-gujo-route": "api.downloads.pipeline",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/error-reports": {
            "post": {
                "operationId": "error_reports_create",
                "summary": "Client crash or exception report (no auth, 5 per minute)",
                "description": "Client crash or exception report (no auth, 5 per minute)\n\n클라이언트 충돌·예외 보고(인증 없음, 분당 5회)",
                "tags": [
                    "support"
                ],
                "security": [],
                "x-gujo-route": "api.error-reports.store",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "app_bundle_id": {
                                        "type": "string",
                                        "maxLength": 255
                                    },
                                    "app_version": {
                                        "type": "string",
                                        "maxLength": 50
                                    },
                                    "os_version": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 50
                                    },
                                    "device_model": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 100
                                    },
                                    "error_type": {
                                        "type": "string",
                                        "enum": [
                                            "crash",
                                            "exception",
                                            "warning"
                                        ]
                                    },
                                    "error_message": {
                                        "type": "string",
                                        "maxLength": 10000
                                    },
                                    "stack_trace": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 50000
                                    },
                                    "context": {
                                        "type": [
                                            "object",
                                            "null"
                                        ]
                                    }
                                },
                                "required": [
                                    "app_bundle_id",
                                    "app_version",
                                    "error_type",
                                    "error_message"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/invoices": {
            "get": {
                "operationId": "invoices_list",
                "summary": "My invoices (cursor: limit, after; status filter)",
                "description": "My invoices (cursor: limit, after; status filter)\n\n내 청구서 목록(커서: limit·after, 상태 필터 status)",
                "tags": [
                    "orders"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.invoices.index",
                "x-gujo-ability": "orders.read",
                "parameters": [
                    {
                        "name": "status",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "after",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/library": {
            "get": {
                "operationId": "library",
                "summary": "Products this key can use, with delivery manifest, setup progress, MCP server and bundle info. A product-scoped key sees only its product",
                "description": "Products this key can use, with delivery manifest, setup progress, MCP server and bundle info. A product-scoped key sees only its product\n\n이 키로 쓸 수 있는 상품 목록. 배달 매니페스트·설정 진행·MCP 서버·번들 정보를 함께 준다. 상품 하나에 묶인 키면 그 상품만 준다",
                "tags": [
                    "library"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.library",
                "x-gujo-ability": "products.read",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/LibraryApiData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/license/check": {
            "post": {
                "operationId": "license_check",
                "summary": "License decision by product_id or bundle_id. Over the device limit: 409 with the device list and manage URL",
                "description": "License decision by product_id or bundle_id. Over the device limit: 409 with the device list and manage URL\n\n라이선스 판정(product_id 나 bundle_id). 기기 상한을 넘으면 409 와 기기 목록·관리 주소",
                "tags": [
                    "license"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.license.check",
                "x-gujo-ability": "device.entitlements",
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "product_id": {
                                        "type": [
                                            "integer",
                                            "null"
                                        ],
                                        "minimum": 1
                                    },
                                    "bundle_id": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "device_id": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 255
                                    },
                                    "app_version": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 100
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/lineages": {
            "get": {
                "operationId": "lineages_list",
                "summary": "Active lineages",
                "description": "Active lineages\n\n활성 계보 목록",
                "tags": [
                    "public"
                ],
                "security": [],
                "x-gujo-route": "api.lineages.index",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/lineages/{slug}": {
            "get": {
                "operationId": "lineages_show",
                "summary": "One lineage and its products",
                "description": "One lineage and its products\n\n계보 하나와 그 상품",
                "tags": [
                    "public"
                ],
                "security": [],
                "x-gujo-route": "api.lineages.show",
                "parameters": [
                    {
                        "name": "slug",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/mcp": {
            "post": {
                "operationId": "mcp",
                "summary": "Account MCP (JSON-RPC 2.0). Tools are the account API this key can call. initialize returns an Mcp-Session-Id header; notifications get 202 with no body",
                "description": "Account MCP (JSON-RPC 2.0). Tools are the account API this key can call. initialize returns an Mcp-Session-Id header; notifications get 202 with no body\n\n계정 MCP(JSON-RPC 2.0). 도구는 이 키로 부를 수 있는 계정 API 다. initialize 응답 머리글 Mcp-Session-Id, 알림이면 202 빈 본문",
                "tags": [
                    "mcp"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.mcp",
                "x-gujo-ability": "mcp.read",
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "jsonrpc": {
                                        "type": "string"
                                    },
                                    "id": {
                                        "type": "string"
                                    },
                                    "method": {
                                        "type": "string"
                                    },
                                    "params": {
                                        "type": "object"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/orders": {
            "get": {
                "operationId": "orders_list",
                "summary": "My orders",
                "description": "My orders\n\n내 주문 목록",
                "tags": [
                    "orders"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.orders.index",
                "x-gujo-ability": "orders.read",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/OrdersData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/orders/{order}": {
            "get": {
                "operationId": "orders_show",
                "summary": "One of my orders. Someone else's order is 404 order_not_found",
                "description": "One of my orders. Someone else's order is 404 order_not_found\n\n내 주문 하나. 남의 주문은 404 order_not_found",
                "tags": [
                    "orders"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.orders.show",
                "x-gujo-ability": "orders.read",
                "parameters": [
                    {
                        "name": "order",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/OrderShowData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/payment-methods": {
            "get": {
                "operationId": "payment_methods_list",
                "summary": "My payment methods (masked card numbers)",
                "description": "My payment methods (masked card numbers)\n\n내 결제 수단 목록(가린 카드 번호)",
                "tags": [
                    "orders"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.payment-methods.index",
                "x-gujo-ability": "orders.read",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/product-content.css": {
            "get": {
                "operationId": "product_content_css",
                "summary": "Stylesheet for product content HTML",
                "description": "Stylesheet for product content HTML\n\n상품 콘텐츠 HTML 에 쓰는 스타일시트",
                "tags": [
                    "library"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.product-content.css",
                "x-gujo-ability": "products.read",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "text/css": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products": {
            "get": {
                "operationId": "products_list",
                "summary": "Active products, each marked with whether this account is entitled",
                "description": "Active products, each marked with whether this account is entitled\n\n판매 중인 상품 목록. 상품마다 이 계정의 이용권 여부(entitled)를 단다",
                "tags": [
                    "products"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.index",
                "x-gujo-ability": "products.read",
                "parameters": [
                    {
                        "name": "category_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "tag_id",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "platform",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "products": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/ProductApiData"
                                            }
                                        }
                                    },
                                    "required": [
                                        "products"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}": {
            "get": {
                "operationId": "products_show",
                "summary": "One product. An unpublished app product is visible only to accounts that can access it",
                "description": "One product. An unpublished app product is visible only to accounts that can access it\n\n상품 하나. 게시되지 않은 앱 상품은 접근할 수 있는 계정에만 보인다",
                "tags": [
                    "products"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.show",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_locale"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "product": {
                                            "$ref": "#/components/schemas/ProductApiData"
                                        }
                                    },
                                    "required": [
                                        "product"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/bundle": {
            "get": {
                "operationId": "products_bundle",
                "summary": "Current bundle file of an entitled product. A buyer past the update window gets 403 version_update_window_expired",
                "description": "Current bundle file of an entitled product. A buyer past the update window gets 403 version_update_window_expired\n\n이용권이 있는 상품의 현재 번들 파일. 업데이트 기간이 끝난 구매자는 403 version_update_window_expired",
                "tags": [
                    "library"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.bundle",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/octet-stream": {
                                "schema": {
                                    "type": "string",
                                    "format": "binary"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/content-assets": {
            "get": {
                "operationId": "products_content_assets_list",
                "summary": "Content assets of an entitled product",
                "description": "Content assets of an entitled product\n\n이용권이 있는 상품의 콘텐츠 자산 목록",
                "tags": [
                    "library"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.content-assets.index",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/content-assets/{path}": {
            "get": {
                "operationId": "products_content_assets",
                "summary": "One content asset file of an entitled product",
                "description": "One content asset file of an entitled product\n\n이용권이 있는 상품의 콘텐츠 자산 파일 하나",
                "tags": [
                    "library"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.content-assets",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "path",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/octet-stream": {
                                "schema": {
                                    "type": "string",
                                    "format": "binary"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/detail": {
            "get": {
                "operationId": "products_detail",
                "summary": "Detail of an entitled product (body HTML, manual, delivery, media)",
                "description": "Detail of an entitled product (body HTML, manual, delivery, media)\n\n이용권이 있는 상품의 상세(본문 HTML·매뉴얼·배달 정보·미디어)",
                "tags": [
                    "products"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.detail",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_locale",
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProductDetailApiData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/install": {
            "get": {
                "operationId": "products_install",
                "summary": "Install plan (signed download URL and sha256). 404 install_not_available when there is nothing to install",
                "description": "Install plan (signed download URL and sha256). 404 install_not_available when there is nothing to install\n\n설치 계획(서명 다운로드 주소와 sha256). 설치할 것이 없으면 404 install_not_available",
                "tags": [
                    "install"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.install",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "channel",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "enum": [
                                "stable",
                                "beta",
                                "alpha",
                                "dev",
                                null
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/ProductInstallData"
                                        }
                                    },
                                    "required": [
                                        "data"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/license": {
            "get": {
                "operationId": "products_license",
                "summary": "Product entitlement check. Without an entitlement the middleware answers 403",
                "description": "Product entitlement check. Without an entitlement the middleware answers 403\n\n상품 이용권 확인. 이용권이 없으면 미들웨어가 403 을 낸다",
                "tags": [
                    "license"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.license",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/license/device/revoke": {
            "post": {
                "operationId": "products_license_device_revoke",
                "summary": "Revokes this product-scoped device key",
                "description": "Revokes this product-scoped device key\n\n상품 하나에 묶인 이 기기 키를 해제한다",
                "tags": [
                    "license"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.license.device.revoke",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_scoped_key"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/releases": {
            "get": {
                "operationId": "products_releases",
                "summary": "Releases of a product",
                "description": "Releases of a product\n\n상품의 릴리스 목록",
                "tags": [
                    "products"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.releases",
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "releases": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/ProductReleaseData"
                                            }
                                        }
                                    },
                                    "required": [
                                        "releases"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/setup-progress": {
            "get": {
                "operationId": "products_setup_progress_show",
                "summary": "Setup progress of a product",
                "description": "Setup progress of a product\n\n상품 설정 진행 상태",
                "tags": [
                    "setup"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.setup-progress.show",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProductSetupProgressData"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "operationId": "products_setup_progress_update",
                "summary": "Saves setup progress (completed step indexes)",
                "description": "Saves setup progress (completed step indexes)\n\n상품 설정 진행 상태를 저장한다(끝낸 단계 번호 목록)",
                "tags": [
                    "setup"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.setup-progress.update",
                "x-gujo-ability": "setup-progress.write",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "completed_step_indexes": {
                                        "type": "array",
                                        "items": {
                                            "type": "integer",
                                            "minimum": 0
                                        }
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProductSetupProgressData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/products/{product}/updates": {
            "get": {
                "operationId": "products_updates",
                "summary": "Update check: compares the client version with the current one and says whether the download is allowed",
                "description": "Update check: compares the client version with the current one and says whether the download is allowed\n\n업데이트 확인. 클라이언트 버전(version)과 현재 버전을 비교하고 내려받을 수 있는지 알린다",
                "tags": [
                    "products"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.products.updates",
                "x-gujo-ability": "products.read",
                "x-gujo-requires": [
                    "product_entitlement"
                ],
                "parameters": [
                    {
                        "name": "product",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "version",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "update": {
                                            "$ref": "#/components/schemas/ProductUpdateApiData"
                                        }
                                    },
                                    "required": [
                                        "update"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/public/disclosure": {
            "get": {
                "operationId": "public_disclosure",
                "summary": "Business disclosure (company name and contacts per language)",
                "description": "Business disclosure (company name and contacts per language)\n\n사업자 표기(언어별 회사 이름·연락처)",
                "tags": [
                    "public"
                ],
                "security": [],
                "x-gujo-route": "api.public.disclosure",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PublicDisclosureData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/subscriptions": {
            "get": {
                "operationId": "subscriptions_list",
                "summary": "My subscriptions",
                "description": "My subscriptions\n\n내 구독 목록",
                "tags": [
                    "subscriptions"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.subscriptions.index",
                "x-gujo-ability": "subscriptions.read",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/SubscriptionsData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/support/reports": {
            "post": {
                "operationId": "support_reports_create",
                "summary": "App problem report. The same report within 24 hours joins the same ticket (200 dedup)",
                "description": "App problem report. The same report within 24 hours joins the same ticket (200 dedup)\n\n앱 문제 신고 접수. 24시간 안의 같은 신고는 같은 티켓에 붙는다(200 dedup)",
                "tags": [
                    "support"
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "api.support.reports.store",
                "x-gujo-ability": "support.report",
                "requestBody": {
                    "required": true,
                    "content": {
                        "multipart/form-data": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "kind": {
                                        "type": "string",
                                        "enum": [
                                            "general",
                                            "app_report",
                                            "refund_request"
                                        ]
                                    },
                                    "summary": {
                                        "type": "string",
                                        "maxLength": 160
                                    },
                                    "detail": {
                                        "type": "string",
                                        "maxLength": 15000
                                    },
                                    "app_bundle_id": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 160
                                    },
                                    "app_version": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 80
                                    },
                                    "macos_version": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 80
                                    },
                                    "device_id": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "maxLength": 160
                                    },
                                    "bundle": {
                                        "type": [
                                            "string",
                                            "null"
                                        ],
                                        "format": "binary",
                                        "maxLength": 5120
                                    }
                                },
                                "required": [
                                    "kind",
                                    "summary",
                                    "detail"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/apps/{id}": {
            "get": {
                "operationId": "design_apps_show",
                "summary": "One app with its flows and screens",
                "description": "One app with its flows and screens\n\n앱 하나와 그 흐름·화면",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.apps.show",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/entitlements/pass-check": {
            "get": {
                "operationId": "entitlements_pass_check",
                "summary": "All-access pass check (desktop app)",
                "description": "All-access pass check (desktop app)\n\n올액세스 패스 확인(데스크톱 앱)",
                "tags": [
                    "license"
                ],
                "servers": [
                    {
                        "url": "https://app.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "app.api.v1.entitlements.pass-check",
                "x-gujo-ability": "device.entitlements",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/PassCheckData"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/patterns": {
            "get": {
                "operationId": "design_patterns",
                "summary": "UX patterns",
                "description": "UX patterns\n\nUX 패턴 목록",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.patterns",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/screens": {
            "get": {
                "operationId": "design_screens",
                "summary": "Screens (same query filters as explore, paged)",
                "description": "Screens (same query filters as explore, paged)\n\n화면 목록(탐색과 같은 쿼리 필터, 쪽 단위)",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.screens",
                "parameters": [
                    {
                        "name": "platform",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "q",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sort",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "viewport",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lang",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "mode",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "kind",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "patterns",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "components",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "cols",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/screens/{id}": {
            "get": {
                "operationId": "design_screens_show",
                "summary": "One screen",
                "description": "One screen\n\n화면 하나",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.screens.show",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/taxonomy": {
            "get": {
                "operationId": "design_taxonomy",
                "summary": "Taxonomy catalog (page types, patterns, elements, colors, fonts)",
                "description": "Taxonomy catalog (page types, patterns, elements, colors, fonts)\n\n분류 체계(페이지 유형·패턴·요소·색·글꼴)",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.api.taxonomy",
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        },
        "/distribution/v1/products/{id}/appcast.xml": {
            "get": {
                "operationId": "distribution_appcast",
                "summary": "Sparkle 2 appcast feed. Without channel it is the combined feed of all channels. A device key widens access",
                "description": "Sparkle 2 appcast feed. Without channel it is the combined feed of all channels. A device key widens access\n\nSparkle 2 appcast 피드. channel 이 없으면 모든 채널의 통합 피드다. 기기 키가 있으면 그 키로 접근을 판정한다",
                "tags": [
                    "distribution"
                ],
                "servers": [
                    {
                        "url": "https://app.gujo.ai"
                    }
                ],
                "security": [
                    {},
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "app.distribution.appcast",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "channel",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/rss+xml": {
                                "schema": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/distribution/v1/releases/{release}/download": {
            "get": {
                "operationId": "distribution_download",
                "summary": "Release download: 302 to a short-lived signed URL when access is allowed",
                "description": "Release download: 302 to a short-lived signed URL when access is allowed\n\n릴리스 다운로드. 판정을 통과하면 짧은 수명의 서명 주소로 302",
                "tags": [
                    "distribution"
                ],
                "servers": [
                    {
                        "url": "https://app.gujo.ai"
                    }
                ],
                "security": [
                    {},
                    {
                        "accountApiKey": []
                    }
                ],
                "x-gujo-route": "app.distribution.download",
                "parameters": [
                    {
                        "name": "release",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "302": {
                        "description": "Redirect to a short-lived signed URL (Location header)"
                    }
                }
            }
        },
        "/mcp": {
            "post": {
                "operationId": "design_mcp_call",
                "summary": "Design MCP (JSON-RPC 2.0 over Streamable HTTP, one JSON response per request). Unknown MCP-Protocol-Version is 400",
                "description": "Design MCP (JSON-RPC 2.0 over Streamable HTTP, one JSON response per request). Unknown MCP-Protocol-Version is 400\n\ndesign MCP(JSON-RPC 2.0, Streamable HTTP, 요청 하나에 JSON 응답 하나). 모르는 MCP-Protocol-Version 은 400",
                "tags": [
                    "design"
                ],
                "servers": [
                    {
                        "url": "https://design.gujo.ai"
                    }
                ],
                "security": [
                    {
                        "designAgentToken": []
                    }
                ],
                "x-gujo-route": "design.mcp.call",
                "x-gujo-agent-role": "read",
                "requestBody": {
                    "required": false,
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "jsonrpc": {
                                        "type": "string"
                                    },
                                    "id": {
                                        "type": "string"
                                    },
                                    "method": {
                                        "type": "string"
                                    },
                                    "params": {
                                        "type": "object"
                                    }
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "description": "Any JSON value."
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "accountApiKey": {
                "type": "http",
                "scheme": "bearer",
                "description": "Account API key (device login account_token or a key made in account settings). Each operation lists the ability the key needs in x-gujo-ability; a key without it gets 403 missing_api_key_ability."
            },
            "designAgentToken": {
                "type": "http",
                "scheme": "bearer",
                "description": "Design host agent token. Each operation lists the agent role it needs in x-gujo-agent-role."
            }
        },
        "schemas": {
            "BundleRefData": {
                "type": "object",
                "properties": {
                    "available": {
                        "type": "boolean"
                    },
                    "sha256": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "size": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "download_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "available",
                    "sha256",
                    "size",
                    "download_url"
                ]
            },
            "ClientConfigData": {
                "type": "object",
                "properties": {
                    "min_client_version": {
                        "type": "string"
                    },
                    "revoked": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ClientConfigRevokedData"
                        }
                    },
                    "policy": {
                        "$ref": "#/components/schemas/ClientConfigPolicyData"
                    },
                    "signed_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "signature": {
                        "type": "string"
                    },
                    "version": {
                        "type": "integer"
                    }
                },
                "required": [
                    "min_client_version",
                    "revoked",
                    "policy",
                    "signed_at"
                ]
            },
            "ClientConfigPolicyData": {
                "type": "object",
                "properties": {
                    "ttl_days": {
                        "type": "integer"
                    },
                    "recheck_hours": {
                        "type": "integer"
                    }
                },
                "required": [
                    "ttl_days",
                    "recheck_hours"
                ]
            },
            "ClientConfigRevokedData": {
                "type": "object",
                "properties": {
                    "product_id": {
                        "type": "integer"
                    },
                    "device_id": {
                        "type": "string"
                    }
                },
                "required": [
                    "product_id",
                    "device_id"
                ]
            },
            "DeviceBundleData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "product_ids": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        }
                    }
                },
                "required": [
                    "id",
                    "name",
                    "product_ids"
                ]
            },
            "DeviceEntitlementProductData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "type": {
                        "type": "string"
                    },
                    "access_source": {
                        "type": "string"
                    },
                    "has_device_key": {
                        "type": "boolean"
                    },
                    "license_key_prefix": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "access_expires_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updates_supported_until": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "type",
                    "access_source",
                    "has_device_key",
                    "license_key_prefix",
                    "access_expires_at",
                    "updates_supported_until"
                ]
            },
            "DeviceEntitlementsData": {
                "type": "object",
                "properties": {
                    "products": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DeviceEntitlementProductData"
                        }
                    },
                    "subscriptions": {
                        "type": "array"
                    },
                    "bundles": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/DeviceBundleData"
                        }
                    },
                    "device": {
                        "$ref": "#/components/schemas/DeviceInfoData"
                    },
                    "user": {
                        "anyOf": [
                            {
                                "$ref": "#/components/schemas/DeviceUserData"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    }
                },
                "required": [
                    "products",
                    "subscriptions",
                    "bundles",
                    "device",
                    "user"
                ]
            },
            "DeviceInfoData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "activated_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "activated_at"
                ]
            },
            "DeviceUserData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "email": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "email",
                    "name"
                ]
            },
            "DisclosureData": {
                "type": "object",
                "properties": {
                    "company_name": {
                        "type": "string"
                    },
                    "representative_name": {
                        "type": "string"
                    },
                    "business_registration_number": {
                        "type": "string"
                    },
                    "mail_order_registration_number": {
                        "type": "string"
                    },
                    "address": {
                        "type": "string"
                    },
                    "phone": {
                        "type": "string"
                    },
                    "email": {
                        "type": "string"
                    },
                    "website": {
                        "type": "string"
                    },
                    "ftc_biz_info_url": {
                        "type": "string"
                    }
                },
                "required": [
                    "company_name",
                    "representative_name",
                    "business_registration_number",
                    "mail_order_registration_number",
                    "address",
                    "phone",
                    "email",
                    "website",
                    "ftc_biz_info_url"
                ]
            },
            "EntitlementData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "product_id": {
                        "type": "integer"
                    },
                    "source_product_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "product_detail_url": {
                        "type": "string"
                    },
                    "order_id": {
                        "type": "integer"
                    },
                    "order_item_id": {
                        "type": "integer"
                    },
                    "grant_type": {
                        "type": "string"
                    },
                    "grant_type_label": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string"
                    },
                    "status_label": {
                        "type": "string"
                    },
                    "access_state": {
                        "type": "string"
                    },
                    "access_state_label": {
                        "type": "string"
                    },
                    "active": {
                        "type": "boolean"
                    },
                    "source_quantity": {
                        "type": "integer"
                    },
                    "access_expires_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "updates_supported_until": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "granted_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "revoked_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "product_id",
                    "source_product_id",
                    "product_detail_url",
                    "order_id",
                    "order_item_id",
                    "grant_type",
                    "grant_type_label",
                    "status",
                    "status_label",
                    "access_state",
                    "access_state_label",
                    "active",
                    "source_quantity",
                    "access_expires_at",
                    "updates_supported_until",
                    "granted_at",
                    "revoked_at"
                ]
            },
            "LibraryApiData": {
                "type": "object",
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/LibraryApiItemData"
                        }
                    }
                },
                "required": [
                    "items"
                ]
            },
            "LibraryApiItemData": {
                "type": "object",
                "properties": {
                    "access_source": {
                        "type": "string"
                    },
                    "thumbnail_html": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "hero_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "hero_alt": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "product": {
                        "$ref": "#/components/schemas/ProductSetupData"
                    },
                    "setup_progress": {
                        "$ref": "#/components/schemas/ProductSetupProgressData"
                    },
                    "mcp_server": {
                        "anyOf": [
                            {
                                "$ref": "#/components/schemas/McpServerData"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "bundle": {
                        "anyOf": [
                            {
                                "$ref": "#/components/schemas/BundleRefData"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    }
                },
                "required": [
                    "access_source",
                    "thumbnail_html",
                    "hero_path",
                    "hero_alt",
                    "product",
                    "setup_progress",
                    "mcp_server",
                    "bundle"
                ]
            },
            "McpServerData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "user_id": {
                        "type": "integer"
                    },
                    "product_id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "enabled": {
                        "type": "boolean"
                    },
                    "product_name": {
                        "type": "string"
                    },
                    "tools": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/McpToolData"
                        }
                    }
                },
                "required": [
                    "id",
                    "user_id",
                    "product_id",
                    "name",
                    "enabled",
                    "product_name",
                    "tools"
                ]
            },
            "McpToolData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "mcp_server_id": {
                        "type": "integer"
                    },
                    "product_id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "enabled": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "id",
                    "mcp_server_id",
                    "product_id",
                    "name",
                    "enabled"
                ]
            },
            "OrderData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "number": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string"
                    },
                    "status_label": {
                        "type": "string"
                    },
                    "subtotal_cents": {
                        "type": "integer"
                    },
                    "discount_total_cents": {
                        "type": "integer"
                    },
                    "total_cents": {
                        "type": "integer"
                    },
                    "currency": {
                        "type": "string"
                    },
                    "payment_method": {
                        "type": "string"
                    },
                    "items": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/OrderItemData"
                        }
                    },
                    "can_withdraw": {
                        "type": "boolean"
                    },
                    "receipt_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "supply_cents": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "vat_cents": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "subscription_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "number",
                    "status",
                    "status_label",
                    "subtotal_cents",
                    "discount_total_cents",
                    "total_cents",
                    "currency",
                    "payment_method",
                    "items",
                    "can_withdraw",
                    "receipt_url",
                    "supply_cents",
                    "vat_cents",
                    "subscription_name"
                ]
            },
            "OrderItemData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "product_id": {
                        "type": "integer"
                    },
                    "product_name": {
                        "type": "string"
                    },
                    "product_url": {
                        "type": "string"
                    },
                    "list_unit_price_cents": {
                        "type": "integer"
                    },
                    "unit_price_cents": {
                        "type": "integer"
                    },
                    "quantity": {
                        "type": "integer"
                    },
                    "subtotal_cents": {
                        "type": "integer"
                    },
                    "discount_total_cents": {
                        "type": "integer"
                    },
                    "total_cents": {
                        "type": "integer"
                    },
                    "entitlements": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/EntitlementData"
                        }
                    }
                },
                "required": [
                    "id",
                    "product_id",
                    "product_name",
                    "product_url",
                    "list_unit_price_cents",
                    "unit_price_cents",
                    "quantity",
                    "subtotal_cents",
                    "discount_total_cents",
                    "total_cents",
                    "entitlements"
                ]
            },
            "OrderShowData": {
                "type": "object",
                "properties": {
                    "order": {
                        "$ref": "#/components/schemas/OrderData"
                    }
                },
                "required": [
                    "order"
                ]
            },
            "OrdersData": {
                "type": "object",
                "properties": {
                    "orders": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/OrderData"
                        }
                    }
                },
                "required": [
                    "orders"
                ]
            },
            "PassCheckData": {
                "type": "object",
                "properties": {
                    "has_active_pass": {
                        "type": "boolean"
                    },
                    "in_grace_period": {
                        "type": "boolean"
                    },
                    "expires_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "grace_period_ends_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "grace_warning": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "tier": {
                        "type": "string"
                    },
                    "features": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "allowed_apps": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "renewal_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "message": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "has_active_pass",
                    "in_grace_period",
                    "expires_at",
                    "grace_period_ends_at",
                    "grace_warning",
                    "tier",
                    "features",
                    "allowed_apps",
                    "renewal_url",
                    "message"
                ]
            },
            "ProductApiData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "list_price_cents": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "unit_price_cents": {
                        "type": "integer"
                    },
                    "currency": {
                        "type": "string"
                    },
                    "active": {
                        "type": "boolean"
                    },
                    "entitled": {
                        "type": "boolean"
                    },
                    "primary_category": {
                        "anyOf": [
                            {
                                "$ref": "#/components/schemas/ProductCategoryData"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "categories": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ProductCategoryData"
                        }
                    },
                    "tags": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ProductTagData"
                        }
                    },
                    "content_locale": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "name",
                    "description",
                    "list_price_cents",
                    "unit_price_cents",
                    "currency",
                    "active",
                    "entitled",
                    "primary_category",
                    "categories",
                    "tags",
                    "content_locale"
                ]
            },
            "ProductCategoryData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "parent_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "name": {
                        "type": "string"
                    },
                    "active": {
                        "type": "boolean"
                    },
                    "visibility": {
                        "type": "string"
                    }
                },
                "required": [
                    "id",
                    "parent_id",
                    "name",
                    "active",
                    "visibility"
                ]
            },
            "ProductDeliveryData": {
                "type": "object",
                "properties": {
                    "schema_version": {
                        "type": "integer"
                    },
                    "strategy": {
                        "type": "string",
                        "enum": [
                            "agent-skill",
                            "vscode-vsix",
                            "macos-app",
                            "binary",
                            "managed-directory",
                            "manual"
                        ]
                    },
                    "payload": {
                        "$ref": "#/components/schemas/ProductDeliveryPayloadData"
                    },
                    "targets": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "enum": [
                                "codex",
                                "claude-code",
                                "vscode",
                                "macos"
                            ]
                        }
                    },
                    "dependencies": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ProductDeliveryDependencyData"
                        }
                    },
                    "launch": {
                        "$ref": "#/components/schemas/ProductDeliveryLaunchData"
                    },
                    "requires_confirmation": {
                        "type": "boolean"
                    },
                    "compatibility": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "schema_version",
                    "strategy",
                    "payload",
                    "targets",
                    "dependencies",
                    "launch",
                    "requires_confirmation",
                    "compatibility"
                ]
            },
            "ProductDeliveryDependencyData": {
                "type": "object",
                "properties": {
                    "kind": {
                        "type": "string",
                        "enum": [
                            "executable",
                            "macos-version",
                            "architecture",
                            "host-application"
                        ]
                    },
                    "name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "version_constraint": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "architectures": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "bundle_id": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "kind",
                    "name",
                    "version_constraint",
                    "architectures",
                    "bundle_id"
                ]
            },
            "ProductDeliveryLaunchData": {
                "type": "object",
                "properties": {
                    "kind": {
                        "type": "string",
                        "enum": [
                            "open-app",
                            "reveal-managed-root",
                            "open-vscode",
                            "none"
                        ]
                    }
                },
                "required": [
                    "kind"
                ]
            },
            "ProductDeliveryPayloadData": {
                "type": "object",
                "properties": {
                    "artifact": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "root": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "skill_manifest": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "vsix_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "extension_id": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "app_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "bundle_id": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "binary_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "executable_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "artifact",
                    "root",
                    "skill_manifest",
                    "vsix_path",
                    "extension_id",
                    "app_path",
                    "bundle_id",
                    "binary_path",
                    "executable_name"
                ]
            },
            "ProductDetailApiData": {
                "type": "object",
                "properties": {
                    "product": {
                        "$ref": "#/components/schemas/ProductApiData"
                    },
                    "delivery": {
                        "$ref": "#/components/schemas/ProductDeliveryData"
                    },
                    "detail_html": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "manual": {
                        "anyOf": [
                            {
                                "$ref": "#/components/schemas/ProductManualData"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "runtime": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "platforms": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "hero_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "hero_alt": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "gallery": {
                        "type": "array"
                    },
                    "videos": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "usage_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "architecture_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "ai_prompt_path": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "product",
                    "delivery",
                    "detail_html",
                    "manual",
                    "runtime",
                    "platforms",
                    "hero_path",
                    "hero_alt",
                    "gallery",
                    "videos",
                    "usage_path",
                    "architecture_path",
                    "ai_prompt_path"
                ]
            },
            "ProductInstallAssetData": {
                "type": "object",
                "properties": {
                    "platform": {
                        "type": "string"
                    },
                    "label": {
                        "type": "string"
                    },
                    "path": {
                        "type": "string"
                    },
                    "download_url": {
                        "type": "string"
                    }
                },
                "required": [
                    "platform",
                    "label",
                    "path",
                    "download_url"
                ]
            },
            "ProductInstallData": {
                "type": "object",
                "properties": {
                    "product_id": {
                        "type": "integer"
                    },
                    "kind": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "version": {
                        "type": "string"
                    },
                    "build": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "channel": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "filename": {
                        "type": "string"
                    },
                    "sha256": {
                        "type": "string"
                    },
                    "size": {
                        "type": "integer"
                    },
                    "format": {
                        "type": "string"
                    },
                    "download_url": {
                        "type": "string"
                    },
                    "download_expires_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "target": {
                        "type": "string"
                    },
                    "slug": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "product_id",
                    "kind",
                    "name",
                    "version",
                    "build",
                    "channel",
                    "filename",
                    "sha256",
                    "size",
                    "format",
                    "download_url",
                    "download_expires_at",
                    "target",
                    "slug"
                ]
            },
            "ProductManualData": {
                "type": "object",
                "properties": {
                    "summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "requirements": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "install_steps": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "verification_steps": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "troubleshooting": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "summary",
                    "requirements",
                    "install_steps",
                    "verification_steps",
                    "troubleshooting"
                ]
            },
            "ProductReleaseData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "product_id": {
                        "type": "integer"
                    },
                    "version": {
                        "type": "string"
                    },
                    "notes_ko": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "notes_en": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "notes": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "released_at": {
                        "type": "string",
                        "format": "date-time"
                    }
                },
                "required": [
                    "id",
                    "product_id",
                    "version",
                    "notes_ko",
                    "notes_en",
                    "notes",
                    "released_at"
                ]
            },
            "ProductSetupData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "type_label": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "delivery": {
                        "$ref": "#/components/schemas/ProductDeliveryData"
                    },
                    "manual": {
                        "anyOf": [
                            {
                                "$ref": "#/components/schemas/ProductManualData"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "outputs": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ProductSetupOutputData"
                        }
                    },
                    "install_assets": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ProductInstallAssetData"
                        }
                    },
                    "runtime": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "platforms": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "id",
                    "name",
                    "type_label",
                    "description",
                    "delivery",
                    "manual",
                    "outputs",
                    "install_assets",
                    "runtime",
                    "platforms"
                ]
            },
            "ProductSetupOutputData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "title": {
                        "type": "string"
                    },
                    "category_label": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "summary": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "prompt": {
                        "type": "string"
                    },
                    "usage_guide": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "action_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "title",
                    "category_label",
                    "summary",
                    "prompt",
                    "usage_guide",
                    "action_url"
                ]
            },
            "ProductSetupProgressData": {
                "type": "object",
                "properties": {
                    "completed_step_indexes": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        }
                    },
                    "completed_count": {
                        "type": "integer"
                    },
                    "total_count": {
                        "type": "integer"
                    },
                    "progress_percent": {
                        "type": "integer"
                    },
                    "completed": {
                        "type": "boolean"
                    },
                    "completed_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "required": [
                    "completed_step_indexes",
                    "completed_count",
                    "total_count",
                    "progress_percent",
                    "completed",
                    "completed_at"
                ]
            },
            "ProductTagData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "type": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "active": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "type",
                    "active"
                ]
            },
            "ProductUpdateApiData": {
                "type": "object",
                "properties": {
                    "product_id": {
                        "type": "integer"
                    },
                    "current_version": {
                        "type": "string"
                    },
                    "released_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "changelog": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "source_ref": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "artifact_sha256": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "artifact_size": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "update_available": {
                        "type": "boolean"
                    },
                    "download_allowed": {
                        "type": "boolean"
                    },
                    "download_url": {
                        "type": "string"
                    }
                },
                "required": [
                    "product_id",
                    "current_version",
                    "released_at",
                    "changelog",
                    "source_ref",
                    "artifact_sha256",
                    "artifact_size",
                    "update_available",
                    "download_allowed",
                    "download_url"
                ]
            },
            "PublicDisclosureData": {
                "type": "object",
                "properties": {
                    "ko": {
                        "$ref": "#/components/schemas/DisclosureData"
                    },
                    "en": {
                        "$ref": "#/components/schemas/DisclosureData"
                    }
                },
                "required": [
                    "ko",
                    "en"
                ]
            },
            "SubscriptionData": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "status": {
                        "type": "string"
                    },
                    "status_label": {
                        "type": "string"
                    },
                    "is_trial": {
                        "type": "boolean"
                    },
                    "starts_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "ends_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "cancelled_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "order_id": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "order_number": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "can_cancel": {
                        "type": "boolean"
                    },
                    "cancel_at_period_end": {
                        "type": "boolean"
                    },
                    "next_charge_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "renewal_amount_cents": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "renewal_currency": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "payment_method_brand": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "payment_method_last4": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "is_pass": {
                        "type": "boolean"
                    },
                    "offer_code": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "offer_name": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "action": {
                        "type": "string"
                    },
                    "estimated_krw_amount": {
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "estimated_krw_exchange_rate": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "estimated_krw_exchange_source": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "estimated_krw_currency": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "update_card_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "update_payment_method_url": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "required": [
                    "id",
                    "status",
                    "status_label",
                    "is_trial",
                    "starts_at",
                    "ends_at",
                    "cancelled_at",
                    "order_id",
                    "order_number",
                    "can_cancel",
                    "cancel_at_period_end",
                    "next_charge_at",
                    "renewal_amount_cents",
                    "renewal_currency",
                    "payment_method_brand",
                    "payment_method_last4",
                    "is_pass",
                    "offer_code",
                    "offer_name",
                    "action",
                    "estimated_krw_amount",
                    "estimated_krw_exchange_rate",
                    "estimated_krw_exchange_source",
                    "estimated_krw_currency",
                    "update_card_url",
                    "update_payment_method_url"
                ]
            },
            "SubscriptionsData": {
                "type": "object",
                "properties": {
                    "subscriptions": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/SubscriptionData"
                        }
                    }
                },
                "required": [
                    "subscriptions"
                ]
            }
        }
    }
}
