{"openapi":"3.1.0","info":{"title":"update-server","version":"1.0.0","description":"범용 업데이트 서버. 인증은 X-Update-Key 헤더(또는 Authorization: Bearer). 자세한 안내는 /llms.txt"},"servers":[{"url":"https://update.ngnear.dev"}],"paths":{"/":{"get":{"tags":["public"],"summary":"제품 목록 웹 화면(사람용)","description":"제품 이름·최신 버전·날짜·채널·플랫폼만 보여 준다. 파일 주소는 없다. 서버의 PUBLIC_LISTING=0이면 목록을 숨긴다.","parameters":[],"responses":{"200":{"description":"성공"}},"security":[]}},"/healthz":{"get":{"tags":["public"],"summary":"살아 있는지","parameters":[],"responses":{"200":{"description":"성공"}},"security":[]}},"/llms.txt":{"get":{"tags":["public"],"summary":"LLM·에이전트용 안내(요약과 문서 링크)","parameters":[],"responses":{"200":{"description":"성공"}},"security":[]}},"/openapi.json":{"get":{"tags":["public"],"summary":"OpenAPI 3.1 명세","parameters":[],"responses":{"200":{"description":"성공"}},"security":[]}},"/docs/{name}":{"get":{"tags":["public"],"summary":"문서(markdown) — architecture · api · integration · operations","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"}},"security":[]}},"/clients/{name}":{"get":{"tags":["public"],"summary":"참조 클라이언트 소스(복사해 쓰기) — update_client.py · update-client.mjs · update-check.sh · update-check.ps1","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"}},"security":[]}},"/v1/me":{"get":{"tags":["auth"],"summary":"내 키 확인 — 이름과 볼 수 있는 제품","description":"키가 맞는지 시험할 때 쓴다. 200이면 키가 유효하다.","parameters":[],"responses":{"200":{"description":"성공"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"없는 제품·릴리스·파일(키가 볼 수 없는 제품 포함)"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}},"/v1/products":{"get":{"tags":["catalog"],"summary":"내 키로 볼 수 있는 제품 목록과 채널별 최신","parameters":[],"responses":{"200":{"description":"성공"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"없는 제품·릴리스·파일(키가 볼 수 없는 제품 포함)"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}},"/v1/products/{product}":{"get":{"tags":["catalog"],"summary":"제품 하나와 채널별 최신","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"없는 제품·릴리스·파일(키가 볼 수 없는 제품 포함)"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}},"/v1/products/{product}/releases":{"get":{"tags":["catalog"],"summary":"릴리스 목록(새 버전부터, 회수된 것 제외)","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string"}},{"name":"channel","in":"query","required":false,"description":"채널(기본 stable)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"최대 개수(기본 50, 최대 200)","schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"없는 제품·릴리스·파일(키가 볼 수 없는 제품 포함)"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}},"/v1/products/{product}/releases/{version}":{"get":{"tags":["catalog"],"summary":"릴리스 하나(모든 플랫폼 파일과 다운로드 주소)","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string"}},{"name":"version","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"없는 제품·릴리스·파일(키가 볼 수 없는 제품 포함)"},"410":{"description":"회수(yank)된 릴리스"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}},"/v1/products/{product}/latest":{"get":{"tags":["update"],"summary":"채널 최신 릴리스 매니페스트 (Tauri latest.json과 같은 모양)","description":"target(또는 os+arch)을 주면 그 플랫폼 칸만 돌려준다(없으면 any 파일로 대체). 안 주면 모든 플랫폼. 현재 버전을 모르는 도구·정적 소비자용 — 버전 비교까지 서버가 해 주길 원하면 /check.","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string"}},{"name":"channel","in":"query","required":false,"description":"채널(기본 stable)","schema":{"type":"string"}},{"name":"os","in":"query","required":false,"description":"windows · linux · darwin · any (별명 가능: win32, ubuntu, macos …)","schema":{"type":"string"}},{"name":"arch","in":"query","required":false,"description":"x86_64 · aarch64 · i686 · armv7 · any (별명 가능: amd64, x64, arm64 …)","schema":{"type":"string"}},{"name":"target","in":"query","required":false,"description":"os와 arch 대신 한 번에: 예 windows-x86_64","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"파일 형식을 고를 때(msi · exe · deb · zip · tar.gz …). 없으면 올린 순서의 첫 파일","schema":{"type":"string"}},{"name":"emulated","in":"query","required":false,"description":"1이면 이 CPU용 빌드가 없을 때 에뮬레이션으로 돌릴 수 있는 다른 CPU 빌드도 허용(Windows arm64→x64·x86, Windows x64→x86, macOS arm64→x86_64). 네이티브가 항상 먼저. 기본 꺼짐","schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"그 채널·플랫폼에 올라온 릴리스가 없음(응답에 available_platforms)"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}},"/v1/products/{product}/check":{"get":{"tags":["update"],"summary":"업데이트 확인 — 현재 버전과 비교해 새 버전이 있으면 파일 정보, 없으면 204","description":"대부분의 클라이언트는 이것만 쓰면 된다. 200이면 {update_available:true, current, latest, download, mandatory}, 이미 최신이면 본문 없는 204. mandatory는 릴리스가 필수로 표시됐거나 현재 버전이 min_supported_version보다 낮을 때 true.","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string"}},{"name":"current","in":"query","required":true,"description":"지금 설치된 버전(SemVer)","schema":{"type":"string"}},{"name":"os","in":"query","required":true,"description":"windows · linux · darwin · any (별명 가능: win32, ubuntu, macos …)","schema":{"type":"string"}},{"name":"arch","in":"query","required":true,"description":"x86_64 · aarch64 · i686 · armv7 · any (별명 가능: amd64, x64, arm64 …)","schema":{"type":"string"}},{"name":"target","in":"query","required":false,"description":"os와 arch 대신 한 번에: 예 windows-x86_64","schema":{"type":"string"}},{"name":"channel","in":"query","required":false,"description":"채널(기본 stable)","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"파일 형식을 고를 때(msi · exe · deb · zip · tar.gz …). 없으면 올린 순서의 첫 파일","schema":{"type":"string"}},{"name":"emulated","in":"query","required":false,"description":"1이면 이 CPU용 빌드가 없을 때 에뮬레이션으로 돌릴 수 있는 다른 CPU 빌드도 허용(Windows arm64→x64·x86, Windows x64→x86, macOS arm64→x86_64). 네이티브가 항상 먼저. 기본 꺼짐","schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"204":{"description":"이미 최신 — 본문 없음"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"그 채널·플랫폼에 올라온 릴리스가 없음(응답에 available_platforms)"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}},"/v1/products/{product}/releases/{version}/files/{name}":{"get":{"tags":["download"],"summary":"파일 내려받기 (HEAD·Range 지원)","description":"응답 헤더 X-Checksum-SHA256과 ETag(sha256)로 내려받은 파일을 검증한다. Range로 이어받기 가능. 회수된 릴리스는 410.","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string"}},{"name":"version","in":"path","required":true,"schema":{"type":"string"}},{"name":"name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"성공"},"206":{"description":"일부(Range)"},"304":{"description":"If-None-Match가 같음"},"401":{"description":"키 없음·틀림·폐기"},"404":{"description":"없는 제품·릴리스·파일(키가 볼 수 없는 제품 포함)"},"410":{"description":"회수된 릴리스"},"416":{"description":"Range 범위 오류"},"429":{"description":"틀린 키를 너무 많이 보냄"}},"security":[{"ApiKeyHeader":[]},{"BearerKey":[]}]}}},"components":{"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-Update-Key"},"BearerKey":{"type":"http","scheme":"bearer"}}}}
